


(此文章于2024.02.12进行了勘误,根据PBR光照理论对贴图部分进行了重要修改,红字为新的部分)
(2025.02.10再次补充了一些内容,包括如何使用我新做的次世代shader, 以及其它一些小技巧。)
(由于专栏只能改5次,以后更新的内容会放在别的教程,我会把链接贴在置顶评论,请务必读置顶评论)
在为RA3 MOD制作纯原创美术素材时,尽管创新性和自由性远高于拼模,但常受限于制作方式和EA的区别,不能完整复刻原版画风 且耗时极长,甚至难以在RA3引擎中满足基本审美要求而不甚常用。
本文试图尽可能易懂地描述一种通过PS和MAX脚本的批量烘焙技术,在有限的(可以压缩到一小时内)工作量的基础上,制作在RA3引擎中能够满足审美需求(甚至超越原版)的贴图的新流程。
(示例模型由 红枫 大佬提供)
一、概述与回顾
目前,对于新建模的贴图方法主要有
》拉UV套用原版贴图。此方法的优势在于高度复刻原版画风,但原版图上的边缘磨损与AO等细节必然同新模型存在差异,也受限于15年前的低分辨率,且在需要引用多张贴图的情况下必然增加mesh数量 导致更加可能出现设错动画 或哈希碰撞(这点存疑)。
》substance painter与智能材质等真正的次世代工作流。此方法的优势在于精确程度有无与伦比的优势,能够实时预览渲染效果,但劣势在于工作量大速度慢,不得不用到高模,且需要一定时间学习专业技巧。(不过,即使使用了这种工作流做出了一套PBR贴图,也可以用文中所述方法重组这些通道信息,使用原版的shader模仿出接近PBR的效果。当然我不建议大家使用原版shader,因为效果很差,建议用我新做的RA3兼容版pbr shader,可以使用原版的贴图也能勉强接近次世代效果)
》在UV模板上强行平面手绘。此方法的优势在于可以立刻上手修改已经存在的贴图。劣势则在于细节往往不到位,AO等跨越几何体的细节倘若全部手绘,则严重加大工作量和出错概率。
》PS同烘焙结合法。逻辑是将3D几何体的一些特征信息 映射到平面上 作为图像去处理。此方法的优势在于结合了PS法上手快的优势的同时,使用脚本将3DSMAX的烘焙功能批处理化,减少了绝大部分工作量,增加了细节水平,统一了贴图画风,在需要同时制作一整个新阵营的模型时,效率与准确度的优势尤为明显,一两个小时就能基本出成果。虽然复杂曲面上的表现效果较为局限(不过也可修复,文末有说明)
本文着重阐述的是第四种方法。其中,MAX2021更新后提供的表面曲率计算法,未曾出现在此前社区内已经熟知的任何类似工作流中(AO或许大家已经耳熟能详,但此文将会着重介绍曲率图带来的作用)
(MAX 2023 可以直接导出游戏所需的W3X文件了,建议使用此版本)
本文假定读者对RA3 MOD的基本情况,以及3DSMAX、photoshop(可使用GIMP,SAI等任意有图层功能的画图软件替代)的软件的操作有基本了解,不再赘述基本操作方式问题。

二、实践范例
0、准备所需的软件:
》3DSMAX, 2021版本,或更高。旧版本没有插件所需的API。
(最好是2023,教程与工具在此 网页链接)
》批量烘焙脚本,下载链接见后文。有红枫帮助汉化的中文版 和 英文原版可选。
》任何有图层的画图软件,这里以Photoshop和GIMP为例。

1、建模,或找一个能用的模型
在建模过程中,为了使后续步骤中的边缘曲率计算更显著,个人倾向于将棱角部分制作的更加锐利,减少不必要的切角或细分。故而使得整体画风接近于写实风格或硬朗的科幻风格。当然读者可以根据自己的需要进行调整。也可以直接使用原版模型,但注意焊接顶点并修复平滑组。

值得注意的是,相比较于完全的拼模手段,在新建模过程中采取一定的预制件 “拼模”方式也能起到利大于弊的作用。例如我们可以将通用的一部分配件(例如轮子,车灯,挂钩,烟雾弹,天线,光电观瞄,后视镜)进行预先建模和贴图绘制,并整合到一整个贴图上,在事后的各个新单位的制作过程中直接引用。这也能显著简化每一个新单位的UV展开步骤,节约贴图面积,并帮助形成风格统一的系列感。相比较于这一便利,每个模型上提高一两个Mesh总数是可以接受的unacceptable


预制件因为比较小,可以把UV都尽可能整合进一整张贴图。

对称分割这一步亦需要注意,由于UVW的工作原理,任何预期有不可镜像的(例如文字标识)贴图内容的部分均不建议进行粗暴的对称切割。对于有迷彩的模型亦需要注意避免简单的对称分割,以免迷彩完全对称而降低观赏性。当然如果要节约时间,这些都是可以原谅的()
此外,出于性能优化的目的,完全看不见的面应当在这一步的结尾予以统一删除,以期降低不必要的性能损耗,以及防止干扰排列uv步骤。(RA3原版模型大约每个 三千~八千面,大型建筑有上万的)
对了,别忘了平滑组!这点对模型观感非常重要,哪些边缘锐利,哪些该圆润,这个有很大影响。建议全选所有面再用30度自动平滑。上面的32个数字不要管,那是手动平滑组用的,不方便操作。


2、UVW 展开与排列
在3D领域中,常常通过UVW坐标系统实现模型的特定面到贴图的特定区域的映射,来为特定面指定其引用的贴图范围。
MAX自带了几个很实用的功能,可以按一定规则 自动展开,自动切割,自动排列,几乎是一键化操作,比手动排列快得多也更少出错。

在UVW分划过程中需要注意以下几点:
》在大多数情况下看不到的面(例如炮塔底部,车底)可以适当缩小以降低无谓的面积占用,优化贴图和显存的利用率。
》具体面的朝向建议采取尽可能有规律,便于之后的绘制。摆放UV时也最好横平竖直,避免画钢板接缝等条状纹理时出现像素锯齿(UV编辑器也有功能可以自动做到这一点)
》能连在一起的面尽量连在一起,可以增强纹理连续性。UV块撕开会导致在游戏内平滑组也被撕开(不过似乎新的插件不会这样了)所以分割UV块的绿边尽量在无需平滑的锐边,例如平滑组的边界,朝下看不见的边缘。
》过度零碎的面无需单独分开,自动展开之后缩到一个角落即可。
》不同UV面不要重叠,也不要让不同UV块的边缘靠太近,否则容易串色。UV编辑器的右下角可调整自动排列时的padding,即边缘填充距离(试试0.01-0.1)。取决于预期贴图大小,最终保证在成品贴图上任意不同的UV块之间至少有4像素间隔就够了。


3、自动化烘焙
在这一步,我们已经将目标模型的UVW坐标分割到了合理要求,可以利用自动化工具进行自动烘焙了。烘焙在本文中特指将模型的部分属性依照UVW坐标的位置映射关系,以位图形式绘制到一张给定尺寸的平面图上的行为。该步骤的主要目的是通过特定算法模拟环境光照 将AO和表面曲率信息直接绘制到位图上,减少手绘工作量,便于批量增加细节。
在3DSMAX 2021及以后的版本中,自动桌引入了更加先进的“烘焙到材质”的API,从而为这一步的自动化提供了条件。本文采用了由
https://cganimator.com/simplemapbaker/
获取的Simple map baker脚本实现这一目的。
在烘焙前需要注意的是,在预期中会出现转动的部件上,需要将活动件同其他部分做适当分离,以避免AO的自动计算认为这二者直接相接,出现过黑的部分 导致游戏内看起来不真实。例如炮塔和车体之间,吊臂,可变后掠翼等。
(是否在场景中添加地板,以加黑车辆底盘和朝下的部分,取决于读者的需求。一些创作者不建议如此操作,因为平时看不见车辆底盘,而当车翻过来时,这一部分亦不应当表现太黑。也有创作者认为地面与车身侧面依然会形成明显的AO效果,加上地板可以显著提高真实度。将地板和车底拉开一段距离或许可以两全其美。)
点选中所需的模型,可多选,不要包括贴上去的预制件。不同材质(通常分为同一个单位上的哑光漆,金属,玻璃部分)建议分成不同MESH,烘焙时会自动被分在不同的图上,在PS中方便分开处理。
启动脚本后,需要按 X 键并搜索此脚本名称,才能唤起主操作窗口。
按照如图所示的建议值(或适合自己的其他数值,评论区将会详细介绍每个数值的含义)选中第一行需要的烘焙项目,这里点选“曲率图”和“环境光遮蔽”。如果你想挑战一些更有创意的花招,后文会介绍“世界坐标位置”“世界法向”等等功能的作用,这里也可以一起点选。
点击最大的那个 Bake 按钮进行烘焙。在烘焙结束窗口自动关闭后,所需的位图将默认出现在
C:\Users\USERNAME\Documents\3ds Max 2023\sceneassets\images
目录下。(如果你改变过“文档”文件夹的位置,请在新的目录下寻找。)
下图为操作窗口的中文和英文界面。




4、贴图整合和绘制

在这一步,我们已经取得了具有特定模型信息的数张位图,那么我们打开图形处理软件,将上述位图整合起来,并加以手工绘制以表现特定细节。如果之前因为材质分了不同mesh,那么每一个mesh都会有一套这样的图。
在本文中我们且以photoshop和GIMP软件为例进行说明。SAI,KRITA等类似软件亦可以使用并取得同等效果。
在RA3中,以最为复杂的载具SHADER为例,我们需要对一个单位绘制至少三张贴图来实现基本的表现需要:漫反射、SPM、NRM。
漫反射贴图即基本颜色贴图(表面材料颜色乘以AO所得),NRM贴图则为法线贴图,一般采用高模烘焙法或刻线滤镜法制作,本文暂不涉及该贴图制作方法。
SPM作为较复杂的一项, R通道指明反射高光的强度(按理来说越光滑的越强,但实际上原版的光滑度是锁死的,仅改变高光亮度)G通道在原版shader中暂无实际用途(但也有modder通过改shader使其发挥作用,我将其改为了发光,日后我也会发文说明)B通道则指明了所属色的位置和混色浓度。
SPM在我的次世代shader里有了不同的作用:红色不仅控制反光程度,还控制光滑度(光源倒影模糊程度)和金属度,
具体为:0-127 (0%-50%)为非金属,192-255 (75%-100%)为金属,而中间还有二者的平滑过渡。而0%-100%全域同时用来控制光滑度的连续变化。
当然这个方案以后会改,比如给日冕做的 PBR shader 就是用的spm绿通道作为独立的金属度通道,而红色仅控制光滑度。请期待我以后的新教程
三者均以DDS贴图的方式最终体现在游戏中,出于压缩算法与显存分配,必须采用2的整数次幂为边长的正方形贴图。(虽然1:2的长方形贴图也有成功使用案例,但会有别的麻烦)
这次我们主要绘制漫反射和SPM贴图。NRM可以偷懒

我们先来绘制漫反射贴图。
使用图像处理软件建立大小为1024 x 1024 (或 512x512)的新文件。
首先考虑本模型的底色,在原版中盟为浅蓝色,苏为绿色,帝为白色。具体可以按照自己的要求确定。该“底色”亦可以是迷彩或其他涂装。在本例中我们采用数码迷彩,铺满整张图。(实际上,游戏内视角并不适合对比度过高的迷彩,降低辨识度会在玩的时候很难受,这里单纯为了美观举例)


将AO图至于顶层,与底色亮度相乘(PS选择混合选项为正片叠底模式,GIMP选择multiply)。该步骤为贴图提供了基本的明暗关系和环境光遮蔽效果,同时遮挡住了不必要的贴图区域,使其更加明了。

将曲率图单独打开,拆解通道。其红色通道为凸起棱角部分,绿色通道为凹陷部分。蓝色通道无信息。黑色区域为没有凹凸的平面。颜色越亮代表凸起和凹陷的角度越锐利。

将红色和绿色通道分别以灰度形式(PS 右键提取通道,GIMP选择 颜色-分量-提取通道/分解通道)复制到主文件的AO图层之下,底色图层之上。混合模式取决于需求,这里列举一种(大多数风格化游戏常用的方式):边缘磨损处发白,凹槽处发黑。
(基于PBR理论的勘误:
如果你要让磨损处露出金属,那不应该发白而是发黑。事实上金属表面几乎无法造成物理意义上的漫反射, 接受的所有的光照除了被菲涅尔效应或自身吸收光谱损失的,其余能量全部分配到了specular reflection,也就是高光。
这导致了金属材质在漫反射图上应该很暗。除非脏了或锈蚀了,那按照非金属算。
且由于specular reflection几乎不受ambient occlusion影响,金属部分理论上不应该被AO覆盖。尽管实测结果是盖不盖没什么区别,可能本来就够暗了)
但是!如果你使用了pbr shader, 那么主贴图不再仅代表漫反射,也会控制金属的反射光谱和菲涅尔效应,所以不用在主贴图上加暗。
这种配色能在游戏内错综复杂的光照下最显著地强调3D形状(但其实并不符合物理)

凸起棱角图层使用“仅变亮”或“相加”混合方式。而凹陷图层使用“减去”,也可整体反色之后正片叠底。若颜色过渡不够柔和或不够锐利,可调整亮度曲线,直到满意。

(当然,如果你想要风格再写实和多样化一点,例如边缘和角落有棕色锈迹等,可以尝试直接将凹凸图层设置为alpha蒙版,然后用完全另一张材质图进行混合,中途还能添加噪波图或者用随机刷随便画两笔,使得磨损看起来更随机更自然。这个属于类似智能材质混合的高阶玩法)

至此,我们得到了具有明暗关系和边缘增强的基本漫反射贴图,如果你有足够多时间,更多细节以及彩蛋可以按照自身要求进行手动绘制,此处不再赘述。

在漫反射贴图制作完毕之后,我们可以以同样的素材为基础制作SPM贴图。
我们新建一张大小相同的图层(或新图像),填充深红色(具体红色多亮,取决于你想要表面的反射度有多高。这里颜色值为42.0.0,大约是哑光漆效果,如果是抛光金属则为200.0.0)。
将两个曲率凹凸图层复制过去,
AO依然为正片叠底(multiply)SPM里不应该有AO
(基于PBR理论的勘误:
specular reflection大致接近镜面反射,因此几乎不受AO影响,无论光线来自阳光的平行光源还是天空盒。SPM里不应该有AO。
然而,刻线 钢板接缝等地方依然应该把SPM涂黑,因为这些并不能简单拟合为AO所造成的:这些更接近理想黑体的开口处,吸收所有方向的光而不造成任何反射,无论是diffuse还是specular。这些地方的SPM和主贴图应该都是黑色)
将曲率的凸起图层添加颜色叠加,混合模式取决于需要。这里示例的思路是,当边缘的哑光漆被磨损后,露出高反射的金属材质,因此边缘处应当反射度增加。(当然也有可能是抛光金属被磨损导致反射度减少,请读者自行选择混色方式)

