目录
一.标准Shader之四大渲染模式
1.Opaque(不透明)
2.Cutout(镂空)
3.Fade(隐现)
4.Transparent(透明)
二.标准Shader之十种贴图类型
1.标准 Shader 诞生
2.常用贴图介绍
1.两种标准 Shader
2.Albedo 贴图
3.Metallic 贴图
4.Normal Map 法线贴图(凹凸映射)
5.Height Map (高度贴图)
6.Occlusion 贴图
7.Secondary Maps (or Detail maps)
8.Detail Mask
10.Emission贴图
一.标准Shader之四大渲染模式
1.Opaque(不透明)
作用:用于渲染所有不透明的物体,这类物体在场景中是最多的。60%的比例。
2.Cutout(镂空)
作用:用于渲染有镂空的物体,这类物体在场景中并不太多。5%的比例。在不透明区域和透明区域之间具有硬边。 在这种模式下,没有半透明区域,纹理是100%不透明或不可见。 当使用透明度创建材料的形状(如叶子或具有孔和布料的布料)时,这是有用的。
3.Fade(隐现)
作用:用于渲染实现物体的渐隐和渐现。这类物体在场景中也不多。5%的比例。
4.Transparent(透明)
作用:适用于渲染真实的透明材料,如透明塑料或玻璃。 在这种模式下,材质本身将承担透明度值(基于纹理的Alpha通道和色调的alpha),然而反射和照明亮度将保持可视的全透明度,如真正的透明材料的情况。30%的比例。
官方文档中,给了很多效果示例,详见:Unity - Manual: Rendering Mode
二.标准Shader之十种贴图类型
1.标准 Shader 诞生
1.背景了解
Unity4.x 阶段,Unity 老被拿来和 UrealEngine(虚幻)进行对比,得到的结论就是 Unity 是“渣画质”,Ureal 是“高大上”。但是相对而言 Unity易于学习,开发速度快,跨平台多,就业岗位多,却也是 Ureal 比不了的。
Unity4.x 阶段的画面渲染使用的是 AutoDesk 的 Beast 技术;Unity5.x阶段彻底放弃了 Beast 技术,改为使用和 UrealEngine 一样的一款第三方渲染引擎 Enlighten 来进行画面渲染。
Unity 为了配合这个新的渲染引擎,推出了“标准 Shader”。
理论上,我们可以使用 Unity5 制作出和 UrealEngine 差不多的画面效果。
2.标准 Shader 的优点
使用一个 Shader 完成大部分场景模型的渲染;无论是人物角色,金属,塑料,皮革,布料,玻璃,建筑......都可以使用一个标准 Shader 来完成渲染。
3.标准 Shader 贴图
标准 Shader 使用的是 PBR 渲染,基于现实物理效果的渲染表现形式。一个模型能不能使用标准 Shader 来进行渲染,是在做这个模型的贴图的时候决定的。有没有按照 PBR 贴图的制作规范和模式来制作,决定了该模型是否可以使用标准 Shader 渲染。
2.常用贴图介绍
1.两种标准 Shader
Unity5.x 中的标准 Shader 有两个:
Standard:标准着色器
Standard(Specular setup):标准着色器(镜面)
2.Albedo 贴图
Albedo:反照率[贴图];控制表面的基色。Unity - Manual: Albedo Color and Transparency
用于体现模型的纹理,颜色。反照率贴图本身是一张颜色与纹理的贴图。该选项有贴图属性,也有颜色属性。两个属性可以单独使用,也可以组合使用;当颜色属性为纯白色时,则不影响贴图的效果;当颜色属性为其他颜色时,则叠加贴图效果。
3.Metallic 贴图
Unity - Manual: Metallic mode: Metallic Parameter
Metallic :金属度[贴图];用于体现模型的金属高光反射;默认情况下,Metallic没有分配纹理贴图,金属度贴图本身是一张灰白图,越白的地方,金属度越强烈,越黑的地方金属度越低。
金属参数,决定了表面的“金属状”。 当金属化参数调整到更大时,材质更金属化,它将更多的反映环境。反照率颜色(就是Albedo那个)将变得不太可见。当全金属时,表面颜色完全由来自环境的反射驱动。 而当表面金属少时,其反照率颜色更清晰。
金属值从0到1(平滑度均为0.8)
Smoothness:平滑度介于 0 和 1 之间的一个值,越小,平滑度越低,越大,平滑度越高。
下面是官网平滑度说明图(从0到1):
4.Normal Map 法线贴图(凹凸映射)
Normal Map:法线贴图;用于增加模型的细节;法线贴图本身是一张蓝色的凹凸图。一般来说,Unity会自动识别法线贴图。如果不识别,那可以手动选择贴图类型为Normal map,或者在弹出的提示框中,选择【Fix Now】修复法线贴图。
法线贴图,是一种凹凸贴图。 它们是一种特殊的纹理,在不增加模型面数的情况下,允许您将表面细节(如凸起,凹槽和划痕),加到能捕获光(接收光照)的模型中,看起来就像由实际的模型面去表示一样
unity官网例子:比如钢板上的铆钉和螺丝。如果想表现这种真实的细节,那么最容易想到的办法,就是利用建模,用更多的面数(多边形)去表现。如下图,就是靠更多的面数(多边形)来实现单个螺丝的细节:
如下:将这些细微的细节,建模为“真实的”几何体通常不是一个好主意。 这样明显会造成绘制、渲染的压力,所以,一般采用另一种方式:使用法线贴图来表示细小的表面细节:通过法线贴图,修改了光从平面表面的反射程度(告诉引擎,在表面上如何计算照明),进而展现出螺丝、凹槽、划痕等3D细节。
现代游戏的开发流程,一般是这样:美术用建模软件,建立高模模型。然后制作出法线贴图。(很多软件可以根据模型,自动生成法线贴图,当然,你也可以手工制作)然后把这个法线贴图,用于减面之后的低模模型上,这样就能用普通贴图,在低模上渲染出原始的、高分辨率(高模)的细节。
凹凸映射(Bump mapping)是一种相对较老的图形技术,但仍然是创建详细的逼真实时图形所需的核心方法之一。 凹凸贴图通常也被称为 “法线贴图” 或 “高度图”,但这些术语的含义略有不同。法线贴图(Normal Map)和高度贴图(Height Map)都是凹凸贴图(Bump Map)。 它们都是用贴图,去展现低模(低多边形)的表面细节,但它们以不同的方式存储数据。
上图的左边,是一个石墙的高度贴图。 高度图是一个简单的黑色和白色纹理,其中每个像素表示表面上的点应该显示为上升的量。 像素颜色越白,区域越高。Unity可以接受Height Maps进行凹凸贴图,但是在导入时必须将其转换为Normal Map才能使用它们,并且,勾选
上图右边,是法线贴图。法线贴图是一种RGB纹理,其中每个像素表示表面相对于未修改的表面法线的方向差异。 由于矢量存储在RGB值中,这些纹理往往具有蓝紫色色调。
https://docs.unity3d.com/Manual/StandardShaderMaterialParameterNormalMap.html
5.Height Map (高度贴图)
高度映射(也称为视差映射)与法线映射类似,但是这种技术更复杂,性能也更高。 Heightmaps通常与normalmaps一起使用,通常它们用于给纹理贴图负责渲染大的凸起和突起的表面提供额外的定义。虽然法线映射,可以修改纹理表面上的光照,但是视差高度映射进一步变化,实际上将可见表面纹理的区域移动到周围,以实现一种表面级遮挡效应。
高度图应为灰度图像,白色区域表示纹理的高区域,黑色表示低区域。
官网给了三个对比图,分别是:反照率贴图、反照率+法线贴图、反照率+法线贴图+高度贴图,贴上之后的效果
6.Occlusion 贴图
Occlusion:AO 贴图本身是一张灰白图。简单来说,这个贴图是用来处理间接光照的(比如环境光)。遮挡图是灰度图像,白色指示区域应接收完全间接照明,黑色表示不间接照明。很多软件可以直接生成。
主要用于改善阴影,给场景(模型)更多的深度,有助于更好的表现模型的细节。
左边,没有应用遮挡图,可以看到,在脖子上的织物褶皱处,被照亮得太亮了。
右边,在分配环境遮挡图之后,这些区域不再被来自周围树木环境的绿色环境光所照亮。
7.Secondary Maps (or Detail maps)
Detail Albedo x2:细节反照率[贴图];作用是对主 Albedo 贴图的一个细节深入表现;
Normal Map x2:细节法线[贴图];作用是对主 Normal Map 贴图的一个细节深入表现;
辅助贴图(或者说是细节贴图),其原因是允许材料在近距离观察时具有清晰的细节,同时当从更远的距离观察时也具有正常的细节水平,而不必使用单个非常高的纹理贴图来实现两个目的。
细节纹理的典型用途是: - 将皮肤细节(如毛孔和毛发)添加到角色的皮肤上 - 在砖墙上添加微小的裂缝和苔藓 - 向大型金属容器添加小划痕和磨损痕迹。下面以皮肤举例:
如上图,没有细节纹理。然后,我们加入下面这样的皮肤细节纹理。(反照率Albedo 皮肤毛孔细节纹理)
把这两张贴图,放到辅助纹理参数中:
8.Detail Mask
这个贴图是配合“次贴图区域”中的 Detail Albedo,Normal Map 两张贴图配合使用的,次贴图区域中的这两张很多是平铺的贴图,效果会作用于模型的全部,我们使用 Detail Mask 将一些不需要被“次贴图”影响的部分独立出来。
接着用上面的例子说明。嘴唇和眉毛部分,我们不想和皮肤一样,应用皮肤的毛孔纹理。这时,可以使用 Detail Mask ,细节蒙版纹理可以让您屏蔽模型的某些区域的细节纹理。 这意味着您可以在某些区域显示细节纹理,某些区域不显示。
10.Emission贴图
Emission:自发光[贴图],让模型自发光;可以设置颜色跟强度
Unity里面能够作为光源存在的除了灯光组件和天空盒,标准Shader里面的Emission贴图也是可以作为一种光源的。