compositor SSAO/GBuffer
{
    technique
    {
        // GBuffer enconding: --------------------------------------------------
        // mrt0: rgba --> unused in this sample (plain white, (1, 1, 1, 1))
        // mrt1: xyz --> normals, w --> normalized linear depth [0, 1]
        // mrt2: xyz --> position in view space
        // 
        // use a better packing of variables in the mrt to (possibly) increase
        // performance!
        // ---------------------------------------------------------------------
        texture mrt target_width target_height PF_FLOAT32_RGBA PF_FLOAT32_RGBA chain_scope
        texture occlusion target_width target_height PF_FLOAT32_RGBA chain_scope
		texture scene target_width target_height PF_R8G8B8A8 chain_scope
		
		// the scene we want to modulate
        target scene
        {
            input previous
        }
		
        target mrt
        {
            input none
            shadows off
            material_scheme GBuffer
			
            pass clear 
			{
			    buffers colour depth stencil
				depth_value 1.0 
			}      

            pass render_scene {}
        }
    }
}

compositor SSAO/Volumetric // Szirmay-Kalos et al 2010
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                material SSAO/Volumetric
            }
        }
    }
}


compositor SSAO/HemisphereMC // Ritschel et al. inspired hemisphere mc integration
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                material SSAO/HemisphereMC
            }
        }
    }
}

compositor SSAO/HorizonBased // Bavoil and Sainz in ShaderX7
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                material SSAO/HorizonBased
            }
        }
    }
}


compositor SSAO/Crytek // Crytek style ssao as found in shaderX7
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                material SSAO/Crytek
            }
        }
    }
}


compositor SSAO/CreaseShading // Megan Fox's crease shading http://www.shalinor.com/research.html
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                material SSAO/CreaseShading
            }
        }
    }
}

compositor SSAO/UnsharpMask //Unsharp mask the depth buffer [LCD2006]
{
    technique
    {
        texture blurred target_width target_height PF_FLOAT32_RGBA
        texture_ref occlusion SSAO/GBuffer occlusion

        target blurred
        {
            input none
            
            pass render_quad
            {
                material SSAO/UnsharpMask/GaussianBlurX
            }
        }

        target blurred
        {
            input none
            
            pass render_quad
            {
                material SSAO/UnsharpMask/GaussianBlurY
                input 0 blurred
            }
        }

        target occlusion
        {
            input none
            pass clear {}
            
            pass render_quad
            {
                material SSAO/UnsharpMask
                input 0 blurred
            }
        }
    }
}

compositor SSAO/ShowNormals
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                // Renders a fullscreen quad with a material
                material SSAO/ShowNormals
            }
        }
    }
}

compositor SSAO/ShowDepth
{
    technique 
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                // Renders a fullscreen quad with a material
                material SSAO/ShowDepth
            }
        }
    }
}

compositor SSAO/ShowViewPos
{
    technique
    {
        texture_ref occlusion SSAO/GBuffer occlusion

        target occlusion
        {
            input none
            
            pass render_quad
            {
                // Renders a fullscreen quad with a material
                material SSAO/ShowViewPos
            }
        }
    }
}

