从技术的角度来分析一下沙盒服的新画质(三)

2019-05-02 21:00:47 神评论

17173 新闻导语

这一步引擎计算了水面与坦克和地形的边界并存进了一个Target的R通道,同时将地形与坦克位于水面以下那部分的金属强度参数存进了同一个Target的B通道,应该是由于后面G-Buffer的信息被覆盖掉了,所以单独保存一份,而G通道保存了水面到水底的深度,同时在模板缓冲区也标记坦克位于水面以下的部分




接下来根据前面的数据更新G-Buffer,将水的颜色与水下的地面与坦克的颜色进行混合,同时其他的数据(比如材质参数)也被水面覆盖掉
接下来,引擎计算了一些数据存到了一个Target里,用来后面计算屏幕空间反射用,这个技术也是这次画质升级新加的,现在咱们所使用的版本中水面反射的实现方式是将需要反射的东西以水面为中心倒过来再渲染一次,这种方法虽然可以表现出很完美的反射,但是如果场景复杂度很大(比如新的场景中增加了很多小部件和植被),那么对性能的损耗会很大,毕竟相当于全部东西画了两遍。而屏幕空间反射则是重复利用了已经计算好的像素,而且是在屏幕空间进行(类似于一种后期效果),这样相对减少了一些运算同时计算反射的性能损耗与场景的复杂度完全无关了,当然最后的效果可能会有些瑕疵(比如只能反射到屏幕中出现的东西),但还是能接受的,所以现在几乎所有的3A级游戏都会有这种技术,和PBR一起几乎成为了次时代的标配。
但在沙盒服玩的时候发现,新的版本中实际上两种反射的计算方式是并存的,就是当屏幕空间反射计算不出结果是用传统的反射方式代替,但我觉得这样其实没必要,完全可以用一个当前的场景的静态天空盒来作为补充,虽然效果差一些但能相对减少一些性能的损耗,毕竟大部分时间屏幕空间反射就完全可以渲染出很好的反射效果了
然后渲染物体在水面上的阴影
接下来渲染坦克以及一些其他物体的光照及阴影
然后是计算屏幕空间反射
接下来根据之前水面的数据(比如深度)把反射的结果叠加到水面上,同时加上水面的阴影,并根据波浪的数据对顶点进行偏移,形成最终的咱们看到的波浪,同时通过一些噪声来增加水面的细节(比如小波纹)


然后再用粒子渲染一些水花并把结果叠加到上一个结果中,形成最终的水面效果
由于之前的光照计算都是在线性空间计算的,这里要在转到伽马空间,这样显示器显示出来的颜色就是线性空间的了
接下来是计算Bloom,就是将亮度大于一定一定阈值的像素单独存到一个Target上,然后进行下采样生成几个低分辨率的样本,然后在对这几个样本进行高斯模糊,最终将所有结果相加并归一化就成了最终的Bloom的效果
最后的把Bloom加到之前的渲染结果上,再通过HDR的计算就完成了最终的结果,当然,后面还需要在加上UI,同时中间还有一些其他的粒子(比如烟雾),不是那么重要就不说了,这次的粒子技术没啥变化,感觉没用到物理粒子,基本就是美术全部重做
此贴基本完结,总的来说这次画质升级技术上就是增加了屏幕空间反射、新的水面渲染技术以及曲面细分,粒子可能用Compute Shader加速一下,整个流水线并没有变化,和之前一样用的是延迟渲染,可能在多光源上进行了优化。这次的升级量最大的就是美术,地图资源基本全部重做,每张地图从模型到贴图都多了不少,所以对内存和显存的需求肯定会提高,所以那些内存还没我显存大的就赶紧动手吧,CPU和GPU的话如果你现在的版本最高画质稳定60帧估计新版本也能差不多稳定60,所以大家不比过于害怕电脑带不起来,当然如果你现在的版本最高画质都没法稳定60帧的话。。。。
最后说一下我的配置吧:i7-4710HQ,16G内存,980M,8G显存,稳定60帧,游戏我装在机械硬盘上了,进游戏的速度还可以接受,所以SSD有条件就用,不必强求
好了,我去敲代码了,顺便再晒一下最近自己正在开发的基于C++和OpenGL渲染“引擎”


【来源:贴吧】