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


分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
我们先看一下左边的Reflection probe,Reflection probe是用来给场景提供反射信息的。因为游戏的光影不断变化,我们是不能够简单地为反射探针烘焙一张环境贴图作为反射信息之用。所以对于每一个Reflection probe,我们是烘焙了一个mini GBuffer。产生在游戏当中,根据当时的光照条件去实时生成环境贴图,美术可以在游戏里面摆很多个这样的Reflection probe,只要他们需要。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
然后在运行的时候,我们会去更新场景的Reflection probe的cubemap。整个过程我们大致分为三步,第一步是Relight,第二步是Convolve和Compress。我们使用Compute Shader去同时处理六个面,然后分帧进行,同时只处理一个probe,不停地做循环。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
第一个步骤,就是Relight步骤,大家可以通过图能看出来,就是一个简单的把当前的光照环境用来照亮mini GBuffer,得到环境贴图的过程。然后生成的环境贴图,需要经过Convolve这一步,得到mipmap的正确信息。最后这个贴图需要再通过一个Compute Shader的做法,压缩成BC6H的格式,然后送到渲染管线里面去使用。大致是这么三步的过程。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
下面是我们的Ambient probe。Ambient probe也是实时生成的。我们在做完Relight以后,Reflection probe是包含了当前的整个光照信息,我们可以从中提取出当前的Ambient的信息,并且把它转化成一个3阶的SH(Spherical Harmonic)系数保存下来。
这个提取的过程,在我们把Reflection probe处理完成以后会自动进行,也是同时使用Compute Shader来处理六个面。
分享|米哈游技术总监:从手机走向主机,《原神》主机版渲染技术分享
文章插图
这么看下来,我们整个系统算是完成了,但实际上里面有很多地方是可以改进的。第一个是Relight是没有阴影的,因为单靠mini GBuffer我们是没有办法在Relight pass生成阴影,这样会导致一个很大的问题。就是在Relight完成得到的环境贴图是漏光的,本来应该处于阴影当中的地面也会变得非常明亮。
通过这样的环境贴图算出的环境光(ambient)也会出现有问题的情况,那怎么解决呢?我们的做法是,我们把24小时的shadow都烘焙下来,就是隔一段时间我们烘焙一下,把shadow转化成一个shadow SH保存起来。在运行的时候简单通过当前的时间对shadow SH进行插值,用来压暗Relight以后的结果。
这样得到的效果是出乎意料的好,而且我们需要保存的数据非常的少。因为shadow SH很糊,所以我们做插值也没有什么大的问题。

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