RA3贴图教程(施工中)
3926字约13分钟
2024-12-17
零、导论
RA3的贴图文件大致分为单位贴图、UI贴图以及效果贴图三类。
我们可以做一个简单的思维导图来简述这种分类关系:
本文将持续更新,逐步将上述结构中的每一块都讲清楚。
本文并非图形学专业教材,对于图形学概念仅仅做简单的介绍并分享感性认知。如有错误请您联系作者帮助修改,感激不尽。
下面首先解释一些基本概念问题。
贴图(Texture)
UVW系统
如何分UV?
我们已经在上文学习到了UVW系统的基本概念,那么现在我们需要学习如何去分RA3的mod模型的UV。
我们为什么要分UV呢?因为我们需要
- 让每一个面的UV在比例、形状上和该面相一致。不然你画东西就会被扭曲。
- 让应当连起来的面的UV连起来。不连续UV也会导致边界顶点倍增增加性能负担!,此外相链接的面的UV也相互连接会极大便利贴图绘制。
- 调整面的UV角度,减少锯齿并且便利贴图绘制。
可见除了顶点节约和避免扭曲之外,分UV最大的目标在于便利人的贴图绘制。本教程采用的PS工作量无法在3D视图绘制贴图,故而必须尽可能地简化、明晰化2D的UV和3D的网格的对应关系,需要符合直觉,符合手感,符合习惯。
这一点同采用SP的工作量存在根本区别。因为SP不受到绘制方向和排布的重大影响,只要你不该分开的UV边界没分开他就基本上问题不大。
那么我们如何分一个适合RA3PS工作流的UV呢?下面以载具贴图为例简介分UV的大致方法和步骤。 - 将所有需要用一张贴图的模型全部附加或坍塌为一个。然后再分离所有的对称部分。注意!需要写字的部分不能认为是对称部分。
- 执行UVW展开修改器,面层级全选,按照角度阈值自动展开,全选向右移动出UV范围。
- 以车体为核心,选中车体顶面挪动到UV有效区域的左上角。车头方向向下,选定缝合车的首下部分。将车的两边移动到车体顶面的右侧,将车体的一侧UV进行镜像,和另一侧并列。其他面按照类似逻辑进行移动。
- 看不见的面可以极大缩小堆在一起。
材质
通道
烘焙(bake)
环境光遮蔽(AO)
环境光遮蔽用来体现环境光(天光,或者用于增强画质的虚构的环境光)影响下,物体上的每一个点是如何受到旁边的结构影响从而被打上阴影的。可以被看做光线打到每一个点的能力的数值。100(纯白)意味着完全可及,0(纯黑)代表完全不可及(例如被完全包裹在别的结构内)。
AO的实际效果在于让渲染结果之间看上去有光影的平滑过渡,改善画面效果。
RA3原版 不具备 实时计算环境光遮蔽(如SSAO)的能力。对Shader的修改使其能够实时渲染则过于复杂,在可预期的未来亦不太能够实现。
因此,在原版Shader体系下最有效的方法在于将AO进行预先烘焙,然后直接绘制在漫反射贴图上。这种做法称之为“PBAO”或者“预烘焙环境光遮蔽”(英语:Pre Baked Ambient Occlusion)
有幸,NordLicht制作了适用于RA3mod的开源PBRshader,在这一新的shader下您将可以将烘焙出的AO贴图单独输入引擎,让引擎自己计算AO的结果,从而不用将其绘制在漫反射贴图上。但是需要注意,这仍然是一种PBAO,而不是实时AO,因此AO是静态的,在不同的游戏对象之间也不会产生AO。
漫反射贴图
漫反射贴图用于表现出物体的反射和表面颜色。其 理论上 和绘画中的固有色概念接近。
其表现物体的纹理、固有色。表现物体在白色常态阳光下呈现的自然色彩。
理论上漫反射贴图就该当作固有色去画,但是由于RA3的Shader功能有限,为了更好的游戏内效果,您将需要在漫反射贴图上烘焙(绘制)一部分光照效果,加强游戏中的表现。
反射强度贴图
一、单位贴图
1.1 载具贴图
载具贴图采用Object类Shader,拥有三张贴图:
- 漫反射贴图
- SPM贴图
- NRM贴图
我们将分析三张贴图的作用,并介绍一种利用Photoshop和3DSMAX2023搭配烘焙脚本的贴图制作方法。文中颜色表示方式为RGB排序。
1.1.1漫反射贴图
漫反射贴图用于指示模型上的基本颜色(在金属部分按照PBR原理是无效的,但是实际使用中一般忽略这一问题)。
在RA3的原版shader中我们需要同时将漫反射、AO、曲率造成的影响、次网格细节中不受光照影响的部分全部合并在这一张图中。
采用PS和3DSMAX的AO和曲率烘焙进行制作的基本原理在于通过不同混合模式的多图层叠加合并。
其中,通过有描边、阴影、内发光的白色内容图层模拟次网格的高度修正,我们称之为高度调整图层。
一种制作流程如下:
- 新建PSD文件,在最底层填充需要的基本颜色或基本纹理(迷彩等,但高度不建议采用强烈对比的迷彩)。
- 烘焙AO和曲率。将AO图层叠指顶层并指定为正片叠底。如果需要更强对比度可以将其再复制两份。
曲率贴图的烘焙中需要合理调整脚本配置,使得结果中的红色部分较好地拟合UV中的凸出部分,而不大范围地出现红色,也避免红色部分过窄。
一种预设的参数(感谢NordLicht)和脚本中其他的参数用途参见下图。
将曲率中的红通道提取为独立图层并指定为叠加,将绿通道提取为独立图层并反向,指定为正片叠底。这两个图层的透明度自行调整。 - 在AO图层下层新增一个图层,命名为凸出1。指定混合模式为变暗,而后指定黑色外阴影(光照为从贴图平面法线方向的反方向模拟以避免干扰游戏内光照计算)和1单位黑色描边,并进行内发光,大小视情况而定,以模拟小的凸出部分细节。其中边缘阴影用于模拟在夹角区域的光照衰减,内发光用于模拟边缘的磨损。第一个凸出图层可以考虑完全填充,并且用1像素100硬度橡皮进行勾线,模拟刻线部分(刻线用于描述模型的内部分块。出于对RA3的原版、其他素材的适应,我们的刻线相对于常用的刻线手段又深又宽)。视情况采用1-3个凸出图层并采用合适的设置数值。铆钉部分可以单独使用一个凸出图层表示。
- 新增图层命名为凹陷1。指定外发光和内阴影、内描边。用于模拟凹陷。其他用法同上。一般而言如果在第三步采用了首个凸出图层模拟刻线的画法,模拟凹陷可以直接在凸出1中进行区域删除以模拟。大多数情况无需使用凹陷图层。
- 在AO的下一层添加一个噪声并指定为正片叠底,透明度自拟。用于模拟材质表面的污渍划痕。
- 在高度调整图层的下层,基本颜色的上层添加颜色修正和贴花层。此处可以考虑使用蒙版调整颜色,用一个组来规划贴花。采取适当的混合模式和透明度来实现最佳贴花效果。颜色层中需要添加一张蓝色或者其他颜色的图层以模拟玻璃部分!
- 在颜色修正层上层添加一张纯红色图层和一张纯白色图层(可以考虑使用带纹理的红色、白色),成组,添加蒙版以绘制所属色区域。用红色预览,在导出前隐藏红色图层以导出白色所属色区域的漫反射贴图。
- 保存并导出PNG文件。
这一部分的高度模拟思路感谢遗忘针对ZH的贴图教程的启发。
1.1.2SPM贴图
原版的SPM贴图是拥有RGB三个通道的一张贴图。
SPM贴图猜测是“Specular Map”,也即高光贴图或者反射贴图的简写。但是实质上在原版游戏中其承担了两个职能:
- 红色通道:高光反射强度贴图。
- 蓝色通道:阵营所属色混合强度
此外: - 绿色通道:猜测可能原定作为自发光通道,但是实际上没有任何作用。原版有一部分贴图绘制了这一通道,但是无实际效果。
在实际绘制中,只需要考虑前两个通道即可。如果使用了改进并利用了这一通道的SHADER,参考蓝色通道。
一种基于1.1.1的漫反射绘制方法的SPM贴图绘制方法参考如下:
- 新建PSD文件,尺寸同漫反射。底层填充为42,0,0或者其他的暗红色,以提供基本反射度数据。这一数据按照需求而定。
- 将1.1.1中的曲率、高度调整图层全部直接复制到该文件中。CTRL+G成组,对组添加一个255,0,0的100%颜色覆盖,方式为正片叠底。
这一步将1.1.1中的所有边缘磨损转化为更高的反射强度,将凹陷和高度修正导致的凹陷转化为更低的反射强度。 - 将AO图层从漫反射复制到SPM顶层。(争议性:这一步在PBR理论中是错误且没有必要的。但是在RA3的环境中效果还不错,而且能够精简SPM贴图的外观,并且对阵营色混合进行修正,故暂时保留。)
- 新建一个纯蓝色图层(0,0,255),添加一个蒙版,将1.1.1中第七步的所属色区域的蒙版复制过来,以表示所属色映射区域。
- 新建一个纯红色图层(255,0,0),添加一个蒙版,将1.1.1中第六步的玻璃色区域的蒙版复制过来,以表示超高反射度区域。
- 保存并导出PNG文件。
1.1.3NRM贴图
法线贴图用于指示模型上小于网格的起伏细节,其基本原理是对像素的法线方向计算进行修正,以在简单的模型上表现出更多的细节。
法线贴图是在三个通道进行光照模拟以记录局部法线修正数据。这一数据难以通过手绘方式绘制。
一种常见方法是利用 高度图 计算法线图。高度图通过一个灰度图像记录每一个像素对应的网格上的次于网格本身的高度数据。这一数据在使用1.1.1中的漫反射贴图制作方式时是很好获取的。因为1.1.1中我们通过高度修正来绘制了大多数细节。
一种制作流程如下:
- 新建和漫反射贴图同等大小的PSD文件,底图填充百分之50白色,称之为基准高度。
- 将漫反射贴图制作中使用的高度修正图层(包括铆钉)全部复制到新建的PSD文件中,并清除所有图层样式。
- 自下而上进行排序,以凹陷-突出1-突出2……突出n-铆钉的顺序进行排序。
- 对高度修正图层逐个进行颜色叠加,100透明度,正常混合模式,凹陷填充比基准高度更黑的一个颜色(如百分之40白色),突出图层(包括铆钉)逐个累加更亮的颜色(如65%,75%,85,95%)。
- 保存文件,导出PNG,并缩放至原尺寸2倍。
(在这一步中可以考虑进行一定的高斯模糊以圆滑高度差边缘。) - 使用在设置中 反转法线光照方向的CrazyBump加载上一步缩放后的PNG ,以默认参数或其他参数保存法线贴图。
(在这一步中可以将法线贴图的蓝色通道填满,以优化最终效果。) - 将法线贴图缩放至原尺寸。优先采用线性缩放。
- 以RGB888格式转化为DDS并使用。
反正我做法线图的思路就很简单
画个高度图,直接从刻线图层和UV框架板取材
放大2-3倍,高斯模糊一点点
上滤镜(滤镜的采样最好是3x3或者5x5,这样不需要放大很多倍,5x5 7x7 的采样甚至可以不用放大了)
然后蓝通道涂满255,
红绿看看有没有反,老DX9游戏应该给人感觉光从左上角照过来,但标准DX法线图其实应该感觉光从右下角照过来。反了就得针对性反转通道
然后缩小回原来尺寸,用线性缩小
PBRshader我做了好几版,有分离AO通道的,有合并的,兼容原版的那个版本是没有单独AO通道的,可以直接画在漫反射上
所以曲率是可以叠在漫反射里来给边缘做减淡给凹陷做加黑
新shader:
漫反射贴图:无变化
SPM贴图:
R:理想黑体图层
G:自发光强度
B:阵营所属色混合强度
NRM贴图:
R: 法线
G: 法线
B:涂满
第三贴图:
R: 曲率突出
G: 金属度
B: 粗糙度
新shader方案2:
漫反射贴图:无变化
SPM贴图:
R: 粗糙度
G: 金属度
B: 阵营所属色混合强度
A: 自发光
NRM贴图:
R: 法线
G: 法线
B: 理想黑体图层
A: 曲率突出
新shader方案3:
漫反射贴图:
RGB: 记录非金属的漫反射颜色,也记录金属的反射光谱颜色,也叠了AO
A: 透明镂空
SPM贴图:
R: 粗糙度反转
G: 金属度
B: 阵营所属色混合强度
A: 自发光反转,挖空的地方为发光
NRM贴图:
R: 法线X
G: 法线Y
B: 理想黑体图层,涂黑就是刻线
A: 曲率突出(取消)
那么AO图层放哪里?