【自用】使用uv展开绘制贴图的模型建立的标准流程

ICE Lab Inc. Copyright 2021,All rights reserved.
前排提醒,本文撰写的目的是怕我自己忘了与为我制作红警2mod有关素材服务,所以文中有很多地方都提到了我在红警2素材制作过程中的一些体会。假如有高手大佬看过本文流程后能提出更好意见,欢迎以各种方式给予我相关指导,我不胜感激。
本文主要涉及三个软件:3dsmax,RizomUV(Unfold3D),Substance Painter
本文共9600字。
常见模型制作流程一般为建模——拆uv——画贴图——做动画或特效——杂项,在我的流程中,建模主要以3dsmax为主,拆uv基于UnFold3D(现改名为RizomUV)与max自带uvw展开修改器,贴图绘制基于Substance Painter。在这里顺便提一下,Substance Painter能在steam上购买,售价388永久,欢迎支持正版。

建模,拆uv与画贴图是建立模型的基础步骤。下面我就以这三个主要步骤描述一下我自己在流程中需要注意的重点与我所使用的解决方案。
3dsmax基于2016,Substance Painter基于2019.3.0,UnFold3D基于2018.0(还未更名为RizomUV)
一.建模
在max上,常见的建模方式为在可编辑多边形下对简单多面体进行点线面的倒角,拉伸,挤出,桥接等。不同于雕刻建模这种在当下精细次时代模型普及的情况下对uv更友好的建模方式,传统的建模方式诞生之初拆uv还并不存在,所以如果你的模型使用传统方式建模,同时又要拆uv的话,建模时对布线与uv面翻转问题就要格外注意。
1.视角与灯光
max的预览视角默认是透视,现代3d游戏的视角大多也是透视。由于在红警2的年代,纯3D游戏还很稀缺。当时的RTS一般都是以等距视角(Isometric)为主,例如帝国时代2,星际争霸1等。当然,那时候许多上帝视角的游戏也以等距视角为主,比如暗黑破坏神3,孤胆枪手等。我们要想在max里将模型预览调成与红警2游戏内一致的视角,就得将max默认的透视视角改成正交,该操作的快捷键是U。


那么问题来了,为啥现代3D游戏大多数都是透视视角而抛弃了等线视角呢?一方面透视视角的远小近大效果使得显示效果更加真实,另一方面视角透视能避免一些显示上连接在一起但实际却不在一起的bug,这能使3D场景更有层次感。


当然,利用这个特性反其道而行之的游戏也是有的,比如2014年ustwo games推出的著名手游纪念碑谷,里面多次利用了等距视角的视觉bug将原本无法连接的路与桥梁连接在了一起,这也成为了后续所有Unity3D游戏从业者在构建错觉场景课程时所必须了解的标准案例。

调整好了正交以后,别忘了点击视窗右上小方块的角块来调整视角为合适视角。

而在此视角下,由于红警2游戏原因,你在建模软件内建的所有模型最后在游戏内也要变成固定视角2D的帧序列。因此,你的建模更多要向玩家看得见的方向展现出你模型的细节,尤其是以建筑为代表。除了需要360度旋转的炮台以外,背后部分可以能省就省。


灯光上,当你没打任何灯光时,在正交/等距视角下max会给你的预览效果打一个从右上往右下的光,这个光与方向无关,也就是说无论点击视角调整方块上方四个角的任意一个,光线打到模型上的效果都是一致的。


之所以要强调这一点,是因为红警2的默认灯光并不是右上到左下,而是左上到右下。所以在为红警2新素材而建模时,为避免max的默认影子遮住了一些正面细节导致模型渲染后有瑕疵,请在预览时将视窗左上方的显示效果由【真实】改成【明暗处理】。


至于你是习惯建好模型以后再上灯光还是先把灯光搞好再建模,这就见仁见智了。(我更喜欢后期打灯光,毕竟diy论坛早就提供有现成的场景,拉进去就能用嘛)
2.建模与布线
在建模之前,我们可以做一些方便自己建模的准备工作,例如将模型显示改成明暗处理+边面,以及打开XView的多重顶点(虽在重复顶点的显示上不完全准确,但的确很有帮助)。这样设置以后,我们在建模过程中就会在显示上更加方便,明暗对比+边面可以快速确定你模型的真实颜色与布线情况,XView能显示你模型的统计以及帮你快速找到重复顶点与开放边等错误,这有助你在布线错误发生的初期就能快速修复模型避免问题积少成多。


