UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

49 lines (48 loc) 1.57 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{FloatBindUniform as r}from"../../shaderModules/FloatBindUniform.js";import{glsl as a}from"../../shaderModules/glsl.js";function e(e){e.fragment.uniforms.add(new r("cloudAbsorption",r=>r.clouds.absorption),new r("cloudCoverage",r=>r.clouds.coverage)).code.add(a`vec4 lookupCloudsFromTextureArray(sampler2DArray cubeMap, vec3 rayDir) { int faceIndex; vec2 uv; if(rayDir.z <= 0.0) { float hazeFactor = smoothstep(-0.01, mix(0.0, 0.075, cloudCoverage), abs(dot(rayDir, vec3(0, 0, 1)))); float shading = clamp(1.0 - cloudAbsorption, 0.6, 1.0) * (1.0 - hazeFactor); float totalTransmittance = hazeFactor; return vec4(shading, totalTransmittance, shading, totalTransmittance); } if (abs(rayDir.x) >= abs(rayDir.y) && abs(rayDir.x) >= abs(rayDir.z)) { if(rayDir.x > 0.0) { faceIndex = 0; uv = rayDir.yz / rayDir.x; uv = vec2(-uv.x, uv.y); } else { faceIndex = 1; uv = rayDir.yz / rayDir.x; uv = vec2(-uv.x, -uv.y); } } else if (abs(rayDir.y) >= abs(rayDir.x) && abs(rayDir.y) >= abs(rayDir.z)) { if(rayDir.y > 0.0) { faceIndex = 2; uv = rayDir.xz / rayDir.y; } else { faceIndex = 3; uv = rayDir.xz / rayDir.y; uv = vec2(uv.x, -uv.y); } } else { if(rayDir.y < 0.0) { faceIndex = 4; uv = rayDir.xy / rayDir.z; uv = vec2(uv.x, -uv.y); } else { faceIndex = 5; uv = rayDir.xy / rayDir.z; uv = vec2(uv.x, -uv.y); } } uv = 0.5 * (uv + 1.0); if(faceIndex != 5) { uv.y = uv.y - 0.5; } uv.y = uv.y * 2.0; vec4 s = texture(cubeMap, vec3(uv, float(faceIndex))); return s; }`)}export{e as LookupCloudsFromTextureArray};