UE4风格化场景全流程——②树的建模、雕刻与烘培
葱鸭Singleye
2022年08月03日 21:37
收录于文集
共3篇

【中字】虚幻引擎UE4创建风格化场景全流程教学​

【UE4风格化】【人工翻译】虚幻4风格化环境制作教程​

本文为up学习笔记及踩坑记录,会结合我知道的知识点扩展

项目源文件请到上面视频链接的评论区下载

欢迎大佬指出我的错误,若图片太小请放大观看(网页端缩放浏览器)

上一篇文章:网页链接​

  • Blender建模我们打开Blender,也可以用你习惯的建模软件,视频中导入了UE4默认的人偶作为参照物,通常我们制作资产的时候都需要根据项目规定统一的参照,不然就容易出现各个美术产出模型大小不一的情况。这里我们将场景中立方体设定为1.8m高,z轴向上移动0.9m使立方体底面和xy平面对齐,和人偶一致。

将立方体拖至一边,shift+鼠标左键按住某一轴拖动时会在除这轴外的平面移动, ctrl+鼠标左键按住某一轴拖动时会仅在这轴方向上移动。SpeedTree、grove 3D等预生成软件都可以制作树,但这是全流程教程所以还是自己做一遍。我们在上面菜单添加-网格-平面,或者shift+A网格-平面,按Tab进入编辑模式,数字键123可切换点线面选择,在保证所有点或者线或者面被选中的情况下按M合并到中心,再切换到点模式,可以看到原点有个点,按Tab回到物体模式可以移动这个点。

保证点在世界原点,在右侧工具栏点击扳手,给它添加蒙皮修改器和表面细分修改器(注意添加顺序)。在点编辑模式下按E挤出(面模式会变成移动),再按Z会锁定挤出方向为Z轴(按X或Y会锁定X或Y轴,按C会解除锁定),我们得到了树干。

我们可以放一张树的照片或2D概念图放后面做参考,直接沿着参考图的轨迹建模,通常美术制作资产需要原画的三视图做参考,但一定要注意透视的影响,这里我们自由发挥。为了更好的观察树干的粗细,我还是导入了UE4默认人物作为参考,导入方法为打开UE4创建一个第三人称游戏模板,在Mannequin(人体模型)-Character(人物)-Mesh(网格)底下找到人物模型,右键资产-导出。

再在Blender中导入该模型,按自己的习惯摆放参照位置,可以在场景集合里点模型下root的的眼睛使其不可见,避免干扰视图。

你可以根据自己的需要在表面细分着色器里增加采样数,即视图层级。我们在蒙皮修改器里开启平滑着色,因为这个不是网格体,所以无法直接对模型使用右键平滑着色。

我们将其向左上方挤出并缩小一点,因为树干到树枝会越来越细,记住要选中点挤出缩小(盲猜这建模逻辑就是将点挤出为新的点,然后在蒙皮修改器的作用下生成围绕点及连接线段的预制网格体,点记录了位置信息和缩放信息,up曾经只在maya挤出过面),再在上一个点向右挤出做出分支。

请自行发挥构建自己喜欢的形状,每个挤出点都可以再进行位置调整和缩放,记得要符合从粗到细的逻辑。按z会出现选框,鼠标左滑选择线框模式可以查看模型的布线(或z+4)。

但到目前为止我们做的都是一个平面上的分支,所以我们切换到三维视角,给树枝在y方向进行一些偏移,也可以按自己喜好在y方向进行挤出,注意避免过于整齐。若遇到褶皱,通常是挤出点之间离得太近了,稍微调整下距离就可以解决。

