关于 blender-pbr-materials
blender-pbr-materials 是面向艺术家和资产创作者的 Blender 技能,用于构建和检查基于物理的材质。它结合材质设置规则、纹理集处理脚本及引擎导出指导。
主要功能
- 01从纹理集构建材质
- 02使用符合物理规律的材质预设
- 03配置色彩空间和纹理贴图
- 04为引擎导出准备贴图
- 05设置透明度与置换
适用场景
- 01根据下载的纹理集创建材质
- 02设置金、玻璃或木材表面
- 03为 glTF 或 Unreal 准备贴图
- 04为树叶或玻璃配置 Alpha
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-pbr-materials安装后在 Claude Code 中输入/blender-pbr-materials确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/pbr-values.mdscripts/_bpyx.pybuild_pbr_material.py详细介绍
PBR 材质
执行模型位于 blender-core。实测数值见 references/pbr-values.md。
快捷方式
- 纹理集 → 材质:
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)。
规则(违反这些规则会让渲染看起来像“CG”)
- 金属度是二元的:0(电介质)或 1(纯金属)。仅在过渡像素上使用中间值(如金属上的灰尘或锈蚀边缘)。喷漆金属属于电介质。
- 基础色 = 无光照时的反照率:不包含烘焙阴影/AO/高光。电介质范围约为 sRGB 30–240(线性 0.012–0.87):木炭约为 50,新雪约为 240。金属:基础色 = F0 反射率,sRGB 180–255,绝不能偏暗。
- 粗糙度决定真实感。用污垢、污迹和磨损打破均匀感。恒定粗糙度看起来很假;应让表面上的粗糙度变化 ±0.1–0.2。
- 色彩空间:Base Color 和 Emission 使用
sRGB。Roughness、Metallic、Normal、AO、Height、Opacity 和 ORM 使用Non-Color。色彩空间设置错误是头号问题(法线褪色、粗糙度错误)。 - 高光:几乎所有电介质都保留
IOR1.5 和Specular IOR Level0.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 乘进基础色,因为渲染器会计算遮蔽。
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(强度单位约为 W/m²;屏幕使用 1–10,灯泡使用 50+)、Thin Film Thickness/IOR(肥皂、油、镀膜镜片)、Diffuse Roughness。
引擎导出规则
| 目标 | 贴图 | 打包方式 | 法线 |
|---|---|---|---|
| glTF / web / Godot | baseColor(+alpha)、metallicRoughness、normal、occlusion、emissive | glTF:R=AO G=Rough B=Metal(ORM) | OpenGL |
| Unreal | BaseColor、Normal、ORM | R=AO G=Rough B=Metal | DirectX(若贴图已标记,UE 会在导入时翻转) |
| Unity URP/HDRP | BaseMap、Normal、MetallicSmoothness / HDRP MaskMap | URP: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
mat.surface_render_method = "DITHERED"(裁切/alpha-clip,排序正确,适合植被/头发卡片)或 "BLENDED"(真正的透明效果,适合玻璃/UI)。连接 Alpha。glTF 会根据 alpha 设置导出 CLIP/BLEND。游戏中优先使用抖动/裁切。
位移
高度贴图 → Displacement 节点 → Material Output Displacement。mat.displacement_method:BUMP(仅着色,到处适用)、BOTH/DISPLACEMENT(Cycles,需要密集或自适应细分的几何体:Subdivision 修改器 use_adaptive_subdivision)。比例单位为米;8 位图像的中间值为 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 模式/workbench),不影响渲染或导出。- 无界面加载的图像,必须在烘焙或导出前设置
image.colorspace_settings.name。 - 多个材质共用的纹理图像:只需更改一次色彩空间,因为它是按图像设置的。