以制作红警2的模型贴图入手,论对模型的贴图修改
ICE Lab Copyright 2019,All right reserved.
前排感谢ier33(B站ID:ier33)和他群里可爱的管理员米兔琉璃对我在模型认识以及有关软件扩展上的有关帮助,感谢caideyipi/Abstract 带数-质/带明星(B站ID:人的evian)在不同建模软件上有关贴图数据的相关帮助,感谢我的模型来源者们的建模工作。
前排提示这篇专栏写了什么
这篇专栏一共11211字
如何制作shp的自定义pal色盘以及色盘的合适设置
如何在渲染器不给力的情况下调整贴图本身的效果
如何简单地尝试手绘贴图与自展uvw贴图
Alpha贴图到底怎么用,怎么让3dsmax中的模型拥有有Alpha层的贴图,Alpha贴图的设置注意事项
序列贴图的展开脚本spriter的使用说明书
包括其他渲染器的简单介绍等等的杂项
在上次专栏的有关内容里,我便已经简单提到了一些有关模型贴图的相关重点,包括对从vse里导出的obj文件的贴图做一些基本上的修改。而对于更多的人来说,vxl模型在游戏里的运用是比较直接的,抛开制作图标的需求来说,其实vxl类文件的使用并不那么需要有关贴图更改的相关知识。那么假如我们需要制作一些shp类文件(例如动画,机甲,建筑,飞船等)来丢进游戏的话,贴图更改的精美与否就成为了这个模型在游戏内效果的基本了。下面我简单分享一下关于模型贴图的我的一些心得体会,以及制作一些好的shp所需要的有关经验。
壹:问题篇
一.shp的本质与制作shp时可能存在的问题
要想了解红警2中图像的制作方式,就一定要了解shp文件的本质。shp的本质其实就是一种色盘分离的类似于GIF的一种记录了许多帧与每帧的像素点颜色号码的文件,也就是说,shp文件假如没有对应的pal文件作为引导的话,单独一个文件是无法显示出任何图像效果的,我们看见的shp所展现的图像效果其实本质上是因为shp文件找到了其对应的有关pal文件的相关颜色然后将这种颜色显示在对应像素上了从而输出了视觉效果。用通俗易懂的话来说,shp文件就是一个没涂色的填色游戏,每个像素上都有一个颜色号码,而号码与颜色的对照表就是pal文件,游戏软件会将正确pal的颜色对照表与shp的像素颜色号码所对应起来,最后画好一个填色游戏来给玩家看出视觉效果。

那么很显然,shp的任何东西其实都不是3D的,也不存在任何3D效果。所以说,任何在红警里出现的shp类图像,是永远不可能与现代3D游戏一样有所谓的空间光影效果与多贴图的。这也是将模型导入3dsmax以后再丢进红警里以后不加处理的一个直接弊病——多贴图效果无法合理展现,从而使原来在3D游戏里显示炫酷的模型在3dsmax的渲染器下变得平淡无奇。这也是3D转2D的第一个问题,贴图不能正确使用展现效果。


第二个问题就是pal文件本身了,pal文件到底是什么?pal文件对于shp文件的意义何在?我们以红警最常用的unitsno.pal来举例说明,下面是关于这个色盘的一张全图。

