Unity标准着色器(Standard Shader)参数讲解(一)

时间:2024-04-02 17:34:40

官方文档:

https://docs.unity3d.com/Manual/shader-StandardShader.html


请注意,下文:50%谷歌翻译,30%自己翻译修正,20%自己瞎猜理解。


Unity标准着色器是一个内置的着色器,具有全面的功能。它可用于渲染“真实世界”的对象,如石头,木头,玻璃,塑料和金属,并支持几种着色器类型和组合(个人理解:就是标准着色器里,实际包含了以前的几种着色器的功能)。然后,通过使用或不使用材质编辑器中的各种纹理插槽(就是赋予对应的贴图)和参数,来启用或禁用对应的功能。

标准着色器设计有硬表面,可以处理大多数真实世界的材质,如石头,玻璃,陶瓷,黄铜,银或橡胶。甚至皮肤,头发和布等非硬质材质,也能表现出像样的效果。


-------------------- 【两种Standard】-----------------------

好,我们在Unity 面板中,看到的Standard Shader是这样的:

Unity标准着色器(Standard Shader)参数讲解(一)


这两种,用Unity官网的话来说,就是两种工作流:

Standard ,使用金属工作流(Metallic workflow)。
Standard(Specular setup),  使用镜面工作流(Specular workflow)。 

个人理解:实际中,主要还是靠参数的调整。比如Standard 模式下,完全可以把金属材质参数设置为0(非金属)。


Unity标准着色器(Standard Shader)参数讲解(一)



-------------- 下面我们逐个说明,这些【材质参数(Material parameters)】--------------:

使用这些参数,几乎可以重现,你所看到的现实世界的任何表面。


------------------------------------------------------------

1, 渲染模式:

Rendering Mode

Opaque - 不透明 - 是默认值,适用于没有透明区域的普通固体物体。

Cutout -  切边- 允许您创建透明效果,在不透明区域和透明区域之间具有硬边。 在这种模式下,没有半透明区域,纹理是100%不透明或不可见。 当使用透明度创建材料的形状(如叶子或具有孔和布料的布料)时,这是有用的。

Transparent - 透明- 适用于渲染真实的透明材料,如透明塑料或玻璃。 在这种模式下,材质本身将承担透明度值(基于纹理的Alpha通道和色调的alpha),然而反射和照明亮度将保持可视的全透明度,如真正的透明材料的情况。

Fade - 褪色- 允许透明度值完全淡出一个对象,包括任何镜面高光或反射。 如果要使对象渐变或缩小,则此模式很有用。 它不适用于渲染真实的透明材料,如透明塑料或玻璃,因为反射和亮点也将逐渐消失。


官方文档中,给了很多效果示例,详见:

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterRenderingMode.html


------------------------------------------------------------

2,反照率色彩和透明度

Albedo Color and Transparency

选择Opaque,不透明渲染时, 如下:

Unity标准着色器(Standard Shader)参数讲解(一)

选择Cutout,带透明的渲染时,会有透明度滑块:

Unity标准着色器(Standard Shader)参数讲解(一)


Albedo(反照率)参数, 控制表面的基色。

一般情况下,我们都是给Albedo参数分配纹理贴图。当然,为Albedo指定个颜色,也是可以的。 这代表对象表面的颜色。 重要的是要注意,纹理贴图上,不要包含任何光照(比如亮点或者阴影)。

关于透明效果:可以通过带有Alpha通道的纹理贴图,来控制材质的透明度。 Alpha通道值映射到透明度级别:白色完全不透明,黑色完全透明。 这可以让材质,可以具有不同透明度的区域的效果。(官网有破碎的玻璃窗例子)


官网文档:

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterAlbedoColor.html


------------------------------------------------------------

3.1, Standard 下会有:金属参数

Metallic Parameter

金属模式,不仅仅是为了做看起来像金属的材料! 

这种模式被称为金属,因为您可以控制表面金属或非金属的方式。

Unity标准着色器(Standard Shader)参数讲解(一)

根据您给出的金属和平滑度级别的设置,会产生细节反射。


默认情况下,Metallic没有分配纹理贴图。

这时,金属和平滑度参数,由每个滑块控制。整个物体具有单一的金属和平滑度值。


Metallic (金属参数)

金属参数,决定了表面的“金属状”。 当金属化参数调整到更大时,材质更金属化,它将更多的反映环境。反照率颜色(就是Albedo那个)将变得不太可见。当全金属时,表面颜色完全由来自环境的反射驱动。 而当表面金属少时,其反照率颜色更清晰。

下面是官网说明图:

金属值从0到1(平滑度均为0.8)

Unity标准着色器(Standard Shader)参数讲解(一)


Smoothness (平滑度)

下面是官网平滑度说明图(从0到1):

Unity标准着色器(Standard Shader)参数讲解(一)

Unity的“microsurface detail”(微表面细节)不是直接可见的。 这是在照明计算中使用的概念。 但是,您可以看到这个微表面细节的影响,这是通过从物体反射而扩散的光量所代表的。 光滑的表面,所有的光线倾向于以可预测和一致的角度反弹。 取而代之的是,一个完美光滑的表面反射光,像面镜子。 较不光滑的表面,在更宽的角度范围内反射光(因为光照在微表面的凸起),因此反射具有较少的细节,并且以更漫反射的方式,散布在表面上。

下图,平滑度从低到高(左中右)。材质理论上存在的微表面细节,如图示。 黄线表示光线,撞击不同平滑度的表面并反射。

Unity标准着色器(Standard Shader)参数讲解(一)

面细节中具有高峰和谷,因此光在广泛的角度范围内反射。当平均时,则无明显反射的漫反射色。



如果我们给Metallic贴上一张纹理贴图,金属和平滑度滑块都将消失。那Metallic是什么样的贴图,贴上之后产生怎样的效果呢?

下面举例说明:


如果您的模型的表面反照率纹理(Albedo)贴图中,有材质类型混合的区域(比如布料和金属扣、拉链),则可以使用 Metallic纹理贴图 ,来控制材料表面的金属和平滑度的变化。你会希望扣和拉链比衣服织物有更高的金属质感。为了实现这一点,代替使用滑块值,可以在贴图中,把拉链区域做成较浅的颜色,织物部分做成深色。具体原理:


材质的金属水平由纹理的红色通道中的值控制,材质的平滑度水平由纹理的Alpha通道控制。 (这意味着绿色和蓝色通道被忽略)。这意味着您有一个单一的纹理,可以将区域定义为粗糙或平滑,以及金属或非金属,这对于覆盖具有不同要求的模型的许多区域的纹理贴图非常有用 - 例如,角色有1张纹理贴图,通常包括多个表面要求 - 皮鞋,布衣服,皮肤,和金属扣。


下面是官网文档的 Metallic贴图 示例:

扣环现在具有很高的金属值,并相应响应光线。 皮革皮带比皮革的皮革盒子光滑,但它们具有低的“金属”值,因此它似乎是非金属表面的光泽。 最右边的黑白地图显示了金属的是较浅色的区域,皮革是中低灰度。

Unity标准着色器(Standard Shader)参数讲解(一)

对比下面这张,是不使用贴图,用默认滑块调整的:

Unity标准着色器(Standard Shader)参数讲解(一)