2024年9月,Unity的演示团队发布了一个新的实时电影级演示《Time Ghost》(时间幽灵)。该演示是用Unity 6引擎创建的,它包含了许多功能和技术能力,这些技术结合在一起,使我们能够实现前所未有的视觉质量和复杂度。
开始制作《Time Ghost》(时间幽灵)时,目标是提高在Unity中构建大型外部环境的标准。这一目标涉及处理更大的复杂性,需要相应的工具支持,并对引擎的核心图形、光照和后期处理相关特性、渲染以及性能提出了更高的要求。虽然我们预计Unity 6中的图形改进会覆盖大部分这些领域,但工具仍然是一个亟待解决的挑战。
随着游戏世界的日益复杂,高效的工具来管理和渲染自然资产变得至关重要。我们需要智能系统来确保环境资产的真实分布和变化。同时,渲染我们计划中的大量植被需要既可扩展又在运行时高性能的技术解决方案。
Unity团队分享给我们如何为《时光幽灵》中的一个场景进行环境工作,并分解所使用的流程和工具。
生成散布数据
作为第一步,我们将构成环境基础的网格导入到DCC软件中——在本例中是Houdini。这些网格可以是激光雷达扫描、无人机扫描,或是Unity中手动雕刻的地形。对于Houdini,我们开发了散布分析工具,这些工具基于地形属性自动放置资产。这些工具帮助我们设计细节丰富且变化多样的连贯环境。通过使用SpeedTree和标准摄影测量工作流,我们创建了高质量的植被预制件并将它们散布到这些网格上。散布系统允许微调随机性和密度参数,以确保自然的植被分布及其变化。
散布数据从Houdini导出为点缓存/点云,使用的是Unity在Github上的VFX Toolbox中提供的Point Cache Exporter HDA的一个稍作修改版本。这个工具的目的是保存每个散布实例的位置,同时也保存缩放、方向、颜色、年龄和健康属性。导出器为每个用于散布的模型生成一个点缓存。
Unity集成
通过使用DOTS(数据导向技术栈)和ECS(实体组件系统),我们可以创建包含数十万实体的场景而不会显著降低性能。这是通过对实体实例化和资源分配的精细管理实现的。
每个由Houdini导出的点云资产实际上只是一系列位置、方向、缩放以及可能的一些额外数据(如年龄、健康、颜色等)。我们将所有Houdini导出的点云收集到一个名为PointCloudFromHoudiniAsset的资源中,该资源读取源点云,根据命名约定找到与给定点云一起使用的预制件,并创建数据的内部表示。这些数据存储在PointCloudFromHoudiniAsset中。然后,烘焙过程利用这些数据将点空间分割成瓦片,以便更快地流式传输。
下一步是在ECS子场景中添加一个创作组件。该创作组件称为ScatterPointCloudAuthoring,它接受一个PointCloudFromHoudiniAsset作为输入,以及一些控制何时加载和卸载数据以及如何细分点云数据的参数。
为了高效地流式传输数据,我们将点云数据细分为场景部分,这些部分可以单独加载和卸载。这允许我们根据观察者距离来卸载和加载部分。这部分大小由创作组件中的ScatterSceneSectionSize属性控制。
然而,这些场景部分相当大,一次性实例化所有内容会导致CPU出现显著峰值。一个场景部分可能包含数十万个点,因此这些部分进一步细分为更小的瓦片,称为散布瓦片(由创作组件中的ScatterTileSize属性控制),实例化逻辑根据宽松定义的重要性规则选择接下来要实例化哪些散布瓦片以及卸载哪些。
Tile impostors
即使能够高效地流式传输实例,我们仍然面临大量的实例需要渲染。其中许多实例相对较小,例如,在远离它们时只覆盖屏幕一小部分的草丛批次。因此,我们也从一些散布实例中烘焙出瓦片替身。一个瓦片替身覆盖特定区域并模仿该区域内散布实例的外观。
数据直接来自点云资产,因为我们希望控制瓦片中包含哪种类型的植被。在我们的案例中,我们仅关注草地资产,并忽略同一位置可能存在的树木。
瓦片替身生成器从上方渲染属于该瓦片的所有实例,生成包含每瓦片近似颜色、法线和深度信息的低分辨率纹理。此外,一些最重要的植物类型被选中并从侧面和上方渲染到图集上。这个图集被所有瓦片替身共享,并用于生成每瓦片低分辨率纹理数据的细节。生成器还创建了一个由四边形组成的网格,代表瓦片并将四边形朝向观察者。
在运行时,我们将每瓦片的低分辨率纹理信息和更详细但通用的植物图集条目投影到瓦片替身网格上,产生瓦片的近似外观。
当摄像机远离某个区域时,单个实例首先切换到较低的LOD级别,最终被瓦片替身替换。瓦片替身也有多个LOD级别,随着摄像机远离,四边形分布变得更稀疏。
大规模效率的替身(Imposter)系统
对于场景中非常遥远的对象,我们使用八面体替身。这种方法允许显示远离摄像机对象的简化版本,使我们能够在视觉保真度和性能之间取得平衡。我们创建了一个简单的工具,可以直接在Unity中生成和集成替身,简化了艺术家的工作流程,提供了高效的方法来保持高视觉标准的同时优化性能。
植被控制系统
我们的植被控制系统引入了复杂的配置设置,允许我们调整诸如风等环境效果。这包括风速、变化和频率的调整,确保环境中的动画元素既逼真又高效。
植被着色器接收健康和年龄属性,并使用这些属性来创造自然的颜色变化和更准确的风互动效果,例如干燥的植物比绿色的植物稍微僵硬且摆动较少。
实体被设计成在场景内与角色真实互动。例如,植被会动态响应角色的存在和移动。该系统使用基于GPU的方法来处理与植被的碰撞等交互,并通过简化的弹簧物理计算和模拟角色与环境元素互动的效果。
高质量环境光照
自适应探针体积
为了获得高质量的光照效果,场景通常需要在不同区域有不同的光照设置。紧密的空间有许多不规则表面供光线反射,而开阔的平原则光照相对均匀,通常需要不同的方法。
Unity 6包含新的自适应探针体积功能,该功能会自动将光探针放置在最需要的地方。
情景融合
情景融合允许我们烘焙不同状态的光照设置并在它们之间混合。
这可以用来为同一环境中不同时间段创建独立的光照情景。改变太阳角度和环境色是通过实时光照完成的,但现在烘焙的光照情景也允许间接光照相匹配。
未来展望
无缝散布和照明大量自然资产的能力——从精细的特写到广阔的视野——对于当今先进的数字环境创建至关重要。基于ECS的方法不仅提升了质量,还在数据处理和解释方面提供了很大的灵活性,考虑到了大型实时3D项目所需的性能需求。
下载示例
正如我们所承诺的,我们将在Unity Asset Store上发布来自《Time Ghost》(时间幽灵)演示的两个Unity项目——一个包含环境场景,另一个包含角色。
为了亲自查看上述流程的结果,您可以下载《Time Ghost: Environment》(时间幽灵:环境)。它包括一个我们在《Time Ghost》(时间幽灵)中创建的环境的Unity 6示例场景。
该示例旨在展示我们使用的技术和方法,以便您可以考虑是否在自己的制作中应用类似的想法。
此外,您也可以在自己的项目中自由使用此场景中的任何内容,包括商业用途。场景中的所有资产都是专门为该项目从零开始创建的,没有使用内容库,以确保我们有合法权利将这些场景提供给您。
评论留言