章程

Evil3D高级效果集中发力,天刀场景焕然一新


随着引擎的升级,几个比较重要的视觉效果例如Light Scattering(GodRay),SSAO,HDR这些功能也陆续被开发出来。近年来市面上几个主流游戏引擎也都有搭载这些功能。这些功能每个的直接效果都是比较强烈的,对画面质量的提升也是比较明显的。如果美术应用人员在原理上和编辑器工具上都能对这些功能有一些了解,在具体的项目里,关卡场景里,把这些功能用好,综合起来,那么画面质量和以前比,是可以达到一个质的飞跃的。本教程以之前的天刀场景为例,让大家可以清楚地看到效果的提升。
demo传送门
一 Light Scattering (GodRay)
模拟光线被物体部分遮挡时,剩下的光芒穿过未遮挡区域,形成一个视觉上体积光的现象。很多引擎里对这种现象都有各自的解决方案。但是我们引擎用了一种手动在二维坐标画面上定义光源的位置,纯粹通过二维的屏幕空间的手段,实现了三维体积光的现象。
01
02
展现的是实时的三维效果,但后台又是二维的算法,和其他引擎横向比较,我们在效果和效率的综合评估上是相当高的。
03
04
Active 该功能后, Texture下选择光源的纹理,Sunscale控制光源的大小。direction里点击图标后,双击画面来决定阳光在二维空间的位置。skyColor下选择天光。Decay是亮度,Exposure是曝光度。weight是浓度。 Density是稀疏的程度,可以简单理解成光线拖尾的长度,光线射的越长,理论上需要越多的sample采样来填补,达到体积光柔化的效果。

二 HDR
HDR简单的说,就是动态的展现比原来普通画面更大范围的光照度,色度这些。弥补了传统实时三维游戏和二维游戏比,画面一贯的发暗,发灰,亮丽程度低,饱和度低的缺陷。
1,对颜色亮度以及色彩饱和度对比度的提升.
07
其中Lum Key是对照明度亮度的整体调节。
2,搭载的bloom功能对亮部光晕的提升。
08
Bloom Bright Threshold 决定从屏幕的一定亮度开始,更亮的部分就会出现光晕。 Bloom strength / range是对这个光晕的浓度和大小范围进行调节。目的是像上图一样,在物体的高光部分出现绚丽并且合理的光晕,可以大大的加强画面真实感和丰富感。
3,所有的调节都是动态的。
目前很多关于HDR功能的描述和展示,都是习惯于拿最终效果截图出来。这里忽略了HDR里很重要的一个元素,就是HDR中间的那个D–dynimic 。 HDR很大一个神奇之处是,它对画面的亮度饱和度的调节和提升,是一个整体的动态的过程。
09
10
左边是玩家从暗处探头观察带有GodRay天空效果的,是万张光芒的天空的瞬间截图。右边是,一两秒钟后。模拟玩家眼球适应天空亮度以后,画面光照度减弱回落,天空细节呈现后的截图。
以上两张图可以看出,通过一到两秒的适应,天空从一个大光斑,回落到有一定细节的状态,这就是HDR的效果在自动调节。 比如,一个正常的人类在黑暗的三洞中呆了半小时,然后再正午阳光明媚的时候以及快的速度走出山洞。自然,看到的所有景物都是高亮的,大光斑形式的场景,可能要过一段时间的适应,才能看到自己感觉所谓亮度正常的场景。大光斑场景和亮度回落的场景哪个是真实的呢?这两个都是物理真实的,没有对错之分,只是人眼的生理机制导致控制进入眼球的光的多少造成的不同。 所以如果既要在阴暗的地方调节到能看到细节, 而且走到亮部也能观察到周围物体的层次。这个亮度范围跨度是高于显示器所能提供的简单的0-255的黑白范围的,只能靠HDR功能根据玩家眼睛/摄像机所处的环境来动态调节, 保证一个光线明暗丰富的关卡里,无论是暗处室内,还是亮部户外,处处都有调节到有细节有层次。这才是HDR最大的意义。

三 SSAO
1,AO可以大大丰富关卡物体本身的层次。
011
012
SSAO的基本概念是模拟在物体与物体或物体与自身,由于起伏或者遮挡关系形成的,不太受灯光影响的“自阴影”,有了这个元素,可以大大地增加物体乃至整个关卡的体积感和层次感。
通过“SSAO Only”模式功能来debug观察AO的范围和浓淡,做到和关卡氛围一致,太淡看不出来效果,太浓就会显得画面很脏不自然。Pow Factor 和Sample Radius分别是最基础常用的的AO浓淡和范围。 Threshold是整体明暗的阀值。Noise Texture size是噪波和模糊的级别控制。Depth threshold是深度上运算及影响级别的控制。

