shaders/geo_object/geo_object.tstypescript
import { ShaderProgram } from "../../webgl/ShaderProgram";
import { stringTemplate2 } from "../../utils/shared";
import { cascadeShadowUniforms, projectorUniforms, shadowMapUniforms } from "../common/uniforms";
import type { AtmosphereParameters } from "../atmos/atmos";
import { DEFAULT_PARAMS } from "../atmos/atmos";
import geo_object_vert from "./geo_object.vert.glsl";
import geo_object_deferred_frag from "./geo_object_deferred.frag.glsl";
import geo_object_forward_frag from "./geo_object_forward.frag.glsl";
import geo_object_woit_frag from "./geo_object_woit.frag.glsl";
import geo_object_woit_atmos_frag from "./geo_object_woit_atmos.frag.glsl";
import geo_object_picking_vert from "./geo_object_picking.vert.glsl";
import geo_object_picking_frag from "./geo_object_picking.frag.glsl";
import geo_object_depth_vert from "./geo_object_depth.vert.glsl";
import geo_object_depth_frag from "./geo_object_depth.frag.glsl";
import geo_object_depth_camera_frag from "./geo_object_depth_camera.frag.glsl";
export const geo_object_deferred = (): ShaderProgram =>
new ShaderProgram("geo_object_deferred", {
uniforms: {
viewMatrix: "mat4",
normalMatrix: "mat3",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
uColorTexture: "sampler2d",
uNormalTexture: "sampler2d",
uMetallicRoughnessTexture: "sampler2d",
uAOTexture: "sampler2d",
uUseColorTexture: "float",
uUseNormalTexture: "float",
uUseMetallicRoughnessTexture: "float",
uUseAOTexture: "float",
materialProperties: "vec3",
shadeMode: "float",
uProjectorMask: "float",
uFrameTransparencyMask: "float",
uShadowMask: "float"
},
attributes: {
aVertexPosition: "vec3",
aVertexNormal: "vec3",
aTexCoord: "vec2",
aLocalPosition: { type: "vec3", divisor: 1 },
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aColor: { type: "vec4", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 }
},
vertexShader: geo_object_vert,
fragmentShader: geo_object_deferred_frag
});
export const geo_object_forward = (): ShaderProgram =>
new ShaderProgram("geo_object_forward", {
uniforms: {
viewMatrix: "mat4",
normalMatrix: "mat3",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
eyePositionHigh: "vec3",
eyePositionLow: "vec3",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
lightPosition: "vec3",
lightAmbient: "vec3",
lightDiffuse: "vec3",
lightSpecular: "vec4",
materialProperties: "vec3",
uColorTexture: "sampler2d",
uNormalTexture: "sampler2d",
uMetallicRoughnessTexture: "sampler2d",
uAOTexture: "sampler2d",
uUseColorTexture: "float",
uUseNormalTexture: "float",
uUseMetallicRoughnessTexture: "float",
uUseAOTexture: "float",
shadeMode: "float",
uFrameTransparencyMask: "float",
uShadowMask: "float",
frameOpacity: "float",
...shadowMapUniforms,
...cascadeShadowUniforms
},
attributes: {
aVertexPosition: "vec3",
aVertexNormal: "vec3",
aTexCoord: "vec2",
aLocalPosition: { type: "vec3", divisor: 1 },
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aColor: { type: "vec4", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 }
},
vertexShader: geo_object_vert,
fragmentShader: geo_object_forward_frag
});
export const geo_object_woit = (): ShaderProgram =>
new ShaderProgram("geo_object_woit", {
uniforms: {
viewMatrix: "mat4",
normalMatrix: "mat3",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
eyePositionHigh: "vec3",
eyePositionLow: "vec3",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
lightPosition: "vec3",
lightAmbient: "vec3",
lightDiffuse: "vec3",
lightSpecular: "vec4",
materialProperties: "vec3",
uColorTexture: "sampler2d",
uNormalTexture: "sampler2d",
uMetallicRoughnessTexture: "sampler2d",
uAOTexture: "sampler2d",
uUseColorTexture: "float",
uUseNormalTexture: "float",
uUseMetallicRoughnessTexture: "float",
uUseAOTexture: "float",
shadeMode: "float",
uProjectorMask: "float",
uFrameTransparencyMask: "float",
frameOpacity: "float",
uShadowMask: "float",
useReverseDepth: "float",
...projectorUniforms,
...shadowMapUniforms,
...cascadeShadowUniforms
},
attributes: {
aVertexPosition: "vec3",
aVertexNormal: "vec3",
aTexCoord: "vec2",
aLocalPosition: { type: "vec3", divisor: 1 },
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aColor: { type: "vec4", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 }
},
vertexShader: geo_object_vert,
fragmentShader: geo_object_woit_frag
});
export function geo_object_woit_atmos(atmosParams: AtmosphereParameters = DEFAULT_PARAMS): ShaderProgram {
return new ShaderProgram("geo_object_woit_atmos", {
uniforms: {
viewMatrix: "mat4",
normalMatrix: "mat3",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
eyePositionHigh: "vec3",
eyePositionLow: "vec3",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
lightPosition: "vec3",
lightAmbient: "vec3",
lightDiffuse: "vec3",
lightSpecular: "vec4",
materialProperties: "vec3",
uColorTexture: "sampler2d",
uNormalTexture: "sampler2d",
uMetallicRoughnessTexture: "sampler2d",
uAOTexture: "sampler2d",
uUseColorTexture: "float",
uUseNormalTexture: "float",
uUseMetallicRoughnessTexture: "float",
uUseAOTexture: "float",
shadeMode: "float",
uProjectorMask: "float",
uFrameTransparencyMask: "float",
frameOpacity: "float",
uShadowMask: "float",
useReverseDepth: "float",
transmittanceTexture: "sampler2D",
scatteringTexture: "sampler2D",
atmosFadeDist: "vec2",
atmosMaxMinOpacity: "vec3",
cameraForward: "vec3",
isOrthographic: "float",
...projectorUniforms,
...shadowMapUniforms,
...cascadeShadowUniforms
},
attributes: {
aVertexPosition: "vec3",
aVertexNormal: "vec3",
aTexCoord: "vec2",
aLocalPosition: { type: "vec3", divisor: 1 },
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aColor: { type: "vec4", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 }
},
vertexShader: geo_object_vert,
fragmentShader: stringTemplate2(geo_object_woit_atmos_frag, {
...atmosParams
})
});
}
export const geo_object_picking = (): ShaderProgram =>
new ShaderProgram("geo_object_picking", {
uniforms: {
viewMatrix: "mat4",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
pickingScale: "vec3",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3"
},
attributes: {
aVertexPosition: "vec3",
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aPickingColor: { type: "vec3", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aLocalPosition: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 }
},
vertexShader: geo_object_picking_vert,
fragmentShader: geo_object_picking_frag
});
export const geo_object_depth = (): ShaderProgram =>
new ShaderProgram("geo_object_depth", {
uniforms: {
viewMatrix: "mat4",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3",
frustumPickingColor: "float"
},
attributes: {
aVertexPosition: "vec3",
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 },
aLocalPosition: { type: "vec3", divisor: 1 }
},
vertexShader: geo_object_depth_vert,
fragmentShader: geo_object_depth_frag
});
export const geo_object_depth_camera = (): ShaderProgram =>
new ShaderProgram("geo_object_depth_camera", {
uniforms: {
viewMatrix: "mat4",
projectionMatrix: "mat4",
uScaleByDistance: "vec4",
uFocusDistance: "float",
rtcEyePositionHigh: "vec3",
rtcEyePositionLow: "vec3"
},
attributes: {
aVertexPosition: "vec3",
aRTCPositionHigh: { type: "vec3", divisor: 1 },
aRTCPositionLow: { type: "vec3", divisor: 1 },
aScale: { type: "vec3", divisor: 1 },
aTranslate: { type: "vec3", divisor: 1 },
aDispose: { type: "float", divisor: 1 },
qRot: { type: "vec4", divisor: 1 },
aLocalPosition: { type: "vec3", divisor: 1 }
},
vertexShader: geo_object_depth_vert,
fragmentShader: geo_object_depth_camera_frag
});