如此,我们获得了带有边缘增强的反射强度图。
另外,在玻璃处绘制纯红色,在漫反射接缝处绘制黑色,在接缝两侧绘制略亮的红色,将文字标语等处的红色降低,也可以增强细节。接缝细节可以直接取自前一步漫反射所用的刻线等图层。如果时间不够,只处理玻璃部分足矣。
所属色(又称阵营色):在需要的部分绘制蓝色。
一般阵营色也被认为是哑光漆,所以此区域可以将反射度适当降低。另外,由于原版阵营色混色算法为:“阵营色x漫反射x2 与 漫反射 之间的线性插值”(插值权重为spm蓝色值)所以spm蓝通道绝不应该有AO。也并不需要在接缝纹理等黑色部分取消阵营色(当然可以一起涂黑,结果没什么区别)因为如果这块区域漫反射是黑色,算出来依然是黑的。建议将阵营色区域作为一个单独的图层覆盖在AO图层之上。
(为了避免算出来最终漫反射强度超过100%而出现奇怪光污染,有阵营色的区域请将主贴图亮度降到50%) 我的新PBR shader 不用怕这个问题
阵营色哑光漆当然也会受到边缘磨损影响,可以使用凸起图层(之前提到过的曲率图红通道)亮度相减,制造阵营色涂层在边缘处的变淡效果。

至此,我们成功得到了和漫反射贴图搭配的SPM贴图。
(基于PBR理论的勘误:
这里强调一下,根据能量守恒定律,漫反射能量+镜面反射能量+被吸收损失的能量 不应该超过在单个像素上光线入射的总能量。原版shader没有根据这个自动修正,所以你要自己调整,SPM越红 主贴图应该越暗。
现实中只有 “极度光滑的浅色绝缘体” 比如陶瓷和塑料,才能同时拥有很强的漫反射和镜面反射,或许这就是原版贴图塑料质感的来源。)
(不过,我的新PBR shader对此有自动修正,可以忽略这个问题。)
NRM:新建一张大小为16*16的文件,只填充淡蓝色(127,127,255)也就是(0.5,0.5,1.0)作为迫真法线贴图。这当然是偷懒的方法,不过游戏内效果依然很整洁。
强烈不建议用主贴图粗暴地加上法线滤镜,这个方法常常被初学者滥用但效果很混乱。如果你想制作法线图请尝试 高模烘焙 或刻线加滤镜。对法线图的压缩同样有特殊要求,比如DXT类压缩时,蓝通道要全部涂满255可以避免压缩时出现奇怪方块(很遗憾RA3并不支持DXT5NM格式,但你可以用 RGBA 5551 格式)如果要搬运别的游戏的贴图,请务必注意那些游戏是否使用openGL,要注意绿通道可能是反的。RA3使用的也不是标准 DIRECT X, 而是它的反转。看起来应该是光照从左上角打过来。

至此,贴图绘制结束,可以将其按照一般流程导出到游戏中了。不要忘了合并对称复制后的模型,然后在MAX里预览效果。

额外篇章:贴图的压缩与存储
这些老游戏只能用DX9的API, 而且不支持流式加载,贴图文件通常不能太大(否则占用显存带宽直接加载不出来,不仅是掉不掉帧的问题而是游戏里直接贴图消失,你电脑上没事不代表别的玩家没事,别拿着个RTX3080在那“俺寻思没事啊”)
也就是说你得特别注意贴图的压缩方式与大小,另外不要忘了勾选生成MIPMAP,这个能帮助抗锯齿,还能让视角比较远的时候只加载更小的贴图版本。
DX9支持的格式里,效率最高但最容易糊的是DXT1(又称BC1),以一张512X512的贴图为例,这个选项只要170KB。它是有损压缩,对颜色变化较多的地方容易糊,但一般还行,支持1位透明度通道,只能表现全透明和全不透明。
如果你需要半透明,建议用DXT5(又称BC3),这个在RGB部分和前者一样,但透明度支持柔和渐变。文件大小也翻倍了
法线图建议用RGBA5551,法线图对颜色精准度要求很高,因为它记录的是角度
比较小但对颜色要求高的特效贴图也能用这个,但如果要求更高些,可以用RGBA8888无损图
只要单色黑白灰的图,可以用L8, 或者L8A8(一个亮度通道加一个透明度通道)
这些格式应该在PS或者GIMP导出的时候就选好,不要用SDK压缩,那个支持的格式很少

