分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享( 六 )


分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
从前面的描述可以看出来,模糊处理和Upsample加起来一共有三个pass,这就意味着AO需要被读取和写入多次。而且你如果你了解Bilateral Upsample的话,大家可以知道相邻的像素之间有很多的计算其实都是重复的,所以我们采用的优化方式是将所有的计算都放到一个compute pass里面去做。然后通过LDS来保存blur的中间值,通过同时输出四个像素的方式,来重用相邻像素的计算。最终我们还可以通过async compute pipe把性能开销进一步降低。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
关于我们的Local Light,我们在游戏里面采用了Clustered deferred lighting。我们支持视野内同时出现最多1024盏灯。大概的做法是我们将屏幕分成64×64像素的tile,然后每一个tile在深度的方向上面继续分为16级的clusters。通过这两个图,可以大概看出我们能够支持多少灯。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
这张图是一个游戏里面的截图,是一个典型的通过Local Light的阴影提升画面的情况,多个不同的Local Light,它们的照明范围是交错存在的,然后角色也投下多个不同的阴影朝不同的方向,画面就显得细节很丰富。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
我们怎么做的呢?我们的Local Light 阴影系统支持接近100盏灯的实时阴影,理论上我们可以支持更多的,不过这已经很够用了。阴影的分辨率是根据优先级和距离进行动态调整,最终的阴影是通过烘焙的静态场景阴影和实时生成的动态场景阴影结合得到的。游戏里面有很多的Local Light,如果每一个Local Light都去烘焙它的shadow texture的话,会占用的硬盘空间非常大。而且因为是深度贴图,所以不能够随便使用BCn的压缩,那样瑕疵会非常风险,所以需要一个好的算法来对于烘焙的shadow texture做一个压缩。这个压缩需要在精度损失足够低的同时,还要保持压缩率足够高,同时我们的解压开销要非常小才行。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
我们开发的这个系统是在离线制作的时候,对于shadow texture做一个压缩,尽量地去保持精度,运行的时候解压的速度也非常快,用compute shader去解压的情况,1K×1K的shadow texture,我们解压只需要0.05毫秒,可以说非常非常快。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
那压缩率和压缩质量呢?我们先介绍一下压缩的算法思路。首先我们对于shadow texture按照一个2×2的block来进行编码,每4个深度值,我们用32bit来保存。如果想要降低精度损失,可以选择高精度压缩,这种情况之下每个block的大小变成64bit。编码的方式有两种,一种是基于深度平面方程的方式,或者是通过压缩的浮点数方式。编码完成之后,还要进一步通过一个quad tree来合并编码以后的数据,进一步提高压缩率。quad tree是每个tile要保存一个,而每个tile又包含了16×16个block,大家可以看到下面的三个图,从左到右分别是没有压缩的深度贴图,中间是我们的平面方程编码的视图,最右边是我们quad tree 0到4级的深度视图,黑的地方是深度为0的区域。我们参考了Li Bo在2019年Siggraph上面的讲座,大家有兴趣可以去看一下。

【精彩生活】jing111.com小编为您精选以下内容,希望对您有所帮助: