首页 关于我们

CG世界 2024/09/30 19:20



《黑神话:悟空》的大火,让它背后功臣之一的UE5狠狠刷了一波存在感(虽然之前就已经充满存在感)。

眼看着UE5势头越来越旺,隔壁的Unity坐不住了。这不,在不久前的Unite2024大会上,拉出了自家最新版本游戏引擎Unity6来炸场。

整场大会干货满满,最炸裂的极大场面之一,就是Unity6的技术能力展示。一段名为《Time Ghost》的4分钟短片,呈现的是一名貌似从蒸汽朋克风格的一战战壕中逃脱出来的士兵,在一个看起来巨大且空旷的山地中探险的情景。

《Time Ghost》是由《铁匠》、《亚当》、《死亡之书》、《叛教者》和《敌人》等项目背后的团队开发的最新 Unity 原创实时电影演示,使用了Unity6早些时候发布的预览版中引入的一些新特性。

这段影片当天是实时运行在一个GeForce RTX 4090显卡上,重点突出了Unity6在视觉质量、项目复杂度方面的进步以及机器学习工作流程的实际应用。

全方位展示了Unity 6引擎在光照、毛发处理以及大规模环境方面的强大实力。

除了展示这段名为《Time Ghost》的短片,当天幕后团队还从如何创建大型环境、高保真视觉特效、灯光设计以及构建角色等几个大方面做了技术分享。





废话不多说,赶快跟着编编一起来看下吧:

PART 01

TIME GHOST



环境创建


地形生成

首先从地形生成开始,这里提到的地形,指主要的水平和垂直地标,也就是角色站立、奔跑、垂死或执行其他动作的地方,如山脉、巨石、甚至是洞穴等大的垂直元素。

这里使用了两种不同的方式进行地形创建:完全从零开始创造环境和基于现实世界地点建造环境。

第一种情况下,团队决定使用Houdini来从零开始建立地形,选择Houdini的原因是它不仅是一个地形生成工具,用户同时还能使用其中的任何其他工具。另外Houdini与Unity交互得很好,可以在两者之间轻松切换,进行创作和修改,整个迭代无比灵活。

整个短片中,大约有一个半的环境是从零开始创建的。比如下面我们看到的非常平坦的战争场景环境,团队从零开始,创建了一个2*2公里的环境。首先确定环境中的主要建筑地标,加入一些地形变化以增加环境的层次感。然后将创建的地形导入Unity,继续进行微调。

在Unity中,团队会对地形进行基础的纹理测试,并通过摄像机检查效果。如果战壕的高度不对,就再进行调整,继续添加更多细节(如处理着色器),使用Shader Graph确保从近景到远景的视觉效果都令人满意。

确定了地形和基础纹理后,团队从资产库中选取适合环境的道具(如建筑物、车辆等)进行布置,继续不断通过摄像机视角检查效果。最后一步,是散布植被、鹅卵石等小元素,增加环境的真实感,当然这一过程也是通过摄像机视角反复测试,确保视觉效果最佳。

而对于那些基于现实世界位置构建的环境,方法略有不同,但流程基本相似。首先选定一个适合故事发展的地方,然后带着无人机进行现场勘景,用无人机进行摄影测量,通过软件处理分析无人机从不同角度拍摄的照片,获取真实世界地形的数据,以便创建更逼真的环境。

另一方面,团队还大量依赖于LiDAR数据来创建地形,LiDAR数据提供了高精度的高度信息,这对于创建真实的地形至关重要。

每个环境块包含五千万个点,这样的大数据量使得处理起来非常困难。处理如此庞大数据集几乎不可能,为了简化处理,团队选择将数据“平面化”:存储每个点的高度信息,并重新投影成体素(voxel)形式,以便更容易处理数据。在这一形势下,可以执行清理、修改数据等任何操作。

为确保数据可以在软件之间顺畅传输,团队建立了从Houdini到Unity的高效工作流,将处理后的体素(voxel)数据导入Unity的地形系统,直接在编辑器中进行进一步的调整和迭代。

在Unity中,团队可以通过放置摄像机来预览环境,并在此基础上进行迭代。还能够从点云数据中导出颜色信息、法线贴图等,用于增加地形的高频细节。同时使用拼贴图来增强纹理,或者用于散布等任务。

在创建虚拟环境时,可以根据项目的具体需求进行选择,无论是从零开始创建还是基于现实世界数据创建环境,关键是建立一个灵活且允许迭代的稳健工作流程。


资产构建

另外的一大挑战是资产构建,团队没有使用任何在线资产库,从一片草叶到一块石头,再到一座山、一处悬崖,都是专门为了这个项目从零开始构建的。

