标准着色器(Standard Shader)

作者:追风剑情 发布于:2017-7-15 19:42 分类:Shader

位于DefaultResourcesExtra/Standard.shader

Unity5的基础着色器——标准着色器为基于物理的着色提供了多种可详细设置的选项

9999.png 88888.png

Standard Sharder默认使用的是#pragma target 3.0

  • DX9着色器模型3.0:衍生指令,纹理LOD采样,10个插值器,允许更多数学/纹理指令。
  • DX11功能级别9.x GPU(例如大多数Windows Phone设备)不支持。
  • 某些OpenGL ES 2.0设备可能无法完全支持,具体取决于存在的驱动程序扩展和使用的功能。


其中比较重要的属性如下:

Rendering Mode
渲染模式(Rendering Mode)可以设置为Opaque(不透明)、Cutout(镂空效果)、Fade(渐变效果)和Transparent(透明)等4种值,展现各种材质感。
Opaque: 默认值,显示为不透明纹理,适用于没有任何透明部分的Solid对象。
Cutout: 同时显示不透明部分和透明部分,适用于草、镂空等效果。
Transparent: 显示透明的塑料或玻璃材质。
Fade: 将具有透明属性值的模型渐隐,设为该值时可以处理渐隐/渐显的动画。因为可以渐隐不透明对象,故可用于构建全息效果。

Albedo
反照率(Albedo)指反射光的程度,也可以称为反射率,是为了呈现Unity5新引入的基于物理的着色而添加的纹理。其原理为"现实中所有物体的光照反射率均不相同"。材质的反照率属性可以通过指定一个单独颜色作为表面颜色,也可以通过指定一个纹理贴图作为表面颜色。必须注意的是,反照率贴图不能包含任何光照信息和阴影信息。漫反射(diffuse)贴图才包含光照信息和阴影信息。反照率颜色中的Alpha值用来控制材质的透明度,只有当Rendering Mode属性值不设置为Opaque时才生效。

Metallic
金属(Metallic)是表现物体表面金属材质感的纹理,此纹理插槽旁边的Slider值越接近1,该纹理的表现就越接近金属材质,值为0时为非金属。美术师可制作灰度图来控制各部位的金属质感强度。Metallic属性值越大越像金属,其自身反照率颜色越不明显,对周围环境景象的反射越清晰。Metallic上的滑块是对物体整体的金属性进行调节,也可以指定一张金属纹理贴图对物体不同部位的金属性进行调整。
2.gif
参见Standard.shader第50行#define UNITY_SETUP_BRDF_INPUT MetallicSetup

Smoothness
平滑度(Smoothness)值越大,表面越光滑,镜面反射越明显。

Specular
在 Standard (Specular setup) 中可通过 Specular 设置不同的高光颜色,Smoothness的值越大,高光越强。
参见StandardSpecular.shader第50行#define UNITY_SETUP_BRDF_INPUT SpecularSetup

Normal Map
法线贴图(Normal Map)是显示模型表面曲线的一种特殊处理,无需使用多个多边形(Polygon)即可显示精细的曲面效果。法线贴图纹理插槽右边的属性值越大,阴影效果就越粗糙。

注意:在 Secondary Maps 下还有一个 Normal Map 。也就是说美术师可用两张不同的法线贴图来表示不同的部分,比如用常规法线贴图表示比较明显部位的凹凸,用第二张法线贴图表示比较精细部位的凹凸。这两张法线贴图可以使用不同的比例。

