Unity材质进阶:金属、塑料与透明玻璃的PBR实战调参
1. 理解PBR材质的基础原理在开始调节金属、塑料和透明玻璃材质之前我们需要先理解PBR基于物理的渲染的核心概念。PBR不是魔法它只是一套遵循物理规律的渲染规则。简单来说PBR材质的表现取决于两个关键属性金属度Metallic和粗糙度Roughness。金属度决定了材质是金属还是非金属。在真实世界中金属和非金属对光的反射方式完全不同。金属会吸收所有折射光没有漫反射而非金属则会有明显的漫反射。这就是为什么在Unity中当金属度设为1时材质的漫反射颜色会完全消失。粗糙度则决定了表面的光滑程度。数值越低表面越光滑反射越清晰数值越高表面越粗糙反射越模糊。有趣的是即使是完全光滑的表面粗糙度为0在真实世界中也不会出现完美的镜面反射因为微观层面上所有表面都有凹凸。2. 金属材质的科学化调参2.1 基础金属材质设置创建一个新材质将Shader设为Standard。对于纯金属材质我建议从以下参数开始金属度Metallic0.85-1.0光滑度Smoothness0.6-0.8这里有个常见误区很多人以为金属度越高越好实际上过高的金属度会让材质看起来像镜子。我做过一个对比测试金属度0.9的铜币比1.0的更真实因为真实金属表面总有氧化层。2.2 使用金属度贴图真实世界的金属物体很少是均匀的金属材质。我推荐使用Quixel Bridge下载带_Metalness后缀的贴图。导入后拖到Metallic槽你会注意到模型变暗了——这是因为金属区域不再有漫反射。这时需要增加主光源强度到3-5添加辅助光源强度0.5-1.5在Emission槽添加轻微自发光0.1-0.3模拟环境光反射2.3 反射探针的进阶用法反射探针有三种模式Realtime实时计算性能消耗大Baked烘焙后使用适合静态场景Custom自定义立方体贴图我建议项目中使用Baked模式。点击Bake后调节Intensity值到1.2-1.5可以增强反射效果。如果要使用Custom模式从Poly Haven下载HDR贴图后记得将Texture Type设为Cubemap勾选Generate Mip Maps将Box Size扩大到包含整个反射物体3. 塑料材质的物理精确表现3.1 塑料的本质特性塑料是非金属材质但有较强的镜面反射。好的塑料材质需要金属度0.1-0.3绝对不能超过0.5光滑度0.4-0.7漫反射颜色饱和度中等HSV的S值50-80我发现一个技巧给Albedo颜色添加轻微噪点约5%强度可以模拟塑料表面的细微纹理。在Photoshop中使用添加杂色滤镜保存为64x64的贴图即可。3.2 不同类型塑料的参数参考塑料类型金属度光滑度颜色饱和度亚光塑料0.10.460光面塑料0.20.780橡胶0.050.3404. 透明玻璃的物理正确实现4.1 基础玻璃设置创建玻璃材质的关键步骤Shader选择StandardRendering Mode设为Transparent透明度Alpha设为30-70金属度0-0.1光滑度0.85-1.0注意Source一定要改为Albedo Alpha否则透明度无效。我遇到过很多新手忽略这一点。4.2 折射效果增强真实玻璃应该有折射效果。虽然Standard Shader不支持真正的折射但可以通过以下技巧模拟使用Normal Map制造表面凹凸添加轻微的自发光约0.2模拟光散射在Post Processing中启用Bloom效果4.3 玻璃边缘厚度的实现真实玻璃的边缘看起来更暗更绿。我们可以创建Vertex Color通道在Shader中使用边缘厚度计算混合淡青色RGB:200,255,240到边缘5. 环境光照的协同工作5.1 HDR环境贴图的选择好的HDR贴图应该动态范围至少16位包含明亮光源如窗户、灯具分辨率不低于2K我常用的免费资源站Poly HavenHDRI HavenTexture Haven5.2 反射探针的混合技巧在复杂场景中可以使用多个反射探针全局探针覆盖整个场景强度0.8局部探针覆盖重点区域强度1.2使用Blend Probes平滑过渡记得将Box Projection勾选上这样反射会根据物体位置正确变形。6. 常见问题排查6.1 材质看起来太假可能原因环境光太均匀添加HDR贴图缺乏表面细节添加Normal Map反射太完美适当降低光滑度6.2 玻璃不透明检查清单Rendering Mode是否正确Alpha通道是否有效是否启用了Depth Buffer摄像机Clipping Planes是否合理6.3 性能优化建议金属材质尽量使用贴图而非纯参数塑料材质减少实时反射玻璃材质控制透明物体数量每个透明物体都需要额外渲染在实际项目中我通常会建立一个材质库把调试好的参数保存为Prefab。比如抛光金属_铜、磨砂塑料_红、平板玻璃_绿等这样团队成员可以直接调用而不用重新调试。