GameLook报道/6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办。
如何用好UE4引擎,发挥其强大的画面表现力,一直是游戏开发者们的困惑和需求。本次活动上,Epic Games引擎开发经理Nicholas William Penwarden分享了UE4引擎的高级渲染功能是如何使用的。
Nicholas介绍了UE4为了创建高真实性的物件,对全动态的光的渲染效果和后处理效果以及景观、植被过程都提供了优秀的工具支持。并举例介绍了这一制作过程,“我们通过上百张实地场景照片的拍摄,输入电脑制作高清模型,并去除原有光影效果。然后根据UE4提供的动态光照数据,来制作各种逼真的物件”。
以下是演讲实录:
Nicholas William Penwarden:大家好!很高兴今天来到这里,和大家分享Unreal渲染部分的功能。我是Unreal 4的引擎开发经理,也是渲染Team的老大。
上百张、多角度的图片转化为高精度模型
这个Demo刚才Ray Davis已经展示过,我们来看一下它的技术细节。这是一个256平方公里的开放大世界,伴随很多真实照片级的物件以及全动态的光影。还有一些非常高精度的植被和石头之类的效果。
当我们想要做这样一个Demo,挑选了苏格兰的Scotland。因为我们想要做一个看起来真实的室外场景,为了实现这个效果,最好的办法就是去到实地采集数据。
然后我们使用了一个工具从很多不同角度拍摄,每张照片都会有一些重叠的部分,一般是30%。然后通过软件把这些照片转化为高精度的模型和贴图。
这里是我们去实景采集的时候用的一些设备。我们先拍一个参考图,比如说一个比较大的岩石,先拍一张整体的照片来做参考,然后看看最终还原做出来的效果是否与这个一样。
这是我们用来参考的一些物件,比如说有一个颜色盘,两个金属球。颜色盘是最终参考颜色值的,两个金属球是用来参考光的强度、方向以及镜面反射光的效果。
这里是从照片开始扫描并重组出模型的过程,大家可以看到每一块石头都是非常高精度,有100—2000万面,贴图精度非常高,都是16K的贴图。
在模型中去除原有的光影效果
这张照片因为是拍摄出来的,我们可以看到这上面的光影效果。太阳光从上照下来的,上面比较亮,下面是阴影面,然后有间接光照反映到下面部分。因为要在引擎中实时渲染,所以要把这些光影效果从模型上抹除掉。
就像刚看到的一样,我们会在3D MAX中通过两个金属球重建当时的角度和环境,并对我们做出的高模进行一个模拟,计算出光影贴图,在原始照片中减去它,获得一张不带光影的。
因为UE4的渲染器是基于物理的渲染器,为了表现真实效果,要做一些额外的贴图。比如说粗糙度贴图和镜面度反向贴图。对于不同材质的参数,我们已经积累一些经验,大家可以参考。
删除掉光影信息以后,将这些重组出来的模型放入到引擎中,因为我们的引擎有很强大的工具,实现了旋转浏览物件视图的功能,大家可以看到调整光源效果、换模型和换背景对它产生的影响。
再举例说下我们重建出来的树和岩石的效果。刚刚那个背景是Epic本部办公室的外景。大家可以看到通过这个过程做出来的模型有些细节非常令人吃惊。除了模型外我们也拍了一些地面的贴图,用来展示这些地表。
动态光照适合处理大场景 迭代速度快
接下来我们看看动态的光影。为什么挑了一个全动态的光影效果?一个是需要渲染一个巨大的室外场景,如果是静态的话,Light Map的数据会非常大,内存太小受不了。
并且我们希望加入日月变换的系统,如果采用静态光照,Back的时间会非常长。一旦美术调整一些东西重新back一次非常麻烦,所以如果是纯动态的光影效果,迭代速度会非常快,这也是一个很大的优势。
全动态的光照主要分为三个部分,一个是直接被太阳光照亮的表面,一个是被天光照亮的表面,还有一个是不受直接光照,但是被地面或者是其他的反射光所照耀的,我们认为是间接光照或全局光照的地方。
一开始,我们想用的是Cascaded Shadow Maps,这是很多主流引擎都会用到的技术,UE4也支持。但这个技术还是有不少缺陷,比如说在渲染大量内容的时候效率比较低。我们有过最远的计算距离,例如超过10公里以外的阴影就不会计算,就像大家看到这张图片后面的那些效果没有投影所以看起来比较假,缺乏层次感。
因此我们开发了一个基于光线中常量的投影方式,这个方式在渲染巨大量场景的时候,会比CSM的方式高效3倍,并且在很远的距离也能保持非常好的效果。我们每一个物件都有自己的常量,里面储存的数据是每一个点到离它最近平面的距离,在平面内就是正值,平面外就是负值。
这是两个不同的视图,左边的就是普通的视图,右边的是我们网格物品的常量视图。因为常量储存了某一个点到平面的最近距离,所以我们做光线追踪的时候,可以直接跳过一段距离,因为我们知道这段距离没有东西可查,这样非常高效,可以算出某个点是否在阴影之中。
除此之外,我们还得到了最近距离的数据,这样在我们可以实现很近时非常清晰的投影,在比较远的时候还能慢慢地淡出的效果。
刚刚我们讲了太阳光,接下来讲天光,我们有一个高度范围的Cubemap,这个东西是预先生成好的,用来存储不同粗糙度的贴图。
这里两张图片,一个是平面空间的遮罩做出来的,比较差。另外的是基于常量的环境光遮罩,这个是视觉空间,可以在任意一个点做几个锥形的判断,可以看看它是否在投影当中,然后很快地生成出比较好的阴影。
最后我们来看全局光照,就是太阳光反射出来的光亮,左边是直接光照的效果,右边是全局光照的效果。这里说一下全局光照是有限制的,是基于高度场的,而且全局光照只基于地面反射出来的光,如果光打在地面或者是草坪上,反射光的信息会反射到岩石的表面,但是光打到岩石上想让它反射到树上,这个效果我们现在还没有实现。这个其实是我们对整个景观组件创建了一个数据库来存储太阳光照的信息,并根据之前的常量,来计算出反射光的信息。
接下来我们来看部分渲染和后处理的效果。这是双面材质的模型,一般用来处理光线通过很薄表面的效果,比如说叶子和风筝的面。这是一个景深处理效果,在处理真实物理照相的参数时,比如说光圈、焦距、焦程等可以调整效果。
现在高级的景深效果可以很柔和地实现从近焦到远焦的过渡,还有一个效果是运动模糊。高级的运动模糊的效果已经支持非常大的运动模糊的距离,基本上速度快的点可以横跨屏幕,在Blur的上面做得非常柔和,没有什么硬变。
这是我们的景观,整个大小是16×16km。因为我们的全效编辑比较强大,所以我们的美术做出了柔和非常漂亮的权重图。
这里是一个植被系统的细节展示,比如说从很近到慢慢渐远,从高远到低远LOD模式层次的切换。这里还有一个比较好的小功能是LOD到某一些层,虽然只是一个方形的面片,但是我们通过像素深度位移这样的参数,可以做出比较好的效果。
模拟树木和植被的生长
还有一个功能就是模拟,因为我们的地图场景非常大,是16公里×16公里,如果让美术人工去刷地表上的东西是不可能的,我们于是做了一个工具让它自己迭代,通过树木和植被自己生长的方式。
这是一个最终的结果,我们看到通过我们的工具生成一个结果,美术还可以做简单的调整,这个东西非常高效,在节约时间的同时,美术也可以自己手动调整局部一些效果。
然后另外非常重要的功能是草坪置换,我们通过材质编辑器,在地表材质上刷了不同植被种类的权重,通过Camer的远近来判断,远的是地表贴图,而靠近会动态、实时地在地表材质,并根据这些参数生成草的模型。
以下为现场问答:
怎样调整光线,把场景的光照做到比较好的效果?
答:有很多要做平衡和调整的地方,细节的参数有很多在编辑器是可以调整的。
怎样创造出那么大真实画面场景?如何采景和抓那么大的地形?
答:这个地形是通过苏格兰的那个高度图生成出来,某个细节、某块是美术自己去做的。
一共拍摄了不多少同的石头和草木?
答:估计有上百种,美术会缩放、调整然后实例。