AR之虚拟人物的后处理导致真实场景的曝光过高解决方案

问题描述:

最近在开发AR相关的设计,但是拍的AR照片背景一直是有过曝情况的,像下面这样:

AR之虚拟人物的后处理导致真实场景的曝光过高解决方案_第1张图片

但是真实场景,应该是下面这样:

AR之虚拟人物的后处理导致真实场景的曝光过高解决方案_第2张图片

 

可以看见,画面已经曝光到影响画质了。

环境:

使用的ARSDK:Vuforia,(但是这里的问题和使用的是什么SDK没有关系的,因为之前还使用过VoidAR,一个国产的SDK还是这个问题)

平台:iOS,问题其实和平台也没有什么关系,因为我们需要改动的是shader里面的内容。

因为在我的程序里面,虚拟人物的绘制渲染完成之后会有一段后处理过程的代码,代码里面会有从线性空间转到非线性空间的ToneMapping运算,(ToneMapping运算是一种hdr转换到ldr的过程,这里我就不详细铺开了),因为引擎里面使用的是前向渲染,所以此时ToneMapping的过程是一定要有的,不然虚拟人物就很暗,但是加上ToneMapping之后,画面就是上面那个样子。

此时使用的VuforiaSDK的流程是将手机摄像头拍摄的场景渲染成一张贴图,再将贴图渲染到屏幕上,所以此时是因为ToneMapping的过程影响的真实场景的显示。

解决办法:

我们需要在Vuforia里面提供的画视频背景的shader里面进行ToneMapping的逆运算。

我在虚拟人物的后处理过程中,使用的ToneMapping公式是下面这个:

AR之虚拟人物的后处理导致真实场景的曝光过高解决方案_第3张图片

所以在这个公式里面color就是输入,假设此时我的outcolor是 输出,那么逆运算就是使用outcolor去表示color,也就是一个一元二次方程的求根,使用以下求根公式,就可以了

AR之虚拟人物的后处理导致真实场景的曝光过高解决方案_第4张图片

 

 

你可能感兴趣的:(游戏开发)