- Home /
 
 
               Question by 
               qw3452151 · Dec 06, 2021 at 09:34 AM · 
                shaderpost processinganti-aliasing  
              
 
              CommandBuffer Problem, use CommandBuffer to achive PostProcessing,How to use CommandBuffer to achive postprocessing?
When i use CommandBuffer to achive PostProcessing. Something goes wrong, when i enable MSAA. The Image don't change, when i change camera transform.
Here is my script code:
         int rtID = Shader.PropertyToID("_TempRT");
 
         Mesh mesh = new Mesh();
         mesh.vertices = new Vector3[] {
             new Vector3(-1,-1,0.5f),
             new Vector3(-1,1,0.5f),
             new Vector3(1,1,0.5f),
             new Vector3(1,-1,0.5f)
         };
         mesh.uv = new Vector2[] {
             new Vector2(0,1),
             new Vector2(0,0),
             new Vector2(1,0),
             new Vector2(1,1)
         };
 
         mesh.SetIndices(new int[] { 0, 1, 2, 3 }, MeshTopology.Quads, 0);
          
         buffer = new CommandBuffer();
         buffer.name = "TestBuffer";
 
         camera = GetComponent<Camera>();
 
 
         tempRT = RenderTexture.GetTemporary(camera.pixelWidth, camera.pixelHeight, 0, RenderTextureFormat.DefaultHDR);
 
         buffer.SetGlobalTexture(rtID,tempRT);
         buffer.CopyTexture(BuiltinRenderTextureType.CameraTarget, tempRT);
 
 
         buffer.SetRenderTarget(BuiltinRenderTextureType.CameraTarget);
         buffer.DrawMesh(mesh, Matrix4x4.identity, mat, 0, 0);
 
         camera.AddCommandBuffer(CameraEvent.BeforeImageEffects, buffer);
 
               And here is my shader Code:
 v2f vert (appdata v)
 {
     v2f o;
     o.vertex = v.vertex;
     o.uv = v.uv;
     return o;
 }
 fixed4 frag (v2f i) : SV_Target
 {
     // sample the texture
     fixed4 col = tex2D(_TempRT, i.uv);
     col = tex2Dlod(_TempRT, half4(i.uv, 0, 0));
     col *= float4(1,0,0,1);
     return col;
 }
 
               ,Here is my script code:
     int rtID = Shader.PropertyToID("_TempRT");
     Mesh mesh = new Mesh();
     mesh.vertices = new Vector3[] {
         new Vector3(-1,-1,0.5f),
         new Vector3(-1,1,0.5f),
         new Vector3(1,1,0.5f),
         new Vector3(1,-1,0.5f)
     };
     mesh.uv = new Vector2[] {
         new Vector2(0,1),
         new Vector2(0,0),
         new Vector2(1,0),
         new Vector2(1,1)
     };
     mesh.SetIndices(new int[] { 0, 1, 2, 3 }, MeshTopology.Quads, 0);
      
     buffer = new CommandBuffer();
     buffer.name = "TestBuffer";
     camera = GetComponent<Camera>();
     tempRT = RenderTexture.GetTemporary(camera.pixelWidth, camera.pixelHeight, 0, RenderTextureFormat.DefaultHDR);
     buffer.SetGlobalTexture(rtID,tempRT);
     buffer.CopyTexture(BuiltinRenderTextureType.CameraTarget, tempRT);
     buffer.SetRenderTarget(BuiltinRenderTextureType.CameraTarget);
     buffer.DrawMesh(mesh, Matrix4x4.identity, mat, 0, 0);
     camera.AddCommandBuffer(CameraEvent.BeforeImageEffects, buffer);
 
               Here is my Shader Code:
 v2f vert (appdata v)
 {
     v2f o;
     o.vertex = v.vertex;
     o.uv = v.uv;
     return o;
 }
 fixed4 frag (v2f i) : SV_Target
 {
     // sample the texture
     fixed4 col = tex2D(_TempRT, i.uv);
     col = tex2Dlod(_TempRT, half4(i.uv, 0, 0));
     col *= float4(1,0,0,1);
     return col;
 }
 
               And it work well when disable MSAA.
But when i enable MSAA. The image get stuck. And whatever you move your camera, the image won't change.

I just want to know why, and what happend?
 
                 
                1699a793-2cec-4fa5-ac38-c0e8abe859c5.png 
                (191.2 kB) 
               
 
              
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
Shader shadow anti-aliasing problem 1 Answer
Postprocessing effect in Oculus GO 0 Answers
Can you process a color with postprocessing stack's color grading? 2 Answers
Post processing effects. 1 Answer
Transparency shader 1 Answer