93 lines
2.7 KiB
GLSL
93 lines
2.7 KiB
GLSL
|
|
float getObjectUserData() {
|
|
return object_uniforms_userData;
|
|
}
|
|
#if defined(HAS_ATTRIBUTE_COLOR)
|
|
vec4 getColor() {
|
|
return vertex_color;
|
|
}
|
|
#endif
|
|
#if defined(HAS_ATTRIBUTE_UV0)
|
|
highp vec2 getUV0() {
|
|
return vertex_uv01.xy;
|
|
}
|
|
#endif
|
|
#if defined(HAS_ATTRIBUTE_UV1)
|
|
highp vec2 getUV1() {
|
|
return vertex_uv01.zw;
|
|
}
|
|
#endif
|
|
#if defined(BLEND_MODE_MASKED)
|
|
float getMaskThreshold() {
|
|
return materialParams._maskThreshold;
|
|
}
|
|
#endif
|
|
highp mat3 getWorldTangentFrame() {
|
|
return shading_tangentToWorld;
|
|
}
|
|
highp vec3 getWorldPosition() {
|
|
return shading_position;
|
|
}
|
|
highp vec3 getUserWorldPosition() {
|
|
return mulMat4x4Float3(getUserWorldFromWorldMatrix(), getWorldPosition()).xyz;
|
|
}
|
|
vec3 getWorldViewVector() {
|
|
return shading_view;
|
|
}
|
|
bool isPerspectiveProjection() {
|
|
return frameUniforms.clipFromViewMatrix[2].w != 0.0;
|
|
}
|
|
#if defined(HAS_ATTRIBUTE_TANGENTS)
|
|
vec3 getWorldNormalVector() {
|
|
return shading_normal;
|
|
}
|
|
vec3 getWorldGeometricNormalVector() {
|
|
return shading_geometricNormal;
|
|
}
|
|
vec3 getWorldReflectedVector() {
|
|
return shading_reflected;
|
|
}
|
|
float getNdotV() {
|
|
return shading_NoV;
|
|
}
|
|
#endif
|
|
highp vec3 getNormalizedPhysicalViewportCoord() {
|
|
return vec3(shading_normalizedViewportCoord, gl_FragCoord.z);
|
|
}
|
|
highp vec3 getNormalizedViewportCoord() {
|
|
highp vec2 scale = frameUniforms.logicalViewportScale;
|
|
highp vec2 offset = frameUniforms.logicalViewportOffset;
|
|
highp vec2 logicalUv = shading_normalizedViewportCoord * scale + offset;
|
|
return vec3(logicalUv, gl_FragCoord.z);
|
|
}
|
|
#if defined(VARIANT_HAS_SHADOWING) && defined(VARIANT_HAS_DYNAMIC_LIGHTING)
|
|
highp vec4 getSpotLightSpacePosition(int index, highp vec3 dir, highp float zLight) {
|
|
highp mat4 lightFromWorldMatrix = shadowUniforms.shadows[index].lightFromWorldMatrix;
|
|
highp vec2 bias = shadowUniforms.shadows[index].normalBias * zLight;
|
|
return computeLightSpacePosition(getWorldPosition(), getWorldGeometricNormalVector(),
|
|
dir, bias, lightFromWorldMatrix);
|
|
}
|
|
#endif
|
|
#if defined(MATERIAL_HAS_DOUBLE_SIDED_CAPABILITY)
|
|
bool isDoubleSided() {
|
|
return materialParams._doubleSided;
|
|
}
|
|
#endif
|
|
#if defined(VARIANT_HAS_SHADOWING) && defined(VARIANT_HAS_DIRECTIONAL_LIGHTING)
|
|
int getShadowCascade() {
|
|
highp float z = mulMat4x4Float3(getViewFromWorldMatrix(), getWorldPosition()).z;
|
|
ivec4 greaterZ = ivec4(greaterThan(frameUniforms.cascadeSplits, vec4(z)));
|
|
int cascadeCount = frameUniforms.cascades & 0xF;
|
|
return clamp(greaterZ.x + greaterZ.y + greaterZ.z + greaterZ.w, 0, cascadeCount - 1);
|
|
}
|
|
highp vec4 getCascadeLightSpacePosition(int cascade) {
|
|
if (cascade == 0) {
|
|
return vertex_lightSpacePosition;
|
|
}
|
|
return computeLightSpacePosition(getWorldPosition(), getWorldGeometricNormalVector(),
|
|
frameUniforms.lightDirection,
|
|
shadowUniforms.shadows[cascade].normalBias,
|
|
shadowUniforms.shadows[cascade].lightFromWorldMatrix);
|
|
}
|
|
#endif
|