制作视频录制功能时,经常遇到明明应用的图像播放时正常的,但录制出来的图像缺偏黑。
------原因:
这种情况一般发生在应用使用线性空间渲染的方式;即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);
}