@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
33 lines (32 loc) • 4.02 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{ScreenSpacePass as o}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as e}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{Gamma as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{Float2BindUniform as l}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{FloatPassUniform as t}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{FloatsPassUniform as a}from"../views/3d/webgl-engine/core/shaderModules/FloatsPassUniform.js";import{glsl as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{IntegerPassUniform as d}from"../views/3d/webgl-engine/core/shaderModules/IntegerPassUniform.js";import{Texture2DBindUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{NoParameters as n}from"../views/webgl/NoParameters.js";import{ShaderBuilder as c}from"../views/webgl/ShaderBuilder.js";class u extends n{constructor(o=p.sunny,e=[1,.8,.6,.4,.2],r=[.15,.05,.01,0,0]){super(),this.exposure=o,this.lodFactors=e,this.lodFactorsFront=r}}const p={sunny:25,cloudy:25,rainy:15,snowy:15,foggy:15},f=new u;class g extends u{constructor(){super(...arguments),this.bloomLod=-1}}function F(){const n=new c,u=n.fragment;return n.include(o),n.include(r),u.include(e),u.uniforms.add(new m("colorTexture",(o=>o.color)),new m("bloomTexture0",(o=>o.bloomTexture0)),new m("bloomTexture1",(o=>o.bloomTexture1)),new m("bloomTexture2",(o=>o.bloomTexture2)),new m("bloomTexture3",(o=>o.bloomTexture3)),new m("bloomTexture4",(o=>o.bloomTexture4)),new t("exposure",(o=>o.exposure)),new d("bloomLod",(o=>o.bloomLod)),new i("depthTexture",(o=>o.mainDepth)),new l("nearFar",(o=>o.camera.nearFar)),new a("lodFactors",(o=>o.lodFactors),5),new a("lodFactorsFront",(o=>o.lodFactorsFront),5)).code.add(s`vec3 simpleExposureTonemap(vec3 hdrColor, float exposure) {
vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
return mapped;
}`).main.add(s`vec4 color = texture(colorTexture, uv);
color = vec4(linearizeGamma(color.rgb), color.a);
vec4 lod0 = pow(texture(bloomTexture0, uv), vec4(GAMMA));
vec4 lod1 = pow(texture(bloomTexture1, uv), vec4(GAMMA));
vec4 lod2 = pow(texture(bloomTexture2, uv), vec4(GAMMA));
vec4 lod3 = pow(texture(bloomTexture3, uv), vec4(GAMMA));
vec4 lod4 = pow(texture(bloomTexture4, uv), vec4(GAMMA));
float depthSample = depthFromTexture(depthTexture, uv);
float modifierFactors = 0.0;
float linearDepthNorm = 0.0;
if(depthSample < 1.0 && depthSample > 0.0) {
float linearDepth = -linearizeDepth(depthSample);
float distNearFar = (nearFar[1] - nearFar[0]);
linearDepthNorm = 1.0 - ((linearDepth - nearFar[0]) / distNearFar);
modifierFactors = pow(linearDepthNorm, 8.0) / 1.0;
}
fragColor = mix(lodFactors[0], lodFactorsFront[0], modifierFactors) * lod0;
fragColor += mix(lodFactors[1], lodFactorsFront[1], modifierFactors) * lod1;
fragColor += mix(lodFactors[2], lodFactorsFront[2], modifierFactors) * lod2;
fragColor += mix(lodFactors[3], lodFactorsFront[3], modifierFactors) * lod3;
fragColor += mix(lodFactors[4], lodFactorsFront[4], modifierFactors) * lod4;
fragColor = bloomLod == 0 ? lodFactors[0] * lod0 : bloomLod == 1 ? lodFactors[1] * lod1 : bloomLod == 2 ? lodFactors[2] * lod2 : bloomLod == 3 ? lodFactors[3] * lod3 : bloomLod == 4 ? lodFactors[4] * lod4 : fragColor;
fragColor = vec4(simpleExposureTonemap(fragColor.rgb, exposure), fragColor.a);
fragColor += color;
fragColor = delinearizeGamma(fragColor);`),n}const x=Object.freeze(Object.defineProperty({__proto__:null,BloomCompositionPassParameters:g,build:F,defaultCompositionParameters:f,exposurePresets:p},Symbol.toStringTag,{value:"Module"}));export{x as B,g as a,F as b,f as d,p as e};