体验HDRP和URP的新Unity Terrain Demo场景

为游戏制作高度逼真的环境是一项巨大的工程。为了帮助用户应对挑战,我们在2021.2 Tech Stream版中推出了许多新功能,包括新的地形图章笔刷、精细的材质绘制控制、地形细节的GPU实例化功能和SpeedTree集成,外加其他地形创作的体验改进。我们还更新了免费的Terrain Sample Asset Pack,让你的开发先人一步。在这一切的背后,是我们的技术美术团队在用Unity的高清渲染管线(HDRP,用于PC及高端主机)制作和优化这个高度逼真的环境,并将其迁移到Unity的通用渲染管线(URP,用于各类平台)。敬请享用我们总结的提示、技巧和最佳实践,以及新的Unity Terrain URP Demo场景和HDRP Demo场景。

大家好。我叫Xiaoxi Liu,于2018年加入Unity,是一名技术美术。我专注于改进UnityTerrain系统到Shader Graph的功能和美术工作流程。在业余时间,我喜欢和我四岁的儿子一起户外运行。

大家好,我的名字是Barrington Campbell。我在2019年作为实习生加入Unity,然后在2020年转为全职的技术美术。在Unity时,我的工作是改进Terrain系统,从事工具开发和改进用户工作流程。工作之余,我喜欢改装自己的跑车,在周末开车竞速。
Terrain Tools包起初于2021.2 Tech Stream版内中验证完成,目前可在Package Manager和Worldbuilding功能集中安装。该包配备了额外的地形画笔和实用的工具,可加快你的世界建设流程。

内容在引擎与外部DCC间的往返
在Terrain Demo项目的制作前期,我们的技术美术团队挑出了几个关键要素予以着重关注,并最终决定优先制作详细的高度图和密集的植被。
我们使用了程序化地形生成工具Gaea 来生成高清heightmap(高度图)和splatmap(泼溅图),再使用Toolbox将这些贴图导入编辑器。在处理高度图时,我们使用了Import Heightmap工具将其应用于一张4x4的平铺地形,比例为4000距离单位。然后又使用Import Splatmap工具将splatmap应用到地形上。这个流程是我们在制作过程中确立的,它可以支持内容在Gaea和Unity Terrain间的往返编辑。
在初次导入Unity后,我们便取得了一张非常不错的地形作为基础,其中有部分区域仍需手动调整。
用高度图图章绘制
Stamp Terrain(地形图章)笔刷是一种可以快速修改地形高度、让地形更加逼真的工具。Terrain Sample Asset Pack自己包括几张现成的高度图,当然你也可以用DCC制作自己的高度图。
用Terrain Layer(地形层级)材质绘画
你可能已经知道,Unity的Terrain材质是应用在一个个的Terrain Layer上的。Paint Texture笔刷支持在场景视图中选取和改变地形材质,而Brush Mask Filters和改进后的Terrain Tools能以更少的步骤生成同样美观的成果。
比如Slope过滤器可将斜坡设为不可绘制的区域。首先在地形的侧表面应用一层草地材质,然后使用Concavity过滤器设定特定弯曲度的土层不受影响。你可以禁用其他过滤器、单独应用某个过滤条件,或者在需要时合并多个过滤器。
软件包中还有额外的雕刻画笔,比如Erosion和Noise效果,在制作中善用这些工具可让地形呈现最佳的效果。
自2021.2以来,Unity Terrain可利用GPU的力量来渲染枝叶、实例化细节。这对草地、灌木等地形上密集的植被来说很实用。

在该功能的帮助下,游戏将能在大部分PC上以远高于60帧的速度实例化上百万个细节。比如Demo场景就有超过5000万个三角形在几个不同角度的视图中被渲染。要想启用实例化,请选择编辑详细网格并勾选使用GPU实例化框。