回到线框模式,可以看到树的面数比较多,理想情况下我们需要减少面数,为了优化空间与运行时性能,导入引擎前还需要一个面数较低的低模,不过这些可以在后面的ZBrush里实现。还有一种快速的优化方式,在修改器里添加精简(Decimate)修改器,调整比率(ratio),在线框模式下可以很明显的看到点减少面片三角化,直到只剩一个三角面(有趣的是up比率为1的时候模型干干净净,比率0.9几的时候反而多了很多布线,就像被细分了一样),注意这种方法会破坏你的布线,使得拆分UV十分困难,通常建模时要保证每个面都是四边形且均匀分布。

去掉刚刚的精简修改器,继续修改我们的模型,你可以在编辑模式下选中挤出点shift+v沿挤出方向拖动,如果窗口右上角开启了自动合并顶点,当顶点和其他顶点位置重合时会合并,可以用这种方法消除挤出点。注意缩放的时候鼠标不要离点太近,如果在很近的时候开启缩放可能无法正确缩小,特别是几乎重叠的时候(盲猜是每次快捷键开启缩放时,blender将鼠标离点的距离作为一个标准缩放单位)。这样我们就得到了最终的模型(不要忘了检查下褶皱或其他错误哦),up小技巧:最终造型阶段,可以从各个视角观察下,尽可能保持每个区域树枝差不多多,同时树枝的方向要有差异,可以想象下树长满树叶的样子(树叶是一整个不规则球形套在树冠上的,所以要保证各个区域密度相似),同时这个树虽然是歪着长的,但重心还是在中轴线,看上去比较符合物理。

如果你觉得某个地方转角太硬了,可以选择那个挤出点,shift+ctrl+B进行倒角,可以理解为添加点使得模型看起来更平滑,鼠标滚轮可以控制添加的点数量,如图所示线框视图下添加的倒角(注意末端是无法添加倒角的)。

我们复制一份我们的模型放到一旁做备份,命名为tree_backup,主模型命名为sm_tree,新建一个集合tree存放这两个模型,给sm_tree应用修改器。选中sm_tree,文件-导出-fbx,命名为sm_tree,记得勾选Limit to选定的物体,不然会整个项目导出。

可以看到导出界面还有个变换,改变坐标轴朝向,Blender建模的的时候是Z轴朝上的右手坐标系,unity中模型和世界空间都是左手坐标系,世界空间Y轴朝上,观察空间是右手坐标系,UE4中世界空间为Z轴朝上的左手坐标系(坐标系这块我还会再开新坑学习,有兴趣的朋友可以先看《shader入门精要》的4.2笛卡尔坐标系),所以up好奇将模型导入了untiy和UE4,都没有发生轴向的反转,唯独unity预览的模型出现了偏转,可以看到在unity世界空间中,选中模型还是Z轴向上的左手坐标系,很好奇是导出过程中就完成了变换还是引擎自动识别了。

  • ZBrush雕刻树干我们打开ZBrush,在上方菜单找到Z插件-FBX导出与导入,找到我们刚刚的sm_tree导入,可以看到模型以及载入了右边的工具面板里,鼠标左键拖拽就会出现相应大小的模型。但是你会发现你只能拖拽出一个个模型并不能编辑它们,ctrl+N清除所有模型,当你拖拽一个模型的时候,按住shift可以在水平、竖直和或45°角方向上对齐,再按住T进入编辑模式,按F可以使物体居中,按住shift+鼠标右键可以对齐到轴线视角。我们可以在灯箱-笔刷中找到一些左边标准笔刷中没有的笔刷,可以自行尝试一些独特风格笔刷,从网上下载后放入ZBrush安装目录的ZBrushes文件夹中,视频中常用Trim(使物体表面平化)。

在右侧子工具中找到几何体编辑-细分网络,视频中因为没有点平滑就点了细分网络,所以还进行了一步删除高级,可以用这个办法删除错误的细分网络(就是因为这步up观察到自己模型底部没处理好,回去修改了下模型,其实底部埋在地下看不见,可以不处理)。我们开启平滑细分网格4次(细分级别5),细分级别越高模型越精细,左侧笔刷栏里选择ClayTubes,alt+鼠标左键移动视角,alt+鼠标左键再放开alt缩放视角(贼反人类,Blender里用shift作功能键也反人类,一般要么ctrl要么alt),shift+F可以查看模型的布线。

