关于Albedo贴图、颜色贴图、Metallic 贴图、Specular贴图、法线贴图、视差贴图、凹凸贴图、Height Map高度贴图、AO 贴图Occlusion 贴图、Emission 贴图等

在学习unity的过程中,被各种贴图弄得晕头转向,为了弄清楚各种贴图,查询了很多资料,粗略的整理如下,只要耐心看完,对贴图的基本用法基本上就没问题了。

1.Albedo 贴图 (可以看做是Diffuse颜色贴图)

Albedo:反照率[贴图];用于体现模型的纹理,颜色。

反照率贴图本身是一张颜色与纹理的贴图。

该选项有贴图属性,也有颜色属性。

两个属性可以单独使用,也可以组合使用;

当颜色属性为纯白色时,则不影响贴图的效果;

当颜色属性为其他颜色时,则叠加贴图效果。

2.Metallic 贴图 **

金属度[贴图];用于体现模型的金属高光反射;

金属度贴图本身是一张灰白图,越白的地方,金属度越强烈,越黑的地方金属度越低。

Smoothness:平滑度

介于 0 和 1 之间的一个值,越小,平滑度越低,越大,平滑度越高。

3.Specular

Specular:镜面[贴图],类似于“Metallic 金属度”贴图。(要使用Standard(Specular setup)才有)

PBR 贴图的制作方式不同,最终关于“金属部分”的表现,出现了两种类型的贴图,Metallic 和 Specular。

4.Normal Map 贴图 **

Normal Map:法线贴图;用于增加模型的细节;只是改变的表面上的光照结果,并没有真正改变表面上的形状
法线贴图本身是一张蓝色的凹凸图。

Parallax mapping:视差[贴图],比 Normal Map 更有立体感的一种贴图方式;
视差贴图是一种NormalMapping算法的增强算法,其本质上和NormalMapping没有区别。优势是只需要增加3个HLSL语句和一个控制纹理通道(只需要几个GPU指令,代价小到可以忽略)就可以显著的增加物体表面的深度感。
Parallax mapping使用的也是单张的控制纹理。一张NormalMap。如果我们用AcdSee来看这张NormalMap,我们会发觉似乎和NormalMapping用的控制纹理是一样的。而如果我们打开这张NormalMap的Alpha通道,就会发现其中的玄机所在。原来Alpha通道里存储的是对应这张NormalMap的BumpMap!(就是HeightMap,就是用饱和度记录表面高度)
Parallax mapping是如何达到增加NormalMap的效果的呢。我们要从NormalMap的特性说起。我们假设在NormalMap表面制作一个凸起。然后我们转转角度看看。我们会发现,其实这个凸起的背对我们视线的面~并不会因为我们视角的逐渐放平而消失--这显然是不正确的,要知道背后的东西应该是看不见的才对。因此Parallax mapping就是来缓解这个问题的,具体的代码这里不提。我来试着白话解释一下原理。其实为了不让我们看见“不该看的东西”应该试着挪动纹理坐标……把那个不该给玩家看见的图素(Texel)跳过去。也就是说根据高度图提供的数据,把那个位置较低那个纹理的后面的纹理向前拉。相当于在图素采样的时候刻意的把那个图素跳过去。这样那个不该被玩家看见的像素就会因为图素的消失而不见了--很明显,这个算法是不太站得住脚的,虽然计算的时候会参考玩家视线的角度。但仍然是一种来自于经验的估算。值得欣慰的是,对于本身NormalMap所需要表现的微小细节来说,这样的改进已经看上去不错。因此开始有大量的游戏决定采用。特别是它的优点是所消耗的代价极为有限,而需要增加的工作量只是让美工把高度图保存到Alpha通道里而已。很划算。
主要用于地面,建筑等效果的体现。

5.Height Map 贴图(又叫Bump凹凸贴图)
凹凸映射是一种负责光方向的纹理映射。凹凸映射是补色渲染技术(Phong Shading Technique)的一项扩展,只是在补色渲染里,多边形表面上的法线将被改变,这个向量用来计算该点的亮度。当你加入了凹凸映射,法线向量会略微地改 变,怎么改变则基于凹凸图。改变法线向量就会改变多边形的点的颜色值。就这么简单。

6.Occlusion 贴图
Occlusion:AO 贴图;AO-Ambient Occlusion,“环境吸收”或者“环境光吸收”。
AO 贴图本身是一张灰白图。
主要用于改善阴影,给场景(模型)更多的深度,有助于更好的表现模型的细节。

7.Emission 贴图
Emission:自发光[贴图],让模型自发光;
Unity 里面能作为光源存在的除了灯光组件和天空盒,标准 Shader 里面的Emission 贴图也是可以作为一种光源的。

8.Detail Mask
Detail Mask:细节遮罩[贴图];
这个贴图是配合“次贴图区域”中的 Detail Albedo,Normal Map 两张贴图配合使用的,次贴图区域中的这两张很多是平铺的贴图,效果会作用于模型的全部,我们使用 Detail Mask 将一些不需要被“次贴图”影响的部分独立出来。

二、Secondary Maps 次贴图区域
1.Detail Albedo x2
Detail Albedo x2:细节反照率[贴图];
作用是对主 Albedo 贴图的一个细节深入表现;

2.Normal Map x2
Normal Map x2:细节法线[贴图];
作用是对主 Normal Map 贴图的一个细节深入表现;

3.Tiling
Tiling:瓷砖[属性];
可以对贴图进行分块的展现

AO-Ambient Occlusion,“环境吸收”或者“环境光吸收”。

什么是Occlusion?
Occlusion 就是提供了非常精确和平滑的阴影,就好像是全局照明的结果。在你最终渲染后有多种方法来合成这些阴影会在真正意义上改善图像,它主要能改善阴影,给场景更多的深度,真正有助于更好的表现出模型的所有细节。

通俗的来讲就是:AO不需要任何灯光照明,它以独特的计算方式吸收“环境光”(同时吸收未被阻挡的“光线”和被阻挡光线所产生的“阴影”),从而模拟全局照明的结果,它主要是通过改善阴影来现实更好的图像细节,尤其在场景物体很多从而到处阻挡着光线导致间接照明不足时,AO的作用会更加明显。

那么要问AO到底能带来哪些效果(好处)呢?具体的说,AO可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。

Normal map :
Normal map (法线贴图) 它的作用是模拟出高模上的一些细节纹理,特别是将高模上的圆滑和粗糙度投射到低模上,让低模也有高模的效果。
因为高模的面数非常多,导入引擎后电脑是跑不动的,所以用低模加上法线贴图就能很好的解决这个问题。
因为Normal Map只是改变的表面上的光照结果,并没有改变表面上的形状。因此,表面上看来,似乎只要是不接近水平,NormalMap就不会有视角问题。其实不然,NormalMap因为不能实现自身内部的遮挡,因此不能表现平面上凹凸起伏比较大的场合。比如说我们一个桌面上突出一块,然后在突出的这块东西边上放一支牙签。如果用Normal Map表现,会发现。根据经验,这个凸起会很轻易的挡住我们的视线,让我们看不见那支牙签。可是Normal Map却不会这么做。因此我们一直能看见障碍物背后的东西,这一点是个问题--也就是说只有在垂直于平面的时候NormalMap才会发挥最好的作用。这样一来,Normal Map只能用在大家对遮挡关系不敏感的场合,比如场景等,不是不能用于人物,而是用Normal Map的人物不太经得起特写,放大了,角度刁钻了都容易穿帮。

虽然Normal Map有个不能平视的巨大问题,但是依然是好处远大于小障碍,因此还是非常值得推广的。后面的几种新兴算法其实都是由Normal Mapping发展起来的,因此做为基础的东西,也还是最有理解价值的。

Diffuse map:
Diffuse map(色彩贴图)它的作用是给模型上颜色和材质。

Speculer map:
Speculer map(高光贴图)它的作用是表现模型一些质感,世界万物中所有物体,不同材质,在光照下,它们的反射光的强弱都不同。所以我们利用这个特性,制作了这张高光贴
图来模仿不同材质在光照效果下反射出不同的效果。