带有细节实例的高级着色
实例化细节所支持的自定义材质是HDRP和URP的一大优势。为了最大化材质效果,我们推荐使用Shader Graph来编写草地材质。接下来,我们来仔细了解下TerrainGrass.shadergraph。
然而值得注意的是,LOD组组件与地形细节不兼容,尽管你仍然可以使用Prefab来处理细节,并在Shader Graph着色器中或通过地形上的细节距离设置来调整剔除距离。
善用SpeedTree技术



Unity 2021.2的HDRP支持全新的体积云系统,可形成高度还原的动态天空。比如,HDRP的Physical Sky(真实物理的天空)系统能以现实中的标准参数生成符合物理学的天空光照。
在我们试着还原的白天环境里,太阳光的强度等同于现实中经大气层削弱后的阳光强度:130000勒克斯,而色温被设置为5800K,接近一个太阳黑子。然后我们用物理相机的后处理效果模仿真正的摄像机来补偿光线的色温。
铺设开来的低矮草丛没必要投下阴影,不然它不仅会产生不小的渲染负担,而且还显得过于虚假、不吸引人。为此我们只采用了少数几种方法来为Terrain Detail对象加上合适的光照和阴影,如成本较低、效果较理想的接触阴影。
类似草丛及其他低矮的植被都共享一个环境光探针,以提高渲染性能。这些对象如若无遮挡地接收天空光照往往会导致亮度过高。为此,我们选择使用一个单独的“baking sky”体积。这使我们能够降低用于生成环境探针的天空曝光率,降低草的光照强度,而不改变场景中天空的视觉外观。
我们的目标是在两条可编程渲染管线中展示Terrain,这对整个团队来说是一次很好的学习机会。
正如我们所示,TerrainData资源可在HDRP和URP项目之间共享。我们先在HDRP项目中制作了整张Terrain,在铺设完材质和植被后将TerrainData资源导入了URP项目。通过将Terrain地块转换为Prefab,我们加快了向URP的集成过程。
两个项目的地形比例与分辨率设置完全相同,但HDRP采用了以高度为准的材质混合模式,而URP为了最大化图像保真度,默认采用阿尔法混合模式。况且,HDRP支持最多八个Terrain层级相互混合。
我们精心设置了两个项目中的光照和后处理,尽可能地利用起最新的渲染功能。在HDRP项目中应用了前边的体积云和程序化天空。这片程序化天空随后被烘焙成纹理,用作URP项目的HDRI天空。
两者的雾气效果处理方式各有不同。我们在HDRP中使用了体积雾来制作湖周围的低雾,但在URP中使用Visual Effect Graph制作了自定义粒子效果。
下方是两者所用功能的大概比较:


除了性能相关的Project Level设置外,我们还优化了部分地形内容。例如在HDRP场景中,我们降低了远处地形块的分辨率,但此类优化只应在地形绘制完成后进行。否则,不同的分辨率会导致相邻地块的绘制结果出现不同。
当运行于低端平台时,密集的细节是最常见的性能杀手。这时,地形必须有更少的顶点数。在HDRP场景中,我们将细节密度设置为0.75,在摄像机所在的中心地块上将近处剔除距离设为了145米。你可以自行实验各种细节密度与剔除距离的参数组合,找出最适合的配置。此外,你可以调整树木的LOD距离,更早地应用LOD和Billboard展牌,取得一定的性能收益。
如果您使用URP并为不支持GPU实例化或硬件带宽非常有限的平台构建,您可以选择Vertex Lit模式来渲染Terrain细节。不同于实例化细节,该模式不支持阴影、双面渲染或alpha通道裁剪。
要访问新的Unity Terrain Demo场景,适用于HDRP和URP,请访问资源商店并将其直接导入您的Unity 2021.2项目。一旦您有机会充分探索这些场景,请在Worldbuilding论坛上告诉我们您的想法。
有关未来的更多信息,请访问Unity Roadmap。
最后,Unity技术美术团队正在招贤纳士,您可以在我们的网站上查看开放的职位。我们期待听到您的声音!