资产的来源大致分以下几种:
摄影测量:使用标准的交叉极化设备来扫描小型到中型资产;
无人机摄影测量:捕捉地形、山脉等大型元素;
光度扫描:创建植被图集和角色的服装材质;
SpeedTree:创建草、植物、树木和一般植被;
程序化资产创建:创建背景资产;

手工建模:用于创建建筑物等非程序化资产。

处理完这些工作之后,导入Unity,根据环境分类(每个环境有一个资产库),另外团队还建立了一个庞大的植被库,方便艺术家在工作时可以快速选择资产使用。

团队使用了程序化建模工具SpeedTree来创建了短片中的树木,将附带纹理的树木资产导入到Unity,再用基于扫描的材质来增强树木的纹理。稍微远一点的背景树木,则可以一键生成假象(imposters)资产。

最后,团队还制作了一个程序化工具来布置根系系统。


scattering

通过在地形上分布各种资产(如植被、岩石等),可以提升环境的真实感和生动性。

团队在Houdini中进行分布规则的设置,同时开发了一个用户界面,暴露了一些参数给用户,以便艺术家可以轻松调整资产分布规则。从Houdini导出含点信息的数据集,由于点云(point cloud)数据非常轻量,可以轻松传入Unity。

在Unity中,每个点携带有关放置何种资产的信息,点云数据转换为实际资产,每个点包含资产应放置的位置及其属性信息。Unity会根据点云数据在指定位置放置预置体,并转换为点实体。不仅提高了效率,还可以与风系统以及角色互动结合起来,使环境更具动态性。

具体示例如下,使用Houdini中的工具来分析环境,创建分布规则。自动生成遮罩,根据规则散布点云数据,当然也可以手动绘制遮罩。

至于植被资产,可以将相关信息输入到Houdini中,设置比例、旋转等变化来增加自然感。这里提供了如密度、聚类等多种控制选项(但大多数时候保持简单的随机化设置),可以选择使用一个或多个散布系统来增加灵活性。

通过使用Unity的实例化功能,可以高效渲染许多相同资产的副本。LOD(Level of Detail)系统,还能确保远处的资产以较低的细节级别渲染,减轻GPU的压力。

PART 02

TIME GHOST



视觉效果

在创建短片中的战争场景时,团队使用了大量视效。

团队利用了Unity的VFX Graph和粒子系统,以及Houdini/Blender中的六向光照和Flipbooks等技术,创造了大量视觉效果。在增强场景真实性的同时,也注意到了性能的平衡。

地面模拟

RBD模拟:用于模拟刚体动力学,如地形破坏、建筑物倒塌等。
虚拟动画纹理:用于模拟动态效果,如燃烧的余烬、闪烁的火焰等。

爆炸效果

六向光照:虽然不是完全的体积光,但在调整和与光照互动方面表现良好。

Flipbooks:用于模拟火焰、烟雾组件。

点光源:添加在每个爆炸上,以控制爆炸的冲击波及互动光照。

碎片和脚印

粒子系统:用于模拟碎片喷射,如土壤、灰尘和鹅卵石飞散。
视觉效果图(VFX Graph):用于创建脚印,使角色与环境互动更加自然。

烟雾和雾气

局部和全局体积雾:增加场景的深度和氛围。
视觉效果图、Flipbooks:用于模拟背景中的火焰。

其他次要视觉效果

子弹击中效果:增加细节,使战斗更加生动。
特殊粒子效果:增加空中的复杂度和真实感。

RBD模拟:低分辨率模拟,但通过纹理和二级视觉效果(如碎片、尘土等)增强了真实感。

团队创建了多个可以随意调整和组合的子组件,虽然在短片中有些细节可能不是很容易被看到,但这些特效确实为增加最终画面的真实感做出了很大贡献。

PART 03

TIME GHOST



光照环境

在实时渲染的战争场景时,团队使用了自适应探针体积(APVs)以及其他照明技术来达到所需的视觉质量,同时保持实时性能。


光照设计

1.自适应探针体积(APVs):在场景内多个点和方向采样照明环境(样本用于插值采样点间的照明),提供了一种近似全局光照的自然高效场景照明。
优点如下



能够在性能和质量之间提供良好的平衡,同时允许在没有完整光线追踪计算开销的情况下进行动态照明变化。
自动化的设置过程,只需要点击按钮,Unity就会完成配置;当自动设置不起作用,也可手动调节。
光照一致性更好。
流式传输对性能友好,不需要额外的光照贴图、UBO或纹理。
适用于多资产环境,特别是拥有数百个资产的场景。

2.屏幕空间反射(SSR):

SSR可以为特定反射表面提供反射,但在处理遮挡时表现不佳,缺乏APVs提供的全局光照效果。团队选择性地在某些反射表面使用了SSR,在不影响性能的情况下增强真实性。


