123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- export const assign_material_color = `
- #if defined(dNeedsMarker)
- float marker = uMarker;
- if (uMarker == -1.0) {
- marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win
- }
- #endif
- #if defined(dRenderVariant_color)
- #if defined(dUsePalette)
- vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);
- #elif defined(dColorType_uniform)
- vec4 material = vec4(uColor, uAlpha);
- #elif defined(dColorType_varying)
- vec4 material = vec4(vColor.rgb, uAlpha);
- #endif
- // mix material with overpaint
- #if defined(dOverpaint)
- material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);
- #endif
- float metalness = uMetalness;
- float roughness = uRoughness;
- float bumpiness = uBumpiness;
- #ifdef dSubstance
- metalness = mix(metalness, vSubstance.r, vSubstance.a);
- roughness = mix(roughness, vSubstance.g, vSubstance.a);
- bumpiness = mix(bumpiness, vSubstance.b, vSubstance.a);
- #endif
- #elif defined(dRenderVariant_depth)
- if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {
- discard;
- }
- #ifndef dXrayShaded
- #if defined(dTransparency)
- float dta = 1.0 - vTransparency;
- if (vTransparency < 0.2) dta = 1.0; // hard cutoff looks better
- if (uRenderMask == MaskTransparent && uAlpha * dta == 1.0) {
- discard;
- } else if (uRenderMask == MaskOpaque && uAlpha * dta < 1.0) {
- discard;
- }
- #else
- if (uRenderMask == MaskTransparent && uAlpha == 1.0) {
- discard;
- } else if (uRenderMask == MaskOpaque && uAlpha < 1.0) {
- discard;
- }
- #endif
- #else
- if (uRenderMask == MaskOpaque) {
- discard;
- }
- #endif
- vec4 material = packDepthToRGBA(fragmentDepth);
- #elif defined(dRenderVariant_marking)
- vec4 material;
- if(uMarkingType == 1) {
- if (marker > 0.0)
- discard;
- #ifdef enabledFragDepth
- material = packDepthToRGBA(gl_FragDepthEXT);
- #else
- material = packDepthToRGBA(gl_FragCoord.z);
- #endif
- } else {
- if (marker == 0.0)
- discard;
- float depthTest = 1.0;
- if (uMarkingDepthTest) {
- depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;
- }
- bool isHighlight = intMod(marker, 2.0) > 0.1;
- float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
- float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
- if (fogFactor == 1.0)
- discard;
- material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);
- }
- #endif
- // apply per-group transparency
- #if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color))
- float ta = 1.0 - vTransparency;
- if (vTransparency < 0.09) ta = 1.0; // hard cutoff looks better
- #if defined(dRenderVariant_pick)
- if (ta < uPickingAlphaThreshold)
- discard; // ignore so the element below can be picked
- #elif defined(dRenderVariant_color)
- material.a *= ta;
- #if defined(dRenderVariant_colorBlended)
- #if defined(dTransparentBackfaces_off)
- if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
- (uRenderMask == MaskTransparent && material.a == 1.0) ||
- (interior && material.a < 1.0)
- ) {
- discard;
- }
- #elif defined(dTransparentBackfaces_on)
- if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
- (uRenderMask == MaskTransparent && material.a == 1.0)
- ) {
- discard;
- }
- #elif defined(dTransparentBackfaces_opaque)
- if (interior) {
- material.a = 1.0;
- } else if (
- (uRenderMask == MaskOpaque && material.a < 1.0) ||
- (uRenderMask == MaskTransparent && material.a == 1.0)
- ) {
- discard;
- }
- #endif
- #endif
- #endif
- #endif
- `;
|