playcanvas
Version:
PlayCanvas WebGL game engine
3 lines (2 loc) • 2.14 kB
TypeScript
declare const _default: "\n\nvar uSceneDepthMap: texture_2d<uff>;\n\n#ifndef SCREENSIZE\n #define SCREENSIZE\n uniform uScreenSize: vec4f;\n#endif\n\n#ifndef VIEWMATRIX\n #define VIEWMATRIX\n uniform matrix_view: mat4x4f;\n#endif\n\n#ifndef LINEARIZE_DEPTH\n #define LINEARIZE_DEPTH\n\n #ifndef CAMERAPLANES\n #define CAMERAPLANES\n uniform camera_params: vec4f; // x: 1 / camera_far, y: camera_far, z: camera_near, w: is_ortho\n #endif\n\n fn linearizeDepth(z: f32) -> f32 {\n if (uniform.camera_params.w == 0.0) { // Perspective\n return (uniform.camera_params.z * uniform.camera_params.y) / (uniform.camera_params.y + z * (uniform.camera_params.z - uniform.camera_params.y));\n } else {\n return uniform.camera_params.z + z * (uniform.camera_params.y - uniform.camera_params.z);\n }\n }\n#endif\n\nfn delinearizeDepth(linearDepth: f32) -> f32 {\n if (uniform.camera_params.w == 0.0) {\n return (uniform.camera_params.y * (uniform.camera_params.z - linearDepth)) / (linearDepth * (uniform.camera_params.z - uniform.camera_params.y));\n } else {\n return (linearDepth - uniform.camera_params.z) / (uniform.camera_params.y - uniform.camera_params.z);\n }\n}\n\n// Retrieves rendered linear camera depth by UV\nfn getLinearScreenDepth(uv: vec2f) -> f32 {\n let textureSize = textureDimensions(uSceneDepthMap, 0);\n let texel: vec2i = vec2i(uv * vec2f(textureSize));\n\n #ifdef SCENE_DEPTHMAP_LINEAR\n return textureLoad(uSceneDepthMap, texel, 0).r;\n #else\n return linearizeDepth(textureLoad(uSceneDepthMap, texel, 0).r);\n #endif\n}\n\n#ifndef VERTEXSHADER\n // Retrieves rendered linear camera depth under the current pixel\n fn getLinearScreenDepthFrag() -> f32 {\n let uv: vec2f = pcPosition.xy * uniform.uScreenSize.zw;\n return getLinearScreenDepth(uv);\n }\n#endif\n\n// Generates linear camera depth for the given world position\nfn getLinearDepth(pos: vec3f) -> f32 {\n return -(uniform.matrix_view * vec4f(pos, 1.0)).z;\n}\n";
export default _default;