研发实战:用Unity、3D Max、V-Ray等工具为Quest开发高质量图像

查看引用/信息源请点击:映维网

希望能给你一定的参考借鉴

映维网 2020年01月09日)对于VR游戏开发工作室Arabian Art Studios,其组成人员在游戏行业打滚的岁月加起来超过27年,曾供职过的企业包括西木工作室(Westwood Studios), 艺电(Electronic Arts)和岩石壁画(Petroglyph Games)等等。为了帮助开发者利用他们的开发流程,这支团队最近发布了一个全新的Unity VR游戏示例。日前,核心成员以利·阿拉比安(Elie Arabian)和马特·奥斯特加德(Matt Ostgard)撰文介绍了这个示例及相关技巧步骤。下面是映维网的具体整理:

如需下载所述的Unity游戏示例,请前往Oculus Ogre Sample下载页面

我们Arabian Art Studios从2016年开始为Gear VR开发VR游戏,并一直寻求在相关的系统限制下实现我们最佳的视觉效果。最低硬件规格是三星Note 5。所以,我们在与制作阶段了进行了一系列的性能测试:最大绘制调用,可持续的顶点/多边形数量,烘焙照明与动态照明,蒙皮网格性能等等。我们根据相关的测试开发了一个管道,而它为我们的游戏提供了最佳的视觉效果。

利用这一流程开发的首款演示内容是《Cursed Sanctum》(下面第一组图像)。所述作品于2017年3月发行,并且依然支持Gear VR和Oculus Go。我们的第二款作品《Myth Hunters》已于2019年12月5日与大家见面。这是一款完整的游戏,并且采用了我们先前开发的众多技术。

随着时间的流逝,原本专属于特定软件平台的工具开始日渐普遍,尤其是GPU纹理烘焙,所以我们的方法现在可以在大多数流程管道中使用。今天,我们将向大家介绍基于Unity的Oculus Quest演示作品《Ogre Smithy and His Workshop》,并用于展示了我们的工具和流程管道。我们在下面的博文中提供了这个示例的概述,包括如何准备3D asset,Unity管道的设置,以及工作流程的基本教程。我们希望能够为你提供一定的借鉴参考,从而帮助你不断创造具有优秀视觉体验的游戏内容。

1. 包括在场景中的3D asset

所有asset均使用生成游戏美术的标准做法进行建模和构造。创建高细节模型,然后是优化的拓扑网格及纹理处理。我们的管道包括ZBrush,3DS Max,Photoshop,Substance Painter和Unity。

2. 场景构建及管道

在导入Unity之前,我们用于创建场景和纹理烘焙的管道是基于3D Studio Max(Autodesk)和V-Ray(Chaos Group)。然后,我们使用V-Ray的控制和渲染功能将所有照明和高多边形细节烘焙到低多边形的游戏内asset。对于《Ogre》演示,我们同时使用Substance Painter对一定的asset进行处理,将高多边形细节烘焙到低多边形asset。

为了确保这个过程的成功,高多边形和低多边形asset必须共享相同的坐标,并且必须彼此重叠。上面是两者的视图,你可以看到高多边形asset中的几何细节水平。对于场景构建,模型始终是作为一个asset进行移动。

3. 为3DS Max预备asset

第一步是在3DS Max中使用V-Ray材质获得基本几何形状。我们使用“Vray” Config从Substance Painter导出纹理。

导出纹理后,我们需要将其分配给3DS Max中的V-Ray着色器,并将其应用于烘焙对象。材质类型必须切换为VrayMTL。从Substance导出的所有纹理类型在VrayMtl中都有一个类似命名的字段。对于凹凸贴图,请确保使用“VrayNormalMap”类型。考虑到我们在演示内容中同时使用了高多边形烘焙对象和低多边形烘焙对象,这确实是需要在制作期间做出的决定。由于场景完全依赖于密集的高多边形烘焙对象,3DS Max文件往往会变得非常大,甚至达到千兆字节。每种方法的决定应视场景而定,我们需要将唯一asset的数量,每个细节的大小+密度,文件大小,以及最终视觉目标都考虑在内。

即便有了从Substance Painter导出至V-Ray的预设,我们发现正常凹凸的绿色通道通常都需要翻转才能获得正确的结果。

4. 3DS Max中的场景装配