法线贴图为什么呈现紫蓝色?

  RGB各分量的取值范围是[0,1],而法线矢量各分量希望的取值范围是[-1,1](这样才能表示全方位角度)。这里需要通过公式做取值范围映射:Normal(x',y',z')=RGB(x,y,z)*2-(1,1,1)

法线贴图需要在 Inspector 中将 Texture Type 设置为 Normal map

Height Map
高度贴图(Height Map,也称为视差贴图)是使用纹理表现模型高低的一种方式,以便在游戏中表现地形(Terrain)。为其设置纹理文件后即可生效,并可以为其设置突出的高度。从掠射角度看,高度贴图可以让模型表面产生遮挡感(高处会挡住低处的光照)。

  高度贴图是一种灰度纹理,其中每个像素表示该点在表面上看起来应该凸起的程度。像素颜色越白,该区域看起来越高。

  法线贴图高度贴图都是凹凸贴图(Bump Map)的类型。综合使用法线贴图和高度贴图能更好的调节凹凸感。法线贴图通常可以使用工具软件通过高度贴图生成。

  现代实时 3D 图形硬件依赖于法线贴图,因为此类型的贴图包含了必要的矢量来修改在表面上反射光线的方式。Unity 还可接受高度贴图类型的凹凸贴图,但必须在导入时将其转换为法线贴图才能使用。

高度贴图需要在 Inspector 中将 Texture Type 设置为 Normal map,并勾选上 Create from Grayscale

通常情况下(但非总是如此),用于高度贴图的灰度图像也适合用于遮挡贴图。

Occlusion
遮挡贴图(Occlusion)使用灰度纹理,利用间接光照(环境光和反射光)产生的明暗度增强物体的立体感和深度。用于遮挡的贴图纹理一般从3D模型工具或第三方工具获取。简单说就是用来调节环境光对模型局部亮度的影响,
用代码表示为:
o_gi.indirect.diffuse *= occlusion;
或者
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * occlusion;

Emission
放射(Emission)指对应的纹理可以自己作为发射光源,更改其后的属性值,界面就会显示可以设置光源强度和光源颜色的选项。另外,该插槽下面会出现设置全局光照的选项。
Color: 指定发光的颜色和强度,要指定材质的哪些区域发光,可以向该属性分配一个发光贴图。
Global Illumination: 指定此材质发出的光如何影响附近其他游戏对象的环境光照。有三个选项:

Realtime:Unity 将此材质的自发光添加到场景的 Realtime Global Illumination(实时全局光照)计算中。这意味着此自发光会影响附近游戏对象(包括正在移动的游戏对象)的光照。
Baked:Unity 将此材质的自发光烘焙到场景的静态全局光照中。此材质会影响附近静态游戏对象的光照,但不会影响动态游戏对象的光照。但是,光照探针仍然会影响动态游戏对象的光照。
None:此材质的自发光不会影响场景中的实时光照贴图、烘焙光照贴图或光照探针。此自发光不会照亮或影响其他游戏对象。材质本身具有发光颜色。


应用:黑暗中的显示屏,带背光灯的键盘,深海中发光的鱼类等。

Detail Mask
细节遮罩(Detail Mask)纹理允许您在模型的某些区域禁止应用细节纹理。这意味着可在某些区域显示细节纹理,而在其他区域隐藏细节纹理。在上面的皮肤毛孔示例中,您可能希望创建遮罩,使毛孔不会显示在嘴唇和眉毛上。Detail Mask 需要与 Secondary Maps 配合使用。

Secondary Maps
辅助贴图(细节贴图)属于第二套反照率颜色贴图和法线贴图。细节贴图效果会叠加到主贴图效果上,可以使用细节贴图来为模型表面增加细节。如毛孔和毛发; 在砖墙上添加微小的裂缝和地衣生长效果; 为大型金属容器添加小划痕和磨损。
Detail Albedo x: 反照率贴图。
Normal Map: 法线贴图。
如果希望禁止某个区域显示细节贴图,可使用细节遮罩(Detail Mask)贴图来实现。

Smoothness
光滑度(Smoothness)
在标准着色器中没有对菲涅耳效应的直接控制。但可以通过材料的光滑度间接控制。光滑的表面将呈现更强的菲涅耳,完全粗糙的表面将没有菲涅耳。
1.gif(调节Smoothness的值[0, 1])

Double Sided Global Illumination
双面全局照明。指定光照贴图是否在计算全局光照时考虑几何体的两面。设置为 true 时,如果使用渐进光照贴图,则背面将使用与正面相同的发射和反照率来反射光。(当前,此设置仅在使用Progressive Lightmapper后端进行烘焙时可用。)
1111.png
如果选择的Lightmapper为Enlighten,则Material上的Double Sided Global IIIumination选项将被禁用。如下图。
11111.png

Unity5的标准着色器详细信息请参考下列URL
https://docs.unity3d.com/Manual/shader-StandardShader.html


脚本操作

//开启自发光
material.EnableKeyword("_EMISSION");
//关闭自发光
material.DisableKeyword("_EMISSION");
//启用双面全局照明
material.doubleSidedGI = true;

菲涅尔效应

物体表面与视线的夹角越小,反射率越高。物体表面越光滑,菲涅尔效应越明显。例如:
①如果你看向一个圆球,那球中心的反射较弱,靠近边缘反射较强;
②开车时看见远处路面上像是有一滩水,开近时缺什么也没有;
③站在远处看湖面,更能看清天空和青山的倒影;

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号