我们可以观察到,pal文件是一个由一共256个颜色组成的32*8的矩阵。pal的组成与矩阵类似,都是使用竖向来排布顺序,第一个颜色号码为0,1号色在0号色的下面,32号色在0号的右边,即从上往下,从左到右。pal的颜色在游戏里所读取的规则是这样的,0号色为背景色,在游戏中自动被删去成为完全透明,1号色为影子颜色(TS,RA2中为12号色,但是似乎没太大影响),即在有影子的shp中(单位/建筑,Shadow=yes的动画),在shp的后半部分帧中所拥有的一号色会在游戏里换成半透明的黑色作为影子。2-15/240-255号色恒定亮度色区,其颜色在游戏内的表现与环境颜色无关,也就是说地图中设置的颜色与光照所叠加的滤镜不影响这些颜色的RGB显示数值。16-31号色为单位所属色区,即假如shp中拥有这个颜色区域的建筑/单位/有所属方的动画(Ares)在游戏中显示,该区域的色调会被换成使用者所属色,且明暗效果从上至下逐渐变暗。这个意味着什么呢?举个例子,假如你的模型中拥有恒定的红色,你不想让红色随着所属改变,但是你将你的帧序列使用默认的色盘来渲染的时候往往ImageShaper或是Shp Builder会把你的那块红色自动归为16-31号色中的红色,这个时候往往在制作中我们就需要去将所属色变成一个与模型其他部分都不一样的颜色(比如一般选择的纯绿色系)然后再使用一个将所属色系改成了那个不一样的颜色的色盘来进行导入,这样你的红色就会全部变成色盘内其他地方的红色而不会随着游戏更改所属色而改变。(动画采用的anim.pal色盘在游戏中一般没有所属色,并且假如你使用自定义色盘的话,你的16-31号色也会被强制换掉,哪怕你写了Remapable=no)
pal文件跟shp文件在游戏内显示是密不可分的。换句话来说,要想模型表现力强,一个自定义的色盘就成为了非常重要的一环。这点我将一会再提到。
二.贴图的本质与渲染器的局限
刚刚的部分里我简单提到了多重贴图的问题,那么对一个模型来说,什么是多贴图,多贴图意味着什么?多重贴图会带来多高的效果提升?这也是一个非常重要的问题。
首先第一点就是多贴图的效果提升到底在哪,我以我导出的一些星际2的模型为例,来说一下我对于多贴图的理解。
首先一个非常完美的CG级模型,一般来说都会有这样四个比较常见的贴图。
漫反射纹理贴图,也就是diffuse贴图,diffuse贴图一般来展现模型的主要颜色与纹理的,也就是说一个模型的原来颜色与细节是咋样那么其diffuse贴图就会是咋样。
镜面反射贴图,也就是specular贴图,specular贴图表现了这个模型在高光情况下模型自身颜色的极值(不包括光斑遮罩或者是金属镜面反射),方便理解就是最亮的情况下这货能成为咋样spec贴图就是咋样。当然这只是通俗理解。
凹凸程度贴图,也就是normal贴图,normal贴图也就是传说中的法线贴图了,一般只要是接触了模型的都会对这个贴图有所耳闻。normal贴图的最重要作用就是在平面上用贴图的明暗效果来模拟实际表面的凹凸,从而能做到在不增加面的情况下对细节做出更多的凹凸效果,为计算机处理减轻了负担。法线贴图一开始是黑白双色的2D法线贴图,后来出现了RGB三色的3D法线贴图,RGB三色分别代表了空间中的XYZ三轴,该点的RGB值也就代表了该点在空间上的模拟坐标。
自发光贴图,也就是emission贴图,自发光贴图就是有些模型上光效的直接来源。比如一个模型的某个部分有蓝色背景自发光,这个部位多半就是emis贴图在起作用。当然,如果你要做一个耀眼的灯泡的话,除了灯的发光部分有自发光贴图以外,背景或者表面都会有额外的光线贴图(一般都是半透明的放射状贴图,包括灯周围的彩虹色光晕其实跟中间的亮度是同一张图,一般贴图的巨大亮度都是加了一些像是滤色一样的混合模式而已),这就暂时不详细展开了。
当然除此以外,有些模型为了表现力更强会有更多的贴图形式,比如gloss贴图啊ao贴图啊Alpha贴图啊等等,我在此就不详细赘述了。总之根据我的有关观察,由于3dsmax的vray似乎不能使用正交视角与边缘锯齿化处理,而使用默认线扫描器渲染时,其多贴图并不能非常准确地表现出来,因此很多时候我们都需要把贴图拿来进行处理,以便得到更好的效果。

