游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4619|回复: 0

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

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2018-11-7 13:54:11 | 显示全部楼层 |阅读模式
9.jpg

文/刘源

这是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)。在苏格兰的斯凯岛取材。

1.jpg

2.jpg

采集队总共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倍的加速。

3.jpg
Distance Field

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

5.jpg
环境光两种AO的效果比较

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

6.jpg
GI效果比较

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

7.jpg

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

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

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


地形编辑,加载和混合

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

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

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

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

10.jpg

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

植被

11.jpg

植被分成了两类:

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


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

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

12.jpg

13.jpg

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

场景的生成技术

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

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


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

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

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

14.jpg

鹿的AI

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

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

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

15.jpg

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

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


16.jpg

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

17.jpg
动态生成寻路网格

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

动态生成动物群

18.jpg

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

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

来源:GDC2015
知乎专栏:https://zhuanlan.zhihu.com/p/35362417
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-20 10:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表