本技能用于在 Blender 5.2 中创建符合物理规律(PBR)的材质,遵循金属度/粗糙度工作流,目标是让渲染结果不显得“CG”。执行模型位于 blender-core,测量参考值位于 references/pbr-values.md。
一、用途与核心规则 技能强调导致渲染失真的常见违规点:
- 金属度必须二值:0(电介质)或 1(纯金属)。中间值只用于过渡像素(金属上的灰尘或锈迹边缘)。带漆的金属按电介质处理。
- 基础色等于无光照的反照率,不应包含烘焙的阴影/AO/高光。电介质范围约 sRGB 30–240(线性 0.012–0.87),例如木炭约 50,新雪约 240。金属的基础色等于 F0 反射率,sRGB 180–255,绝不可偏暗。
- 粗糙度决定真实感,需要用污渍、磨损等打破均匀,恒定粗糙度显得虚假,表面内宜变化 ±0.1–0.2。
- 色彩空间:基础色和自发光使用 sRGB;粗糙度、金属度、法线、AO、高度、不透明度和 ORM 使用 Non-Color。错误的色彩空间是头号 bug(法线发白、粗糙度错误)。
- 高光:绝大多数电介质保持 IOR 1.5 和 Specular IOR Level 0.5。只有已知材料才改 IOR(水 1.33、玻璃 1.5、钻石 2.42)。
- 法线贴图:Blender、glTF、Unity、Roblox 使用 OpenGL(Y+);Unreal 和 Substance 的 DirectX 预设使用 DirectX(Y-),转换时需翻转 G 通道。烘焙与目标必须使用相同的切线基(MikkTSpace)和相同三角化。
- AO:Principled BSDF 没有 AO 输入。面向引擎时把 AO 放在 ORM 的红色通道;Cycles 渲染时不要把 AO 乘入基础色,因为渲染器会自行计算遮蔽。
二、快速路径
- 贴图集转材质:scripts/build_pbr_material.py -- --name M_Crate --textures //tex/crate --objects SM_Crate。会按文件名识别贴图(Poly Haven、ambientCG、Substance、UE 后缀),设置色彩空间,拆分 ORM,翻转 DirectX 法线,并将 AO 路由到 glTF。
- 固体物理可信材质:使用 --preset gold|iron|plastic|rubber|wood|glass|skin|...,可选 --color R G B(sRGB)。
三、Principled BSDF(5.2)输入口速查 包含 Base Color、Metallic、Roughness、IOR、Alpha、Normal、Thin Wall(5.2 新增,用于叶子/纸/布片等无体积薄片)、Subsurface Weight/Radius/Scale(皮肤、蜡;皮肤 Scale 约 0.005–0.02 米)、Specular IOR Level、Specular Tint、Anisotropic、Transmission Weight(玻璃/液体)、Coat Weight/Roughness/Normal(车漆、清漆)、Sheen Weight(布料、天鹅绒)、Emission Color/Strength(强度约 1–10 用于屏幕,50+ 用于灯泡)、Thin Film Thickness/IOR(肥皂、油、镀膜镜片)、Diffuse Roughness。
四、面向引擎的导出规则
- glTF / web / Godot:贴图 baseColor(+alpha)、metallicRoughness、normal、occlusion、emissive;打包为 glTF 的 ORM:R=AO、G=Rough、B=Metal;法线为 OpenGL。
- Unreal:贴图 BaseColor、Normal、ORM;打包 R=AO、G=Rough、B=Metal;法线 DirectX(UE 在标记贴图时导入会翻转)。
- Unity URP/HDRP:URP 用 BaseMap、Normal、MetallicSmoothness(R=Metal、A=Smoothness 即 1-rough);HDRP Mask 用 R=Metal、G=AO、B=DetailMask、A=Smoothness;法线 OpenGL。
- Roblox SurfaceAppearance:ColorMap(+alpha)、NormalMap、MetalnessMap、RoughnessMap、EmissiveMaskContent;独立灰度贴图,不打包;法线 OpenGL,切线空间。
只有“图像纹理 → BSDF”链能导出。程序化节点、Mix 节点和数学运算在引擎中会失效,必须先烘焙(见 blender-texture-baking)。每个贴图集一个材质,多一个材质就多一次绘制调用(见 blender-game-optimization)。纹理使用 2 的幂尺寸(512/1024/2048/4096)。数据贴图用 PNG/TGA,法线绝不用 JPEG。
五、Alpha 与置换
- Alpha:mat.surface_render_method = "DITHERED"(cutout/alpha 裁剪,排序正确,适合植被/毛发片)或 "BLENDED"(真透明,玻璃/UI)。连接 Alpha。glTF 会从 alpha 设置导出 CLIP/BLEND。游戏中优先使用抖动/裁剪。
- 置换:高度贴图 → Displacement 节点 → Material Output 的 Displacement。mat.displacement_method:BUMP(仅着色,随处可用)、BOTH/DISPLACEMENT(Cycles,需要密集或自适应细分几何体:细分修改器 use_adaptive_subdivision)。缩放单位为米;8 位图 midlevel 用 0.5,32 位 EXR 用 0。
六、视图变换 scene.view_settings.view_transform 可选 AgX(默认,照片感)、Khronos PBR Neutral(所见即反照率,适合资产/产品评审与 glTF 一致性)、Standard(UI/图形/需像素一致的纹理)、ACES 1.3/2.0(VFX 流程)。不要在 Filmic/AgX 加极端 Look 的情况下烘焙或制作纹理。
七、程序化转纹理 程序化设置(噪波/Voronoi 磨损、通过 Geometry > Pointiness(Cycles)或 Ambient Occlusion 节点的曲率遮罩、通过 Bevel 节点法线的边缘磨损)适合渲染。面向引擎时需烘焙成贴图集(blender-texture-baking)。内置的 Node Wrangler(Ctrl+Shift+T)与 build_pbr_material.py 作用相同,但需要 UI。
八、常见坑
- material.use_nodes 在 5.x 已弃用,新材质已自带 Principled + Output。
- mat.diffuse_color 只影响视口(Solid 模式/工作台),不影响渲染或导出。
- 无头加载的图片需要在烘焙或导出前设置 image.colorspace_settings.name。
- 多个材质共享的纹理图片:色彩空间是逐图片设置的,改一次即可。
九、适用场景与限制 适用于为游戏引擎或实时渲染准备 PBR 材质、规范金属/粗糙度数值、统一色彩空间与法线方向、将程序化材质烘焙为可导出贴图。限制与未提供信息:本资料未提供价格、平台支持范围、具体安装步骤以外的官方文档、性能数据或效果对比;脚本的完整参数与依赖也暂未提供。