当然,我们如果只是简单使用模型颜色来上贴图的话,我们一般来说只会使用diffuse贴图,那样也就不能100%表现出一个模型的美感之处了,诚然,一个模型的最终效果与其色盘紧密相关,但是假如帧序列阶段都没有一个好效果的话,那么其他想法只能是一张废纸。
三.贴图缺失或是表现力不强
目前来说,由于许多人对游戏表现力的渴望,许多人对3dsmax的学习都是从使用别人的模型开始的,当然有时候哪怕是专业建模团队在人手足够的情况下模型设计确实是与动作设计的两部分是分开的。不过过于依赖其他人的模型有时候会出现贴图缺失或是不匹配的情况,这时候可能需要你去手动匹配贴图或是自己制作自己需要的贴图,这也是一部分人觉得很棘手的情况。

或者是有些时候你的贴图确实是完好的,但由于未知原因模型的uvw贴图坐标出现了偏差,导致了模型贴图位置与情况不匹配,让模型变成了不应该有的样子。
再或者,模型本身贴图完好,但许多贴图依赖于渲染器内置的有关光线效果的渲染处理算法,贴图缺少一些修饰性的效果,从而不能达到令人满意的程度。
上述三个问题是许许多多shp制作者可能会有些头疼的几个代表性问题。下面我就针对上面三个问题来提出一些自己所想到的解决方法与有关看法,下述想法以抛砖引玉为主,如有错误烦请指出,本人不胜感激,并对所有指导愿闻其详。
贰:解答篇
一.自定义色盘的制作
自定义色盘的制作我们一般采用如下的方式:
1.找出shp里所需要的所有颜色
shp根据色盘的指引来确认像素的具体颜色的方式,叫做索引色。提到索引色或许很多人听起来有些陌生,但是在我上一篇专栏里有提到过,索引色的本质是一种图片模式,换句话说只要任何一个图片或者类gif动图采用了索引色,其文件内部其实都拥有一个色盘。而这个色盘上记录了这个文件中所出现过的所有颜色,这也正是一个自定义色盘的shp对应的pal所需要的颜色组。

那么如何查看索引色以后的图片到底有哪些颜色呢?PS也提供了一个非常便捷的操作来方便使用者查看颜色,这个功能叫存储为Web所用格式(注意,我截图所使用的PS CS6版本的一级菜单里其还是个单独按钮,但新版PS CC已经挪到了二级菜单并标注为旧功能了,请注意寻找)

快捷找到整个帧序列所用到的所有颜色意义何在呢?其实我们找到了那张色盘图,色盘图里所拥有的所有颜色也就是帧序列里所拥有的,我们将其截图保存为索引色的pcx,那么XCC Mixer就可以通过这个pcx来导出一个基本的色盘,这样也就是制作自定义色盘的初步步骤了。

当然,制作自定义色盘的步骤远没有这么简单,前面也提到了单位色盘里16-31号色会被强制换成所属色的问题,那么假如你不想让你的模型在不想要所属色的地方出现所属色,你就需要来手动修改所属色在色盘中的位置,以我个人比较习惯的亮绿色为例,因为我要把所有出现的亮绿色都换成所属色,所以我的自定义色盘里的绿色组就占据了16-31号色的位置,而如果你不想让你的模型在不该发光的地方出现不同于周围的亮度,也请尽量将1-15/240-255号色空出来或者使用你想要发光的颜色来替代它,不过假如迫不得已颜色不够用的情况下,这个区域的颜色也可以用来放置普通颜色。





这部分虽说是最基础的部分,但是要想正确理解制作一个shp的含义,这些理解与操作的掌握是必不可少的。
二.对于原有贴图的调整
下面我来说一下有关多贴图的方面。首先应该所有使用过3dsmax人都知道把材质拖动到3dsmax的模型part上会直接将贴图附着上去,打开3dsmax的材质编辑器,你可以观察到在每个材质的下方都有几个子列,包括明暗器基本参数,_____基本参数(取决于你明暗器选了什么类型的参数,比如Blinn/Phong/金属/各向异性等等),超级采样,贴图等等。

打开贴图子列,假如你附着了一个贴图到模型上,你又用吸管去截取了这部分模型的贴图的话,你会发现你拖动上去的贴图变成了默认的轮廓贴图,也就是漫反射部分的贴图。