我们主要雕刻树干部分,因为这部分是常被看见的区域,而树冠被树叶遮住,制作的时候可以减少一些细节。中括号键可以放大缩小笔刷大小,在树干上画出S形的曲线,再一笔一笔画出类似树皮那种干燥的竖线。注意笔刷的大小和强度,特别是较细的树枝,若笔刷大小过大就会出现狗啃一样的奇怪缺口,大家也可以换用其他笔刷制作自己想要的感觉。

up用了wood(木材)笔刷,但看起来有点过于粗糙了,这不太适用于风格化资产,风格化项目一般要求干净简洁,所以up准备重做。用TrimSmoothBorder可以平滑平面,不按alt使用时向内平滑,类似于削去了一块,按住alt使用时向外平滑,类似于填坑筑路,可以用来减少细节。up经验概括:尽量保留竖线斜线,避免同一区域过于密集杂乱,也要避免菱角过于突出或笔直。细节的精细度完全取决于你花的时间,但这是一个要被到处复用的资产,不需要花太多的时间,在保证各角度做出差异的同时,也要保证特征不会过于明显,不然就容易被认出来是复用的素材。

最后再做一次细分网络,不要开启平滑,这样就不会丢失细节了,但如果你觉得太杂乱,也可以做一次平滑细分,这样会减小细节并使棱角更圆滑。树枝也和树干一样的处理方式,要保证风格统一,若遇到处理后狗啃了一样的情况,缩小笔刷并按住alt用TrimSmoothBorder笔刷向外平滑填坑,再放开alt对平滑后的边缘再次向内平滑,将一个平滑硬边变为两个线段,up愿称之为开线[/doge]。做完之后不要忘了检查一下有没有遗漏的地方,再用Orb_slah_Curve笔刷在特征处制作刮痕(需要网上下载),还可以用其他笔刷添加一些细节。

我们先用Z插件-FBX导出与导入将高模导出,命名为sm_tree_high,再将细分级别调为1,导出底模,命名为sm_tree_low,接着我们来创建树冠。我们要为树叶创建一个低模多边形网格,它会有大小相近的四边形面,在虚幻中,我们让模型的每一个面片都成为一个Billboard(根据观察者视角定向的带纹理的矩形称之为Billboard),所以我们要把模型的每一个面展开到UV坐标系下,U轴和V轴均在0~1范围内,人们称之为多象限UV。每一个UV不能重叠,每一个面的坐标都处于0~1的UV空间中(存疑,从原理上来说应该是将每一个面铺满0~1的UV空间,所以每一个面都是重叠的)。然后我们我为它创建一个不透明度蒙版,可以通过AI或PS完成,最后在虚幻中为它制作材质。

  • ZBrush雕刻树冠点击子工具-追加-Shpere3D,添加一个球体(大家一定不要忘记保存!!!up添加球体的时候出错,重启后之前的雕刻都丢失了[/大哭])(感谢自动保存!!![/感动涕零]虽然不知道是哪一版本,如果大家也遇到这个问题,可以点灯箱-快速保存找到记录),然后在左边标准笔刷栏里选择Transpose,这个是移动缩放工具(不用按T切换模式!!!有可能切换不回来!!!)将球体缩放移动到树冠的位置(记得在子工具栏点球体),大致缩放成不完全包裹树冠的椭圆形(不要忘记了侧面)。

接下来选择Standard(标准)笔刷,也可以直接上面菜单点击绘制,直接鼠标绘制使网格体向外扩展,按住alt键向内凹陷。up经验分享:首先包裹住每个树枝尖,注意树叶间的连贯性,不要有相邻的两个对比过大的突起,再缩放笔刷的大小做出不同大小的小突起丰富层次,也可以自定义一些有趣的形状。标准笔刷中的Move笔刷可以直接拖动笔刷影响范围内的面移动,按住shift会切换成平滑笔刷(不要忘了编辑底部,可以用凹陷做出点坑与沟壕)。