三、进阶技巧
在simple map baker 的操作面板中,可以看到“世界坐标位置”“材质ID”等其他烘焙选项。
》“世界坐标位置”可以将贴图上的每一个像素 视为对应模型3D空间中的一个点,算出此点的XYZ位置,并记录为RGB颜色重新画到贴图上。通过这一点,我们可以很方便地在PS里选中“某一坐标区间”的部位,例如:蓝色较暗部分代表Z坐标较低,是车辆接近地面的位置,在这个区域就可以贴上一张尘土材质(注意渐变融合)做出这辆战车久经沙场的观感。若为两栖单位或舰船,则可以在不同高度贴上红色防锈漆与水渍。(下图为沾了一屁股沙子的车)


》“材质ID”则会将MAX里已经有材质的区域,按照材质种类分成RGB(很遗憾每次只能分几种)优点是相比于直接拆MESH,这个方法允许不同材质的几何体 在融合穿插地方 将互相的材质模糊融合。
》“世界法线”则是每个贴图像素在3D模型对应位置上的表面朝向(做过RA2 VXL的朋友应该已经耳熟能详了)用这张图,我们可以方便在PS里选择“近似某一角度的所有区域”。如果你要给建筑物做积雪贴图,想要同时在PS里选择模型上所有“朝上和近似朝上”的区域涂白,这是个理想的方法。
》另外,如果你没有急着合并图层,那么恭喜,PSD文件留着可以给以后其他模型使用,只需要按类别替换新烘焙出来的贴图即可。想要换一个风格的涂装而不影响其他细节,也是很容易的。


四、总结
通过上述流程,我们终于得到了一套可堪一用的贴图,在RA3引擎中的表现亦差强人意(也有人说瑶瑶领先)在有限的工作量约束下,这一结果是相当满意的。

但也能看出本方法具有以下的缺陷:
》未考虑如何制作法线贴图。明显可见的是,我们实现了通过漫反射和高光反射强度的配合,对个别凹陷和凸起处做出了一定的表现效果,但是没有法线贴图的配合,这一效果始终无法达到专业水平(用作手游素材尚可一战)当然,RA3自带的着色器 以及dds常用的压缩算法,对于法线图的表现方式只能说本来就相当糟糕,我自己并不喜欢在RA3MOD中用法线图。
》对复杂曲面作用有限。考虑到max所使用的采样算法的局限性,在复杂曲面上往往会取得过于夸张的曲率信息。这点可以通过操作窗口上 降低“采样半径”,提高“起始阈值”,或整体放大模型,并对不希望视为棱角的圆滑边缘 进行曲面细分或多重切角,可以大致修复。
》难以保证完美复刻原版贴图风格,只适合整个阵营都是原创的作者。已经证明可以高质量的复刻原版画风

综上所述,使用与否还取决于各位读者的考量。笔者不是计算机图形学或美术专业出身,大多数描述基于自己的理解。文中若有出错,还请大家及时指正。

特别鸣谢(排名随机):
(本文的合作者,从7月开始通过反复实验 终于将我的这套工作流从“理论可行”打磨成“简单高效”,并用一天一个新单位的产能震撼了整个RATMOD群,,,文中所使用的截图示例都是由🍁大佬提供的,也写作了本文的主要框架,某种意义上🍁才是这篇教程真正的作者)
CHANGSOO EUN,simple map baker 脚本的作者
(将本身操作繁琐的新功能简化进一个控制窗)
(“我也要成为 technical artist!”)
(反编译shader的大佬)
(在对RA3MOD以及相关3D美术风格的理解上提供了不可或缺的建议)
chatGPT,github copilot, microsoft learn