但是很明显,贴图子项里的选项远不止漫反射这部分,我们可以看见镜面反射颜色,镜面反射级别,透明度,凹凸,自发光,光泽度等等贴图右边的按钮全是空白。点击那些按钮并选取位图作为贴图,假如你拥有多贴图的文件的话,你便可以把你拥有的贴图来作为你所需要的贴图了,贴图旁边的数字一般是贴图透明度,数字越大这个贴图对显示效果的作用越明显,数字越小这个贴图对整体的作用越不明显。

一般来说,我们最想要显得明显的两个贴图就是自发光贴图与凹凸贴图了。凹凸贴图的默认数值是30,自发光则为100。当然,你要想自发光得到很明显的效果,只在底下的地方加入自发光贴图是不够的,还需要在上面的发光部分里手动点击后面的按钮加入自发光贴图并将其透明度数值调高,这样才能得到一个完美的效果。

此外,贴图的数值大小也是支持K帧的,所以假如你想要整体调整贴图透明度时,请不要将下面动画部分的自动选为选中状态,那样会让你的贴图也随着帧的变化而变化,而换句话说,假如你要做自发光区域随时间而闪烁的效果的话,你也可以使用自动来K帧。

但是问题来了,假如我们想要制作一些模型包里缺少的贴图怎么办,首先有人会想到制作法线贴图来提高模型凹凸度,想要制作法线贴图的刚需是你拥有一个精度很高的模型但你需要在一个面数不多的场景里获得这个效果,换句话说就是假如你的模型的并未同时拥有低模与高模的话你将无法制作法线贴图。

制作贴图的核心就是给贴图的修改器里添加uvw展开修改器,假如你用别人弄好的模型的话一般来说影响uvw的重复面重复边问题应该是被很好的解决了的,所以你添加了uvw展开以后,直接打开uvw编辑器,你应该可以看见所有的贴图彼此之间不重叠,而且边缘默认应为绿色。



当然,法线贴图不到一定条件不能渲染并不代表自己渲染贴图就没啥用了,我在补齐上面截图里女孩的脸部的时候就使用了LightingMap贴图。目前为止根据我的了解这个贴图就是根据你目前的光效阴影给你创建一个阴影贴图,然后在PS里与原贴图进行正片叠底组合时可以在少用一个必要灯光(我个人喜欢节省天光)的情况下用贴图达到那个灯光的效果。制作步骤如下:
首先给你的模型丢一个天光在头顶上,天光在 创建灯光-标准 里有,值得注意的是,你可以根据你想要阴影的表现程度来改变天光的亮度,并在渲染设置时记得勾选阴影。

将天光丢到模型上部以后,再把你的该部分模型贴图换成默认的灰色贴图。也就是直接在材质编辑器里弄一个空贴图贴上去就完事了。

选中你要渲染的部分,点击下部小灯泡形状的孤立模式按钮孤立出你所需渲染的模型部分,按键盘的上部0键(非小键盘0)或是点击渲染-渲染到纹理,然后在输出部分点击添加-Lighting贴图。

稍微注意一下底下渲染的输出目录最好你手动指定一下,否则可能会因为目录不存在而无法渲染。

渲染完成后我将这个贴图拉进了PS里,然后背景用吸管吸取了别的皮肤贴图的背景色,并将其纯色图层与光线贴图图层正片叠底叠加,这样就能让纯色背景也拥有凹凸有致的颜色了。

不过假如你处理的贴图不是简单的纯色加光影而是需要你手动绘制的话,在你没有专业软件的时候,你可以渲染出一个线框图来帮助你绘制,线框图的渲染方法如下图。



当然,这也只能用于简单的贴图绘画,如果你想从无到有画一个贴图的话,除了要有美术功底以外,你还需要一些专业软件比如Body Painter或者Substance Painter之类的,篇幅有限我就不详细介绍这两种软件的详细用法了,只大概的说一句这种软件能让你直接在你的模型的3D面上手绘贴图,并且能输出展开贴图,直观而且方便。