采用法线贴图来描绘物体表面细节的凸凹变化;颜色贴图来表现物体的颜色和纹理;高光贴图来表现物体在光线照射条件下体现出的质感,增加贴图的大小;

3.Parallax mapping 视差贴图
(因为后面的算法都是基于NormalMap的应用,可能看上去没有NormalMapping那么长了,但内容肯定一样精彩的!)

视差贴图是一种NormalMapping算法的增强算法,其本质上和NormalMapping没有区别。优势是只需要增加3个HLSL语句和一个控制纹理通道(只需要几个GPU指令,代价小到可以忽略)就可以显著的增加物体表面的深度感。但是NormalMap中出现的问题,Parallax mapping基本上都有--特别是视角接近平行的时候,凹凸感消失的问题,并没有明显改善--其实这个使用NormalMap带来的问题就像是液晶屏的可视角度问题一样令人挥之不去。或者按照FXCarl个人的说法--Parallax mapping才是真正具有实用价值的NormalMapping。

目前实践证明,这种技术非常适合XBOX360和PS3这样的新世代游戏主机(都上市一年了还用次世代……我真受不了现在有些人)。例如360游戏SEGA死刑犯就是使用的和PC游戏FEAR一样的Monolith引擎--使用Parallax mapping。

Parallax mapping使用的还是单张的控制纹理。一张NormalMap。如果我们用AcdSee来看这张NormalMap,我们会发觉似乎和NormalMapping用的控制纹理是一样的。而如果我们打开这张NormalMap的Alpha通道,就会发现其中的玄机所在。原来Alpha通道里存储的是对应这张NormalMap的BumpMap!(就是HeightMap,就是用饱和度记录表面高度)

现在插入一点理论课程。大家留心读上面的文字,会看见一个控制纹理的词汇。这个词汇是这里要重点解释的。因为理解控制纹理,在成为新世代美工的需求中是相当重要的。按照大家这么多年美术做下来的经验,对于图素(Texel,纹理上的一点)的理解肯定是RBG3个色彩带一个表示透明度的Alpha通道。但是在我们的渲染器和程序员的眼里,它可不是我们美术朋友们看见的东西。他们看见的是一个4通道的矢量(其实可以理解成四个数的组合)。这4个数字的取值范围分别是0到255。通过这个空间,其实可以用来做更多别的事情--最常用的就是记录表面的物理细节。至于为什么要用控制纹理呢?FXCarl前两天听一个朋友有这么个说法:我觉得NormalMap的效果也没什么,直接画也画的出来的。其实这个说法一点都没错,但是要知道,这个想法是过时的。因为NormalMap并非用于著色,而是用于更真实的生成色彩。重所周知,用画的方式,做静帧固然可以做到无限好。可是动起来怎么办?如何才能保证在不同的光照关系下依然保证最终著色的结果正确?唯一的做法,就是每帧重画一遍。如何才能做到最有效的重画?那就要把重画的参考告诉我们的渲染器,让它来帮你做一些简单的工作,这就是控制纹理的作用--把你想要实时改变的东西告诉渲染器。其实控制纹理的范围很大,除了NormalMap还有很多,比如说Nvidia的DEMO曾经用纹理存储物体表面在阳光下的色彩变化规律。把艺术家想要实时改变的东西压缩在纹理中告诉渲染器是一件相当有挑战性的工作,当然也会获得更令人赞叹的画面。请接受控制纹理,那是让艺术家把一个瞬间的精确著色变成一个普遍适用的著色的利器!

Parallax mapping是如何达到增加NormalMap的效果的呢。我们要从NormalMap的特性说起。我们假设在NormalMap表面制作一个凸起。然后我们转转角度看看。我们会发现,其实这个凸起的背对我们视线的面~并不会因为我们视角的逐渐放平而消失--这显然是不正确的,要知道背后的东西应该是看不见的才对。因此Parallax mapping就是来缓解这个问题的,具体的代码这里不提。我来试着白话解释一下原理。其实为了不让我们看见“不该看的东西”应该试着挪动纹理坐标……把那个不该给玩家看见的图素(Texel)跳过去。也就是说根据高度图提供的数据,把那个位置较低那个纹理的后面的纹理向前拉。相当于在图素采样的时候刻意的把那个图素跳过去。这样那个不该被玩家看见的像素就会因为图素的消失而不见了--很明显,这个算法是不太站得住脚的,虽然计算的时候会参考玩家视线的角度。但仍然是一种来自于经验的估算。值得欣慰的是,对于本身NormalMap所需要表现的微小细节来说,这样的改进已经看上去不错。因此开始有大量的游戏决定采用。特别是它的优点是所消耗的代价极为有限,而需要增加的工作量只是让美工把高度图保存到Alpha通道里而已。很划算。

