// full screen quad with camera-to-pixel ray calculations vertex_program ssao_vs cg { source ssao.cg profiles vs_1_1 arbvp1 entry_point ssao_vs default_params { param_named_auto wvp worldviewproj_matrix } } fragment_program ssao_ps cg { source ssao.cg entry_point ssao_ps // will run on anything with pixel shader 2.b and up profiles ps_2_x arbfp1 default_params { } } fragment_program ssaoBlurX_ps cg { source ssao.cg entry_point ssaoBlurX_ps profiles ps_2_x arbfp1 default_params { param_named_auto invTexSize inverse_texture_size 0 } } fragment_program ssaoBlurY_ps cg { source ssao.cg entry_point ssaoBlurY_ps profiles ps_2_x arbfp1 default_params { param_named_auto invTexSize inverse_texture_size 0 } } material ssao { technique { pass { vertex_program_ref ssao_vs { } fragment_program_ref ssao_ps { } texture_unit geomMap { tex_address_mode clamp filtering bilinear } texture_unit randMap { texture random.png filtering none } } } } material ssaoBlurX { technique { pass { fragment_program_ref ssaoBlurX_ps { } texture_unit map { tex_address_mode clamp filtering bilinear } texture_unit geomMap { tex_address_mode clamp filtering bilinear } } } } material ssaoBlurY { technique { pass { fragment_program_ref ssaoBlurY_ps { } texture_unit map { tex_address_mode clamp filtering bilinear } texture_unit geomMap { tex_address_mode clamp filtering bilinear } } } } material modulate { technique { pass { lighting off texture_unit { texture white.bmp filtering bilinear } texture_unit { texture white.bmp filtering bilinear } } } }