书接上回。
上图涉及了渲染的景深等和贴图无关的东西,暂不介绍(我也不懂)。
3dmax的十二种贴图方式(Standard)
Ambient Color 阴影色贴图
Diffuse Color 过渡色贴图
Specular Color 高光色贴图
Specular Level 高光级别贴图
Glossiness 光泽度贴图
Self-Illumination 自发光贴图
Opacity 不透明贴图
Filter Color 过渡色贴图
Bump 凹凸贴图
Reflection 折射贴图
Refracion 反射贴图
Dispacement 置换贴图
我逐一介绍一下:
(其实每个贴图点进去还有叠加选项,好几张图片通过不同设置组合占用这一个贴图位置)
官方文档(比起在博客论坛慢慢找强多了,毕竟真的都懂的大佬少):3ds Max 2015 Help 帮助: 将贴图和环境用作材质组件 (autodesk.com)
这是我截出来的《黑色沙漠》里游侠妹子模型和游戏截图:
游戏模型制作中用到了很多贴图类型,通过不同类型贴图的组合使用以达到最终需要得到的模型效果。最常见的类型有Diffuse、Emissive、Normal、Opacity、Specular、Roughness。我把那个游侠妹子的相关贴图按顺序做成简单介绍:
环境光颜色-环境遮挡贴图,简称AO贴图,Ambient Occlusion map
使用位图文件或程序贴图将图像贴图到材质的环境光颜色。图像绘制在对象的明暗处理部分。
可以用于模拟物体之间所产生的阴影,在不打光的时候增加体积感。也就是完全不考虑光线,单纯基于物体与其他物体越接近的区域,受到反射光线的照明越弱这一现象来模拟现实照明(的一部分)效果。
漫反射颜色-颜色贴图,纹理贴图,diffuse map
漫反射贴图在游戏中表现出物体表面的反射和表面颜色。换句话说,它可以表现出物体被光照射到而显出的颜色和强度。
漫反射贴图在游戏中表现出物体被光照到而显示的颜色和强度。不同地方的光照强度反射是不同的,比如一堵墙,墙缝隙由于吸收很多光纤,比较暗,但是表面的反射比较强,则会灰色一些。
注:其中红色部分是Alpha通道的显示,也就是渲染时设置红色部分为透明的。
上面这张贴图我一直不知道放在哪里,后来看到参考帖子才知道大概是两种共同作用(参考文章的链接在最下方)
高光颜色-高光贴图,specular maps
高光贴图是用来表现当光线照射到模型表面时,其表面属性的.(如金属和皮肤、布、塑料反射不同量的光)从而区分不同材质.高光贴图在引擎中表现镜面反射和物体表面的高光颜色。
材质的反光程度就越强。(强弱度度是指,如果将这张Specularmap去色成为黑白图,图上越偏向RGB0,0,0,的部分高光越弱,越偏向RGB255,255,255的部分高光越强.)
高光级别-高光级别贴图,高光强度,Sepcular level
可以使用位图文件或程序贴图基于位图的强度来改变反射高光的强度。贴图中的白色像素产生全部反射高光。黑色像素将完全移除反射高光,并且中间值相应减少反射高光。
天涯明月刀里面涉及金属物品的这种贴图用的多。
光泽度-光泽度贴图,glossness
光泽度贴图指的是造成光漫反射的表面不规则现象。在贴图中暗调(0.0)表示表面粗糙,亮调(1.0)表示表面光滑。
天涯明月刀里涉及金属的用的也多
自发光,自发光贴图-Emissive Map
模拟电影幕布,灯箱广告之类的效果。在发光的同时也能看见内容;或者我在具有科技感的机甲战士中见过身上的小灯部分就用这种贴图实现。
控制表面发射光的颜色和亮度。当场景中使用了自发光材质时,它看起来像一个可见光。物体将呈现发光效果。
不透明度,透明贴图-Opacity
一般用于头发、睫毛等毛发(也有直接采用Alpha通道作为透明强度的),用像素的颜色表示透明多少,类似PS的蒙版。一般用黑色表示不透明。
定义贴图的不透明度。黑色是透明的部分,白色为不透明的部分,灰色为半透明的部分。
贴图和第一张的漫反射的Alpha通道同理。
将睫毛、头发设置Alpha,设置不透明贴图,就能从上面的一片网格变成下面的正常的头发和睫毛一样。
过滤色-过滤颜色贴图,filter color
过滤颜色,也称为半透明颜色,是通过透明或半透明材质(如玻璃)透射的颜色。
过滤颜色贴图 | 3ds Max | Autodesk Knowledge Network
凹凸-法线贴图,normal map
凸凹贴图可以给贴图增加立体感。它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。再游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图【高度贴图(highmap)--依据3dmax的顺序放到了位移贴图里】
bump maps的一种,实现物体立体感,减少光照计算的方案。Normal Mapping 法线映射多用在CG动画的渲染以及游戏画面的制作上,将具有高细节的模型通过映射烘焙出法线贴图(Normal Map),贴在低端模型的法线贴图通道上,使之拥有更高细节的渲染效果。在光照的情况下,用贴图中的法线信息(RGB)影响或改变现有模型的法线,是我们在视觉上产生凹凸不平、增加细节的渲染效果。
一般是如下这种紫了吧唧的贴图 ̄へ ̄
反射,反射映射-Reflection mapping
在计算机图形学领域是用预先计算的纹理图像模拟复杂镜面的一种高效方法。纹理用来储存被渲染物体周围环境的图像。有几种不同的方法可以用来保存周围环境,其中最常用的方法之一是标准环境映射,在这种方法中周围环境在一个镜面球体上反射得到单一纹理图像。另外一种常用方法是立方环境映射,在这种方法中环境在立方体的六个表面上显现出来,所以需要保存为六个正方形的纹理。
折射,折射贴图-Refraction mapping
向材质(特别是玻璃和水)添加折射可产生非常逼真的效果。 请记住使用您尝试模拟的表面类型的正确 IOR 值。
使用折射 | 虚幻引擎文档 (unrealengine.com)
置换-移位贴图,Displacement Mapping
也叫 Height Map(高度图/ 置换贴图/ 视差贴图)
Normal maps的另一个应用是displacement mapping,在这个应用中,细节的增加不再是通过虚拟光照得到的,而是真正的改变模型的vertices。
Height Map是一个二维数组(一张8位数灰度图),储存高度(Z)方向的数字。每个不同灰度的像素索引表示不同的高度信息。它的高度值变化范围是在0和255之间,其中0 (黑色)表示最低高度,255 (白色)表示最大高度。
高度图(也称为视差贴图或凹凸贴图 )是一个类似于法线贴图的概念,但是技术更复杂,因此更性能开销更大。高度图通常与法线贴图结合使用,负责定义和渲染表面额外的大型凸起。
上图从左到右为:1.分配了反照率贴图但未分配法线贴图和高度贴图的岩石墙壁材质。2.分配了法线贴图。表面上的光照经过修改,但岩石不会相互遮挡。3.分配了法线贴图和高度贴图的最终效果。岩石看起来从表面突出,较近的岩石似乎遮挡了它们后面的岩石。
其他有用的(有些是Unity用的)
1)BRDF Lut
lut,look up table,查找表
2)光照贴图,light map
用来存储预渲染的光照信息,用于静态模型上的间接光照,解决实时动态光源效果不好且消耗性能的问题。
什么是烘焙? 简单地说, 就是把物体光照的明暗信息保存到纹理上, 实时绘制时不再进行光照计算, 而是采用预先生成的光照纹理(lightmap)来表示明暗效果. 那么, 这样有什么意义呢?
提前烘培好的给静态场景和光照的信息,光源无法移动,可以直接用光照贴图高效计算光照信息。(在一些3A大作里面,很多都是动态光,所以这个用不上),由于省去了光照计算, 可以提高绘制速度 ,对于一些过度复杂的光照(如光线追踪, 辐射度, AO等算法), 实时计算不太现实. 如果预先计算好保存到纹理上, 这样无疑可以大大提高模型的光影效果,保存下来的lightmap还可以进行二次处理, 如做一下模糊, 让阴影边缘更加柔和 。
3)环境贴图CUBEMAP
Cube map技术说到底就是用一个虚拟的立方体(cube)包围住物体,眼睛到物体某处的向量eyevec经过反射(以该处的法线为对称轴),反射向量reflectvec射到立方体上,就在该立方体上获得一个纹素了(见下图)。明显,我们需要一个类似天空盒般的6张纹理贴在这个虚拟的立方体上。按CUBE MAPPING原意,就是一种enviroment map,因此把周围场景渲染到这6张纹理里是“正统”的。也就是每次渲染时,都作一次离线渲染,分别在每个矩形中心放置相机“拍下”场景,用FBO渲染到纹理,然后把这张纹理作为一个cube map对象的六纹理之一。这样即使是动态之物也能被映射到物体表面了(虽然缺点是不能映射物体自身的任何部分)。
4)Mipmap和detailmap
首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小。直到1X1。把缩小的图都存储起来。在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出texel颜色赋值给像素。在D3D和OGL都有相对应的API控制接口。
透过它的工作原理我们可以发现,硬件总是根据眼睛到目标的距离,来玄奇最适合当前屏幕像素分辨率的图层。假设一张32768x32768的mipmap贴图,当前屏幕分辨率为1024*1024。眼睛距离物体比较近时,mipmap最大也只可能从1024*1024的Mipmap图层选取texel。再次,当使用三线性过滤(trilinear)时,最大也只能访问2048*2048的图层选取texel,来和1024*1024图层中的像素进行线性插值。
顾名思义,就是细节的贴图,原理上不用赘述,其实就是图层的叠加与混合。在这里有几个关键词,一个是Detail的Tiling值,一个是这个Detailmap需要在导入的时候设置为Mipmap,里面的参数大家可以试着调一下,至于Mipmap的原理,已经在上面介绍了。
5)Curvature(曲率贴图)
作用:曲率贴图允许提取和存储凹凸信息。黑色的值代表了凹区域,白色的值代表了凸区域,灰度值代表中性/平 地。
6)Thickness厚度贴图
作用:黑色代表薄的地方、白色代表厚的地方。它可以用于辅助制作表面散射(SSS,简称3S材质)材质,或直接扩散/反照率假装SSS的效果。 从冰面,蜡烛以及皮肤上观察到这种效果,表面看起来有一种半透明的深度感。
7)ID/Mask Map(ID、遮罩贴图)
用于选择不同的区域,进行分别绘制。
后记其他
有的引擎会置换贴图的红蓝通道,也有的会使用左手坐标系导致uv翻转的,所以不能一概而论。
碎碎念:都查完发现原来需要深入学习计算机图形学了呢……单纯的用的技巧和知道为什么用完全是两回事,但理论指导可以让实践更加顺利,实践技巧才能让理论有用武之地!
有参考的不错资料:
各类渲染贴图map汇总_wangqing008的专栏-CSDN博客
PBR流程学习笔记:从灯光到材质,工业流程中的规范 - 知乎
Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图 - alps_01 - 博客园 (cnblogs.com)
游戏资源中常见的贴图类型 - 知乎 (zhihu.com) 【强烈推荐】
3ds Max 2015 Help 帮助: 高光颜色贴图 (autodesk.com)