2 ,AO可以让物体和物体之间的接触感又质的提高。靠在墙上的物体有“触墙感”,放在地面上的物体由“触地感”。
013
虽然实时的SSAO,在AO的精度和细节上的表现是有限的。但简单的AO阴影出现后,阴影本身的细节是次要的,最大的增益是,即便是一个简单的AO阴影,它创造的是一种物体和物体之间有接触的自然感觉。让关卡里所有物体的真实感,重量感,可信感增加很多。 很多不追求画面的低端三维游戏里,物体放在地表上,但玩家感觉是一种“浮空感”的那种画面,相信大家都是看到过不陌生的。
而一般传统的AO解决方案是,每个物体增加第二个UV,然后像烘焙light map一样烘焙AO到贴图上。
(1)这种方法首先是费资源,增加打得很碎的第二个uv,模型的加载量,顶点数几乎成倍增加。增加的AO的位图文件又是很大的一个负担。对加载资源有要求,有局限的游戏平台,这种解决方案是很致命的。
(2)烘焙费时,AO这个元素的烘焙时间比普通的光照,投影的烘焙要长多了。是场景大小而定,改动一个参数后,想看整体效果,可能要等上几个小时甚至大场景要十几个小时的烘焙。 导致了虽然烘焙AO理论上质量虽然很高,但是要调出一个浓淡适宜,范围合适的AO,需要通过很多次尝试的话,这个时间上的代价和成本极其巨大。 所以在实际应用中,烘焙AO大多都是靠美术的经验草率的烘焙一下, 只要不出现黑斑,接缝扭曲什么的差错,也就提交了。 美术总监不满意或者要修改也必须持很保守的态度。因为改动个参数,在烘一次,说不定就是几小时,甚至十几小时的等待时间。 所以以上的这些局限,导致烘焙AO的理论质量很高,但在实际项目应用中,很难完全发挥应有的潜力。
(3)传统方法对关卡设计是很大的一个约束,但实时SSAO,可以完全把场景关卡设计解放出来。
014
原来传统方法里,如果在烘焙好的关卡里,移动任何一样物体,都会导致局部甚至全局的AO再次烘焙生成,所以烘焙AO烘焙光影是关卡修改,摆放的天敌。哪怕有时候游戏设计师有更好的想法想改动一下关卡,但这样对已经完成的关卡就要接受很大的再烘焙考验了,如果关卡多,又有出版本时限压力的话,这个时间和人工成本是不堪设想的。
但SSAO的ao生成是以毫秒级别运算的,再加上实时灯光投影。关卡设计师移动物体的时间,就是该关卡光影,AO生成的时间。松开鼠标时,就是关卡提交时。
所以SSAO+实时光影不仅仅是一个视觉效果,同时更是间接的解放了关卡设计,场景设计人员的最大约束。如果随时尝试和推敲更好的设计方案,那这个提升是美术和策划流程双方面的革命性提升,是超越画面效果范畴之外的提升。

四 屏幕空间投影
目前我们引擎采用的屏幕空间的软投影方案,突破了以往三维实时投影中,效果和功耗的巨大矛盾。
015
我们目前引擎里投影在细节度高,柔和,无抖动。而普通引擎传统的三维实时投影用的单纯shadowmap方法,如果想达到接近效果的功耗,要消耗几倍以上的资源!
016
传统方法下,如果要得到柔和的发散的软影,唯一的方法就是增加shadow map的size分辨率,和sample采样率,而这两个参数对显卡性能和帧率的影响是致命的,负载的增长是呈几何级别的上升的。最后,犹如上图一样,最大的缺点是,哪怕真的调的很高,帧率下降的很厉害,但效果也还是有瑕疵,噪点多,抖动厉害,过渡不自然。
而我们采用的屏幕空间阴影,原理是这样的:
017
然后在一个低功耗同时也是低质量的三维效果基础上,在二维空间里作以下优化:
018
019
构架和算法虽然比较巧妙复杂,但作为操作者来说,工具的操控却是比较简单的。只要简单的调节quality整体模糊的质量。和大体模糊程度BlurXsize和BlurYSize, 就是投影在纵向和横向上的偏移。而两个Gaussian高斯值,可以理解为在模糊范围内,对模糊的衰减的起始,做一些微调。
如果把这个功能,用到上面的树叶的投影的那个场景里
020 搭载了可以看到树叶的形状更清晰,而投影的边缘的模糊也更柔滑,噪点更少,摄像机移动的时候平时投影细微的抖动也改善了。 而基于以上所有的增益,再观察一下map size 和samples这两个对性能最关键的参数,竟然还比原来传统方法那张图利出的效果用的值还要小,性能得到成倍的释放。
021
所以如果掌握好屏幕空间投影的应用,用更少的资源作出更好的效果也是可能的。
以上是最近引擎组开发的几个大效果的综合讲解。操作人员在了解原理后,多熟悉一下配套工具和参数。配合起来合理使用,游戏画面的整体质量应该会有比较大的提升的。