图像与设计
在 Blender 中为对象制作和分配 PBR…
当需要在 Blender 中给任意几何体设置写实或匹配参考的 PBR 材质、外观开发、材质分配或 shader 调整时,用这些 Principled BSDF 配方和参数。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Blender 中为对象制作和分配 特定
解决思路
- 只使用 Principled BSDF 给对象应用基于物理的材质;这是唯一能干净导出到 glTF 并匹配其他 DCC 工具预期的 shader。
- Metallic 是开关而不是滑块:设为 0.0(电介质:塑料、木、玻璃、皮肤)或 1.0(金属:钢、金、铜);0.2 到 0.8 之间几乎总是错的,会产生能量不守恒且看起来像塑料的渲染。
- 例外:深色镜面墨镜镜片用约 0.8 的 Metallic,把强反射和轻微染色结合起来;这是风格选择,不是严格 PBR。
- 原始金属决策:Metallic=1.0,Base Color 取 physicallybased.info 的 F0 反射率,Roughness 控制抛光程度(0.05 镜面、0.4 拉丝、0.7+ 风化)。
- 玻璃/透明/折射决策:Metallic=0,Transmission Weight=1.0,IOR=1.5(玻璃),Roughness=0.0;厚的有色玻璃再加 Volume Absorption。
- 塑料/木/石等不透明电介质决策:Metallic=0,IOR 塑料用 1.45 或多数其他材质用 1.5;Roughness 按表面处理设置(0.15 光泽、0.6 哑光);清漆/漆面用 Coat Weight 0.5+。
- 皮肤/蜡/大理石等次表面散射决策:Metallic=0,Subsurface Weight=1.0;按材质调 Subsurface Radius RGB,皮肤中红色散射最深。
- 布料/织物 sheen 决策:Metallic=0,Sheen Weight 0.2 到 0.5;Roughness 0.6+,Sheen Roughness 0.5。
- 镜子/铬决策:Metallic=1.0,Roughness=0.02 到 0.05,Base Color 接近白色。
- 如果目标是匹配原图/参考图而不是做一般好看的渲染,链式加载 reference-look-calibration;它负责测量色相/饱和度/明度、物体范围、辉光/光圈颜色和前后观感指标,本技能再在校准目标内应用所需材质/灯光/渲染改动。
- Blender 5.x 的 Principled BSDF v2 中,Weight 和 Subsurface IOR 两个输入在数据 API 里被标记为 enabled=False;它们能通过迭代或索引访问,但不能用字符串键查找,bsdf.inputs['Subsurface IOR'] 会抛 KeyError,即使该输入存在且渲染时值生效。
- 使用 set_input 辅助函数按名称设置节点输入:遍历 node.inputs,如果 inp.name 匹配 name,则设置 inp.default_value=value 并返回 True;它对所有输入有效,包括 enabled=False 的输入,并且向前兼容未来更多输入被禁用的情况。
- 对可靠启用的输入(Base Color、Metallic、Roughness、IOR、Transmission Weight、Sheen Weight 等),直接字符串键赋值仍然可用;只有条件禁用的输入才必须用 set_input 辅助函数,Recipe 9 皮肤配方因 Subsurface IOR 属于受影响输入而使用它。
- Recipe 1 拉丝钢:新建 'MAT-steel_brushed',mat.use_nodes=True,取 Principled BSDF,设 Base Color=(0.56,0.57,0.58,1.0),Metallic=1.0,Roughness=0.25;若 obj.data.materials 已有材质则替换 obj.data.materials[0],否则 append;打印 material:MAT-steel_brushed→obj.name。
- Recipe 2 抛光金:新建 'MAT-gold_polished',设 Base Color=(1.022,0.782,0.344,1.0),Metallic=1.0,Roughness=0.05;append 到对象材质列表。
- Recipe 3 抛光铜:新建 'MAT-copper_polished',设 Base Color=(0.926,0.721,0.504,1.0),Metallic=1.0,Roughness=0.05;append 到对象材质列表。
- Recipe 4 镜面铬:新建 'MAT-chrome',设 Base Color=(0.55,0.56,0.55,1.0),Metallic=1.0,Roughness=0.02;append 到对象材质列表。
- Recipe 5 透明玻璃:新建 'MAT-glass_clear',设 Base Color=(1.0,1.0,1.0,1.0),Metallic=0.0,Roughness=0.0,Transmission Weight=1.0,IOR=1.5;append 到对象材质列表。
- Recipe 6 磨砂玻璃:新建 'MAT-glass_frosted',设 Base Color=(1.0,1.0,1.0,1.0),Transmission Weight=1.0,IOR=1.5,Roughness=0.3;append 到对象材质列表。
- Recipe 6b 有色玻璃:不要只用 Base Color 染色,否则看起来扁平或像金属;真实有色玻璃有体积吸收,光穿过时按距离染色,厚处更深、薄处更浅;做法是保持表面近白并加很小 Roughness,附加 Volume Absorption shader 到 Material Output 的 Volume 输入。
- Recipe 6b 有色玻璃代码模式:新建 'MAT-glass_wine',用 set_input 设 Base Color=(0.85,0.95,0.85,1.0) 近白,Metallic=0.0,Roughness=0.025(关键:不要 0.0,否则像金属),Transmission Weight=1.0,IOR=1.52;新建 ShaderNodeVolumeAbsorption,设 Color=(0.10,0.45,0.18,1.0),Density=30.0;连接 volume.outputs['Volume'] 到 output.inputs['Volume'];append 到对象材质列表。
- 有色玻璃 Density 调参:0 到 10 是极淡染色(透明瓶);20 到 40 是清晰的瓶绿或琥珀;60 到 100+ 是几乎不透明(钴蓝药瓶)。
- 有色玻璃 Color 调参:反直觉,Volume Color 是从透射光中移除的颜色,所以做酒绿用饱和绿,做琥珀用饱和黄橙。
- 有色玻璃示例:酒瓶深绿 Volume Color=(0.05,0.32,0.10),Density=80,表面近白。
- 有色玻璃示例:淡色透明瓶 Volume Color=(0.10,0.45,0.18),Density=15,表面近白。
- 有色玻璃示例:香槟/淡金 Volume Color=(0.85,0.65,0.30),Density=25,表面近白。
- 有色玻璃示例:钴蓝药瓶 Volume Color=(0.10,0.20,0.85),Density=80,表面近白。
- 有色玻璃示例:琥珀/棕色啤酒瓶 Volume Color=(0.80,0.40,0.10),Density=70,表面近白。
- 有色玻璃示例:宝石红 Volume Color=(0.85,0.10,0.15),Density=100,表面近白。
- 中性/glass-class 灯光下 Density 经验:5 到 15 是轻微色;30 到 50 是薄处可见的中等染色;60 到 100 是适合酒/啤酒/钴蓝瓶 hero 镜头的正经瓶色;100+ 是近乎不透明,偏艺术/装饰。
- 如果在标准 4:1:2 metal-class 灯光下 volume tint 被冲淡,不要猛加 Density 补偿;改用 blender-lighting Recipe 0a 的 subject_class='glass' 灯光,它用更柔的 rim 保留体积颜色。
- 关键:Cycles 的 transmission_bounces 必须 ≥16(默认 12),否则厚或分层有色玻璃光线会终止,玻璃内部渲染发黑;设置 scene.cycles.transmission_bounces = 24。
- 有色玻璃陷阱:不要把 Base Color 设为染色颜色又接 Volume,会双重染色且看起来错误;表面保持近白,由 Volume 负责颜色。
- Recipe 7 哑光红塑料:新建 'MAT-plastic_matte_red',设 Base Color=(0.8,0.1,0.05,1.0),Metallic=0.0,Roughness=0.6,IOR=1.45;append 到对象材质列表。
- Recipe 8 漆面塑料/车漆:新建 'MAT-plastic_lacquered',设 Base Color=(0.8,0.1,0.05,1.0),Metallic=0.0,Roughness=0.15,IOR=1.45,Coat Weight=0.8,Coat Roughness=0.05;append 到对象材质列表。
- Recipe 9 浅肤色皮肤:新建 'MAT-skin_light',用 set_input 设 Base Color=(0.85,0.65,0.55,1.0),Metallic=0.0,Roughness=0.4,Subsurface Weight=1.0,Subsurface Radius=(1.0,0.2,0.1),Subsurface IOR=1.4;append 到对象材质列表。
- Recipe 10 天鹅绒/布料 sheen:新建 'MAT-velvet_red',设 Base Color=(0.6,0.0,0.1,1.0),Roughness=0.9,Sheen Weight=0.5,Sheen Roughness=0.5,Sheen Tint=(0.8,0.6,0.6,1.0);append 到对象材质列表。
- Recipe 11 软硅胶:新建 'MAT-silicone',设 Base Color=(0.65,0.63,0.60,1.0),Metallic=0.0,Roughness=0.7,IOR=1.4;append 到对象材质列表。
- Recipe 11b 自发光: Emission 是独立于 Principled BSDF 的 shader;新建材质后删除默认 Principled BSDF,创建 ShaderNodeEmission,设 Color 和 Strength,将 Emission 输出连到 Material Output 的 Surface;网格在 Cycles 中成为光源并参与场景照明。
- Recipe 11b 自发光示例:新建 'MAT-bulb_emission',删除 BSDF_PRINCIPLED,创建 ShaderNodeEmission,设 Color=(1.0,0.92,0.78,1.0) 暖钨丝,Strength=1500.0,连接 emission.outputs['Emission'] 到 output.inputs['Surface'];append 到对象材质列表。
- 自发光 Strength 调参:网格发射的有效亮度随网格表面积缩放,不只是 Strength 值;1 到 2 cm 球(爱迪生灯泡)对应 40W 暖灯泡,Strength 800 到 1500。
- 自发光 Strength 调参:3 到 5 cm 球(LED 球泡)对应 60 到 100W 灯泡,Strength 1500 到 3000。
- 自发光 Strength 调参:10×10 cm 平板(LED 面板)对应室内灯板,Strength 100 到 300。
- 自发光 Strength 调参:100×30 cm 灯条(霓虹管)对应霓虹灯牌,Strength 50 到 150。
- 自发光 Strength 调参:大窗户平面(天空模拟)对应日光,Strength 5 到 20。
- 自发光经验:表面积越小,所需 Strength 越高;球半径加倍约把所需 Strength 降到四分之一(按表面积反比缩放)。
- 自发光色温:Tungsten 3200K 用 (1.0,0.85,0.6)。
- 自发光色温:LED warm 3000K 用 (1.0,0.8,0.6)。
- 自发光色温:Daylight 5500K 用 (1.0,1.0,1.0)。
- 自发光色温:Cool fluorescent 4500K 用 (0.95,0.95,1.0)。
- 灯罩内表面:如果灯泡在灯罩内,灯罩内表面需要亮哑光白色来真实反射灯泡光;单网格灯罩只显示外部材质,所以复制灯罩网格。
- 灯罩内表面:把复制体命名为原灯罩名加 _interior,选中后进入 Edit 模式全选,执行 flip_normals 翻转法线,再回 OBJECT 模式。
- 灯罩内表面:新建 'MAT-shade_interior',设 Principled BSDF 的 Base Color=(0.95,0.93,0.88,1.0),Roughness=0.5;清空复制体材质并 append 该材质,设 scale=(0.97,0.97,0.97),得到正确内部发光。
- Recipe 12 程序化木材:新建 'MAT-wood_procedural',use_nodes=True,创建 Texture Coordinate 的 Generated 输出连到 Mapping 的 Vector,Mapping 的 Scale=(3,3,3)。
- Recipe 12 程序化木材:Mapping 的 Vector 分别连到 Wave 和 Noise;Wave 设 wave_type='BANDS',bands_direction='X',Scale=5.0,Distortion=4.0;Noise 设 Scale=8.0。
- Recipe 12 程序化木材:Wave 的 Color 连到 MixRGB 的 inputs[1],Noise 的 Color 连到 MixRGB 的 inputs[2],MixRGB 设 blend_type='MULTIPLY',inputs[0]=0.5。
- Recipe 12 程序化木材:MixRGB 的 Color 连到 ColorRamp 的 Fac;ColorRamp 元素0颜色=(0.15,0.07,0.03,1.0) 深木色,元素1颜色=(0.6,0.35,0.18,1.0) 浅木色。
- Recipe 12 程序化木材:ColorRamp 的 Color 连到 Principled BSDF 的 Base Color,设 Roughness=0.7;append 到对象材质列表。
- 程序化材质不导出到 glTF;用于 web/游戏导出前,先把程序化材质烘焙成图像纹理。
- 要查任何金属的精确 F0 反射率,参考 physicallybased.info;上面配方使用该数据库的值,覆盖 50+ 材料。
- 材质命名规范:MAT-{purpose}_{subtype}_{finish};示例包括 MAT-frame_metal_brushed、MAT-lens_glass_dark_mirror、MAT-pad_silicone_warm_gray、MAT-wood_oak_glossy。
- 不要保留 Material.001、Material.027 这类默认命名;总是重命名材质。
- 常见陷阱修复:金属塑料感,Metallic 必须精确为 0 或 1。
- 常见陷阱修复:金属发黑,Base color 太暗;金属反射 30% 到 100%,保持 ≥0.5 sRGB。
- 常见陷阱修复:Roughness=0 出现伪影;最低用 0.01 到 0.05。
- 常见陷阱修复:玻璃渲染发黑;增加 Cycles transmission bounces。
- 常见陷阱修复:材质在 glTF 中不可见;因为用了程序化 shader,先烘焙成图像纹理。
- 常见陷阱修复:法线贴图看起来错误;把图像纹理颜色空间设为 Non-Color。
- 常见陷阱修复:roughness 贴图带 sRGB;把图像纹理颜色空间设为 Non-Color。
- 常见陷阱修复:出现 KeyError: 'Subsurface IOR' 或其他输入;这是 Blender 5.x 的 enabled=False 怪癖,改用文件顶部的 set_input 辅助函数,而不是 bsdf.inputs['Name']。
- 当 12 个配方不够、需要各向异性(拉丝金属方向)、体积吸收(有色厚玻璃)、高级 shader 节点组合、单个网格上的材质变化(Mix Shader 模式)或把程序化材质烘焙成图像纹理导出时,加载 references/overview.md。
- references/overview.md 覆盖完整 Principled BSDF 参数图、50+ 材料数据库链接、程序纹理组合(Voronoi、Wave、Noise)、Sheen 与 Subsurface 深入,以及 bake-for-export 工作流。
适用边界 · 注意事项
- 不适用于非 Blender 环境,或无法运行 Blender 及相应 MCP 工具的场景。
- 不适合需要直接导出 glTF 却仍使用程序化材质且未先烘焙成图像纹理的情况。
- 不适合把 Metallic 当作 0 到 1 连续滑块做非物理风格;深色镜片约 0.8 只是风格例外,不是通用做法。