搜索 Unity

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

2022年2月18日 类别 游戏 | 18 分 阅读
Unity Terrain Glade
Unity Terrain Glade
涵盖的主题
分享

Is this article helpful for you?

Thank you for your feedback!

在本文中了解技术美术的制作体会,并学习怎样做出一个有机的游戏环境。

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

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

技术美术团队介绍

Xiaoxi Liu

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

Barrington Campbell

大家好,我的名字是Barrington Campbell。我在2019年作为实习生加入Unity,然后在2020年转为全职的技术美术。在Unity时,我的工作是改进Terrain系统,从事工具开发和改进用户工作流程。工作之余,我喜欢改装自己的赛车,在周末开车竞速。

制作有机环境的技巧和窍门

使用最新的Terrain Tools

Terrain Tools包起初于2021.2 Tech Stream版内中验证完成,目前可在Package Manager和Worldbuilding功能集中安装。该包配备了额外的地形画笔和实用的工具,可加快你的世界建设流程。

Unity Terrain Satellite

内容在引擎与外部DCC间的往返

在Terrain Demo项目的制作前期,我们的技术美术团队挑出了几个关键要素予以着重关注,并最终决定优先制作详细的高度图和密集的植被。

我们使用了程序化地形生成工具Gaea来生成高清heightmap(高度图)和splatmap(泼溅图,应用在上层的alpha贴图),再使用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的力量来渲染枝叶、实例化细节。这对草地、灌木等地形上密集的植被来说很实用。

Unity Terrain Lake

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

带有细节实例的高级着色

实例化细节所支持的自定义材质是HDRP和URP的一大优势。为了最大化材质效果,我们推荐使用Shader Graph来编写草地材质。接下来,我们来仔细了解下TerrainGrass.shadergraph。 

在Shader Graph更新了Custom Interpolators(自定义插值)之后,我们现在能在更早的Vertex阶段控制顶点,并提高顶点的整体性能。在项目中,风的动画是在Vertex阶段完成的,而草的淡出则借助了颜色与环境遮蔽、摄像机距离来实现。由于场景中有大量随机化实例,且支持放置单独的草丛对象,你完全可以用着色器制作随位置改变的超酷效果,如风吹过草丛、混合底部地形颜色。

然而值得注意的是,LOD Group不兼容地形细节,你可以试着用Prefabs来保存细节,在Shader Graph着色器里或地形上的Detail Distance(细节距离)设置来调整淡出的距离。

善用SpeedTree技术

Unity Terrain Forest

众所周知,树木对环境的逼真度至关重要。Demo场景包含了多种源自SpeedTree的自定义树木。SpeedTree是一款程序化植被生成器,可生成适用于所有项目、所有规模的高性能植被。 在整合至Shader Graph后,你现在开箱即能使用SpeedTree的所有功能,包括吹风动画、色调变化、展牌渲染等等。类似于材质实例,Shader Graph的着色器也是可以自定义的,你可以在项目中新建并自由地编辑着色器。打开Import Settings下的Extract Materials来开始定制流程。

树木和细节的绘制与原流程相同,仍旧使用Paint TreesPaint Details笔刷来绘制。而Terrain Tools的新画笔API将允许你创建自定义画笔Terrain Module将为你自己的项目制作提供参考。

在支持细节实例、整合了SpeedTree后,Shader Graph支持树木枝叶的高级定制。相关问题及其他更多细节请在我们去年的Siggraph演讲中了解。

用HDRP制作高度逼真的光线

Unity Terrain Hillside

Unity 2021.2的HDRP支持全新的Volumetric Clouds(体积云)系统,可形成高度还原的动态天空。比如,HDRP的Physical Sky(真实物理的天空)系统能以现实中的标准参数生成符合物理学的天空光照。 

在我们试着还原的白天环境里,太阳光的强度等同于现实中经大气层削弱后的阳光强度:130000勒克斯,而色温被设置为5800K,接近一个太阳黑子 。然后我们用Physical Camera的后处理效果模仿真正的摄像机来补偿光线的色温。

