正文
但是我希望Unity也能开发出更好看的画面。所以,我在Unity基础上,采用虚幻引擎的渲染方式,二次开发:
这是虚幻引擎在高配置手机上出来的HDR效果:
它的实现原理是这样的:
这是虚幻引擎用来实现更好看画面的、像素保存的方式。我框起来的深度值,会决定平时游戏制作中,景深还有影子,雾等方面的表现。
一般的颜色是0-255,但是如果想保存高光效果,就必须使用32bit float color render target。使用它需要消耗很多内存,这个时候就容易导致游戏闪退,还会memory bandwidth开销提高,所以很多高品质的手机单机游戏,只能在iOS苹果手机上运行。如果硬件配置不够,则无法显示HDR效果。
但是,我又想在低配置手机上,实现HDR效果,所以我采用了这样的办法:
我们不使用float color render target 的方式,高光的颜色信息收集到alpha channel。
高光部分的信息消失,但是高光Luminance会保存到alpha channel。我们可以不使用float RT,还是用byte RT,可保存高光lumimance信息。使用这个信息,通过bloom技术能实现HDR效果。
左边是没有HDR,右边是使用这个技法实现的HDR。这个技法比正式的HDR性能很高。因为不使用float RT. 不需要多内存和多memory bandwidth。
左边是在alpha channel保存的Luminance信息。这个问题的缺点是不能保存有颜色的高光。因为只能保存高光的Luminance,不保存高光颜色。不过可以实现很亮的白色,不能实现很亮的红色。
但还有一个优点是,除了计算灯光出来的HDR,它还能表现跟灯光没有关系的特效bloom。还有其他优点,如下图: