贴图的作用
贴图的作用是描述物体表面的材质,我们创作出的纹理与材质在游戏引擎(虚拟世界)中与光交互。
贴图类型
一、颜色贴图
颜色贴图有三种叫法:Base Color Map, Albedo Map, Diffuse Map,因为工作流不同,所以叫法不一样,而且本质上也有区别
Diffuse(漫反射贴图)
Diffuse也叫漫反射,人眼之所以能看到物体的面貌,主要是靠漫反射光在眼内的成像。
光照模型在Lambertian(兰伯特材质球)着色器中会把颜色贴图叫做Diffuse Map(也叫颜色贴图),通常在绘制这张Diffuse Map的时候会把物体的结构阴影信息也绘制进去。在传统工作流中,Diffuse Map是带着光影信息的。
Albedo(反射率)
主要体现模型的纹理和颜色。在Unity的Shader(着色器)中,把颜色贴图叫做Albedo。
Base Color(固有色)
Base Color是把颜色贴图剔除光影变化后,我们看到的最基础的颜色。在PBR工作流中颜色贴图叫做Base Color这个术语(基本上不包含光影信息)。
二、法线贴图
Normal(法线):
1、凹凸贴图:法线贴图是 凹凸贴图 的一种。凹凸贴图是一种特殊的纹理,允许为模型添加表面细节,例如凸起、凹槽和划痕,这些细节将捕获光线,就像真实的几何体一样。如果在游戏引擎里用模型来表现凹凸细节,将需要绘制非常多数量的多边形,以现在的电脑耗不起,好点的电脑也就支持几千万面而已)。如果使用一张凹凸贴图来呈现细节,表面的几何形状可以变得更加简单,为了避免这种情况,就需要使用法线贴图来表示清晰的表面细节。用细节纹理调制光从表面反射的方式,以现代图形硬件可以非常快地执行这个个过程。
在现代游戏开发流程中,设计师将使用 3D 建模软件,基于非常高分辨率的原始模型生成法线贴图。然后,将法线贴图映射到较低分辨率的模型(游戏中实际使用的模型)上,这样,通过法线贴图,原始的高分率细节就被渲染了。
注意:凹凸贴图是一种相对古老的图形技术,但仍然是创建细节逼真的实时图形所需的核心方法之一。凹凸贴图通常也被称为 法线题图 或 高度图,不过这些术语的含义略有不同(看相关贴图解释)。
2、表面法线:为了真正理解法线贴图的工作原理,需要先清楚什么是 法线,以及如何在实时光照中使用法线。例如一个模型的多边形表面根据表面相对于光线的角度简单地被点亮。表面角度可以表示为一条垂直于表面并向上突出的线,是一个向量,这条线成为 表面法线,或者简单地称为 法线。
3、法线贴图:用法线贴图表示表面法线的这种变化。法线贴图通过通过一张纹理来存储如何改变表面法线的信息。法线贴图是一张映射到模型表面的图像纹理。有些类似于常规的颜色纹理,不同的是,法线贴图中每个顶点(称为纹素)还表示了在表面法线方向上离开平面(或平滑)多边形真实表面的距离。
4、Opengl与Directx的区别:
法线贴图还与Opengl与Directx这两个图形库有关。OpenGL和DirectX都是用于渲染2D和3D信息的应用程序编程接口(API)。他们还定义了法线贴图格式,其中,
Unity游戏引擎使用的是Opengl程序接口。Unity使用的法线贴图,凸起的结构,在法线贴图上表现就是凸起的,凹的就是凹的。
UE4游戏引擎使用Directx程序接口。UE4使用的法线贴图跟Unity的相反。凸起的结构,在法线贴图上表现就是凹的,凹的结构表现为凸起的。他们的区别在于,反转法线贴图蓝色通道。
OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库,可跨平台使用。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
DirectX是一种应用程序接口(API),它是由微软公司开发的用途广泛的API,它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计 人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。
World Space Normals(世界空间法线)
世界空间法线表示物体的前、后、左、右、上、下方位。
Position(位置)
表示的是从下到上的整体渐变梯度关系。
三、材质属性贴图
Metallic(金属度)
金属度贴图起到类似于蒙版的作用,区分固有色贴图中的金属和绝缘体数据。在金属性贴图中,0(黑色-0 sRGB)表示绝缘体(电介质),而1(白-255 sRGB)表示金属。金属没有漫反射,只有镜面反射。
金属感对象的光泽度由粗糙度控制。 材质越粗糙,其光泽度就会越低, 而缺少粗糙度将使金属显得非常有光泽。 以下是粗糙度如何影响金属感的示例。
上图最左侧球体的“金属感(Metallic)”值为1,“粗糙度(Roughness)”值为0,因此它显得非常有光泽。 但是,最右侧球体的“金属感(Metallic)”值为1,“粗糙度(Roughness)”值为1。 这使金属看起来非常晦暗,就像已经用过很久一样。
Roughness(粗糙度)
Roughness定义材质得粗糙度信息,0(黑色-0 sRGB)表示光滑,1(白-255 sRGB)表示粗糙。粗糙度在帮助确定表面光泽度方面扮演着重要角色。 表面越粗糙,其光泽度越低。 表面越光滑,其光泽度越高。 以下是粗糙度如何影响光泽度的示例。
Glossiness(光泽度)
Glossiness(缩写Gloss):Glossiness定义材质得粗糙度信息,跟Roughness相反,0(黑色-0 sRGB)表示粗糙,1(白-255 sRGB)表示光滑。(如下图)。光泽度无非是指表面反射光线的能力。 表面能够反射的光线越多,光泽度越高。 表面能够反射的光线越少,光泽度越低。 表面反射光线的能力受环境中各种因素的影响,例如落在对象上的那些非常小颗粒的灰尘,以及接触对象时从手上沾染到对象上的油污, 所有这一切都会影响表面反射光线的能力。
Smoothness(光滑度)
在Unity中用Smoothness来表示材质表面的粗糙度,跟粗糙度取值相反,但都是表示材质表面的粗糙程度。
Specular(高光)
1、在Specular工作流与传统次世代工作流中的高光
在Specular工作流中:Specular翻译成高光,表示高光的范围、强度、颜色,颜色越亮高光越强,黑色表示没有高光。
上图是Specular值从0~1的变化。
2、UE4中的Specular(镜面反射)
Specular(镜面反射):表示材质的镜面反射强度,从0(完全无镜面反射)~1(完全镜面反射)。UE4的默认值是0.5。任何现实中的物体都有光泽(镜面反射),对于漫射度很大的材质,可通过调节粗糙度,而不应该将Specular设置为0。
上图是镜面反射从0~1的变化