视频录制图像偏黑的解决方法

制作视频录制功能时,经常遇到明明应用的图像播放时正常的,但录制出来的图像缺偏黑。

------原因:

这种情况一般发生在应用使用线性空间渲染的方式;即playersettings-》colorspace 是linear渲染模式。

graphics api 要使用 ipengles3;

视频录制一般采用RenderTexture 进行图像采样; 但因为线性空间渲染 会在OnRenderImage 后进行屏幕投射时进行一次gamma校正;即图像提亮;

这个时候的RenderTexture 的图像就是偏暗的设置。

 

------解决方法

在OnRenderImage 里面将src 用shader进行一个gamma处理,

  private void OnRenderImage (RenderTexture src, RenderTexture dst) {

            Graphics.Blit(src, frameTexture , recordingMaterial);
  
            Graphics.Blit(src, dst);
        }

---frameTexture 就是我们视频需要的RenderTexture

        var frameTexture = RenderTexture.GetTemporary(
                videoFormat.width,
                videoFormat.height,
                24,
                RenderTextureFormat.ARGB32,
                RenderTextureReadWrite.sRGB,
                1
            );

 

---shader:

 

    fixed4 frag(v2f i) : COLOR
    {
        //从_MainTex中根据uv坐标进行采样
        fixed4 renderTex = tex2D(_MainTex, i.uv)*i.color;
    //brigtness亮度直接乘以一个系数,也就是RGB整体缩放,调整亮度
    fixed3 finalColor = renderTex * _Brightness;
    finalColor = pow(finalColor, 1.0 / 2.2);

return fixed4(finalColor, renderTex.a);

}

 

 

你可能感兴趣的:(unity)