const int max_samples = 32; uniform CameraTransform { mat4 eye_world_matrix; mat4 world_eye_matrix; mat4 clip_eye_matrix; mat4 eye_clip_matrix; }; uniform sampler2D source; uniform sampler2D depth; uniform sampler2D occlusion; uniform sampler2D rotate; uniform AmbientOcclusionParams { float darkness; vec3 sample_points[max_samples]; int n_samples; float occlusion_radius; float edge_depth_threshold; }; #pragma MSP stage(fragment) vec3 project(vec3 position) { if(position.z>=0.0) return vec3(0.0, 0.0, -1.0); vec4 pp = clip_eye_matrix*vec4(position, 1.0); return pp.xyz/pp.w; } vec3 unproject(vec3 position) { vec4 upp = eye_clip_matrix*vec4(position, 1.0); return upp.xyz/upp.w; }