不同于西木年代的程序贴图,要拆uv的模型对建模与布线有很高的要求,如果只是程序贴图,建模可以做的很碎以便让每个模型细节都使用不一样的贴图。而既然是要拆uv的模型,并且贴图绘制工具也支持不同部分绘制不一样的贴图,那么我们一切建模都需要以方便拆uv为第一要素。拆uv细则我下文会继续介绍,现在先介绍建模与布线部分。
传统的程序贴图可以将多个标准形状以合并或是放一起的方式叠加,因此假如你要把两个形状合二为一的话,使用布尔,附加或是高级布尔(ProBoolean)并无太大的区别。但对于uv来说,操作不当的合并无异于灾难。


如果你的建模需要匹配游戏引擎或是加快渲染速度,那么胡乱合并的危害就会显现出来了。学过几何的都知道,所有的三角形都是稳定不可扭曲的结构,而四边形又是不稳定几何图形中拥有最少边的结构。在一个表面以多个几何体拼接而成的模型里,点与点之间的运动决定了模型整体的形态。模型之所以能变形扭曲,与其表面的点的相对运动有关。而建模需要让绘有贴图的面始终以非病态扭曲形态呈现于观众前,这就需要面与面之间是平滑过渡。而四边面则是网格平滑算法用时最短的面,同时对于模型渲染来说,解算模型光影渲染时,四边面也能提高渲染速度。而附加与布尔以后,软件并不会自动四边形化所有面。尽管石墨建模工具里有四边形化所有面,但假如存在大量多边面的话,石墨工具可能会毁坏原模型。



解决该错误很简单,只需要消除模型内“面套面”的现象(即一个面里有一个挖掉的面,且内边不与外边有任何联系)即可。


其实可能有人注意到了,我将上图案例模型的上下面并没有完全分解成全四边面,我的原因有二,一是这个板子根本就没有扭曲与运动,在设计时这是个刚性板,因此没有动画骨骼运动的刚需,再加上帧序列需求无需实时渲染,同时又加上该模型构造简单,所以面其实可以不那么严格地拆解成全四边面。二是因为这个面是一个单面,即使我拆了它,这些新产生的四边面也在同一平面上,所以既然不影响我拆uv,那我索性就不分了。(这也是为啥本文制作的模型只面向红警2精度的原因,如果你做CG的话,那么还是拆成四边面好)

不过对于帧序列渲染这种一次渲完永久无忧的操作来说,四边面还并不是最大的缺点,因为渲染速度太慢,可以通过硬件升级来弥补(毕竟在制作红警2mod里,玩家的电脑只需要跑得动帧序列就行了,渲染则是建模师的活)。盲目合并后最大的灾难其实是法线问题。每个模型的面其实是有正反之分的。就比如拉一个最简单的立方体,拉好以后的立方体其实拥有12个面,即6个正面与其对应的6个反面。

并集布尔/附加倒还好,合集布尔后,模型内部会残留着被表面遮住但还存在的点与面,差集布尔则更甚,差集操作以后差集操作消失的对象在差集操作目标产生的新面的法线会翻转,严重影响渲染效果。

此时,我们可以手动在可编辑多边形下选中这些面,然后使用法线翻转修改器来矫正。

同时,假如你的模型存在更多的四边面而不是多边异形面,在uvw展开修改器里编辑uv时,展开/剥操作所产生的bug也会相应少一些,这能提高你uv贴图展开的效率。

说到正反面,它能造成的问题除了渲染错误以外,更多的就是“桥bug”了。桥本身是一个常见的封口与连接操作,桥即将两个正确的边以四边面形式连接起来,一般情况操作如下


不正确的桥操作一般有以下两个:
桥连接反转

2. 选择的边不正确

桥只能封4边面的口,假如遇到三边面封口或是多边面封口的话,我们则需要使用可编辑多边形里的边缘-封口来完成封口(封四边面口也可以用这个操作)

当然,max原生建模使用的更多操作还是倒角,挤出,分割等这种能产生新面的操作,由于这部分与建模细则有关,而建模又是一个个性化很强的内容,我在此就仅将相关操作的gif列举出来,仅供读者参考。