铺设开来的低矮草丛没必要投下阴影,不然它不仅会产生不小的渲染负担,而且还显得过于虚假、不吸引人。为此我们只采用了少数几种方法来为Terrain Detail对象加上合适的光照和阴影,如成本较低、效果较理想的Contact Shadows

类似草丛及其他低矮的植被都共享一个环境光探针,以提高渲染性能。这些对象如若无遮挡地接收天空光照往往会导致亮度过高。为此,我们应用了一个单独的“baking sky”体积,降低天空光照的曝光率并生成一种环境光探针,在降低草从光照强度的同时保留天空的视觉表现。

从HDRP搬到URP

我们的目标是在两条可编程渲染管线中展示新的Terrain,这对整个团队来说是一次很好的学习机会。 

先前提到,TerrainData资源可在HDRP和URP项目之间共享。我们先在HDRP项目中制作了整张Terrain,在铺设完材质和植被后将TerrainData资源导入了URP项目。还将Terrain地块保存为了Prefab,加快了向URP的移植过程。

两个项目的地形比例与分辨率设置完全相同,但HDRP采用了以高度为准的材质混合模式,而URP为了最大化图像保真度,默认采用阿尔法混合模式。况且,HDRP支持最多八个Terrain层级相互混合。 

我们精心设置了两个项目中的光照和后处理,尽可能地利用起最新的渲染功能。在HDRP项目中应用了前边的体积云和程序化天空。这片程序化天空随后被烘焙成纹理,用作URP项目的HDRI天空。

两者的雾气效果处理方式各有不同。我们在HDRP中使用了体积雾来制作湖周围贴地的雾气,在URP中则用Visual Effect Graph制作了一种自定义的粒子效果。

下方是两者所用功能的大概比较:

Unity Terrain comparison table

最大化Unity Terrain项目性能

对实时3D互动体验来说,运行性能非常关键,为此我们采用了几种方法来改善性能。 HDRPURP的Render Pipeline配置文件支持为每一个运行平台创建各自的自定义设置。以URP项目为例,我们分别创建了高质量和低质量两种配置文件,仅在高质量配置下启用高清阴影贴图和HDR功能。如此一来,你就能在Project Settings > Quality设置下轻松修改配置。事实上,你可以直接到Graphics设置中切换Render Pipeline配置文件,在编辑器中直接切换和预览场景的各种设置。

除了性能相关的Project Level设置外,我们还优化了部分地形内容。例如在HDRP场景中,我们降低了远处地形块的分辨率,但此类优化只应在地形绘制完成后进行。否则,不同的分辨率会导致相邻地块的绘制结果出现不同。

当运行于低端平台时,密集的细节是最常见的性能杀手。这时,地形必须有更少的顶点数。在HDRP场景中,我们将细节密度设置为0.75,在摄像机所在的中心地块上将近处剔除距离设为了145米。你可以自行实验各种细节密度与剔除距离的参数组合,找出最适合的配置。此外,你可以调整树木的LOD距离,更早地应用LOD和Billboard展牌,取得一定的性能收益。

如果是URP项目想运行在不支持GPU实例化、或硬件配置非常有限的平台上,你可以选择用Vertex Lit模式来渲染地形细节。不同于实例化细节,该模式不支持阴影、双面渲染或alpha通道裁剪。

想要了解更多?那就在这篇博文和这段Unite Now视频中了解其他性能优化的技巧和窍门吧。

即刻上手

要下载新的HDRPURP Unity Terrain Demo场景,请访问资源商店将其直接导入你的Unity 2021.2项目。在探索完新场景后,欢迎大家前往Worldbuilding论坛留下你们的想法。 

更多未来的开发规划请访问Unity Roadmap了解。

最后,Unity技术美术团队正在招贤纳士,欢迎大家在我们的招聘网站查看开放的职位。我们期待听到您的声音!

2022年2月18日 类别 游戏 | 18 分 阅读

Is this article helpful for you?

Thank you for your feedback!

涵盖的主题