一旦预备好所有的asset,并且都具有高多边形“烘烤”和低多边形“投影”就绪的asset,我们就可以装配场景。场景装配非常简单,只需将素材放置在3D空间中即可创建完整的环境。我们强烈建议使用实例或引用方法来复制asset,从而将场景文件的内存占用降至最低。设置分层系统非常重要,这允许你轻松选择场景中的高多边形和低多边形对象。最终,低多边形将作为单个对象组合在一起。在《Ogre》中,由于我们在Substance中烘焙了大量的正常数据,所以我们能够将项目的低多边形对象用作高多边形的基础。

下图是High_Exeterior_Terrain_High中的Sand_Floor视图。asset包含230万个顶点。

沙漠地面切分成较小的块状,从而平衡每个对象的多边形数量,并且当它不在camera视场中时利用遮挡剔除的优势。

注意“Bake”图层asset的命名和层次结构约定;文件组织和asset命名令我们在3DS Max和Unity中执行每个步骤变得更加容易。

对于性能,除了最小化绘制调用,重要的一环是减少多边形。在确定场景后,请删除不必要的多边形,从而减少游戏中的几何形状。

建立场景后,我们需要进行纹理烘焙的准备。在这个步骤中,我们将各个游戏asset组附加在一起,并变成一个唯一的对象。通过附加对象,组合对象的UVW坐标将重叠。必须在纹理烘焙之前解决这个重叠问题,而你只需将组合对象的UVW坐标移动到UVW2并扩展即可消除重叠。组合对象的数量通常取决于每个对象的多边形计数要求,以及最终场景中的总绘制调用。

下图是对象组合并将坐标重新映射到UVW2的另一示例:

一旦组合所有游戏asset并重新映射,我们接下来就可以进行场景烘焙。前提条件是,必须使用V-Ray照明场景。对于这个阶段的可视化,我们可以将其作为高多边形场景的渲染并使用GPU渲染。

《Ogre》场景演示了两种纹理烘焙方法,在这里进行区分说明十分重要。在3DS Max中,对象可以自行投影,或通过投影修改器将一组对象投影到另一个对象。要指定纹理烘焙,我们使用“Rendering”选项卡中的“render-to-texture”选项。选择将为其分配投影纹理的对象。然后,我们需要为纹理烘焙设置所需的设置。对于这个示例,我们的过程要求使用“VrayCompleteMap”输出类型。有关V-Ray的详尽指南说明,请参见这个教程:Basic Texture Baking with V-Ray

5. 自投影

万分注意:请不要启用“Mapping”字段,并确保设置正确的UVW通道。

6. 投影另一个对象

要启用“Projection Modifier”字段,请确保设置正确的UVW通道。将Push修改器应用于烘焙对象,并确保Push修改器设置一个足够大的值,以消除高多边形基础几何图形和游戏内投影几何图形之间的相互穿透,否则烘焙的纹理将出现撕裂。

关于在3DS Max中使用V-Ray进行烘焙的最后一点说明。在撰写本文时(2019年12月),烘焙对象需要完全透明的VrayMtl才能正确渲染。未来的软件迭代或许能够解决这个问题。

尽管所述步骤特定于这个软件组合,但方法中的许多都可以与其他软件管道结合使用。

请始终将纹理烘焙为具有48位和Alpha的PNG文件。有时,烘焙的纹理会变暗,这需要在Photoshop中进行处理。使用48位可以调整曝光,不会造成褪色和条纹。

我们在Photoshop中使用一组动作来处理和填充渲染纹理的空白。

出于美学原因,可以全局调整纹理。通过对场景整体执行所述步骤,我们不会造成接缝,并且可以进行大大小小的更改,无需重新渲染。请参见下面的渲染和纹理烘焙处理示例:

作为最终检查,准备就绪的asset应将烘焙纹理用作自发光材质。这个过程将验证烘焙的纹理,并公开需要解决的所有错误。一旦画面看起来正确,场景就可以导出到Unity。通常,我们在导出前会应用Reset XForms,对齐轴,并检查所有对象的法线。

7. Unity管道

有了上面一系列的场景设置和制作工作,Unity的操作过程相当简单。上面提到的部分Unity功能可以在线学习,我们接下来不会逐步介绍。

7.1. 将asset导入Unity

在正确命名所有asset的情况下,请以最适合项目的文件夹结构将将FBX和纹理导入Unity。通常,我们将几何与纹理和着色器分开。由于这是一个导出场景,因此所有内容都位于相同的相对位置。要令场景看起来令人满意,你只需为每个纹理创建一种材质并将其应用于每个几何体。

一旦放置在场景中,新导入的FBX应该设置为静态,而网格渲染器的“Receive Global Illumination”下拉菜单应设置为“Light Probes”。这可以告诉Unity不要生成光照贴图,但允许几何体影响光探针。

