卢鹏

场景美术:场景编辑流程及引擎导入规范(旧版)


系统单位设置

  •  单位,比例统一。打开菜单 自定义>单位设置,显示单位比例选为公制 > 米,系统单位设置为1个单位=1米(如图)。
    1

场景模型编辑摆放

  1.  进入场景编辑这一步,单体模型一定要检查完整,才能导入编辑,具体要求可参看 《场景美术模型制作预提交规范》 文档。

  2.  模型尽量复用,模型可以缩放旋转移动摆放,需要注意的是,缩放旋转移动后的模型不能够再使用重置命令,否则会丢失transform信息,导致引擎无法进行复用优化,切记!!

  3.  合理利用模型,疏密有致,用最少的模型做出丰富的效果,同时保证同屏的面数不要太高。

  4.  以下场景为本文为摆放好的测试场景,请忽略面数^_^。
    2

场景模型分层整理

  1.  场景模型的分层整理主要是为了便于烘焙,一层对应一张lightmap,因此层的名字就是lightmap的名字,如图:测试场景被分成了三层,因此总共对应了三张lightmap。
    3

  2.  场景模型是根据材质球来分层的,尽量把相同材质球的模型放到同一层,如果同一材质球的模型实在太多,导致lightmap精度不够需要分开放到多层的,那么一定记得将材质球重新复制改名,加上对应层的后缀。例如原材质球名字为grass green 01,使用该材质的模型分别放到scene01_LM01和scene01LM02层,那么将该材质球复制成两个并命名为grass green 01 LM01和grass green 01 _ LM02,重新分别赋予给这两层模型。

  3.  尽量将不透明和不透明的物体分到不同的层,例如本测试场景,scene01_LM01包含的模型就是带透明的模型,如草和树。

  4.  分好层后,对每层模型进行批量重命名,方便后期引擎编辑。如图选择层,并点击按层选择模型按钮,选择该层所有模型,保持选择模型的状态,使用Rename Objects工具(Tools\Rename Objects)进行批量加前缀,以scene01LM01层为例,在该层所有模型名字前加上LM01
    4