抛开少贴图的问题,有时候我们即使有所有贴图也不一定有好的效果,原因就在于渲染器以及环境设置。以我最开始的那个对比图中的尤摩杨大和为例,默认的一套贴图确实能在游戏的渲染环境下出现一个好效果,但这并不代表其在你的渲染器内就能调好。就以自发光为例,自发光贴图在八猴渲染器(Marmoset Toolbag)(感谢ier33告诉我的这个渲染器)下的表现力要远强于3dsmax的本身自带的渲染器,为此事当我跟带明星交流的时候我发现似乎除了max以外C4D Blender等等的默认渲染器都要优秀的多…………

在对默认扫描渲染器的又双叒叕嫌弃以后,既然决定要继续在3dsmax里进行渲染,那么就必须通过更改并合成贴图能够抵消一些渲染器缺陷的影响,下面我来介绍一下我个人喜欢的有关方法。
首先由于我的ps不支持导入dds,我于是使用了dds converter来将我的dds贴图转换成png格式。

值得注意的是dds与png一样拥有alpha层,以我拿出的星际2的贴图为例,diff贴图上的alpha层便是该模型的所属色部分,此时在背景创建一个绿色纯色涂层,就可以把所属色成功加进贴图中了。


与此同时,emis贴图在默认渲染器下表现不力的问题也十分突出,于是我再次将emis贴图导出,在ps内重叠两个图层,并将自发光贴图的叠加模式改成滤色,值得注意的是,我们可以使用不断复制自发光图层的方式来增加自发光图层的亮度并实现粗调的效果,然后通过调节自发光图层的透明度来实现自发光程度的微调的效果。


回到3dsmax里来,3dsmax的明暗器渲染里拥有一些贴图选项,比如Blinn,金属,各向异性,Phong等等,为了增加机械的表现力,我一般会把贴图的明暗器选项改成金属,值得注意的是改成了金属以后会自动禁用高光颜色贴图(因为系统预设了高光效果规则),然后我会调节下方的反射高光曲线到一个合适的数值(个人一般偏好为高光级别30,光泽度60)。

为了营造整体色调效果,我一般会使用3dsmax的环境光来调整环境颜色灰度,而假如想改变模型色调,我还是更倾向于在ps里添加照片滤镜,调整自然对比度/对比度/亮度/饱和度的方式直接更改diff贴图到一个更好效果。

自此,我们重新渲染,就会发现一切东西比之前的简单拉diff贴图早已焕然一新。
三.小技巧与后记
1.Alpha贴图与透明效果
我刚刚简单提到了一句Alpha贴图,为了不在其他篇幅里补充有关贴图的事,我觉得我需要补充一下3dsmax里Alpha贴图的运作机制。在3dsmax里,要想一个物体的某个区域显示是透明的,那么就必须需要Alpha贴图的支持,3dsmax判定这个区域是否为透明是根据其Alpha贴图的灰度判定的,换句话说就是假如一块模型的这个面所对应的Alpha贴图是纯黑色,那么这块区域的显示就是纯黑。前面的专栏里我有提过红警里是不支持半透明的,所以我们的Alpha贴图也需要经过仿色处理(换句话说就是Alpha贴图只有黑白双色,不含灰色)



另外插句嘴,GhostTrails是一个很方便用来做运动拖尾的插件的,具体使用方法我就不赘述了,丢个下载地址(英文版):https://pan.baidu.com/s/1l2fr9eKekgI8cUbCNspBvg
提取码:2qbn
2.贴图风格与色调
调整贴图到符合红警2的单位风格是很重要的一件事,我以步兵为例,放出WW制作的盟苏两军一些步兵的max来展现如果你要给这双方做步兵的话贴图色调的大概调整方向。



从上可以看出,盟军步兵以蓝色与军绿色为主,苏军步兵以黄褐色为主,出于颜色相近来考虑,在制作两国步兵贴图的时候可以将贴图色调尽量往这两者靠(尤里步兵则为黑褐色与深土黄色)。
3.序列贴图变成动画
有时候我们寻找动画贴图的时候会遇到下图这种看上去平铺着的贴图。

