Untiy Shader - Metallic vs Specular Workflow 金属 vs 高光的工作流

在Unity中,Standard和Standard(Specular setup)两种着色器提供了不同的材质表现方式。前者通过金属度控制高光反射,后者则允许独立设定高光颜色和强度,适用于更广泛的艺术创作需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Metallic vs Specular Workflow
版本:2019.1

Metallic vs Specular Workflow

Two workflows

两个工作流

当你使用Standard shader创建材质时,你将有两个种标准着色器的选择,“Standard"和"Standard (Specular setup)”(后这是带高光效果的)。他们有以下不同:

Standard:着色器暴露了"metallic"数值来决定是否金属材质。

  • 在金属材质时,Albedo颜色将控制你的高光反射和多数的光源将以高光方式反射出来。
  • 非金属材质时高光反射颜色将和入射光颜色一样,且表面的反射内容几乎没有。

Standard (Specular setup):这是比较经典的着色器。高光颜色用于控制材质高光反射的颜色和强度。这使得拥有不同颜色的高光反射得以实现,而不用漫反射来反射。

通常,使用这两种方法都可以很好地表示常见的材质类型,所以在大多数情况下,选择一种方法还是另一种方法取决于个人偏好,以适合您的艺术工作流。如下例子中,使用了Standard和Standard Specular都创建了塑胶材质:
The fresnel effect visible at grazing angles in relation to the viewer is increasingly apparent as the surface of a material becomes smoother
材质表面变得更光滑时,菲涅尔效果在该视角的掠射角中越来越明显

第一张图是金属的Shader,但材质参数中金属性参数设置为0(非金属性)。第二个材质效果几乎一致但我们使用的是Specular高光性的色调设置成几乎是黑色(所以不会得到像镜面死的金属反射效果)

有人也许会文这些值是怎么来的,为何是"几乎是黑色"?在**Physically Based Shading(PBS)**中我们参考了真实世界中的材质。

### Unity Shader Graph 中重影问题解决方案 在 Unity Shader Graph 中遇到的重影现象通常与深度缓冲区处理不当有关。当多个对象在同一位置绘制时,如果深度测试未能正确区分这些对象,则可能导致视觉上的重叠或残影效果。 #### 关闭深度写入 对于半透明材质而言,关闭深度写入是一个常见的做法。这允许后续渲染的对象能够透过当前对象显示出来而不被其遮挡。具体操作是在 Shader Graph 的 Master 节点设置中找到 Depth Write 属性并将其禁用[^3]: ```csharp // C#代码示例外观上如何配置MaterialPropertyBlock来应用到MeshRenderer组件上 var materialPropertyBlock = new MaterialPropertyBlock(); materialPropertyBlock.SetInt("_ZWrite", 0); // 设置Depth Write为Off meshRenderer.SetPropertyBlock(materialPropertyBlock); ``` #### 修改混合模式 调整混合模式也可以帮助缓解重影问题。通过改变源因子(Source Factor) 和目标因子(Destination Factor),可以更好地控制颜色组合方式。例如,在透明度混合的情况下,可以选择 SrcAlpha OneMinusSrcAlpha 这样的组合: ![Blend Modes](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@7.1/manual/images/blend-modes.png) #### 使用正确的投影矩阵 确保使用的摄像机具有合适的正交或透视投影参数也很重要。不恰当的近裁剪面(Near Clip Plane) 或远裁剪面(Far Clip Plane) 值可能会影响阴影映射的质量,进而引发重影等问题[^1]。 #### 处理多重编译指令 有时为了兼容不同的光照模型或多通道前向渲染路径,开发者会在着色器文件顶部加入特定宏定义如 `#pragma multi_compile_fwdbase` 。然而这类指令的存在与否也会影响到最终呈现的效果,因此应当仔细检查项目中的相关设定是否合理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值