实际应用

主照明:

定向光:模仿太阳光,建立主要的照明源。

点光源:用于爆炸等特定效果。

次级照明

APVs:用于模拟主光源引起的间接照明,增添场景的整体氛围和真实性。

交互式照明

交互式的照明设置,允许光照效果随着场景中角色/物体等动态因素与环境的互动而实时调整,看起来更加真实自然。


爆炸中的照明

在爆炸中的照明还要考虑到光和粒子的相互作用。爆炸中的粒子系统不仅要模拟碎片和烟雾,还需要与爆炸产生的光源互动。此外,爆炸发生时,动态生成的光照也需要与场景中的其他光源协调,以确保光照的一致性和自然性。这里团队还通过六向光照(Hexagonal Light)来实现近似的体积效果,以增强爆炸的视觉冲击力。

PART 04

TIME GHOST



角色构建


角色开发

在角色开发阶段,团队请裁缝制作了一件真实的服装,并扫描了一些服装部件作为参考,之后手工雕刻和建模了角色的部分模型。

为了让角色动起来,还需要进行骨骼绑定。这里团队使用开源骨骼绑定框架mGear和Maya相结合来加快绑定过程,除了角色本身,还完成了腰带、装备等其他部件的绑定,同时确保动作流畅自然。

整个动画在Maya中完成,动画数据来自传统的光学捕捉(Optical Motion Capture)拍摄的数据,此外团队还用到了XSENS动作捕捉服来拍摄跑步序列。

角色有三层结构:第一层是整套服装(outfit),即完整的装扮;第二层是外套;第三层是所有的装备。

团队在Marvelous Designer中进行离线模拟,后将结果转为普通的骨架驱动网格,再导入Unity中作为常规动画播放。


服装细节

团队想要为角色的服装增加一些细节,让褶皱等细节可以按照自己想要的方式呈现出来,看起来更加自然。

最后决定使用机器学习来增强变形。团队用TensorFlow制作了一个自定义模型,借助Unity中的ML-Agents框架,可以很容易添加机器学习功能。在Alexander Ribbert的帮助下,最终实现了在360显卡上以0.72毫秒的速度运行,调度在0.32毫秒内完成,模型在运行时变形115K顶点,共有228K三角形。

整套服装一共获取了70个姿势(来源于电影中的角色),使用Marvelous Designer进行离线模拟,生成展示服装在不同姿势下变形效果的网格缓存和记录皮肤网格和变形网格间差异的值数据。
从离线模拟中提取差值数据,并导入Unity进行处理。提取17个关节的旋转或四元数值,同时播放差值顶点值。使用提取的数据训练机器学习模型,训练完成后将模型导入Unity中应用。这样做不仅简化了模型训练和集成的流程,还提高了服装在不同姿势下变形的真实感和细节层次。

同时提取一小段跑步序列,对外套下半部分进行模拟,并转换为Them Bones格式。使用一个较小的模型(约500KB)来处理这部分数据,并在运行时进行推理,从而为所有背景角色的外套下半部分增加变形效果。

头发系统

团队对头发系统进行了大量工作,增加了风系统、自动加载和精确碰撞。

可以看到这段镜头中,当角色摘下头盔他的头发并不是简单切换成了另一种状态,而是会表现出被头盔压下来的自然效果。这里头发和头盔之间的互动是通过物理模拟头发受到压迫后回复原装的过程来实现的。

除了头发和头盔之间,还有头发和角色服装的互动,例如可能会搭在衣服上或者被衣服挡住一部分。当手指穿过头发时,还能看到手指和头发之间自然互动,没有任何碰撞问题。

如果快进播放,就可以看到风系统的效果,可以调整各种滑块来获得不同的效果。如果想临时改变发型,也可以调整这些滑块。


绒毛和细毛发

整个短片中,角色服装上有大约40,000个细小的毛发,此外团队还在角色的头发和脸部添加了类似的绒毛。虽然这些毛发是静态的,但团队还是将它们附着在角色身上,跟随角色和服装以及骨架网格的动作。

这些细小的毛发有助于打破角色服装的硬朗轮廓,可以在光照条件下增加更多的细微高光效果,从而使服装看起来更有质感。另外,将这些细小毛发添加到服装和头发的细节层次上,也能使整体视觉效果更加丰富真实。

Unity6的强大功能+创作团队的独具匠心,让人眼前一亮,直呼了不起的《Time Ghost》短片就这样诞生了~

好啦,今天的分享就先到这里,祝大家国庆快乐~

end


本文来自新知号自媒体,不代表商业新知观点和立场。
若有侵权嫌疑,请联系商业新知平台管理员。
联系方式:system@shangyexinzhi.com