场景模型UV2编辑

  1.  将场景模型分好层后就要对每层模型分UV2了。以scene01_LM01为例。选择该层所有模型,并添加Unwarp UVW命令:如下图所示,将Map Channel选项设置为2,并在弹出来的窗口点击Abandon按钮。
    5

  2.  打开UV编辑窗口,选择面模式,框选所有面,使用Mapping\Flatten Mapping命令,参数如下图设置,点击ok。如果单体模型UV2已经按统一精度分好,则可以跳过2和3 直接到第4步
    6

  3.  如果uv能如下图所示满满撑满uv空间,那么该层UV2就分好了。
    7

  4.  如果uv2排布并不是很满意,还可以使用Tools\Pack UVs命令,调整参数如下图设置,点击ok,重新摆放uv至撑满状态。(由于引擎对uv2复用操作的原因,在场景编辑这一步不要进行任何UV缝合和断开操作
    8

  5.  重复以上步骤将其他层的uv2分好。将分好uv2的文件另存为xxx_flash3D 和 xxx_light 两个文件,分别用于引擎导出和烘焙灯光贴图。         

    3ds Max +vray 光照贴图烘焙流程

灯光设置及渲染设置:

  1.  打开xxx_light文件,先设置渲染器,打开Rendering\Render Setup(快捷键F10),在跳出来的面板上如下图所示设置好Vray渲染器
    9

  2.  下面将以黄昏灯光为例设置本测试场景灯光,首先关掉3ds 默认环境光,打开环境特效设置面板(Rendering\Environment…或者快捷键8),按下图所示设置。
    10

  3.  然后打开渲染设置面板,选择【V-Ray】选项卡,在【帧缓冲区】中勾选【启用内置帧缓冲区】:
    11

  4.  设置【全局开关】中的【默认灯光】为关闭状态:
    12

  5.  设置【图像采样器(抗锯齿)】中的【固定】并关闭抗锯齿过滤器。
    13

  6.  勾选【环境】选项卡中的【全局照明(GI)环境】,设置一个比较暗的蓝紫色,模拟黄昏时的环境光。
    14

  7.  打开【GI】选项卡,勾选【全局照明】的【启用全局照明(GI)】,分别设置首次引擎和二次引擎为【发光图】,【BF算法】。将【发光图】的【当前预设】设置为【中】(实际调试中可以设置更低的品质,等灯光调整好才输出高品质结果),BF算法计算全局照明为默认不改动,vray渲染设置到此完毕。
    15

  8.  为场景设置主光源,打开灯光选项卡,选择【Target Direct】目标直射光,如下图所示设置,调整好灯光方向。
    16

  9.  为场景中的几个火盆加上点光源,参数如下图所示设置:
    17

  10.  灯光到此设置完毕,最终渲染效果如下图所示:
    18

注意:

  ① 对于比较大的场景,一定要在不同的关键位置渲染效果图,确认效果,避免有死黑的地方。
  ② 由于引擎使用的lightmap为8位jpg格式,灯光不是特殊情况,尽量不要过爆。

Lightmao烘焙:

  1.  确认灯光渲染无误后,就可以开始lightmap的烘焙了,打开层编辑器,选择scene01_LM01层,选择该层所有物体并按【Alt+Q】孤立选择。
    19
    20

  2.  合并模型:选择其中一个物体,如图打开【Attach】命令菜单,将该层其他物体Attach到一起
    21

  3.  备份并替换材质:按【M】打开材质编辑器,先吸取模型材质备份,在重新给模型赋予一个默认材质。
    22

  4.  烘焙设置:先退出孤立选择,显示场景所有模型,然后在选择选择该模型,按【0】打开【Render to Texture】面板,按如下图所示设置:
    23

  5.  Lightmap格式设置,为了保留更多的光照信息,我们采用32位exr文件格式存储光照贴图,lightmap名字与层名字一致,设置如下:
    24

  6.  完成设置后,点击【Render】按钮,等待一段时间,渲染完成得到的即为lightmap。

  1.  重复以上步骤,直到将所有层的lightmap烘焙完毕。

场景引擎输出

场景导出前打组优化:

  1.  打开前面保存的xxx_flash3d文件,如图,选择单个模型,单击【右键】,打开右键菜单,点击【Select Similar】选择所有相同材质模型,并孤立选择。
    25

  2.  如图,框选靠近的模型,使用【Group\Group】命令打组,并且按规则命名,然后隐藏,重复操作,直到把这些模型都分别打组隐藏掉。
    26

  3.  当所有模型隐藏掉后,单击右键打开菜单,退出孤立选择,然后重复1,2步骤,直到场景所有模型打组优化完毕。

注意:

 ① 关于打组模型,一定是要使用了相同材质的模型,不同材质的模型必须分开打组。
 ② 模型打组的目的是为了在引擎中减少同屏drawcall,因此打组范围因项目类型而有所不同,以45度俯视固定视角游戏为例,模型打组的范围,以屏幕显示的一半大小为佳。
 ③ 目前引擎还没有实现该容器,为了保证后面流程稳定,现在先打组。

场景导出以及简单引擎材质设置:

  1.  如图点击awd设置按钮,设置如下,需要注意的是,如果场景没有特殊需求尽量不要勾选【Normals’patch】选项:
    27  

  2.  点击保存按钮即可导出,将导出awd引擎文件。

  3.  打开awd文件,效果如下图所示:没有光影效果,在开始添加光影之前,先做一下模型复用的设置。
    28  

  4.  如图任意选择需要复用的模型,并在属性栏里点击【MergeAll】按钮,所有复用模型就自动共享数据了。
    29  

  5.  现在场景还没有光影效果,还需要设置lightmap实现光影效果,在前面步骤烘焙出来的lightmap格式为32位exr文件,而引擎目前只支持8位jpg格式,因此需要转换格式:在这里需要借助一个转换格式的软件EXRConverter。

  6.  如图:使用EXRConverter打开exr格式的lightmap文件
    30

  7.  通过查看通道,可以发现红色通道最大值已经超过1,为8.46853。如果将其映射到(0,1)的范围我们需要将这个值乘以1/8.46853,但是实际上建议缩放值不低于1/3,以免失真太厉害,即如果缩放值如果小于1/3,则直接取1/3。绿色通道和蓝色通道最大值都没有超过1,因此缩放值不变仍然为1。
    31

  8.  点击开始转化,即可,EXRConverter会在exr目录下生成一个同名的jpg文件。转换对比如图:
    32

  9.  将转换好的lightmap,放到场景贴图目录,打开场景编辑器,如图先添加贴图。
    33

  10.  然后添加一个LightmapMethod,设置如图:需要注意的是,brightness红色通道值需要乘以3,以还原红色通道效果,蓝绿通道因为没有缩放,因此乘以1即可。在勾选应用该效果的材质时,可以发现命名规范非常重要,在这里我们可以方便的选择前缀为LM01的模型勾选。
    34

  11.  重复以上步骤,直到将所有的lightmap设置完毕,至此一个简单场景的引擎输出到此完成。最终场景效果如下图所示:其结果与max中vray渲染出来的结果非常接近。
    35

PS:

 ① 在场景编辑部分最需要注意的地方是模型命名,以及lightmap命名,合理的命名规范将有助于后面引擎编辑效率的提高
 ② 关于模型复用,主要作用是减少内存的占用,因此合理复用模型非常有必要,需要注意的是复用的模型在编辑过程中千万不要再进行重置操作。
 ③ 关于模型打组,主要是减少同屏drawcall,以提高游戏运行的帧率。此外关于模型打组工作量问题,可向秦时明月组找罗刚,他编了个自动大组的插件
 ④ 该规范是基于当前引擎的基础规范,后继引擎可能引入collada格式,针对UV2部分有部分优化,同时整体上会大幅减少工作量。因此流程可能有小幅修改
 ⑤ 该规范场景编辑以及引擎输出基本规范,可参看场景优化进阶(一): 大量物体复用以及纹理合并在数据上产生的优化场景优化进阶(二): 进阶的灯光贴图,高光贴图教程,以及最后效果和负载效率的比对以达到更高优化效率和画面效果。如果有疑问或者错误不足之处,请和TA组联系!欢迎交流!