但是对于技术研究者来说,这样的表现显然还是不够令人满意的。因此,顺着视差贴图的思路向下发展,借助ShaderModel3.0的出现。出现了一个真正从物理上改变物体表面的算法,这就是我们下一篇文章需要介绍的Displacement Mapping

4.Displacement mapping 位移贴图

和前面说的几种方式不同,DisplacementMapping是一种真正改变物体表面的方式。通过一种称为micropolygons(微多边形)tessellate(镶嵌)的技巧来实现真正的改变物体表面的细节。

具体流程是这样的。首先,根据屏幕的分辨率,在模型的可见面上镶嵌和最终象素尺寸相同的微多边形。这个过程叫做镶嵌。然后读取一张Bump贴图。根据表面的灰度确定高度。然后根据镶嵌所得到的多边形,沿着原先的表面法线方向移动微多边形。接着再为新的多边形确定好新的法线方向。此时,物体的表面确实已经真的增加出了细节。

其实这种技巧,我们在使用ZBrush的时候就可以看见了。大家用过Zbrush的时候会知道,在表面刷过的细节,只有在画面静止下来之后才会越来越清晰。而微多边形镶嵌起到的就是类似的作用。只增强面对屏幕的多边形的表面粗糙细节,而不是整个模型。因此性能代价并不会像直接上高模那么大。相比来说位移贴图在效果上是没有任何瑕疵的,但是也未必没有缺点。

首先就是,对硬件的要求很高,必须支持ShaderMode3.0才可以,因为只有支持SM3才可以在顶点阶段进行纹理操作。同时镶嵌对于性能的消耗也不小。不过其实就对于GPU的压力而言,反而似乎要更合理一些(因为对顶点的运算要求提高,对象素级别的运算要求反而没有影响)想必在将来的DX10统一渲染构架中会更有价值。

和我们介绍的所有凹凸贴图技术相比,位移贴图是唯一真正改变多边形表面几何形状的方法。相比之后将要介绍的切空间光线追踪算法,这种算法的性能消耗虽然并不占优,但其实要更为合理。给予画面更多特效的机会,同时更有趣的是,其实他和其他基于象素着色的凹凸贴图并没有什么冲突。其实这种位移贴图在新世代主机的游戏中大家都有可能见到。只是可能不是大家想得到的地方。

它可以用来实时生成大面积的户外地形!这是其他任何凹凸贴图方式所不能比拟的!

ReliefMapping 和 ParallaxOcclusionMapping 和 ConeMapping 浮雕纹理贴图和视差阻塞贴图和圆锥跟踪贴图

三种利用切空间光线追踪先进算法的技术,三种方法分别是光线跟踪,光束跟踪和圆锥跟踪算法。当然可以说后面的都是第一种的改进。这些都是面向未来的技术,很有前途。ReliefMapping甚至现在可以实现扣环这样的复杂几何表面,并且可以处理不能平视的问题!

在宏观意义上,Base Color Map == Albedo Map == Diffuse Map。他们都是一张RGB纹理。
在PBR指南中,PBR工作流程分成了两个派系:

  1. Metal/Roughness
  2. Specular/Glossiness
    这两个派系在纹理运用上的共同点是:
    使用相同的AO、Normal、Height纹理。这三张纹理在PBR指南中叫做Common Maps(通用纹理)。
    不同点是:
    Metal/Roughness工作流程使用:Base Color、Roughness、Metallic三种纹理来作为基础纹理。
    Specular/Glossiness工作流程使用:Diffuse、Glossiness、Specular三种纹理来作为基础模型。

你可能感兴趣的:(unity,游戏开发,unity3d)