用UE4创造开放世界:Kite 实时演示

这是2015年虚幻4的一篇演讲。他们在5个月内完成了一个单机的开放世界Demo,全部素材使用摄影测量法制作,渲染方面使用了一些新技术,表现效果非常真实。表示部分技术会逐步移植到虚幻引擎中。
 

Kite宣传视频


技术看点包括:
 

  • 多种渲染效果(未解释具体算法),不过对于手游来说很遥远
  • 地形的生成,大世界植被的生成算法
  • 鹿的AI


视频地址

https://www.youtube.com/watch?v=clakekAHQx0

这个Demo使用10英里*10英里的大地图,1米的精度,比上古卷轴-天际面积大10倍。
 

  • 没有加载、视距超级远
  • 没有使用接景(matte painting,也就是远景的片)
  • 完全使用动态光照,使用开放世界的动态GI



整个项目团队30人。大概5个月,10月启动,11月去照相,2月出来的。

开头有一段演示视频(00:51),可以参考的表现细节:
 

  • 天空的鸟群
  • 鹿的AI:在摄像机接近时逃散的动画
  • 镜头漫游时摄像机的惯性晃动



地面上云的影子效果很出彩。注意,天上的云是静态的,但是并没有不和谐感。

资源创建流程

素材使用摄影测量法(Photogrammetry)。在苏格兰的斯凯岛取材。
 


采集队总共4人,分成两个小队各2人,在两个不同的地方各种采集了7天。除了照相扫描素材之外,还拍摄了实际风景来为未来的整个制作做参考。虽然采集了非常多素材,但是实际只做了十分之一(按:从多个项目的反馈来看,大家普遍认为少量重复的高质量资源足以构建可信的自然世界)。

本文略过了采集过程,若有人搞照相扫描法的话可以去看看。技术比较标准,包括但不限于:
 

  • 采集时灰球+络合金球采集光照和环境信息。全部是HDR线性空间sRGB的
  • 复原时,重新渲染亮度来去阴影



目前的LOD制作是手工的。大约3~5万面,然后做改成5~7千面,最后做3级LOD。

地形的贴图,是由原始的多边形烘焙成含法线的贴图,并包含高度信息。后面地形的融合,需要高度图信息。

渲染算法:RTDF阴影-GI-透光材质-模糊

传统来说,阴影使用分级阴影贴图(Cascaded Shadow Map)方案。这种方案可以支持植被动画,但是多边形开销大。本项目近处使用CSM,远处使用基于深度场光线追踪(RTDF,Ray Traced Distance Field)的阴影,该算法适合阴影以及AO,对于远景相对于传统方法有3倍的加速。
 

Distance Field

基于深度场光线追踪的阴影

环境光两种AO的效果比较


同时,对于天空盒产生的环境光,这里同样使用了基于深度场的AO(DFAO)。
 

GI效果比较


使用了一种修改版的基于高度场的GI。如果没有GI的话,树和石头的阴影区会太暗。
 


对不同的粗糙度,生成一套预处理的Cubemap。

此外,使用了新的背面透光算法。光线可以穿过很薄的表面,例如叶子、纸张,以及本视频中的风筝。认为3S材质只是一个近似,所以提供了一种新的两面的渲染模型,更准确地模拟光线传过薄的表面。

对于模糊,使用了Scatter as gather算法,包括动态模糊和景深,该算法准确度很高且可以采样屏幕之外的物体。


地形编辑,加载和混合

地形使用world machine制作后导入到自研工具中。10英里*10英里的大地图,1米的精度。
 

Terrain mesh,蓝色为不含细节信息的


整个地形并不是一次加载的,分解成了多个不同等级的加载流。对于细节内容,只在需要的情况下进行加载。如上图,图中的蓝色区域,就是基本内容,其细节信息未被加载。
 

Terrain贴图权重图,不同颜色表示不同的贴图。控制图首先由worldmachine生成,然后对部分进行手工编辑


对于地形贴图,使用基于高度图的混合。卖二手QQ上图比较了普通的混合vs基于高度图的混合。

植被


植被分成了两类:
 

  • 植被:树、岩石,有碰撞
  • 草:草、花、小卵石,无碰撞



植被都是种的,使用分层静态Instanced Mesh,以类似BSP树的方式组织。草的数量极多,所以并不是一颗颗种的,而是根据地表的材质动态生成。

草有多级LOD,从视频看,有一定随机的LODbias,让他们交叠的切换;同时切换是平滑动画做逐像素渐变切换的。
 


树的Billboard使用了像素的深度图,来改善阴影。

场景的生成技术

开发人员创建了一个简单的生态模拟规则,生成整个世界的植被(注:含岩石),希望植被:
 

  • 有聚集性
  • 不会过度聚集
  • 有自然的生长曲线,有自然的高矮。



这是一个生长模拟系统。首先根据密度设置生成初始的树、灌木和岩石的种子,然后每一步模拟植物的长大、并且在周围随机播种种子,这样多趟之后生成聚集的森林。多物种的生长区开始交叠的时候,使用适应性规则,来决定后面的走向,包括:相对尺寸、遮蔽、海拔高度、坡度,来决定交叠后的演化。适应性规则可以产生很自然的效果,例如有些物种只在森林中生长。

由于计算量太大,地图被分成大(注:按后文推测大概一块300*300m)的2d块。美术人员在个别块中先实验植被效果,然后应用到所有块。也可以定义一个空间区域作为掩码,来指定应用/排除的范围。

生长系统使用确定性模拟。生成之后,可以用通常的地形画刷二次修改结果。
 


鹿的AI

动物做法没有什么特别,使用和普通射击游戏类似的角色工作流。

鹿的躲避:若摄像机靠近,找到鹿群的中心点,然后指定他向远离摄像机镜头的的某个点移动。然后鹿使用寻路方式移动过去。

使用集群模拟(Crowd simulation)来躲避树木和其他鹿。
 


制作时,注意四足动物有特有的难点(按:强烈建议观察视频):
 

  • 无法原地转身,而是需要跑出一个曲线
  • 加速需要比人类更长的时间


 


所以鹿的动作使用root motion。和传统的相反,AI告诉鹿移动目标,而鹿的动画控制其走过去。动画、状态机等是在多核上计算的,支持300+的鹿。
 

动态生成寻路网格


寻路是一个大问题。寻路网格相比碰撞检测计算速度快,可以支持更多的动态物体,所以在远距离的情况下,使用寻路网格来加速计算。到近距离的情况下,AI才使用碰撞检测。全场景寻路数据如果预计算的话有5G,所以并不进行预计算,都是多核计算按需动态生成的。

动态生成动物群
 


动物群都是靠近后生成的。



群落使用一种简单的方法生成。世界分成边长300m的方格,在需要产生群落的时候,群落会生成在格子中最合适的位置。用规则定义各种东西倾向于在什么地方出现,比如鹿喜欢森林或者会走下山谷。各种群落(包括鹿和鸟)有各自的规则。你在世界上移动过程中,这些动物群会动态生成的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值