记得保存!记得保存!记得保存!重要的事情说三遍!我们shift+F查看树叶的网格,因为每一个面都是一个Billboard,过多的Billboard会对树叶的外轮廓造成影响,所以我们要减少它的面数(顶部的布线也不正确,应该是均匀分布的相近大小四边形)。我们在几何体编辑里找到ZRemesher(自动拓扑布线),将自适应大小(AdaptiveSize)调为0,曲线强度(Curves Strength)也调为0,目标多边形数调为0.6,按ZRemesher自动拓扑布线,如果对面数不满意可以自行调整多边形数,再在拓扑完的网格体上稍作修改。

  • 重新拓扑右侧工具栏找到UV贴图,我们创建一个512大小的UV贴图,点创建里的UV平铺。我们单独导出树冠,命名为sm_treetop(记得检查下导出对象是已选、可见还是全部)。回到Blender,导入sm_treetop看一下效果(up觉得自己做的有点丑)。鼠标移至窗口相交的地方成十字准星形,向左托出新的窗口并改为UV编辑器。进入面编辑模式,左上角开启UV选区同步(将UV与编辑模式下的网格选区保持同步,视频中关闭了同步,其实开不开都能看出来),选中一个面,可以看到每个面都在UV空间的相同位置,即U和V坐标从0到1(所以是重叠的!!!)。

视频中删除了现有的UV,重新演示了下在Blender里展UV的方法,这步可以不做。右边工具栏找到物体数据属性(绿色三角形)-UV贴图-减号删除,在编辑模式下按A选中所有物体,ctrl+E标记缝合边,接着按U-重置,可以看到和之前的结果是一样的。

我们把树冠命名为sm_treetop,放入tree的集合。我们把sm_tree备份后删除或直接移到一旁去,导入sm_tree_low,会发现和之前的网格在同一位置,因为ZBrush在世界原点导出物体(我感觉是因为我们Blender建模就是将物体放在原点中央的,有空试试不在原点导出到ZBrush再导回来会不会在原点),而且可以看到树枝因为用了太多次笔刷出现了狗啃的痕迹(明明up修复过,看来是丢失存档回到之前的快速保存了)。我们按shift+tab开启吸附,将sm_treetop移至一边(实际使用中并不是吸附到网格上,而是固定一个网格单位移动)。

我们还需要下载一个Texel_Density插件,这个材质可以快速检查Texel密度(Texel密度即像素比率,表示网格上纹理分辨率的密度),Texel密度用于确保模型的纹理处于适当的高度和宽度,这样纹理看起来就不会拉伸、模糊或错误。Texel密度纹理运作的方式是通过在模型表面铺上棋盘格纹理,如果棋盘格纹理看起来正确,那我们的Texel密度就是正确的,如果棋盘格纹理看起来模糊或拉伸,我们就需要对网格进行处理。但是没有这个插件也不影响我们展UV,需要自己把控网格的密度(视频中并未演示Texel_Density的使用方法,up找到的和视频里也不一样,需要的朋友可以看一下这个视频blender UV贴图精度统一插件(Texel_Density),展UV插件(uv_toolkit)​,作者简介里有下载链接,编辑-偏好设置-插件-安装,注意uv_toolkit只能在UV窗口下使用)。