对于这个演示内容,我们在Unity中使用了“Lightweight Render Pipeline/Unlit”着色器。

下一步是应用天穹,而这在烘培过程中非常重要。

在完全设置场景后,下一步就是添加Unity光探针和反射探针。这个管道中没有动态Unity光源,所述探针将用于在Unity中烘焙光源和反射贴图,以供场景中动态对象的着色器接收光信息。

光探针和反射探针示例配置。上图:外面;下图:里面

设置好探针后,我们需要进行快速光烘培。我们发现缺乏一个乘法因子的基础纹理不允许足够的光发射到探针。要解决此问题,我们在烘培之前执行以下操作:

暂时将材质的着色器设置为“Lightweight Render Pipeline/Lit”。请记住,如果你是使用最新版本的Unity,它的名称可能是“Universal Render Pipeline/Lit”。

勾选Emission复选框。(仅限第一次烘培)

将烘焙纹理分配给Base Map和Emission Map参数。(仅限第一次烘培)

要增强光探头,请将Emission Color设置为2、2、2(RGB)。(仅限第一次烘培)

保存项目(File & Save Project),储存材质改动以供日后使用。 (仅限第一次烘培)

依次转到Lighting选项卡((Window > Lighting Settings),然后点击“Generate Lighting”按钮以烘培场景。

选择所有场景材质,并将着色器设置回“Lightweight Render Pipeline/Unlit”。

通过Lighting选项卡及“Generate Lighting”按钮的下拉箭头烘焙反射探针。然后,保存项目(File > Save Project)。现在,场景已经可以用于游戏之中。

烘焙光探针后及在烘焙反射探针之前,我们必须将材质恢复到标准曝光范围,这一点十分重要。如果不这样做,场景中的动态对象在游戏中会太亮。

8. 管道的优势

我们在三年前就开始构建这个管道流程,目标是减少Gear VR和三星S5的绘制调用并创建最佳视觉效果。我们对这两种情况的结果都感到满意。

下面是采用这一管道的其他原因:

  1. 烘烤单个或多个选定的asset。
  2. V-Ray强大的控件可用于微调渲染,能够提高质量和节省制作时间。
  3. 非常高性能的着色器可用于静态几何体。
  4. 允许高多边形计数,这在VR中的效果非常好,因为深度细节对视觉影响很大。
  5. 粗糙表面的视觉效果更好,相当光滑的表面看起来也不错。

9. 管道的挑战

我们在使用这个管道时确实有遇过一定的挑战。下面是采用这一管道的其他原因:

  1. 当场景接近最终场景时,场景几何的迭代可能会令人生畏且耗时。
  2. 要取得满意的结果,你需要采取许多个步骤并留有出错的余地,因为场景变大了且越来越复杂。
  3. 组合烘焙对象和重新映射UVW坐标的过程变得非常耗时,而且分组更加复杂。
  4. 基础几何图形和烘烤几何图形需要保持同步。
  5. 在环境中使用的动态照明将无法正常工作,或者至少看起来不会很好。
  6. VRAM/磁盘使用率很高。sparse virtual texture或许可以绕开这个问题。

10. 下载示例项目

首先,你需要下载这个Unity项目。它至少需要Unity 2019.2,并且是尝试这一示例的推荐版本。打开OculusOgrePrototype.unity。如要构建和部署场景,你需要输入自己的签名证书,然后就可以正常地进行开发并部署到Quest。有关如何构建并将将Unity应用部署到Quest的更多信息,请参见这个文档页面

11. 总结

《Cursed Sanctum》显然受益于这个管道流程,即使已经过去两年,这款游戏依然凭借视觉效果获得Gear VR和Go玩家的好评。我们继续在《Myth Hunters》沿用这一流程管道,而它使得我们的平均纹理烘焙时间从4个小时降低到20分钟。展望未来,我们将评估Unity的变化以及GPU支持纹理烘焙的实现,从而确定是否可以在场景构建和烘焙过程中更多地利用Unity。另外,随着VR硬件性能的提升,数年前的多个性能瓶颈将渐渐变得不再重要,并允许我们调整流程,从而更好地开发未来的游戏。感谢你抽出时间阅读我们的博文,希望这能够为你提供帮助。

 

原文链接https://yivian.com/news/70821.html
转载须知:转载摘编需注明来源映维网并保留本文链接
英文阅读:点击前往映维网合作伙伴 RoadtoVR 阅读专业英文报道
入行必读:深度分析:AR的过去、现在、未来与现实

更多阅读推荐......

发表评论(仅展示精选评论)

首页