GrabPass简介
所谓GrabPass,可以在渲染所在对象之前,获取当前FrameBuffer中的图像,以供在后续Pass中进行处理,有这它就可以实现一些只能通过屏幕后处理进行操作,比如高斯Blur等。下面两篇文章写的不错。
https://docs.unity3d.com/Manual/SL-GrabPass.html
https://zhuanlan.zhihu.com/p/29378964(里面内容比较不错)
首先,先介绍在Shader Forge中如何进行使用,ShaderForge中是可以支持直接使用的,其中SceneColor就是对应的GrabTexture
以下对应ShaderForge生成的代码:
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.pos = UnityObjectToClipPos( v.vertex );
o.projPos = ComputeScreenPos (o.pos);
COMPUTE_EYEDEPTH(o.projPos.z);
return o;
}
float4 frag(VertexOutput i) : COLOR {
float2 sceneUVs = (i.projPos.xy / i.projPos.w);
float4 sceneColor = tex2D(_GrabTexture, sceneUVs);
// Lighting:
// Emissive:
float3 emissive = tex2D( _GrabTexture, (sceneUVs * 2 - 1).rg).rgb;
float3 finalColor = emissive;
return fixed4(finalColor,1);
}
其中可以看有两个Pass,其中一个是GrabPass,后面的代码可以通过_GrabTexture获取
GrabPass { }