我们切换到面编辑模式,删除树根底面,再切换到线编辑模式,把模型想象成2D平面(或者想象动物皮展开的样子),按住alt键双击环选线段,按住shift加选线段,右键标记缝合边。展UV一直是up的难点,每个人展出来的UV也不同,up个人习惯是尽量保持不同部位的缝合线连续,因为不连续容易造成贴图断裂或者衔接不自然。先将树分成不同的树枝树干,缝合边尽量藏在树枝朝里的部分,这样不容易被看见,同一部分尽量只用一条缝合边展开,树枝的枝头最好使用合并点处理一下(待定,考虑到枝头不一定那么尖,但要注意缝合边是否经过树尖的顶点),遇到3岔的树干视频中是将顶部另外分出来分成4块,若布线流畅可以将顶部分到3个面去分成三块。最后A键全选面再U-展开,如下图。

我们可以使用uv_toolkit插件的功能为模型附上棋盘格贴图,在UV Editing视窗下点击插件-Checker Map-Checker Grid(棋盘格网格)或彩色栅格图-Quick Presets-正方形确定一个分辨率,我用了1024×1024的棋盘格网格,可以看到纹理并没有严重的拉伸

也可以点击右上角两个圆圈旁的箭头-UV编辑-显示拉伸,可以看到UV变成了蓝色,从蓝到红表示拉伸的程度,部分浅蓝色的说明UV有点拉伸,不过在整体视觉上影响不大。(可以选择一个面片,再ctrl+L选择这个面片所属的部分,用uv_toolkit插件-展开或对齐网格,但不规则网格对齐时顶点会出现异常)

补充:Texel_Density插件的用法,Texture Size表示UV框的尺寸,即纹理的分辨率,Set my TD表示设定我的纹理密度,下面的数字可以快速设定模型UV的像素(up还没有理解它的单位),需要查询当前UV密度的话选中UV,点Calculate TD,上面会显示占用空间和密度大小。

视频作者通常将可见部分树干UV放大使其有更大的Texel密度(疑问,这样不会使得缝合边处差别更大吗?),然后通过烘培查看当前Texel密度是否足够。但目前UV整体看起来效果不错,所以作者只将树干的缝合边向上调整,使可见部分更加连续。up尝试了对半竖切的方式,想使树干部分UV更加完整,但发现这样Texel密度会很小。

最终up还是选择将各个树枝分开,优先保证整体UV的利用率,再沿着延续的环线切割,注意要经过树枝的顶点,不然树枝头的UV会被拉伸。若三个四边形互相相接且呈三角形拉伸(或相邻四边形为单数时),会导致环线断裂且UV拉伸。

然后我们将其导出为FBX格式,覆盖之前的sm_tree_low,因为这是拆分好UV的同一模型,记得勾选包括-Limit to-选定的物体。

我们打开substance painter,新版的SP被Adobe收购后界面有所不同,且图标变成了Pt。我们选择文件-新建,模板选择UE4,文件分辨率用4096,文件选择我们刚刚导出的sm_tree_low了,关掉导入镜头和自动展开,对于其他规则的模型,如果没有手动展UV可以尝试使用这个自动展开,但对于树效果不太好,如果你在其他软件为模型添加了法线贴图,可以在Import Backed Maps导入法线贴图,但这里我们使用Pt来给模型制作法线贴图。

点OK,我们可以看到树的白膜,Alt+鼠标左键旋转,Alt+鼠标中键移动(习惯了Blender的操作后又有点不习惯这种操作了[/捂脸]),F1、F2切换3D/2D视图,旋转的时候再按住shift可以对齐轴,按F可以使得模型或是UV居中占满屏幕。我们点击右侧纹理集设置-烘培模型贴图。

烘培是把高模的细节通过贴图投射到底模上面,这样我们就能在低模的内存预算下,得到高模的细节表现。这是常见的优化方法,因为目前的硬件难以实时运算过多的多边形。但这个方法最终呈现的效果取决于法线贴图的光照计算,且从边缘看依旧能发现是光滑的表面。在烘培的通用参数里,我们要把输出大小设为4096,和文件分辨率一致,膨胀宽度(Dilation Width)为1,勾选应用漫反射,并选择我们之前的高模sm_tree_high。对于高模,在空间上与低模处于相同位置是十分重要的,因为烘培的实现方式是由Pt投射不同角度光线,这些光线经过高模映射在低模上,由此记录高模相同位置的细节,所以如果高低模不在同一位置就会出现映射错误。投射细节前Pt会在模型周围生成一个包裹(cage),如果你手动创建了包裹,可以勾选使用包裹并导入它,如果你没有指定的包裹,Pt会自动创建一个包裹。

