@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
53 lines (51 loc) • 1.28 kB
JavaScript
var screenDepthPS = `
uniform highp sampler2D uSceneDepthMap;
uniform vec4 uScreenSize;
uniform mat4 matrix_view;
uniform vec4 camera_params;
float linearizeDepth(float z) {
if (camera_params.w == 0.0)
return (camera_params.z * camera_params.y) / (camera_params.y + z * (camera_params.z - camera_params.y));
else
return camera_params.z + z * (camera_params.y - camera_params.z);
}
float unpackFloat(vec4 rgbaDepth) {
const vec4 bitShift = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);
return dot(rgbaDepth, bitShift);
}
float getLinearScreenDepth(vec2 uv) {
return linearizeDepth(texture2D(uSceneDepthMap, uv).r);
return unpackFloat(texture2D(uSceneDepthMap, uv)) * camera_params.y;
}
float getLinearScreenDepth() {
vec2 uv = gl_FragCoord.xy * uScreenSize.zw;
return getLinearScreenDepth(uv);
}
float getLinearDepth(vec3 pos) {
return -(matrix_view * vec4(pos, 1.0)).z;
}
`;
export { screenDepthPS as default };