- 游戏架构:核心技术与面试精粹
- 樊松阳
- 1771字
- 2020-08-28 01:55:24
4.1 贴图种类
请简要介绍一下项目中用到的材质相关的贴图种类及其作用。
问题分析
在实际项目中,为了达到千变万化的艺术效果,我们会使用图形数据——贴图。随着贴图的增加,美术可以制作出更多变的效果,但过多的贴图也会增大内存的负荷。因此,贴图的选取是一个权衡的结果,要能在程序运行效率允许的情况下,给美术最大的发挥空间。
贴图主要分为两大类:图像贴图和计算贴图。这两种类型最大的区别在于,图像贴图通常是由艺术家来绘制的,用于表现物体的性状;计算贴图则用来辅助计算,以求达到特殊效果,通常由数学算法生成。
下面以Unity-Chain为例,一起来看一下常用的贴图。
固有色贴图
固有色贴图(Diffuse)是物体在白色阳光下所呈现的固有颜色。固有色,可以准确地控制色相,使角色呈现一个合理的饱和度。固有色贴图也能体现模型的一部分质感,如图4.1所示。
图4.1
透明贴图
透明贴图(Alpha)是一张只由黑白像素构成的灰度图,通常使用它来实现磨砂或半透明效果。在这种图中,纯黑色代表全透明,纯白色代表不透明。
由于透明贴图是只占有一个通道的灰度图,因此有时也将固有色贴图的A通道用来存储透明贴图。当然如果有其他贴图的闲置通道,也可以在一起合并使用。
由于像素精度的问题,在使用透明贴图时,有时会有半个像素的白边或者是白色锯齿。常规的解决方法是调整半透明物体的边缘羽化,在材质中调整透明裁切(AlphaCutOff),只有贴图的透明度大于AlphaCutOff时才可以绘制。
AO贴图
AO贴图(Ambient Occlusion)也被称为环境光吸收贴图,主要用来制作模型的阴影。为了不受外界光照变换的影响,AO贴图采用“吸收”光线的计算方法,模拟全局光照效果来改善阴影的细节。使用这种技术可以优化墙角阴影浅淡、缝隙阴影发虚等问题,以加强明暗对比,增加空间的层次,在灯光复杂的场景中比较有用。
因为AO贴图不受光照角度的影响,所以可以认为几乎是静态效果。为了节省贴图占用的内存,在不做其他用途时,可以在Photoshop中将AO贴图与固有色贴图合并为一张。
高度贴图
高度贴图(Height Map)是一个记录物体表面高度的灰阶图,黑色代表高度的最小值,白色代表最大值。它主要用于加强法线贴图的表现效果,例如视差技术或浮雕效果。高度贴图也常用于地形的控制。在地形编辑器中,编辑出的山谷和地形起伏都存储在高度图中。当生成地形高度图时,设计者可以将不同高度的区域分通道存储以保证精度。
大多数情况下,在用作常规表面高度变化时,高度贴图都会被转化为法线贴图,以提高运行效率。
法线贴图
法线贴图(Normal Map)作为模型表面的扩展,包括了模型像素点的高度值。它是次时代游戏的标配,可以模拟起伏的或不规则的表面,如图4.2所示。它虽然会大幅增加渲染时间,但能够使几千面的模型拥有几万,甚至几十万面的视觉效果。另一方面,它虽然不会更改模型形状,却可以精确地表现模型表面的光照细节,大大降低了运算消耗。
图4.2
法线贴图是RGB贴图,红色通道编码法线方向的左右轴,绿色通道编码法线方向的上下轴,蓝色通道编码垂直深度。一般来说,法线贴图是在切空间下,直接把高度图(Height Map)转换成一张法线图(Normal Map)。使用常见的3D模型工具都可以制作法线。
高光贴图
高光贴图(Specular)主要用来控制模型的质感。皮具、布料、金属的高光表现各不相同,即使是相同的材料也会因为磨损程度的不同而呈现不同的高光效果,这些细微的差别都可以通过高光贴图体现出来。
自发光贴图
自发光贴图(Glow)用来标定模型发光的区域。贴图的白色区域渲染为完全发光,黑色区域则保持原样,灰色区域渲染为部分自发光。需要注意的是,自发光区域不应受灯光的影响和阴影的影响。
反射贴图
反射贴图(Reflection)标注在有光泽物体表面反射的效果。为了使反射贴图获得较好的渲染效果,贴图应具有较高的分辨率。
渐变贴图
渐变贴图(Ramp)常用来辅助计算光照角度引起的不同变化。通过创建高度自定义的渐变,或使用双向反射贴图,可以模拟复杂的光照效果。
噪声贴图
噪声贴图(Noise)是通过噪声函数计算出的贴图,如图4.3所示。通过调整混合算法,它可用于模拟云朵、火焰等自然现象,或者大理石、木材等天然材质。我们可以使用Noise Graph软件生成需要的噪声图。在此软件中,我们可以生成数值噪声、梯度噪声,以及数值+梯度噪声。
图4.3
总结
虽然本文提及了很多贴图,但项目中并不需要全部使用。次时代模型通常会使用固有色贴图、法线贴图、高光贴图和自发光贴图。最常用的贴图主要是固有色贴图、法线贴图和渐变贴图。
扩展问题
模型的贴图是越多越好吗([:texturemore])?