经过上述一系列操作以后,我相信很快一个不带贴图的原始模型就会出现在操作者眼前了,对于非程序贴图流程来说,白模的成功建立也意味着下一阶段——拆uv的开启。
二.拆uv
uv是什么常常会成为一个不接触建模的人问的一个常见问题。(uv是紫外线吗?(雾))。我在自己学习这段的时候也费了很大劲,一方面是因为不同教程或者教学人员所用描述的不一致;另一方面是大家拆uv的时候,并不一定是用的相同的标准来拆它。这让一个门外汉去了解相关内容非常不便,在我自己体会过了走弯路的艰辛后,下面我将以我自己所认为的最优表达方式来解释这个部分。

拆uv最直观的解释图便是纸模了。去掉纸模需要辅助粘贴的部分,纸模的制作是将一个平面的图形剪下来折叠粘贴成一个3D模型,拆uv即是将一个3D模型剪开铺平成一个平面,两者互为逆向关系。

然而,之所以许多建模者不会简单的把拆uv归类成拆纸模,那是因为拆uv是有优劣之分的。好的uv拆完以后零件简洁,像素位置正确;不好或是系统自拆的uv则会零碎,扭曲,或是像素歪斜,这的确十分考验拆uv的人自身个人能力与熟悉程度。做纸模图纸则是为了方便手工制作者的使用,这让纸模图纸设计者有时会将有关零件拆的更碎而不是化为一个整体。

max原生自带的拆uv功能在修改器里,名字叫“uvw展开”。打开后我们可以看到主修改器界面如图所示:

而那个大家熟悉的纸模图纸一样的uv图,则需要继续点选“打开uv编辑器…”来开启。

