<cite id="vEswF"><figure id="vEswF"></figure><param id="vEswF"></param><select id="vEswF"></select><figcaption id="vEswF"><i id="vEswF"></i><i id="vEswF"><tr id="vEswF"><li id="vEswF"><map id="vEswF"></map><fieldset id="vEswF"><caption id="vEswF"></caption></fieldset></li></tr></i></figcaption></cite><colgroup id="vEswF"><ins id="vEswF"></ins><sub id="vEswF"><cite id="vEswF"></cite></sub></colgroup><optgroup id="vEswF"><meter id="vEswF"><video id="vEswF"></video></meter><caption id="vEswF"><i id="vEswF"></i></caption><p id="vEswF"></p></optgroup><hgroup id="vEswF"><output id="vEswF"></output></hgroup>

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

                作者:刘源 GDC2015 2019-04-24 5.1k



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

                Kite宣传视频

                技术看点包括:

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

                视频地址

                //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生成,然后对部分进行手工编辑


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

                植被


                植被分成了两类:

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


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

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



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

                场景的生成技术

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

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


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

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

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


                鹿的AI

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

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

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


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

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



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

                动态生成寻路网格

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

                动态生成动物群


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

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

                来源:GDC2015
                知乎专栏://zhuanlan.zhihu.com/p/35362417

                相关推荐

                最新评论
                暂无评论
                参与评论

                商务合作 查看更多

                独立游戏 查看更多