目录
一、Lit着色器
1. Surface Options
2. Surface Inputs(表面输入)
3. Transparency Inputs
二、HDRP渲染优先级
我们可以把现实世界中的物体分成不透明物体和透明物体(其中包括透明或者半透明)。在实时渲染时,其实我们模拟的就是物体的表面。当然在模拟透明物体时我们还要考虑光透过物体时发生的吸收和折射现象。
一、Lit着色器
1. Surface Options
- Surface Type(表面类型)
在Lit中把表面类型分成了两类:Opaque(不透明)和Transparent(透明)。
- Rendering Pass(渲染通道)
这一选项在选择Transparent(透明)表面类型下出现,我们可以为当前材质选择以下渲染通道:
- Before Refraction:在渲染折射效果之前渲染当前材质所关联的物体。这也就意味着HDRP会在渲染折射效果时,将当前材质所关联的物体考虑进折射的计算中。
- Default:在默认渲染阶段参与渲染。
- Low Resolution:在默认渲染阶段完成以后,以一半的分辨率渲染当前材质所关联的物体。
- Blending Mode(混合模式)
这一选项在选择Transparent(透明)表面类型下出现。该选项用于确定通过何种混合方式,把当前透明材质表面每个像素的颜色与背景颜色相混合,从而获得透明材质上每个像素的最终颜色值。
如果指定了Base Map并且Base Map的Alpha通道是纯黑色(代表完全透明),这时我们再调节颜色选择器中的A(Alpha)值就没有意义了。如果没有指定Base Map或者Base Map中没有包含Alpha通道,则玻璃材质的透明度就由颜色选择器的A(Alpha)值来控制。(如下图,Base Map的Alpha通道周围不是纯黑色,所以调整颜色选择器中的A(Alpha)值还会影响物体的周边。)
- Preserve specular lighting(保持高光光照信息)
这一选项在选择Transparent(透明)表面类型下出现。进行Alpha混合以后会导致高光的强度减弱。启用此选项可以让透明表面保持高光的强度,适用于表现光线在玻璃或者水面上的反射效果。
- Receive Fog(获取雾效)
这一选项在选择Transparent(透明)表面类型下出现。启用此选项可以让场景中的雾效影响透明表面。如果禁用此选项,HDRP则不会在计算场景雾效时将当前材质考虑在内。
- Back Then Front Rendering(从后往前渲染)
(需要在HDRP配置文件中启用Transparent Backface选项):这一选项在选择Transparent(透明)表面类型下出现。启用该选项以后HDRP会用两个Draw Call来渲染当前材质关联的物体。HDRP会使用第一个Draw Call渲染物体背面的三角面,使用第二个Draw Call渲染正面的三角面。
- Transparent Depth Prepass(透明深度预处理)
(需要在HDRP配置文件中启用Transparent Depth Prepass选项):这一选项在选择Transparent(透明)表面类型下出现。启用该选项后,HDRP会把透明表面的多边形数据添加到深度缓冲(Depth Buffer)中。使用这些深度缓冲中的多边形数据可以优化渲染排序。这一过程会在处理光照之前完成,因此有助于提升GPU的性能。注意,在渲染透明通道之前,这些深度信息会被写入一个单独的渲染通道中,然后被用于处理渲染排序。
- Transparent Depth Postpass(透明深度后处理)
(需要在HDRP配置文件中启用Transparent Depth Postpass选项):这一选项在选择Transparent(透明)表面类型下出现。启用该选项后,HDRP会把透明表面的多边形数据添加到深度缓冲(Depth Buffer)中,以供后处理(Post Processing)使用。这一过程会在处理光照之前完成。如果你想进行Motion Blur(运动模糊)和Depth of Field(景深)这类需要用到深度信息的后处理,可启用此选项,它对这些后处理效果的正确计算很有帮助
- Transparent Writes Motion Vectors(透明写入运动矢量)
(需要在HDRP配置文件中启用Motion Vectors选项):这一选项在选择Transparent(透明)表面类型下出现。启用该选项后,HDRP会写入使用此材质的透明物体的Motion Vector(运动矢量)数据,这样HDRP才能计算使用当前材质的透明物体的Motion Blur(运动模糊)这类后处理效果。
- Cull Mode(剔除模式)
用于决定是剔除透明物体网格的正面(Front)还是背面(Back)。
- Alpha Clipping(透明度剪裁)
启用此选项,我们可以用材质的Alpha通道来控制渲染表面上哪些区域,不渲染哪些区域,从而在透明部分和不透明部分之间创建明显的边界。
Threshold:使用Threshold数值控制Alpha的临界值。如果把Threshold数值设置为0.05,那么Alpha值小于等于0.05的区域会被渲染,Alpha值大于0.05的区域则不会被渲染。
- Material Type(材质类型)
- Standard(标准)材质类型可用于模拟大部分材质。
- Specular Color:使用这一材质类型可以在物体表面生成带颜色的高光效果。因为Specular Color使用的不是Metallic工作流,而是Specular工作流,所以在下方的Surface Inputs(表面输入)中不再有Metallic滑块。
- Iridescence:彩虹色,用于制作肥皂泡。
- Receive Decals(显示贴花)
启用此选项可以让当前材质显示贴花,比如玻璃上的白色圆点。
- Receive SSR(显示在屏幕空间反射中)
启用此选项时,HDRP会在计算屏幕空间反射时把与当前材质关联的物体考虑进去。
- Displacement Mode(置换模式)
置换模式和高度图用于为模型的网格增加细节表现。当设置了置换模式时,下方Surface Inputs(表面输入)部分会出现Height Map(高度图)选项。(高度图见下文详解)HDRP提供两种置换模式。
- Vertex displacement(顶点置换):根据高度图来置换网格上的顶点。
- Pixel displacement(像素置换):根据高度图来置换模型表面的像素。
2. Surface Inputs(表面输入)
Surface Inputs中的参数用于控制物体表面的各种属性,比如颜色、透明度、高光、表面细节、纹理所用的UV等。
- Base Map(基础纹理)
用于控制表面的颜色和透明度。如果不指定纹理,物体会使用颜色选择器中的颜色作为表面颜色;如果指定了纹理,物体表面的最终颜色由纹理和颜色选择器所选的颜色一起决定。
- Mask Map(遮罩贴图)
在Red、Green、Blue和Alpha四个通道中保存的贴图其实都是灰度图。灰度图提供的是对应最终纹理上每个像素点的数值(每张灰度图控制着不同的参数)。纯白色对应最大值1(有效果),颜色越黑数值越小直到为0(无效果)。
在同一张Mask Map中保存四张贴图的好处是:因为这四张贴图的UV坐标相同,所以渲染器只需要采样一次就能拿到最多四张贴图的信息。请注意,使用Mask Map时并不需要每次都使用4个通道。你完全可以按照自己的需求选择一个或者多个通道使用。
如果我们没有指定Mask Map,这时的Metallic和Smoothness两个选项的数值都在0~1之间。Metallic数值越高,物体表面的金属反光越强烈。Smoothness数值越高,物体表面越平滑,越像一面镜子;反之物体表面看上去越粗糙。
如果我们指定了Mask Map,Metallic Remapping、Smoothness Remapping和Ambient Occlusion Remapping选项会出现滑块。
- Metallic用于控制金属表面的反光度,数值越高,金属反光越强烈。它的数值在0~1之间。因为我们添加了Mask Map,所以HDRP会获取Red通道中Metallic贴图的灰度图信息用于计算物体表面各处的金属反光强度:纯黑色对应数值0,纯白色对应数值1,其他灰度对应0~1之间的数值。如上图,我们想要模拟的是陶瓷杯子,红色通道中是纯黑色的贴图,因为控制的是Metallic的数值,并且纯黑色对应数值0。所以无论你如何调节材质界面上Metallic滑块,数值始终为0。如果把红色通道中的贴图颜色改为白色,那么贴图所提供的Metallic数值则为1。这时可以利用Metallic滑块将数值调整到0~1之间(这时会看到瓶子会有金属反光。不过我们想要模拟的是陶瓷,有了金属反光其实就不对了)。
- Smoothness Remapping滑块可以把从Mask Map的Alpha通道中获取的灰度信息,映射到滑块对应的最小值和最大值区间内,用于控制物体表面的光泽度。
- Ambient Occlusion Remapping滑块可以把从Mask Map的Green通道中获取的灰度信息,映射到滑块对应的最小值和最大值区间内,用于控制物体表面的环境光遮蔽。
- Normal Map Space(法线贴图空间)和Normal Map(法线贴图)
在Normal Map Space中可以选择TangentSpace(切线空间)或者ObjectSpace(物体空间)。两种法线贴图空间的区别是:
- TangentSpace可应用于任何类型的网格上,包括动画时网格会变形的角色模型。
- ObjectSpace可应用于使用Planar-mapping的静态物体上(网格不会变形的物体)。这一类法线贴图上除了包含切线空间法线贴图信息,还包含方向数据。而且因为Unity不需要对它做Transform的计算,所以它相比切线空间法线贴图更省性能。
我们可以为Normal Map关联一张法线贴图,用于为物体表面增加细节信息。可以通过滑块来控制细节信息的强度大小(数值在0~8之间)。法线贴图为物体表面增加细节的原理是,使用保存在法线贴图中的信息,通过改变物体表面的光照信息让表面“看上去”多了一些细节。但是本质上物体表面并没有发生真正的形变。
- Height Map(高度图)
当设置了置换模式时会出现该选项。高度图本质上就是一张黑白颜色的灰度图。白色区域代表了受影响表面高的地方;颜色越深,受影响的表面就越低。与法线贴图不同,高度图会改变受影响表面的区域,从而增加更多的细节。一般高度图和法线贴图配合使用。
- 参数Amplitude(幅度)
当设置置换模式为Pixel displacement(像素置换)时会出现该选项。用于控制高度图置换效果的强度。
- Iridescence Mask(彩虹色遮罩)
使用 Iridescence 这一材质类型时出现。可以在这里使用一张灰度图控制彩虹色的强弱。0代表没有彩虹色,1代表彩虹色效果最强。我们也可以直接使用固定数值(0~1之间)来控制整个表面的彩虹色强弱。
- Specular Color(高光颜色)
使用Specular Color这一材质类型时出现。此选项可以让你手动设置高光颜色(Specular Color)。这里关联的纹理使我们可以在像素级别定义高光颜色。如果你在颜色选择器中选择一个颜色,HDRP会将此颜色和纹理上的每一个像素相乘从而得到最终的高光颜色。
- Energy Conserving Specular Color(能量守恒高光颜色)
使用Specular Color这一材质类型时出现。如果启用这一选项,HDRP会在高光效果太强烈时降低材质的漫反射色,这可以让材质看上去更加“物理正确”。因为PBR(基于物理的渲染)的能量守恒(Energy Conservation)守则对于物体表面的正确渲染非常重要。这一守则认为,反射和散射光的能量必须小于物体表面接收到的光能量。
3. Transparency Inputs
以下是所有与折射相关的参数。
- Refraction Model(折射模型)
在此可以选择HDRP处理折射的方式:
- None:透明材质没有折射行为。
- Box:算法使用的是正方体形状的模型。光线入射时进入一个平面,光线出射时也是通过一个平面。适用于我们讲解的中空玻璃瓶之类的物体。
- Sphere:算法使用的是球状的模型,可以生成类似放大镜的折射效果。适用于模拟实心的透明物体,比如放大镜镜片、玻璃球等。
- Thin:算法使用的是长方体形状的模型。与Box模型不同的是,Thin模型的厚度被定义为5cm。可用于模拟窗户上的玻璃。
- Index Of Refraction(折射率)
用于控制折射效果的强度。数值越大,折射效果越强。(折射率=光在真空中的速度/光在当前透明材质中的速度)各种物质的折射率可以参考:https://zh.wikipedia.org/zh-cn/折射率。
- Thickness(物体厚度)
可以使用一张厚度贴图(Thickness Map)来控制透明物质的厚度(基于像素级别的)。如果不使用厚度贴图,也可以使用滑块来控制透明物体的总体厚度。注:此选项在Thin折射模型下不出现,因为在Thin模型下厚度被规定为5cm。
- Transmittance Color(透射颜色)
具有折射性质的透明物体可以对穿过物体的光线进行染色。可以在这里指定一张贴图(基于像素级别的)给经过的光线染色,也可以单独使用颜色选择器选择一个总体的颜色。如果这两种方式都使用了,那么最终光线的颜色由贴图的颜色和从颜色选择器中选择的颜色共同决定。
二、HDRP渲染优先级
渲染管线会先渲染离相机最远的物体,最后渲染离相机最近的物体。在HDRP中会按照材质(Material)的Sorting Priority(排序优先级)和渲染组件(Mesh Renderer)的Priority值来排序场景中物体的渲染排序。数值越大,渲染越靠后,离相机越近。
HDRP对透明物体进行渲染排序时所用的优先级:(由强到弱)材质从Depth Write中获得的深度信息→材质的Sorting Priority数值→Mesh Renderer组件的Priority数值→相机离开物体的距离。