max这个自带的拆uv工具并不直观。当你开启了一个模型以后,这个uv编辑器的显示常常会让你一头雾水(就如上图所示,你看得出来上图是。因为这个uv编辑器只是简单的将每个面叠加放在了一起,并且用了一个很蠢的程序自动铺开了,它并没有照顾到人类常见的想法,也就是如纸模图纸一样的展开方式。不过,这个编辑器也是有优点的,下文我会介绍该编辑器的优点。现在我需要一个程序去大概先拆解一下uv,从而得到一个人类能理解的uv图来进一步修改。
RizomUV(UnFold3D)则是一个人类能较好理解的快速拆解uv的软件,而且它也不大(安装后大概110MB左右),它并非max的插件,而是一个导入obj模型,拆好uv后将uv数据存在obj模型内的一个软件。因此,我们在拆解uv的首步便是将max内已经做好的模型导出,导出obj模型的操作十分容易,只需要在max的左上方按钮内找到即可。

导出相关参数则是重点,不同的参数直接决定了你的导出效果,以下是obj导出选项框截图与说明:

首先,右上角的导出材质与材质库不勾选,因为你画好uv以后会另行绘制贴图,此处便不需要了。另外,左边的几何体中的 翻转YZ轴 与 图形/线 默认勾选,不选“翻转YZ轴”会使模型朝向出错。隐藏对象不勾选以方便你导出所见即所得的模型(换句话说,如果你不想一个模型被导出,隐藏该模型即可。不勾选该选项能让被隐藏的模型不导出,从而方便你分部位导出uv)。面设置默认多边形不改,下面纹理坐标,法线,平滑组则是需要重点关注的内容。
纹理坐标在还没拆uv之前的导出是不需要勾选的,因为在步骤中我们会进行两次导出。第一次导出是将没拆uv的模型导出到RizomUV(UnFold3D)软件内进行初步拆解uv。纹理坐标的意思就是uv数据,模型还没拆解,正确的uv数据也就不存在,自然我就无需勾选该选项;而第二次导出则是将拆好uv的模型导出到Substance Painter内画贴图。sp需要读取一个拥有正确uv的模型,所以此时我们必须勾选该选项。
法线选项一直勾选,以保持法线的一致性。(其实法线数据在没进sp烘焙之前都是不存在的……勾了也没啥卵用)
平滑组是什么?我们知道,计算圆周率π可以使用高边形(例如一万边形十万边形)来无限接近圆以便计算准确。高边形并不是圆,但是只要边数够多,使得单边长度低于1dpi,人就会把这个图形当圆,平滑组也就类似于此。计算机3D模型中的弧面都是由若干平面组合而成。而为何这些平面看起来却没有明显棱角?这是因为这些平面在同一平滑组内,平滑组对这些面自动使用了平滑效果来让其渲染后像是平滑的一个曲面。当然,在修改器内我们也可以手动选择涡轮平滑等修改器来手动将需要合成为一个曲面的多个面平滑细分。这些修改器有的是破碎单面通过制造更多面来制造平滑效果,有的类似于平滑组只修改了渲染时的计算方式来使得这些平面看起来更平滑。



但在sp中,纹理集列表的纹理数量是按照平滑组来定的,一个平滑组成为一个大图层,在此时,平滑组也就不只有平滑多面的作用,还有一个分层绘制贴图的作用。

RizomUV(UnFold3D)不读平滑组,所以在第一次导出时我们不需要勾选平滑组,第二次则需要勾选(假如你需要用平滑组来增加模型部位的区分的话)。
导出后会弹出一个如下图一样的框。正确的导出框内,底部只有一个完成按钮。但如果你的模型有错误(如重叠顶点,开放边,不正确的布尔操作等),完成按钮的旁边就会多一个错误提示按钮。如果产生了错误提示的按钮的话,请重新检查你的模型是否有错误,确认无误后再导出(这也就是为何我建议建模时开启XView的重复顶点或是开放边显示功能,因为如果在问题刚出现时就能解决问题的话,会为该步导出节省很多校对时间)。

导出obj后,我们打开RizomUV(UnFold3D)的主界面。主界面如下:

上方菜单作用自不用提,左边部分是原模型显示区,右边则是uv拆解区。这个软件最好的地方就在于uv拆解区也有3D效果。拆uv的过程类似拆牛奶盒,当我们拆解牛奶盒时,我们会在空间中剪开牛奶盒的边,并将其展开成一个平面。如果我们先简单粗暴的将牛奶盒一脚踩扁,然后再想着好好剪开的话,难度明显是增加了。这种简单粗暴一脚踩扁的方式便是max自带的uvw展开里uv编辑器的模式;空间中剪开则是RizomUV(UnFold3D)的模式。这个软件的能力就类似于你使用一个剪刀来剪开空心模型,你可以剪开一个部分,单独丢到一边快速展开。但这个软件我使用的2018.0版本有个不太好的地方。即对2D后的uv的旋转,扭曲,移动与展开并没有很好的支持。举个例子,它可以帮你简单的将一个模型拍扁并强行塞入一张正方形纸里。但是这么做完以后,如果你想更改部位的位置,或将一些面扭曲成矩形来获得更好的贴图效果,这个软件都不是特别方便(主要是快捷键长按有点反人类,其实这个软件能做到max原生的uv编辑器的所有功能,我个人不习惯而已),而max内自带的uv编辑器由于其可以单独对点线面进行操作,反而比RizomUV(UnFold3D)更方便。我在此便取长补短,先将模型在RizomUV(UnFold3D)内进行拆解,而后再进入max内调整模型单个零件的摆放属性(位置,扭曲,二次拼接等)。
以一个简单立方体为例,我们将立方体导出为obj后,再导入进RizomUV(UnFold3D),软件会显示成如下样子:

如果你只是用鼠标点选按钮来完成操作的话,这个软件其实挺麻烦的,所以我建议记住一些常见快捷键以便使用。
首先,左侧的3D区默认是可以自由旋转的。按住Alt并点击鼠标能实现不同效果,Alt+鼠标左键是旋转,Alt+鼠标中键(点击鼠标滚轮键而非滚动)是移动,Alt+鼠标右键是缩放,鼠标需要长按。当然这些操作都仅针对摄像机而不针对对象。



Ctrl则是类似于windows资源管理器的操作,Ctrl可用于多选对象操作,例如多选边,多选面,多选对象。

在右侧的uv(2D)区,默认是不能像3D区这么旋转的,如果你需要旋转的话,可以取消勾选锁定2D按钮来解锁旋转。

来到右侧菜单,RizomUV(UnFold3D)的“剪牛奶盒”操作的核心便在此处,选择边则通常是选择剪开的对象,选择面或是对象则通常是为了移动,而点则能方便扭曲面(不过我选了点,挪动点还得长按空格,操作属实没有max里方便,即使这个操作可以自定义,但是既然这是人默认设置,那我还不如直接用max)

值得注意的是,RizomUV(UnFold3D)并不能改变你的模型。你在uv区扭动的形状,只会影响uv的样子,并不会影响原来的模型。

RizomUV(Unfold3D)中经常用到的操作一般有以下几点:
剪切边:C,未选中的接缝会以橙色颜色显示。


展开:U,将会将你选中的部分展开,请注意,即使这个部分不能充分舒展或是存在无法展开的情况,这个按钮也会强制展开。即使展开后有面重叠或是面扭曲现象。

包装:P,将你展开后你选中的部分包装在正方形的UV贴图范围内,个人建议是搞完了最后一起包装。

匹配:Alt+B,包装并不会缩放零件的外形与真正的外框匹配,所以我们还需要手动点一下匹配按钮才能缩放部件。
首先,匹配是强制全局的,即使没有选中任何部件也会匹配进框,第二,匹配以后部件身上会变红色,这种红色并不是错误,而是弄好了的标志。
也正是因为缩放的原因,按了匹配以后,系统会弹一个框提醒你,不过一般确认即可。


移动:Space+鼠标
在uv区移动部件需要按住空格键操作,不按空格就动不了。虽然这种方式可以保证减少误操作,但是我反而觉得这么搞不方便。

上面是基本操作介绍,下面我就来说一下为何我会在RizomUV(Unfold3D)里粗拆uv而不是一步到位。
拆uv到底难在哪?难在操作?不,难在标准。所有贴图都会有剪切线,也就是紧贴在一起的两个面中间却被剪开。如何让这条线在贴图中显得不明显是所有拆uv的人共同的目标之一。

这也是拆uv的第一个问题——接缝带来的贴图不连贯。为何我们要避免系统拆uv?系统自动拆解uv往往会拆的很碎,大量的碎块会导致贴图难以合理拼接,从而让接缝格外明显。

手拆uv能有力的避免这个问题,然而对于移动操作还要同时按空格与鼠标中键的RizomUV(Unfold3D)来说,拆解部件以后对部件面的扭曲与部件在UV画布上的排布位置修改这个两个操作实在是有点不太方便。
拆uv的第二个问题就是像素歪曲导致贴图模糊。贴图一般都是位图,即由像素点阵构成的非矢量图。像素是一个图的最小颜色单位,不管是多大的图,单个像素一定只有单一颜色。而且像素的边是刚性的,也就是说必然是一个整齐的正方形。当我们观察贴图时,我们一般是希望像素能在贴图上在正面以方形排布,且贴图的每个像素尽量与标准边缘垂直,这样接缝不仅不会出现像素方向差异,而且贴图也会更加清晰使得观感更好。


为了更加直观的观测像素是否正向排布,我们会引入象棋棋盘贴图来辅助我们对齐uv。如果棋盘在面上是正向整齐排布的,且接缝被隐藏在不可见处。那么我们可以评价这个模型的贴图拆的不错,但如果接缝明显而棋盘相对于面垂直的,那么这个模型的uv贴图就需要进一步改进。


棋盘排布标准只是我所认知到的一种标准。uv贴图的差异性在于并不是所有人的标准都是如此。这也是我目前为止使用的拆贴图的标准,如果以后我学到了更好的标准或是有大佬能教我更好的拆贴图标准的话我可能会对此段描述有所修正。
但对于无法导入贴图的RizomUV(Unfold3D)来说,棋盘贴图辅助修正就是不可能完成的事。我们还是需要将其导入进max内才能进行一系列操作。
最后,当你拆完贴图的时候别忘记保存。uv的保存是存于模型内部的,并没有额外的文件需要保存或是导入导出,所以当你在RizomUV(Unfold3D)改好了贴图以后,千万别忘记点保存。

保存之后的obj,再次拉回max里就是已经拆好uv的模型了,此时我们可以将该模型转为可编辑多边形(obj模型默认是可编辑网格)后,打开“uvw展开”修改器来检查uv拆解情况与二次加工uv贴图。初步拆好贴图以后,我一般会回到max里再进行二次uv贴图加工操作。这是由于max自带的uv编辑器在对于边移动,点移动与面移动上比起RizomUV(Unfold3D)能在使用更少的按键的情况下更灵活(默认空格加鼠标中键的移动方式太反人类了)。当然,我上文也对RizomUV(Unfold3D)的灵活性有所描述,你可以自定义按键方案或是操作方案,同时可以在RizomUV(Unfold3D)里完成对uv贴图的所有拆解工程,这点就见仁见智了。
当然,我认为除了移动操作以外,max的uv编辑器还有如下优点:
1.重新塑造元素栏里,我可以快速将面以矩形形式展开,或是快速展平。

2.剥操作更方便,一键即可完成。(不过关于剥功能,我其实也并不是特别熟练。据说如果剥功能玩的好,max拆uv是不需要其他的软件来辅助的,我引入了RizomUV(Unfold3D)来降低了在max里使用剥功能的难度,但是这个功能依旧是max里uv编辑器中最强劲的功能之一)

3.扭曲单个面不需要长按空格与鼠标中键操作,而且配合Shift Ctrl与Alt可以做到指定角度与指定方向的旋转或是平移。

另外提一句,除上文提到的对齐像素与隐藏接缝外,uv与拆纸模的区别还有一点,那就是可适当拍扁一些面上存在的凹凸,将其投影在同一个平面内。


以上就是拆uv的一些要点所在了。在拆好uv以后,下一步就是绘制贴图。
三.贴图绘制
当一个模型uv被拆好以后,我们即可使用任何能绘制贴图的工具来为它绘制贴图。甚至我们可以使用ps来绘制(只要你空间想象能力足够好的话)。当然既然我选择了Substance Painter(下简称sp)作为贴图绘制工具,那么我也就从sp相关的操作来展开该部分我要记录的东西吧。
1.sp的设置
有关sp的纹理集设置与新建文件相关设置见我之前写的专栏CV5078760开头

除了纹理集与新建文件以外,我们最好也与max一样同步设置等线视角。我个人觉得一般绘制贴图都是在3D平面来展开的,所以我会隐藏掉2D视角。当然,必要的时候2D视角也是需要调出来的,以下是等线视角设置与2D/3D视角开关:


下面是左侧功能区说明:

首先是笔与橡皮,合理的设置下,橡皮与笔的功能相近。虽然sp内许多操作与PS相似(如建立图层与遮罩等),但sp是个绘图软件而不是修图软件,所有效果都是使用画笔与填充来完成的。
按住Ctrl键以后,同时点击鼠标左键是更改流量大小(与PS笔刷流量定义一致),同时点击鼠标右键是更改笔刷大小。

映射与物理映射:一般我不用,但该功能可以方便你将一张图片快速印到你的贴图表面。就想印章一样(自定义笔刷功能同样可以做到)。

填充:填充是让你快速填充的工具,注意,sp的填充是以面为单位的,单次填充可以填充一整个面,它并不像PS里可以以颜色区域为填充单位,也就是说假如你要自己在一个平面上画一个范围并在该范围内填满某种颜色的话,你只能用笔刷手动涂上填充色。
填充也是有模式的,你可以选择填充模型还是填充三角形还是填充几何形,也可以选择是填充单块模型还是填充整个uv贴图平面,不过我感觉除了默认的填充几何形以外其他一无是处。


涂抹:与PS涂抹一致。

克隆我一般不用,所以我也不写东西误导他人了,至于吸管功能就与ps的吸管一致了,只不过该吸管不仅可以吸颜色,也可以吸材质,匹配当前可见材质到画笔层。
下面几个灰色的按钮中,除了跟ps图标一致的按钮是导出当前材质到ps中以外,其他都是正版sp的社区功能,这也就是材质论坛相关功能,我在此就不赘述了。

到此,我要给我自己留下的建模流程要点也就差不多写完了。由于本文不是从0开始类的教程,所以我并未按绝对顺序来总结流程步骤。建模是个漫长的学习过程,我并不指望能在短时间内学到所有高手的能力,但这篇文章也算是我自己给我自己留下的学习笔记。以后事情越来越多,能留些文字让自己曾经会的东西记住也算是一个很不错的选择。
最后我希望这篇文章能给每个读者提供一些帮助,也希望一些比我厉害的人能在我的抛砖引玉下与我相互交流,彼此进步。