三维图形渲染中常见的贴图
贴图(Map)是美术在ps等软件中制作产生的一张图片。
在三维图形渲染中,贴图与shader组合成材质,用来告诉gpu如何进行绘制,决定了三维模型表面最终呈现出来的颜色。
贴图作为材质中使用的图像。 将它们映射到应用这个材质的表面,然后直接应用到诸如漫反射贴图之类的地方,或者在材质中将贴图的贴图像素值作为蒙板使用,或用于其它计算。在作为HUD时,可直接进行绘制。
贴图格式
贴图有很多格式如:dds、tga、bmp、png、jpg等。
名称 | 详细说明 |
dds |
使用DXTn算法来按照块(4x4)为单位来压缩存储,有效减少了纹理内存消耗,可被GPU硬件解压缩 支持mipmap层级数据存储,专门为纹理而设计的贴图 8位:R3G3B2 16位:A1R5G5B5、A4R4G4B4、R5G6B5、A8R3G3B2、X4R4G4B4 24位:R8G8B8 32位:A8R8G8B8、A2R10G10B10、X8R8G8B8 64位:A16B16G16R16
注:X表示未设置或通道不明(可能是R、G、B、A,或其他含义的数据)
一些工具: ① nVidia的Texture Tools for Adobe Photoshop (8.23.1101, 7.83.0628) ② nVidia的Legacy Texture Tools ③ nVidia的DDS Thumbnail Viewer ④ nVidia的Windows Texture Viewer ⑤ nVidia的max dds Plugin |
tga |
非压缩的,支持透明,可用于存储8位、15位、16位、24位、32位图像数据 支持alpha通道、颜色索引、RGB颜色、灰度图 游戏中常常使用tga作为贴图的存储格式 |
bmp |
非压缩的,格式有1位、4位、8位、16位、24位、32位 1位(单色位图): 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息 4位(16色位图):一个像素4位,有16种颜色可选 8位(256色位图):一个像素8位,有256种颜色可选 16位:X1R5G5B5、R5G6B5、X4R4G4B4 24位:R8G8B8 32位:X8R8G8B8 |
png |
压缩的,格式有8位、24位、32位三种形式 其中8位PNG支持两种不同的透明形式(索引透明和alpha透明) 24位PNG不支持透明 32位PNG在24位基础上增加了8位透明通道 |
jpg |
有损压缩,可按照图片质量来设定压缩比 支持的像素格式:R8G8B8 不支持透明 |
贴图类型
Diffuse Map(漫反射贴图,也称为颜色贴图;Base Color;Albedo Map -- 反照率贴图,固有色)
用于表现物体被光照射到而显出的颜色和强度 注:需要勾选sRGB,来指明该贴图被编码伽马,需要执行display gamma,将其转换到线性空间
Base Color; Albedo Map -- 反照率贴图,固有色:不要带有任何光照或阴影信息,它存储的是漫反射信息,也就是物体的固有颜色。
Bump Map(凹凸贴图)
1978年由Jim Blinn提出,计算顶点光强的时候,不是直接使用该顶点的原始法向量,而是在原始法向量上加上一个扰动得到修改后的法向量,经过光强计算,能够得到凹凸不平的表面效果。
No self-occlusion(无自遮挡), No self-shadow(无自阴影),No silhouettes(无轮廓)
Displacement Map(置换贴图、移位贴图)
1984年提出,直接作用于顶点,根据Distancement Map中对应顶点的像素值,使顶点沿着法向移动,产生真正的凹凸表面。
Normal Map(法线贴图)
1996年提出,贴图中的RGB表示法向量的xyz,利用此信息计算光强,产生凹凸阴影的效果。No self-occlusion(无自遮挡), No self-shadow(无自阴影),No silhouettes(无轮廓)
有两种制作法线贴图的方法:
① 从三维的模型渲染出一张法线贴图 (用高模跟低模重叠在一起,把高模上的细节烘焙到低模的UV上,这里需要低模有一个不能重叠的UV)
② 在ps中转换一张高度贴图(height map)成为一个法线贴图。(使用NVIDIA Texture Tools ps插件)
Parallax Occlusion Mapping(Virtual Displacement Mapping,视差贴图)
2001年提出,没有修改vertex的位置,以视线和height map计算较陡峭的视角给vertex较少的位移,透过视差获得更强的立体感。
是一种改进的Bump Mapping技术,相较于普通的凹凸贴图,视差贴图技术得到凹凸效果得会更具真实感(如石墙的纹理将有更明显的深度)。
视差贴图是通过替换渲染多边形上的顶点处的纹理坐标来实现的,而这个替换依赖于一个关于切线空间中的视角(相对于表面法线的角度)和在该点上的高度图的方程。
简单来说,Parallax Occlusion Mapping (POM)利用Height Map进行了近似的Texture Offset。
No self-occlusion(无自遮挡), No self-shadow(无自阴影)
Relief Mapping(Steep Parallax Mapping,浮雕贴图)
2005年提出,有人把它誉为凹凸贴图的极致。更精确地找出观察者的视线与高度的交点,对应的texture坐标则是位移的距离,所以能更正确地模拟立体的效果。Relief Mapping实现了精确的Texture Offset。
浮雕贴图方法不仅更容易提供更深的深度,还可以做出自阴影和闭塞效果,当然算法也稍稍有点复杂,具体细节可以参考这篇中文文献:Relief mapping:凹凸贴图的极致
self-occlusion(自遮挡), self-shadow(自阴影),view-motion parallax(视觉运动视差), silhouettes(轮廓)
Height Map(高度贴图)
灰度图,它通过像素来定义模型表面的高度。像素越白的地方越高,越黑的地方越低,灰色的在中间,从而表现不同的地形。
Specular Map(镜面光贴图,也称高光贴图)或Reflective Map或Gloss Map(光泽贴图)
灰度图,像素越白的地方镜面反射越强,越黑的地方镜面反射越弱,用来表现模型表面反光程度(塑料>木头>皮肤>布料),从而区分不同材质
Mask Map(Opacity Map,Opacity Mask Map,不透明贴图,遮罩贴图)
Emission Map(Emissive Map,Self-Illumination Map [自发光贴图])
仅仅是提高贴图本身的亮度,不受场景光源和摄像机位置影响,也不会照亮其他物体 注:需要勾选sRGB,来指明该贴图被编码伽马,需要执行display gamma,将其转换到线性空间
Glow Map(辉光贴图)
模拟闪耀的效果,它不会照亮环境,不受场景光源和摄像机位置影响。过分的辉光效果会使人眼花缭乱,因此常用于模型细小部位,例如机器人的眼睛,装备上的宝石挂饰等
a是没有辉光的效果,c是加了辉光的效果 ,b为通过辉光贴图抠出来的像素
对b抠出来的像素做模糊(blur)处理,模糊会导致向外扩展一些像素,形成辉光的效果,然后再与a图进行Alpha Blend即可
Light Map(光照贴图)
把物体光照信息预先烘焙保存到光照贴图中, 实时绘制时不再进行光照计算, 而是采用该贴图来表示明暗效果
Shadow Map(阴影贴图)
可预先烘焙或实时计算。
Ambient Occlusion(AO贴图,环境阻塞贴图,Occlusion贴图,也简称为OCC或白模)
使用一张灰度图来表示物体之间相互影响的效果,可以理解为明暗素描那样的一种表现形式,
主要用于改善阴影,贴图中越黑的地方,阴影就会加得越深(若输入一张纯白的AO贴图,相当于关掉了AO效果),给场景(模型)更多的深度,有助于更好的表现模型的细节。
Ambient Map(环境照明贴图,也可称为背光贴图)
这里的Ambient不同于AO贴图中的Ambient,它作为Diffuse的一部分,控制着物体背光的色彩变化,同时也对迎光面产生一些影响。
在现实中,物体的背光面仍会受到环境中各种光线反弹的照亮,也不会是纯黑的。环境照明贴图常用在场景灯光不足的情况,用于提高物体暗面的亮度。
Environment Map(环境贴图),也称为反射贴图(Reflection Map)
用一张贴图映射到反射对象上,使得在反射对象上看到场景的影像;这张图可以是一张做好的假的环境贴图,也可以实时生成(把反射对象当作一个虚拟眼睛,实时将场景生成一张虚拟的贴图)。
按照映射的方式又分为:球面环境映射贴图(标准环境映射贴图,Sphere Map)、立方体环境映射贴图(Cube Map)、双抛物面环境映射贴图(Parabola Map) Spherical, Cubic, and Parabolic Environment Mappings.pdf
Glossiness Map(光泽度贴图)
PBR材质中用到的贴图,为一张灰度图,用于控制模型微表面粗糙程度。
图中像素越白的地方,微表面越光滑,单个像素的反射光线的方向范围就越集中,高光点就越小越亮,将周围环境映射到模型表面就显得越清晰
Roughness Map(粗糙度贴图)
灰度图,与Glossiness Map功能一样,只是图中存储的值是相反的:像素越白的地方,越粗糙
Metallic Map(金属度贴图)
PBR材质中用到的贴图,为一张灰度图
越白的地方,金属度越高;越黑的地方,非金属度越高。
对于纯表面,例如纯金属,此值为1;纯石头、 纯塑料等该值为0。
对受腐蚀、落满灰尘或生锈金属之类的混合表面时, 则需要介于0与1之间的值。
很少有金属与非金属之间的过渡物质的表现。因此,金属度贴图的制作要诀就是——高对比,不要画得太灰。
Phong贴图管线
PBR贴图管线
参考
Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
【《Real-Time Rendering 3rd》 提炼总结】(五) 第六章 · 纹理贴图及相关技术