低模后缀和高模后缀通常用于批量烘培,就和我们标注的一样。这里的模型贴图分别有:Normal(法线)、World space normal(世界空间法线)、ID(ID识别图)、Ambient occlusion(环境光遮蔽贴图)、Curvature(曲率贴图)、Position(模型上所有点位置)、Thickness(厚度),这些贴图可以用来驱动智能材质或生成器。正式烘培前我们要检查一下我们烘培是否能成功,最快的方法就是检查法线,所以我们这里只勾选Normal进行烘培。

法线烘培完成后,我们可以明显看到树的表面出现了凹凸变化,但左下角有“[Scene 3D] Failed to triangulate polygon (no ear found). Probably not a simple polygon?”报错,意思是“未能三角化多边形,可能不是一个简单的多边形?”。up猜测是制作高模的右侧枝条因为笔刷强度或大小不合适发生了不正常形变(就我上面说的狗啃),导致取消细分后低模布线错误或者布线重叠。

up回到ZBrush尝试用笔刷修复无望,即便使用上文提到的“开线”操作,低模的线条还是会重合在一起,甚至使用平滑修补扭曲处时,高模会出现异常坑坑洼洼的类似噪声的突起。考虑到这部分是被树叶遮挡的枝条,up决定直接在Blender里将重合在一起的线段分开,但这样的操作改变了高低模同一位置的映射,烘培的时候可能出现分层和断裂。

重新导出后再进Pt重复刚刚的操作,报错消失,确实可以看到移动了的位置出现与周围不连续的裂痕,其余部分Pt处理的非常好,几乎看不见接缝,而且十分清晰,如果出现模糊可能是Texel密度的问题。

检查完成后,勾选全部的贴图重新烘培,可以看到烘培的贴图在相机里依次显示,AO贴图能提升阴影质量。因为我们不在Pt里做纹理,所以直接导出贴图。我们烘培是4k的,但导出只导出1k,所以大小选1024,其他不做改变。

最终得到三个文件,up很好奇为什么烘培了这么多张贴图,但是只导出了BaseColor(基础颜色)、Emissive(自发光)、Normal(法线)、OcclusionRoughnessMetallic,猜测是合并了贴图。OcclusionRoughnessMetallic就对各通道进行了封装,它的红色通道R表示AO(环境光遮蔽),绿色通道G表示Roughness(粗糙度)、蓝色通道B表示Metallic(金属度)。而Emissive因为我们并没有设置自发光所以没有实际导出。其中BaseColor只是建模时默认的颜色,我们并不会用到,可以删除。

我们回到Blender,将sm_tree_low移至一旁,将其和sm_treetop都复制一份,x轴坐标改为0,使其在坐标原点重合,将复制的树干和树冠按Ctrl+J合并,导出这个合并后的模型,命名为sm_tree_low_001。

打开之前的UE项目新建一个Models文件夹用于存放我们的模型,再在其下创建一个MainPiece用于存放后面要做的石头部件,再创建一个Tree文件夹用于存放我们的树。导入sm_tree_low_001,注意材质导入法要选不创建材质。为了命名统一up还将Maps改成了Scenes(untiy中场景也是用的Scenes)。

导入后将模型拖入场景,可以看到这个模型有两个世界网格材质,但是没有命名(应该是可以在建模的时候就给材质命名,好区分树干和树冠)。我们在Materials文件夹创建一个M_TreeLeavesMaterial,这个是树叶的材质,下一章up将制作树叶的不透明度遮罩。