上面这种贴图一般叫序列贴图,这是一种高效的预设动画播放方式,就以爆炸为例,假如每次爆炸都是即时运算的话,电脑是肯定吃不消,但是假如爆炸的主体只是固定的动画,而每次只有少数的一两个固定粒子是随机的话,不仅效果很好,而且还能节省电脑运算。
序列贴图的使用其实对于没有相关插件的人来说有点头大,因为要手动去在uv贴图变换上K帧。当然,假如你提取贴图只是为了播放动画本体的话,你大可以直接用PS的切片功能导出成png序列然后制作动画。但很多时候我们需要把贴图动画与模型本身的一部分结合起来,让模型对动画有遮罩效果。
在这里我说两种方法来处理这个情况,第一种当然是用插件,我也更推荐这种方法,max里能使用序列贴图的插件名叫spriter。这里我发一下我的插件下载地址(我的3dsmax是2016年版本的,插件本身是中文版):https://pan.baidu.com/s/1QnRyMc2Q7J1976548YmbVw 提取码:71ks
打开插件以后就一目了然了,由于我下的这个插件是中文的,上面的内容应该比较清楚,我在这里还是简单介绍一下吧。

选择贴图按钮就是选择你需要导入的贴图,行数列数就是你序列贴图是几乘几的,我导入上面那个爆炸贴图的话很明显就是8*8。时间选项就是你要在哪一帧里插入这段动态贴图,以及这段动态贴图要循环多少次。循环模式分为普通往复随机三个,字如其意我就不多说什么了。
你设置好以后点击下面的创建精灵,就会有一个小动画的预览给你

Step2就是一些小设置与输出选项了,漫反射不透明自发光建议都勾上(反正是爆炸),弄好了以后选中你需要用这个贴图的模型,然后点击添加到模型,你就会发现你的序列贴图已经设置好了。

第二种就是把序列贴图展开以后转换成动画,然后把动画变成avi或者mov格式的视频,然后把视频贴到平面上去。虽然这种方法有很多不好的地方,但是这种方法会对你对Alpha贴图意义的理解有好处,个人建议看一看步骤然后下上面的插件。
既然要把贴图变成动画的话,首先就是拆分序列贴图,根据序列的横纵比来使用PS的切片工具来划分贴图。

点开我刚刚提到的存储为web格式,鼠标框选所有切片(选好的切片外框为金色,未选择为蓝色)然后选择适当仿色效果以后存储。


导出的格式我用的GIF,目前我需要换成PNG,所以我使用PS的将文件堆入堆栈功能再导入一次(PS效率甚至比ImageShaper低很多,所以为了提高效率可以使用一些专业动态帧处理软件比如Gimp等等会更快)

当然,刚刚我也提到了有关3dsmax的Alpha特性,所以在你导出帧序列的动画以后,请注意做一个纯黑白双色的动画作为3dsmax引用的Alpha贴图来用。使用了Alpha图层以后请注意在渲染选项里彻底取消勾选抗锯齿来让带有动态透明贴图的图层不会与边缘有抗锯齿处理,至于如果你要本体只有不与边缘抗锯齿处理的话,那你可以考虑分部位渲染然后最终组装起来。



导入以后的图像就是动态的了,想办法把动态帧变成avi/mov格式视频就行了(可以使用格式工厂这种软件或者装插件直接导)。由于我做的是一个爆炸动画,所以我爆炸动画需要背景透明,那么我导入后会用刚刚导出的黑白色动画叠加一个Alpha图层,漫反射就是原来的爆炸动画。

不过注意,使用这种贴图会让3dsmax的动画预览速度显著变慢,个人建议在使用这样的贴图之前先把其他部分做好再套Alpha。或者先不勾选不透明度贴图,等做完了最后渲染的时候再勾上。
第三种方法就是手动K uv贴图的帧了,这也就是上面的spriter脚本的运作机理,不过这个原理不仅我也不太懂,我问了周围一圈人也不那么懂……并且既然有脚本帮忙了嘛,我就懒得介绍了。(太丢人了,告辞,口亨ε=(~ ̄▽ ̄)~)
以上就是这篇有关贴图的文章的全部了,有句话说得好,“一个模型的好坏,六分靠形态,四分靠贴图”。希望大家能看了这一大篇以后都能根据情况调出最心仪的好贴图,从而让自己手里的模型变得与众不同。
转发请标注作者

