光的行为
当光和物体相遇时,光会有三种行为:被物体反射、穿过物体(物体是透明或半透明的)或者被吸收。
高光反射和漫反射
高光反射(Specular Reflection)会在表面光滑且反光的物体上看到,比如镜子,不锈钢球等,此时光线在物体表面是直接“弹”到了反射方向。还有一种反射叫做漫反射(Diffuse Reflection),此时光线被吸收并反射到了四面八方。下图白色箭头表示高光反射,红色箭头表示漫反射:
漫反射系数:Base Map
在Unity中,URP/Lit Shader需要Base Map来表示漫反射系数。其他Shader通常称这个属性为Albedo或Diffuse Map(从技术上严格地来讲,它们并不是完全相同的东西)。
Albedo这个词描述了漫反射的度量值。通常就是指颜色值,通过RGB三通道值表达。RGB值可以转换为Hue(色调),Saturation(饱和度)和Luminosity(亮度)。Albedo的luminosity对应于漫反射的量,hue和saturation描述了从表面出来的光的质量。
Specular workflow
日常生活中有许多金属物体比如钢笔,不锈钢球等,在光源下它们会产生高光反射。在Shader中,高光又是怎么和漫反射进行描述和区别的呢?
让物体表面看起来像是金属一样的属性叫做高光度(Specularity)。高光度和光滑度(smoothness)是不同的。我们可以将一颗苹果擦到很光滑,但没办法将它擦成金属外观。但是光滑的物体是有一些高光度的。
下图中的苹果,smoothness都一样,但specularity从左至右依次增强。
和漫反射表面一样,金属表面会吸收光。在阳光下放置一个金属物体,过一段时间后,它会变烫。
Specular workflow
有两种workflow可供我们使用来指定材质中的金属外观(metallic apperance)。当使用URP/Lit Shader中的Specularity属性时,用到的是Specular workflow(后面笔记再解释Metallic workflow)。
在Specular workflow中:
- 闪亮的金属表面拥有高Specularity以及高Smoothness。
- 闪亮的非金属表面拥有低的Specularity和高Smoothness。
- Smoothness控制高光反射的范围,Specular Map控制了高光反射的量的大小以及高光反射的颜色。
- Specular Map可使用RGB颜色值
下面通过实验来说明:
在Unity场景中选择一个物体,比如苹果,选择苹果的材质
Inspector中将其Workflow Mode设置为Specular
将其Smoothness进行调整,比如设置为1。
接下来,设置Specular Map,然其看起来像是一颗金属苹果,带镜面反射效果。
Metallic workflow
在Unity中,Specular workflow是更加科学的让物体有金属感的方式。另一种方式,metallic workflow是一种更加简单的方式,但这种方式并不严格遵循物理光学的规则。
Metallic workflow中:
- 闪亮的金属表面拥有高Metallic和高Smoothness
- 闪亮的非金属表面使用0或者低的Metallic和高Smoothness
- Smoothness控制高光反射的范围
- Metallic map值使用灰阶值
之前的苹果的例子中,我们将Metallic Map设置为1,Smoothness设置为1,可以得到和Specular workflow类似的效果。
Specular workflow和Metallic workflow对比
具体应用中改如何选择哪种workflow呢?在导入资源的时候,我们可能会看到有一些资源使用Specular workflow,另外一些资源使用Metallic。实际上我们也不必纠结,只要能达到想要的效果即可。Metallic workflow通常来说更常见,因为它使用起来更加简单,但其是一种经验性的近似。Specular workflow基于真实世界中反射的物理规则,但Specular Map用起来是很有挑战的事情。
Smoothness
也称作gloss或glossiness。它影响高光的范围。光滑的表面上,光线会反射到统一的方向上,因此我们能够从物体表面看到光源的形状。对于一个粗糙的表面,仍然有高光反射存在,但反射光的方向是分散的。
下图的五颗苹果,Metallic都是0.5,但Smoothness从左至右依次增加。