为游戏制作高度逼真的环境是一项巨大的工程。为了帮助用户应对挑战,我们在 2021.2 Tech Stream 版中推出了许多新功能,包括新的地形图章笔刷、精细的材质绘制控制、地形细节的 GPU 实例化功能和 SpeedTree 集成,外加其他地形创作的体验改进。我们还更新了免费的 Terrain Sample Asset Pack,让你的开发先人一步。
Terrain Sample Asset Pack:
https://assetstore.unity.com/packages/3d/environments/landscapes/terrain-sample-asset-pack-145808
在这一切的背后,是我们的技术美术团队在用高清渲染管线(HDRP,用于PC及高端主机)和通用渲染管线(URP,用于各类平台)制作和优化这个高度逼真的环境。敬请享用我们总结的提示、技巧和最佳实践,以及新的 Unity Terrain HDRP Demo 场景和 URP Demo 场景。
HDRP Demo 场景:
https://assetstore.unity.com/packages/3d/environments/unity-terrain-hdrp-demo-scene-213198
URP Demo 场景:
https://assetstore.unity.com/packages/3d/environments/unity-terrain-urp-demo-scene-213197
制作有机环境的技巧和窍门
使用最新的 Terrain Tools
Terrain Tools 包起初于 2021.2 Tech Stream 版内中验证完成,目前可在 Package Manager 和 World building 功能集中安装。该包配备了额外的地形画笔和实用的工具,可加快你的世界建设流程。
Terrain Tools 包:
https://docs.unity3d.com/Packages/com.unity.terrain-tools@4.0/manual/index.html
内容在引擎与外部 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 制作自己的高度图。
Stamp Terrain(地形图章):
https://docs.unity3d.com/Packages/com.unity.terrain-tools@4.0/manual/stamp-terrain.html
用 Terrain Layer(地形层级)材质绘画
你可能已经知道,Unity 的 Terrain 材质是应用在一个个的Terrain Layer上的。Paint Texture 笔刷支持在场景视图中选取和改变地形材质,而 Brush Mask Filters 和改进后的 Terrain Tools 能以更少的步骤生成同样美观的成果。
Terrain Layer:
https://docs.unity3d.com/Manual/class-TerrainLayer.html
比如Slope 过滤器可将斜坡设为不可绘制的区域。首先在地形的侧表面应用一层草地材质,然后使用 Concavity 过滤器设定特定弯曲度的土层不受影响。你可以禁用其他过滤器、单独应用某个过滤条件,或者在需要时合并多个过滤器。
软件包中还有额外的雕刻画笔,比如 Erosion 和 Noise 效果,在制作中善用这些工具可让地形呈现最佳的效果。
用茂密的植被覆盖地形
自 2021.2 以来,Unity Terrain 可利用GPU 的力量来渲染枝叶、实例化细节。这对草地、灌木等地形上密集的植被来说很实用。
在该功能的帮助下,游戏将能在大部分 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 技术
众所周知,树木对环境的逼真度至关重要。Demo 场景包含了多种源自 SpeedTree 的自定义树木。SpeedTree是一款程序化植被生成器,可生成适用于所有项目、所有规模的高性能植被。在整合至 Shader Graph 后,你现在开箱即能使用 SpeedTree 的所有功能,包括吹风动画、色调变化、展牌渲染等等。类似于材质实例,Shader Graph 的着色器也是可以自定义的,你可以在项目中新建并自由地编辑着色器。打开 Import Settings 下的Extract Materials来开始定制流程。
树木和细节的绘制与原流程相同,仍旧使用Paint Trees 和 Paint Details笔刷来绘制。而 Terrain Tools 的新画笔 API 将允许你创建自定义画笔。Terrain Module 将为你自己的项目制作提供参考。
在支持细节实例、整合了 SpeedTree 后,Shader Graph 支持树木枝叶的高级定制。
用HDRP制作高度逼真的光线
Unity 2021.2 的 HDRP 支持全新的Volumetric Clouds(体积云)系统,可形成高度还原的动态天空。比如,HDRP 的 Physical Sky(真实物理的天空)系统能以现实中的标准参数生成符合物理学的天空光照。
在我们试着还原的白天环境里,太阳光的强度等同于现实中经大气层削弱后的阳光强度:130000 勒克斯,而色温被设置为 5800K,接近一个太阳黑子 。然后我们用 Physical Camera 的后处理效果模仿真正的摄像机来补偿光线的色温。
铺设开来的低矮草丛没必要投下阴影,不然它不仅会产生不小的渲染负担,而且还显得过于虚假、不吸引人。为此我们只采用了少数几种方法来为 Terrain Detail 对象加上合适的光照和阴影,如成本较低、效果较理想的 Contact Shadows。
类似草丛及其他低矮的植被都共享一个环境光探针,以提高渲染性能。这些对象如若无遮挡地接收天空光照往往会导致亮度过高。为此,我们应用了一个单独的“bakingsky”体积,降低天空光照的曝光率并生成一种环境光探针,在降低草从光照强度的同时保留天空的视觉表现。
从HDRP搬到URP
我们的目标是在两条可编程渲染管线中展示新的 Terrain,这对整个团队来说是一次很好的学习机会。
先前提到,Terrain Data 资源可在 HDRP 和 URP 项目之间共享。我们先在 HDRP 项目中制作了整张 Terrain,在铺设完材质和植被后将 Terrain Data 资源导入了 URP 项目。还将 Terrain 地块保存为了 Prefab,加快了向 URP 的移植过程。
两个项目的地形比例与分辨率设置完全相同,但 HDRP 采用了以高度为准的材质混合模式,而 URP 为了最大化图像保真度,默认采用阿尔法混合模式。况且,HDRP 支持最多八个 Terrain 层级相互混合。
我们精心设置了两个项目中的光照和后处理,尽可能地利用起最新的渲染功能。在 HDRP 项目中应用了前边的体积云和程序化天空。这片程序化天空随后被烘焙成纹理,用作 URP 项目的 HDRI 天空。
两者的雾气效果处理方式各有不同。我们在 HDRP 中使用了体积雾来制作湖周围贴地的雾气,在 URP 中则用 Visual Effect Graph 制作了一种自定义的粒子效果。
下方是两者所用功能的大概比较:
最大化Unity Terrain项目性能
对实时 3D 互动体验来说,运行性能非常关键,为此我们采用了几种方法来改善性能。HDRP 和 URP 的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 通道裁剪。
即刻上手
要下载新的 HDRP 和 URP Unity Terrain Demo 场景,请访问资源商店将其直接导入你的 Unity 2021.2 项目。
HDRP Demo 场景:
https://assetstore.unity.com/packages/3d/environments/unity-terrain-hdrp-demo-scene-213198
URP Demo 场景:
https://assetstore.unity.com/packages/3d/environments/unity-terrain-urp-demo-scene-213197
Unity 技术美术团队正在招贤纳士(),欢迎大家在我们的招聘网站查看开放的职位,期待听到您的声音!
Unity 官方微信
第一时间了解Unity引擎动向,学习最新开发技巧
每一个“在看”,都是我们前进的动力
热门跟贴