public void RenderStuff()
    {
        var act = gameObject.activeInHierarchy && enabled;

        if (!act)
        {
            Cleanup();
            return;
        }

        var cam = Camera.current;

        if (!cam)
        {
            return;
        }

        // Did we already add the command buffer on this camera? Nothing to do then.
        if (m_Cameras.ContainsKey(cam))
        {
            //return;
        }
        else
        {
            if (cam == mainCamera)
            {
                cam.AddCommandBuffer(CameraEvent.AfterSkybox, cmdBuffer);
                m_Cameras[cam] = cmdBuffer;  // fill in dictionary entry for this Camera
            }
        }

        // Use brushstrokeManager Here:
        // Update Critter xForms  -- or do this through Trainer so it's sync'ed with FixedUpdate?
        UpdateSkyTangents();
        trainerCritterBrushstrokeManager.UpdateBuffersAndMaterial(ref brushstrokeCritterMaterial);


        // START!!!
        // Canvas First:
        canvasMaterial.SetColor("_Color", canvasColor);  // initialize canvas
        //canvasMaterial.SetTexture("_DepthTex", canvasDepthTex);
        canvasMaterial.SetFloat("_MaxDepth", 1.0f);

        // Create RenderTargets:
        int renderedSceneID = Shader.PropertyToID("_RenderedSceneID");
        int colorReadID     = Shader.PropertyToID("_ColorTextureRead");
        int colorWriteID    = Shader.PropertyToID("_ColorTextureWrite");
        int depthReadID     = Shader.PropertyToID("_DepthTextureRead");
        int depthWriteID    = Shader.PropertyToID("_DepthTextureWrite");

        cmdBuffer.GetTemporaryRT(renderedSceneID, -1, -1, 0, FilterMode.Bilinear);  // save contents of Standard Rendering Pipeline
        cmdBuffer.GetTemporaryRT(colorReadID, -1, -1, 0, FilterMode.Bilinear);
        cmdBuffer.GetTemporaryRT(colorWriteID, -1, -1, 0, FilterMode.Bilinear);
        cmdBuffer.GetTemporaryRT(depthReadID, -1, -1, 0, FilterMode.Bilinear);
        cmdBuffer.GetTemporaryRT(depthWriteID, -1, -1, 0, FilterMode.Bilinear);

        cmdBuffer.Blit(BuiltinRenderTextureType.CameraTarget, renderedSceneID);                                       // save contents of Standard Rendering Pipeline

        RenderTargetIdentifier[] mrt = { colorWriteID, depthWriteID };                                                // Define multipleRenderTarget so I can render to color AND depth
        cmdBuffer.SetRenderTarget(mrt, BuiltinRenderTextureType.CameraTarget);                                        // Set render Targets
        cmdBuffer.ClearRenderTarget(true, true, Color.white, 1.0f);                                                   // clear -- needed???
        cmdBuffer.DrawMesh(UpdateFullscreenQuad(mainCamera, fullscreenQuadMesh), Matrix4x4.identity, canvasMaterial); // Write into canvas Color & Depth buffers
        // Copy results into Read buffers for next pass:
        cmdBuffer.Blit(colorWriteID, colorReadID);
        cmdBuffer.Blit(depthWriteID, depthReadID);

        // GessoLayer:  // Re-Implement This when I figure out how to create the brushstrokes buffer properly!!!!
        //brushtrokeWorldMaterial.SetPass(0);
        brushstrokeGessoMaterial.SetColor("_Tint", brushstrokeGessoTint);  // Setup Material Properties:
        brushstrokeGessoMaterial.SetVector("_Size", brushSizeGesso);
        brushstrokeGessoMaterial.SetFloat("_PaintThickness", paintThicknessGesso);
        brushstrokeGessoMaterial.SetFloat("_PaintReach", paintReachGesso);
        brushstrokeGessoMaterial.SetFloat("_UseSourceColor", gessoFramebufferColor);  // 1.0 will use Unity's scene render as color, 0.0 will just use brushTintColor
        //cmdBuffer.SetGlobalFloat("_UseSourceColor", 1.0f);
        brushstrokeGessoMaterial.SetTexture("_BrushTex", brushstrokeGessoTexture);
        AddPaintLayer(mrt, renderedSceneID, colorReadID, depthReadID, gessoStrokesBuffer, brushstrokeGessoMaterial);
        cmdBuffer.Blit(colorWriteID, colorReadID);
        cmdBuffer.Blit(depthWriteID, depthReadID);  // Try transferring Height values here

        // BackgroundLayer:
        brushstrokeBackgroundMaterial.SetColor("_Tint", brushstrokeBackgroundTint); // brushstrokeBackgroundTint);  // Setup Material Properties:
        brushstrokeBackgroundMaterial.SetVector("_Size", brushSizeBackground);
        brushstrokeBackgroundMaterial.SetFloat("_PaintThickness", paintThicknessBackground);
        brushstrokeBackgroundMaterial.SetFloat("_PaintReach", paintReachBackground);
        brushstrokeBackgroundMaterial.SetFloat("_UseSourceColor", backgroundFramebufferColor);  // 1.0 will use Unity's scene render as color, 0.0 will just use brushTintColor
        brushstrokeBackgroundMaterial.SetTexture("_BrushTex", brushstrokeBackgroundTexture);
        AddPaintLayer(mrt, renderedSceneID, colorReadID, depthReadID, backgroundStrokesBuffer, brushstrokeBackgroundMaterial);
        cmdBuffer.Blit(colorWriteID, colorReadID);
        cmdBuffer.Blit(depthWriteID, depthReadID);

        // TerrainLayer:
        brushstrokeTerrainMaterial.SetColor("_Tint", brushstrokeTerrainTint);
        brushstrokeTerrainMaterial.SetVector("_Size", brushSizeTerrain);
        brushstrokeTerrainMaterial.SetFloat("_PaintThickness", paintThicknessTerrain);
        brushstrokeTerrainMaterial.SetFloat("_PaintReach", paintReachTerrain);
        brushstrokeTerrainMaterial.SetFloat("_UseSourceColor", terrainFramebufferColor);  // 1.0 will use Unity's scene render as color, 0.0 will just use brushTintColor
        brushstrokeTerrainMaterial.SetTexture("_BrushTex", brushstrokeTerrainTexture);
        AddPaintLayer(mrt, renderedSceneID, colorReadID, depthReadID, terrainStrokesBuffer, brushstrokeTerrainMaterial);
        cmdBuffer.Blit(colorWriteID, colorReadID);
        cmdBuffer.Blit(depthWriteID, depthReadID);

        // Critter Layer:
        if (isActiveAgent)
        {
            brushstrokeCritterMaterial.SetColor("_Tint", brushstrokeCritterTint);
            brushstrokeCritterMaterial.SetVector("_Size", brushSizeCritter);
            brushstrokeCritterMaterial.SetFloat("_PaintThickness", paintThicknessCritter);
            brushstrokeCritterMaterial.SetFloat("_PaintReach", paintReachCritter);
            brushstrokeCritterMaterial.SetFloat("_UseSourceColor", 0.0f);  // 1.0 will use Unity's scene render as color, 0.0 will just use brushTintColor
            brushstrokeCritterMaterial.SetTexture("_BrushTex", brushstrokeCritterTexture);
            // Some render settings from brushstrokeManager:
            brushstrokeCritterMaterial.SetFloat("_Diffuse", trainerCritterBrushstrokeManager.diffuse);
            brushstrokeCritterMaterial.SetFloat("_DiffuseWrap", trainerCritterBrushstrokeManager.diffuseWrap);
            brushstrokeCritterMaterial.SetFloat("_RimGlow", trainerCritterBrushstrokeManager.rimGlow);
            brushstrokeCritterMaterial.SetFloat("_RimPow", trainerCritterBrushstrokeManager.rimPow);

            brushstrokeCritterMaterial.SetPass(0);
            //strokeMaterial.SetBuffer("strokeDataBuffer", strokeBuffer);
            brushstrokeCritterMaterial.SetBuffer("quadPointsBuffer", quadPointsBuffer);
            cmdBuffer.SetGlobalTexture("_CanvasColorReadTex", colorReadID);
            cmdBuffer.SetGlobalTexture("_CanvasDepthReadTex", depthReadID);
            cmdBuffer.SetRenderTarget(mrt, BuiltinRenderTextureType.CameraTarget);                                                                                                    // Set render Targets
            cmdBuffer.SetGlobalTexture("_BrushColorReadTex", renderedSceneID);                                                                                                        // Copy the Contents of FrameBuffer into brushstroke material so it knows what color it should be
            cmdBuffer.DrawProcedural(Matrix4x4.identity, brushstrokeCritterMaterial, 0, MeshTopology.Triangles, 6, trainerCritterBrushstrokeManager.critterBrushstrokesArray.Length); // Apply brushstrokes
            cmdBuffer.Blit(colorWriteID, colorReadID);
            cmdBuffer.Blit(depthWriteID, depthReadID);
            // Won't be able to use the function until I switch from using Geometry Shader to instancing!!!
            //AddPaintLayer(mrt, renderedSceneID, colorReadID, depthReadID, critterStrokesBuffer, brushstrokeCritterMaterial);
        }

        // DISPLAY TO SCREEN:
        cmdBuffer.SetGlobalTexture("_CanvasColorReadTex", colorReadID);
        int testDownResID = Shader.PropertyToID("_TestDownRes");

        cmdBuffer.GetTemporaryRT(testDownResID, -1, -1, 0, FilterMode.Bilinear);
        cmdBuffer.Blit(depthReadID, testDownResID);
        cmdBuffer.SetGlobalTexture("_CanvasDepthReadTex", testDownResID);
        paintMaterial.SetFloat("_Relief", paintRelief);
        cmdBuffer.Blit(colorWriteID, BuiltinRenderTextureType.CameraTarget, paintMaterial);   // copy canvas target into main displayTarget so it is what the player sees
    }