Apply post processing shader
shader, unity-game-engine
Solution
You have to add a vertex shader because there's no default vertex shader. This one just copies data from vertex buffer.
#pragma vertex vert
v2f_img vert (appdata_base v) {
v2f_img o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord;
return o;
}
AND ALSO you jave to add `ZTest Always` after `Pass {`.
This is clearly a bug but Unity3d support says that they left it this way (that default ZTest is used) not to alter shaders behavior. I hope they'll reconsider this and make that `ZTest Always` is used by default for `Graphics.Blit`.
Problem
I have a Grayscale shader that work when applied to a material. I'd like to apply it to what the camera renders. I found some tutorial speaking about void OnRenderImage (RenderTexture source, RenderTexture destination) but I wasn't able to make it work with mine. The shader : ``` Shader "Custom/Grayscale" { SubShader { Pass{ CGPROGRAM #pragma exclude_renderers gles #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; fixed4 frag(v2f_img i) : COLOR{ fixed4 currentPixel = tex2D(_MainTex, i.uv); fixed grayscale = Luminance(currentPixel.rgb); fixed4 output = currentPixel; output.rgb = grayscale; output.a = currentPixel.a; //output.rgb = 0; return output; } ENDCG } } FallBack "VertexLit" } ``` And the script attached to the camera : ``` using UnityEngine; using System.Collections; public class Grayscale : ImageEffectBase { void OnRenderImage (RenderTexture source, RenderTexture destination) { Graphics.Blit (source, destination, material); } } ``` Any suggestions ? Many thanks !