@arcgis/core 5.1.0-next.92 → 5.1.0-next.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analysis/ShadowCast/DiscreteOptions.d.ts +12 -6
- package/analysis/ShadowCast/MinDurationOptions.d.ts +17 -9
- package/analysis/ShadowCast/TotalDurationOptions.d.ts +10 -6
- package/analysis/ShadowCastAnalysis.d.ts +23 -17
- package/assets/components/assets/combobox/t9n/messages.fr.json +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{adfa5c136c72c1e65770.js → 12f41c1c66fb446b6286.js} +22 -16
- package/assets/esri/core/workers/chunks/1523883460874c352e36.js +1 -0
- package/assets/esri/core/workers/chunks/{5409369d0d637cb30257.js → 172228d1a392ca7a5b21.js} +1 -1
- package/assets/esri/core/workers/chunks/{f2c11f54255fd506655e.js → 19a0cb2d335d97ad9488.js} +1 -1
- package/assets/esri/core/workers/chunks/{577cbc131b21c351fae5.js → 2647c739cda29361a463.js} +2 -2
- package/assets/esri/core/workers/chunks/34f7450769826e8b7069.js +636 -0
- package/assets/esri/core/workers/chunks/{4b9b9e6136c11d5d7901.js → 412745bfacef23e3b702.js} +1 -1
- package/assets/esri/core/workers/chunks/4df19e670b6ed76c1dea.js +2 -0
- package/assets/esri/core/workers/chunks/{ceff78c9e31e3572a082.js → 5eff240a0e41a4f80e61.js} +1 -1
- package/assets/esri/core/workers/chunks/{2dcfc4d7e76c922bcbf9.js → 6aed2e42e65ac80f1fab.js} +1 -1
- package/assets/esri/core/workers/chunks/77c2d8d0ce1c1ab469e9.js +1 -0
- package/assets/esri/core/workers/chunks/8a370cc1a99ddc7ce70b.js +1 -0
- package/assets/esri/core/workers/chunks/8a7a99533d02eb9cb058.js +2 -0
- package/assets/esri/core/workers/chunks/{90a8dfb03a437fe8a6e7.js → be47e42c6c8c0820efd8.js} +1 -1
- package/assets/esri/core/workers/chunks/c7ee05f46b26b17f9414.js +1 -0
- package/assets/esri/core/workers/chunks/{ee057c85cdf6beb5b012.js → d1ba118ddd0390c07f35.js} +2 -2
- package/assets/esri/core/workers/chunks/e6f1ed5e56f1d9862821.js +1 -0
- package/assets/esri/core/workers/chunks/{27f67a3828b78d4c1413.js → e81afc8a058a8ecc9b24.js} +1 -1
- package/assets/esri/core/workers/chunks/f49c7bb5d134bcb22155.js +1 -0
- package/assets/esri/core/workers/chunks/{aa6808146c76b2d49b64.js → f68c12e0c1eda7f73a17.js} +1 -1
- package/assets/esri/core/workers/chunks/f706bfea34d22539b46a.js +2 -0
- package/assets/esri/core/workers/chunks/{bb8d596f15fd3a0d783a.js → f8072a4cf1b25d8b93f9.js} +1 -1
- package/chunks/GlobalIllumination.glsl.js +24 -18
- package/chunks/GlowBlur.glsl.js +11 -11
- package/chunks/RibbonLine.glsl.js +91 -51
- package/chunks/ShadowCastVisualize.glsl.js +18 -15
- package/config.js +1 -1
- package/kernel.js +1 -1
- package/layers/graphics/sources/MemorySource.js +1 -1
- package/networks/support/UNTraceConfiguration.d.ts +19 -2
- package/networks/support/UNTraceConfiguration.js +1 -1
- package/networks/support/jsonTypes.d.ts +9 -1
- package/package.json +4 -4
- package/popup/Feature.d.ts +4 -4
- package/popup/Feature.js +1 -1
- package/rest/knowledgeGraph/GraphApplyEditsResult.d.ts +13 -1
- package/rest/knowledgeGraph/GraphApplyEditsResult.js +1 -1
- package/rest/knowledgeGraph/GraphDeleteNamedTypeResult.d.ts +9 -1
- package/rest/knowledgeGraph/GraphDeleteNamedTypeResult.js +1 -1
- package/rest/knowledgeGraph/wasmInterface/wasmToDataModelChangeResponseFactories.js +1 -1
- package/rest/knowledgeGraph/wasmInterface/wasmToUpdateResponseFactories.js +1 -1
- package/rest/networks/support/NetworkElement.d.ts +13 -1
- package/rest/networks/support/NetworkElement.js +1 -1
- package/support/revision.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/graph/GlslGraphWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/graph/ShaderGraphContext.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/graph/glsl.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/3d/analysis/ShadowCastAnalysisView3D.d.ts +6 -5
- package/views/3d/analysis/ShadowCastAnalysisView3D.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/debug/RenderNodeVisualizerNode.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/effects/glow/Glow.js +1 -1
- package/views/3d/webgl-engine/effects/glow/GlowBlur.glsl.js +1 -1
- package/views/3d/webgl-engine/lib/ShadowCastRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/ShadowCastVisualizeTechniqueConfiguration.js +1 -1
- package/assets/esri/core/workers/chunks/0840e7dd62643c56ae9e.js +0 -1
- package/assets/esri/core/workers/chunks/0cc4b3100a7a453bd058.js +0 -1
- package/assets/esri/core/workers/chunks/1e4e7111d43f01c149b3.js +0 -1
- package/assets/esri/core/workers/chunks/73af4c947e8151d411c1.js +0 -2
- package/assets/esri/core/workers/chunks/752f4e0e2961fc315dca.js +0 -1
- package/assets/esri/core/workers/chunks/a508104179e08f0f268c.js +0 -2
- package/assets/esri/core/workers/chunks/bb5f909a2f26fc6a21b0.js +0 -2
- package/assets/esri/core/workers/chunks/bea2fd831d7a864e5995.js +0 -596
- package/assets/esri/core/workers/chunks/c8ef80a7c46d7d2c5172.js +0 -1
- package/assets/esri/core/workers/chunks/f971dcfd04af1fd652b4.js +0 -1
- /package/assets/esri/core/workers/chunks/{577cbc131b21c351fae5.js.LICENSE.txt → 2647c739cda29361a463.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{bb5f909a2f26fc6a21b0.js.LICENSE.txt → 4df19e670b6ed76c1dea.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{a508104179e08f0f268c.js.LICENSE.txt → 8a7a99533d02eb9cb058.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{73af4c947e8151d411c1.js.LICENSE.txt → d1ba118ddd0390c07f35.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{ee057c85cdf6beb5b012.js.LICENSE.txt → f706bfea34d22539b46a.js.LICENSE.txt} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as
|
|
2
|
+
import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as o}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js";import{addMainLightDirection as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{ScreenSpaceRayMarching as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js";import{CameraSpace as r}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{FloatPassUniform as l}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as i,If as n}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as c}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ColorAttachment1 as u}from"../views/webgl/enums.js";import{NoParameters as d}from"../views/webgl/NoParameters.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";const p=.01,f=.008,g=.002,v=.5,x=.02,b=.1,w=.008,y=.012,S=.008,C=40,M=.095,F=.008,D=60,W=2,j=.0039,I=.25,z=1/3,B=2/3,G=2,P=.05,T=.15,$=.75,R=.15,L=16;class O extends d{constructor(){super(...arguments),this.projScale=1,this.scaleGlobalIllumination=1,this.accumulatedFrames=0,this.frameCount=0,this.rayMarchMaxReach=R,this.rayMarchMaxSteps=L}}function E(d){const R=new h,L=R.fragment;return R.include(e),R.include(r),t(L),L.include(o),R.include(a,d),L.uniforms.add(new m("normalMap",e=>e.normalTexture),new m("depthMap",e=>e.depthTexture),new m("lastFrameColorTexture",(e,o)=>o.reprojection.lastFrameColor?.getTexture()),new m("lastFrameDepthTexture",(e,o)=>o.reprojection.lastFrameDepth?.attachment),new c("lastFrameGlobalIlluminationTexture",e=>e.globalIllumination?.getTexture()),new c("lastFrameGlobalIlluminationWeightTexture",e=>e.globalIllumination?.getTexture(u)),new s("reprojectionViewMatrix",e=>e.reprojection.viewMatrix),new s("view",e=>e.camera.viewMatrix),new l("accumulatedFramesGI",e=>e.accumulatedFrames),new l("frameCount",e=>e.frameCount),new l("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new m("blueNoiseTex",e=>e.noiseTexture)),L.uniforms.add(new l("rayMarchMaxReach",e=>e.rayMarchMaxReach),new l("rayMarchMaxSteps",e=>e.rayMarchMaxSteps)),d.hasEmission&&L.uniforms.add(new m("lastFrameEmissionTexture",(e,o)=>o.reprojection.lastFrameEmission?.attachment)),L.constants.add("timeSamplesSize","float",64),L.constants.add("blueNoiseGridSize","float",8),L.code.add(i`
|
|
3
3
|
float computeIdleColorBlendWeight(float accumulatedFrames) {
|
|
4
4
|
float idleColorBlendProgress = clamp(
|
|
5
|
-
accumulatedFrames / ${i.float(
|
|
5
|
+
accumulatedFrames / ${i.float(C)},
|
|
6
6
|
0.0,
|
|
7
7
|
1.0
|
|
8
8
|
);
|
|
@@ -20,7 +20,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
20
20
|
1.0
|
|
21
21
|
);
|
|
22
22
|
return mix(
|
|
23
|
-
${i.float(
|
|
23
|
+
${i.float(M)},
|
|
24
24
|
${i.float(F)},
|
|
25
25
|
pow(idleOcclusionBlendProgress, ${i.float(W)})
|
|
26
26
|
);
|
|
@@ -69,7 +69,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
float computeChromaWeight(vec3 color) {
|
|
72
|
-
float gray = dot(color, vec3(${i.float(
|
|
72
|
+
float gray = dot(color, vec3(${i.float(z)}));
|
|
73
73
|
vec3 deviationFromGray = color - gray;
|
|
74
74
|
float chromaDistanceSquared = dot(deviationFromGray, deviationFromGray);
|
|
75
75
|
float normalizedChroma = chromaDistanceSquared / ${i.float(B)};
|
|
@@ -80,7 +80,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
80
80
|
float computeColorBleedWeight(vec3 receiverColor, vec3 sourceColor) {
|
|
81
81
|
float receiverChromaWeight = computeChromaWeight(receiverColor);
|
|
82
82
|
float sourceChromaWeight = computeChromaWeight(sourceColor);
|
|
83
|
-
float receiverAverageIntensity = dot(receiverColor, vec3(${i.float(
|
|
83
|
+
float receiverAverageIntensity = dot(receiverColor, vec3(${i.float(z)}));
|
|
84
84
|
|
|
85
85
|
// Favor bright, neutral receivers lit by more saturated hit surfaces
|
|
86
86
|
float bleedFactor =
|
|
@@ -184,15 +184,17 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
184
184
|
);
|
|
185
185
|
|
|
186
186
|
if (hit.z > 0.0) {
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
${n(d.hasColor,i`
|
|
188
|
+
// Emission and color bleed - Reproject the current receiver and sampled hit to estimate bounced color
|
|
189
|
+
vec3 receiverColor = texture(lastFrameColorTexture, reprojectedCoordinate.xy).rgb;
|
|
189
190
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
vec2 hitReprojectedCoordinate = reprojectionCoordinate(hit);
|
|
192
|
+
vec3 sourceColor = texture(lastFrameColorTexture, hitReprojectedCoordinate).rgb;
|
|
193
|
+
vec3 sourceEmission = ${n(d.hasEmission,"texture(lastFrameEmissionTexture, hitReprojectedCoordinate).xyz","vec3(0.0)")};
|
|
193
194
|
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
float colorBleedWeight = computeColorBleedWeight(receiverColor, sourceColor);
|
|
196
|
+
fragGlobalIllumination.rgb += (sourceColor * colorBleedWeight + sourceEmission) * stepSize;
|
|
197
|
+
`)}
|
|
196
198
|
} else {
|
|
197
199
|
// Occlusion - heuristic modulating sky intensity based on angle to main light
|
|
198
200
|
vec4 viewMainLightDirection = view * vec4(mainLightDirection, 0.0);
|
|
@@ -208,12 +210,16 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
208
210
|
? randomDirectionSample.b * ${i.float(j)}
|
|
209
211
|
: 0.0;
|
|
210
212
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
213
|
+
${n(d.hasColor,i`
|
|
214
|
+
// Accumulate color
|
|
215
|
+
vec3 lastFrameColor = lastFrameGlobalIllumination.rgb;
|
|
216
|
+
float colorDitherScale = isScaledGlobalIllumination ? ${i.float(I)} : 1.0;
|
|
217
|
+
fragGlobalIllumination.rgb = resetColorHistory
|
|
218
|
+
? vec3(0.0)
|
|
219
|
+
: mix(lastFrameColor + accumulationDither * colorDitherScale, fragGlobalIllumination.rgb, colorBlendWeight);
|
|
220
|
+
`,i`
|
|
221
|
+
fragGlobalIllumination.rgb = vec3(0.0);
|
|
222
|
+
`)}
|
|
217
223
|
|
|
218
224
|
// Accumulate occlusion
|
|
219
225
|
fragGlobalIllumination.a = mix(lastFrameGlobalIllumination.a + accumulationDither, fragGlobalIllumination.a, occlusionBlendWeight);
|
package/chunks/GlowBlur.glsl.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{normalize as e}from"../core/arrayUtils.js";import{gauss as r}from"../core/mathUtils.js";import{ScreenSpacePass as t}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{Gamma as
|
|
3
|
-
${
|
|
4
|
-
${
|
|
2
|
+
import{normalize as e}from"../core/arrayUtils.js";import{gauss as r}from"../core/mathUtils.js";import{create as o}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ScreenSpacePass as t}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{Gamma as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{Float2PassUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Float2PassUniform.js";import{FloatPassUniform as l}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{If as a,glsl as n}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DPassUniform as c}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{NoParameters as u}from"../views/webgl/NoParameters.js";import{ShaderBuilder as v}from"../views/webgl/ShaderBuilder.js";class d extends u{constructor(){super(...arguments),this.blurRadius=0,this.level=0,this.inputScale=1,this.size=o()}}function f({glowStage:o,useFloatBlend:u}){const d=new v,f=d.fragment;d.include(t),f.include(i);const m=0===o;f.uniforms.add(new c("colorTexture",e=>e.input),new l("blurRadius",({blurRadius:e})=>e),new l("level",({level:e})=>e),new l("inputScale",({inputScale:e})=>u?1:e),new s("size",({size:e})=>e));const p=7;let w="float locations1D["+p+"] = float["+p+"](";for(let e=0;e<p;e++){w+=`${0===e?"":","} ${(e/(p-1)*2-1).toFixed(15)}`}w+=");";const g=2,b=new Array(p).fill(0).map((e,o)=>r(o-Math.floor(p/2),g));e(b);const h=b.reduce((e,r,o)=>`${e}${0===o?"":","} ${r.toFixed(15)}`,"float locations1DWeights["+p+"] = float["+p+"](")+");";return f.code.add(n`
|
|
3
|
+
${w}
|
|
4
|
+
${h}
|
|
5
5
|
|
|
6
6
|
vec3 blurUniformSamples() {
|
|
7
|
-
|
|
8
|
-
int textureLevel = int(${f?"level":"0.0"});
|
|
9
|
-
vec2 size = vec2(textureSize(colorTexture, int(textureLevel)));
|
|
7
|
+
int textureLevel = int(${m?"level":"0.0"});
|
|
10
8
|
vec2 aspectCorrection = vec2(1.0, size.x / size.y);
|
|
11
|
-
${l(!f,"float viewportScale = 1.0 / pow(2.0, level);\n vec2 uv = uv * viewportScale;\n ")}
|
|
12
9
|
|
|
10
|
+
${a(m,"float viewportScale = 1.0;","float viewportScale = 1.0 / pow(2.0, level);")}
|
|
11
|
+
vec2 uv = uv * viewportScale;
|
|
13
12
|
vec2 pixelCenterShift = 0.5 / size;
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
vec3 res = vec3(0.0);
|
|
15
|
+
for(int i = 0; i < ${n.int(p)}; ++i) {
|
|
16
|
+
float uv1D = locations1D[i] * viewportScale + ${m?"pixelCenterShift.x":"pixelCenterShift.y"};
|
|
17
|
+
vec2 uvOffset = ${m?"vec2(uv1D, 0.0)":"vec2(0.0, uv1D)"};
|
|
18
18
|
vec2 uvDistorted = uv + uvOffset * blurRadius * aspectCorrection;
|
|
19
19
|
vec3 sampleColor = texture(colorTexture, uvDistorted, -1.0).rgb * inputScale;
|
|
20
20
|
res += sampleColor * locations1DWeights[i];
|
|
21
21
|
}
|
|
22
22
|
return res;
|
|
23
23
|
}
|
|
24
|
-
`).main.add(
|
|
24
|
+
`).main.add(n`fragColor = vec4(blurUniformSamples(), 0.0);`),d}const m=Object.freeze(Object.defineProperty({__proto__:null,GlowBlurPassParameters:d,build:f},Symbol.toStringTag,{value:"Module"}));export{d as G,m as a,f as b};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{SliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{ObjectAndLayerIdColor as i}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js";import{RibbonVertexPosition as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{LineStipple as n,computePixelSize as
|
|
2
|
+
import{SliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{ObjectAndLayerIdColor as i}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js";import{RibbonVertexPosition as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{LineStipple as n,computePixelSize as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{positionOutsideClipSpace as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{ColorConversion as l}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{NoPerspectiveWrite as d,NoPerspectiveRead as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/NoPerspective.glsl.js";import{addProjViewLocalOrigin as p,addPixelRatio as m}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2BindUniform as f}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float4BindUniform as v}from"../views/3d/webgl-engine/core/shaderModules/Float4BindUniform.js";import{Float4PassUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatBindUniform as h}from"../views/3d/webgl-engine/core/shaderModules/FloatBindUniform.js";import{FloatPassUniform as S}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as D,If as x}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{alphaCutoff as L}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{AnimatedLine as w}from"../views/3d/webgl-engine/shaders/AnimatedLine.glsl.js";import{outputColorHighlightOLID as b}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as y}from"../views/webgl/ShaderBuilder.js";const P=1;function C(P){const C=new y,{attributes:z,varyings:j,vertex:F,fragment:W}=C,{applyMarkerOffset:R,draped:A,output:V,capType:I,stippleEnabled:E,falloffEnabled:N,roundJoins:O,wireframe:T,innerColorEnabled:J,hasAnimation:_,hasScreenSizePerspective:M,worldSizedImagePattern:U}=P;F.inputs.add("position",()=>"position"),W.include(a),C.include(t,P),C.include(n,P),C.include(i,P),C.include(w,P);const $=R&&!A;$&&(F.uniforms.add(new S("markerScale",e=>e.markerScale)),C.include(o,{space:2,hasScreenSizePerspective:M})),p(F,P),F.uniforms.add(new u("inverseProjectionMatrix",e=>e.camera.inverseProjectionMatrix),new f("nearFar",e=>e.camera.nearFar),new S("miterLimit",e=>"miter"!==e.join?0:e.miterLimit),new v("viewport",e=>e.camera.fullViewport)),F.constants.add("LARGE_HALF_FLOAT","float",65500),F.constants.add("EPS","float",.001),F.constants.add("NUM_JOIN_SUBDIVISIONS","float",P.numJoinSubdivisions),z.add("position","vec3"),z.add("previousDelta","vec4"),z.add("nextDelta","vec4"),z.add("lineParameters","vec2"),z.add("u0","float"),j.add("vColor","vec4"),j.add("vpos","vec3",{invariant:!0}),j.add("vLineDistance","float"),j.add("vLineWidth","float"),E||(j.add("vIsInsideJoin","float"),j.add("vStretchFactor","float"),j.add("vJoinCenterLineSDF","float"));const B=E;B&&j.add("vLineSizeInv","float");const k=2===I,H=E&&k,G=N||H;G&&j.add("vLineDistanceNorm","float"),k&&(j.add("vSegmentSDF","float"),j.add("vReverseSegmentSDF","float")),F.code.add(D`vec3 perpendicular(vec3 v) {
|
|
3
3
|
return vec3(v.y, -v.x, 0.0);
|
|
4
4
|
}
|
|
5
5
|
float interp(float ncp, vec4 a, vec4 b) {
|
|
@@ -10,12 +10,12 @@ float s = sin(a);
|
|
|
10
10
|
float c = cos(a);
|
|
11
11
|
mat2 m = mat2(c, -s, s, c);
|
|
12
12
|
return vec3(m * v.xy, v.z);
|
|
13
|
-
}`),
|
|
13
|
+
}`),F.code.add(D`vec4 projectAndScale(vec4 pos) {
|
|
14
14
|
vec4 posNdc = proj * pos;
|
|
15
15
|
posNdc.xy *= viewport.zw / posNdc.w;
|
|
16
16
|
posNdc.z /= posNdc.w;
|
|
17
17
|
return posNdc;
|
|
18
|
-
}`),
|
|
18
|
+
}`),F.code.add(D`void clip(
|
|
19
19
|
inout vec4 pos,
|
|
20
20
|
inout vec4 prev,
|
|
21
21
|
inout vec4 next,
|
|
@@ -46,7 +46,7 @@ if (next.z > -nearFar[0]) {
|
|
|
46
46
|
next = mix(next, pos, interp(vnp, next, pos));
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
}`),m(
|
|
49
|
+
}`),m(F),F.constants.add("aaWidth","float",E?0:1).main.add(D`
|
|
50
50
|
// unpack values from vertex type
|
|
51
51
|
bool isStartVertex = abs(abs(lineParameters.y) - 3.0) == 1.0;
|
|
52
52
|
vec3 prevPosition = position + previousDelta.xyz * previousDelta.w;
|
|
@@ -65,11 +65,11 @@ next = mix(next, pos, interp(vnp, next, pos));
|
|
|
65
65
|
vec4 next = view * vec4(nextPosition, 1.0);
|
|
66
66
|
|
|
67
67
|
bool isJoin = abs(lineParameters.y) < 3.0;
|
|
68
|
-
`)
|
|
68
|
+
`),$&&F.main.add(D`vec4 other = isStartVertex ? next : prev;
|
|
69
69
|
bool markersHidden = areWorldMarkersHidden(pos.xyz, other.xyz);
|
|
70
70
|
if (!isJoin && !markersHidden) {
|
|
71
71
|
pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
72
|
-
}`),
|
|
72
|
+
}`),C.include(d),F.main.add(D`
|
|
73
73
|
clip(pos, prev, next, isStartVertex);
|
|
74
74
|
|
|
75
75
|
vec3 clippedPos = pos.xyz;
|
|
@@ -85,18 +85,18 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
|
85
85
|
float leftLen = length(left);
|
|
86
86
|
float rightLen = length(right);
|
|
87
87
|
|
|
88
|
-
float lineSize = getSize(${
|
|
89
|
-
${
|
|
90
|
-
${
|
|
88
|
+
float lineSize = getSize(${x(M,"clippedPos")});
|
|
89
|
+
${x(E&&M,"float patternLineSize = getSize(clippedCenter);")}
|
|
90
|
+
${x(E&&!M,"float patternLineSize = lineSize;")}
|
|
91
91
|
|
|
92
|
-
${
|
|
92
|
+
${x(U,D`
|
|
93
93
|
lineSize += aaWidth;
|
|
94
94
|
float lineWidth = lineSize * pixelRatio * worldToScreenRatio;
|
|
95
95
|
if (lineWidth < 1.0) {
|
|
96
96
|
coverage = lineWidth;
|
|
97
97
|
lineWidth = 1.0;
|
|
98
98
|
}
|
|
99
|
-
`,
|
|
99
|
+
`,D`
|
|
100
100
|
if (lineSize < 1.0) {
|
|
101
101
|
coverage = lineSize; // convert sub-pixel coverage to alpha
|
|
102
102
|
lineSize = 1.0;
|
|
@@ -107,51 +107,70 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
|
|
|
107
107
|
`)}
|
|
108
108
|
|
|
109
109
|
vLineWidth = noPerspectiveWrite(lineWidth, pos.w);
|
|
110
|
-
${
|
|
111
|
-
`);(
|
|
110
|
+
${B?D`vLineSizeInv = noPerspectiveWrite(1.0 / lineSize, pos.w);`:""}
|
|
111
|
+
`);(E||k)&&F.main.add(D`
|
|
112
112
|
float isEndVertex = float(!isStartVertex);
|
|
113
113
|
vec3 segmentOrigin = mix(pos.xyz, prev.xyz, isEndVertex);
|
|
114
114
|
vec3 segment = mix(right, left, isEndVertex);
|
|
115
|
-
${
|
|
116
|
-
`),
|
|
117
|
-
right = (rightLen >
|
|
115
|
+
${k?D`vec3 segmentEnd = mix(next.xyz, pos.xyz, isEndVertex);`:""}
|
|
116
|
+
`),F.main.add(D`left = (leftLen > EPS) ? left/leftLen : vec3(0.0, 0.0, 0.0);
|
|
117
|
+
right = (rightLen > EPS) ? right/rightLen : vec3(0.0, 0.0, 0.0);
|
|
118
118
|
vec3 segmentDirection = isStartVertex ? right : left;
|
|
119
119
|
vec3 capDisplacementDir = vec3(0.0, 0.0, 0.0);
|
|
120
120
|
vec3 joinDisplacementDir = vec3(0.0, 0.0, 0.0);
|
|
121
121
|
float displacementLen = lineWidth;
|
|
122
|
+
float miterDisplacementLen = lineWidth;
|
|
123
|
+
float innerDisplacementLen = lineWidth;`),E||F.main.add(D`vIsInsideJoin = 0.0;
|
|
124
|
+
vStretchFactor = 1.0;
|
|
125
|
+
vJoinCenterLineSDF = LARGE_HALF_FLOAT;`),F.main.add(D`float subdivisionFactor = 0.0;
|
|
126
|
+
bool isOutside = false;
|
|
122
127
|
if (isJoin) {
|
|
123
|
-
|
|
128
|
+
isOutside = (left.x * right.y - left.y * right.x) * lineParameters.y > 0.0;
|
|
124
129
|
vec3 joinDirection = normalize(left + right);
|
|
125
130
|
joinDisplacementDir = perpendicular(joinDirection);
|
|
126
|
-
if (leftLen >
|
|
131
|
+
if (leftLen > EPS && rightLen > EPS) {
|
|
127
132
|
float nDotSeg = dot(joinDisplacementDir, left);
|
|
128
133
|
displacementLen /= length(nDotSeg * left - joinDisplacementDir);
|
|
134
|
+
miterDisplacementLen = displacementLen;
|
|
135
|
+
innerDisplacementLen = min(displacementLen, min(leftLen, rightLen)/abs(nDotSeg));
|
|
129
136
|
if (!isOutside) {
|
|
130
|
-
displacementLen =
|
|
137
|
+
displacementLen = innerDisplacementLen;
|
|
131
138
|
}
|
|
132
139
|
}
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
|
|
140
|
+
subdivisionFactor = lineParameters.x;`),E||F.main.add(D`vIsInsideJoin = subdivisionFactor > 0.0 && subdivisionFactor < 1.0 ? 1.0: 0.0;
|
|
141
|
+
if (miterDisplacementLen > miterLimit * lineWidth) {
|
|
142
|
+
vec2 leftScreenDir = left.xy;
|
|
143
|
+
vec2 rightScreenDir = right.xy;
|
|
144
|
+
float leftScreenLen = length(leftScreenDir);
|
|
145
|
+
float rightScreenLen = length(rightScreenDir);
|
|
146
|
+
if (leftScreenLen > EPS && rightScreenLen > EPS) {
|
|
147
|
+
leftScreenDir /= leftScreenLen;
|
|
148
|
+
rightScreenDir /= rightScreenLen;
|
|
149
|
+
float roundJoinAngle = acos(clamp(dot(leftScreenDir, rightScreenDir), -1.0, 1.0));
|
|
150
|
+
float triangleHeight = (innerDisplacementLen + lineWidth) * cos(roundJoinAngle / (2.0 + 2.0 * NUM_JOIN_SUBDIVISIONS));
|
|
151
|
+
vStretchFactor = noPerspectiveWrite(max(triangleHeight / (2.0 * lineWidth), 1.0), pos.w);
|
|
152
|
+
}
|
|
153
|
+
}`),F.main.add(D`if (isOutside && (displacementLen > miterLimit * lineWidth)) {`),O?F.main.add(D`
|
|
154
|
+
vec3 startDir = leftLen < EPS ? right : left;
|
|
136
155
|
startDir = perpendicular(startDir);
|
|
137
156
|
|
|
138
|
-
vec3 endDir = rightLen <
|
|
157
|
+
vec3 endDir = rightLen < EPS ? left : right;
|
|
139
158
|
endDir = perpendicular(endDir);
|
|
140
159
|
|
|
141
|
-
float factor = ${
|
|
160
|
+
float factor = ${E?D`min(1.0, subdivisionFactor * ((NUM_JOIN_SUBDIVISIONS + 1.0) / NUM_JOIN_SUBDIVISIONS))`:D`subdivisionFactor`};
|
|
142
161
|
|
|
143
162
|
float rotationAngle = acos(clamp(dot(startDir.xy, endDir.xy), -1.0, 1.0));
|
|
144
163
|
joinDisplacementDir = rotateZ(startDir, -sign(lineParameters.y) * factor * rotationAngle);
|
|
145
|
-
`):
|
|
164
|
+
`):F.main.add(D`if (leftLen < EPS) {
|
|
146
165
|
joinDisplacementDir = right;
|
|
147
166
|
}
|
|
148
|
-
else if (rightLen <
|
|
167
|
+
else if (rightLen < EPS) {
|
|
149
168
|
joinDisplacementDir = left;
|
|
150
169
|
}
|
|
151
170
|
else {
|
|
152
171
|
joinDisplacementDir = (isStartVertex || subdivisionFactor > 0.0) ? right : left;
|
|
153
172
|
}
|
|
154
|
-
joinDisplacementDir = perpendicular(joinDisplacementDir);`);const X=0!==
|
|
173
|
+
joinDisplacementDir = perpendicular(joinDisplacementDir);`);const X=0!==I;return F.main.add(D`
|
|
155
174
|
displacementLen = lineWidth;
|
|
156
175
|
}
|
|
157
176
|
} else {
|
|
@@ -159,9 +178,9 @@ joinDisplacementDir = perpendicular(joinDisplacementDir);`);const X=0!==E;return
|
|
|
159
178
|
joinDisplacementDir = isStartVertex ? right : left;
|
|
160
179
|
joinDisplacementDir = perpendicular(joinDisplacementDir);
|
|
161
180
|
|
|
162
|
-
${X?
|
|
181
|
+
${X?D`capDisplacementDir = vec3((isStartVertex ? -right : left).xy, 0.0);`:""}
|
|
163
182
|
}
|
|
164
|
-
`),
|
|
183
|
+
`),F.main.add(D`
|
|
165
184
|
// Displacement (in pixels) caused by join/or cap
|
|
166
185
|
vec2 dposXY = (joinDisplacementDir.xy * sign(lineParameters.y) + capDisplacementDir.xy) * displacementLen;
|
|
167
186
|
|
|
@@ -173,25 +192,40 @@ joinDisplacementDir = perpendicular(joinDisplacementDir);`);const X=0!==E;return
|
|
|
173
192
|
*/
|
|
174
193
|
float dposZ = dot(dposXY, segmentDirection.xy) / dot(segmentDirection.xy, segmentDirection.xy) * segmentDirection.z;
|
|
175
194
|
vec3 dpos = vec3(dposXY, dposZ);
|
|
195
|
+
|
|
176
196
|
float lineDistNorm = noPerspectiveWrite(sign(lineParameters.y), pos.w);
|
|
177
197
|
|
|
178
198
|
vLineDistance = lineWidth * lineDistNorm;
|
|
179
|
-
${G?
|
|
199
|
+
${G?D`vLineDistanceNorm = lineDistNorm;`:""}
|
|
180
200
|
|
|
181
201
|
pos.xyz += dpos;
|
|
182
|
-
`),
|
|
202
|
+
`),E||F.main.add(D`if (isJoin) {
|
|
203
|
+
vec2 joinCenterToVertex = dposXY;
|
|
204
|
+
vec2 leftCenterlineDir = left.xy;
|
|
205
|
+
vec2 rightCenterlineDir = right.xy;
|
|
206
|
+
float leftCenterlineLen = length(leftCenterlineDir);
|
|
207
|
+
float rightCenterlineLen = length(rightCenterlineDir);
|
|
208
|
+
leftCenterlineDir = leftCenterlineLen > EPS ? leftCenterlineDir / leftCenterlineLen : vec2(1.0, 0.0);
|
|
209
|
+
rightCenterlineDir = rightCenterlineLen > EPS ? rightCenterlineDir / rightCenterlineLen : leftCenterlineDir;
|
|
210
|
+
float leftCenterLineSDF = dot(vec2(leftCenterlineDir.y, -leftCenterlineDir.x), joinCenterToVertex);
|
|
211
|
+
float rightCenterLineSDF = dot(vec2(rightCenterlineDir.y, -rightCenterlineDir.x), joinCenterToVertex);
|
|
212
|
+
vJoinCenterLineSDF = noPerspectiveWrite(
|
|
213
|
+
mix(leftCenterLineSDF, rightCenterLineSDF, step(0.5, subdivisionFactor)),
|
|
214
|
+
pos.w
|
|
215
|
+
);
|
|
216
|
+
}`),k&&F.main.add(D`vec2 segmentDir = normalize(segment.xy);
|
|
183
217
|
vSegmentSDF = noPerspectiveWrite((isJoin && isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentOrigin.xy, segmentDir)), pos.w);
|
|
184
|
-
vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),
|
|
185
|
-
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),
|
|
218
|
+
vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),E&&(A?F.uniforms.add(new h("worldToScreenRatio",e=>1/e.screenToPCSRatio)):F.main.add(D`vec3 segmentCenter = mix((nextPosition + position) * 0.5, (position + prevPosition) * 0.5, isEndVertex);
|
|
219
|
+
float worldToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),F.main.add(D`float segmentLengthScreenDouble = length(segment.xy);
|
|
186
220
|
float segmentLengthScreen = segmentLengthScreenDouble * 0.5;
|
|
187
221
|
float discreteWorldToScreenRatio = discretizeWorldToScreenRatio(worldToScreenRatio);
|
|
188
222
|
float segmentLengthRender = length(mix(nextPosition - position, position - prevPosition, isEndVertex));
|
|
189
|
-
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),
|
|
190
|
-
float startPseudoScreen = u0 * discreteWorldToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):
|
|
191
|
-
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),
|
|
223
|
+
vStipplePatternStretch = worldToScreenRatio / discreteWorldToScreenRatio;`),A?F.main.add(D`float segmentLengthPseudoScreen = segmentLengthScreen / pixelRatio * discreteWorldToScreenRatio / worldToScreenRatio;
|
|
224
|
+
float startPseudoScreen = u0 * discreteWorldToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):F.main.add(D`float startPseudoScreen = mix(u0, u0 - segmentLengthRender, isEndVertex) * discreteWorldToScreenRatio;
|
|
225
|
+
float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRatio;`),F.uniforms.add(new S("stipplePatternPixelSize",e=>r(e))),F.main.add(D`
|
|
192
226
|
float patternLength = patternLineSize * stipplePatternPixelSize;
|
|
193
227
|
|
|
194
|
-
${
|
|
228
|
+
${x(U,D`
|
|
195
229
|
float uu = mix(u0, u0 - segmentLengthRender, isEndVertex);
|
|
196
230
|
vStippleDistanceLimits = vec2(uu, uu + segmentLengthRender);
|
|
197
231
|
vStipplePatternStretch = 1.0;
|
|
@@ -199,7 +233,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
199
233
|
// The v-coordinate used in case of an image pattern.
|
|
200
234
|
bool isLeft = sign(lineParameters.y) < 0.0;
|
|
201
235
|
vStippleV = isLeft ? 0.0 : 1.0;
|
|
202
|
-
`,
|
|
236
|
+
`,D`
|
|
203
237
|
// Compute the coordinates at both start and end of the line segment, because we need both to clamp to in the
|
|
204
238
|
// fragment shader
|
|
205
239
|
vStippleDistanceLimits = computeStippleDistanceLimits(startPseudoScreen, segmentLengthPseudoScreen, segmentLengthScreen, patternLength);
|
|
@@ -209,7 +243,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
209
243
|
|
|
210
244
|
// Adjust the coordinate to the displaced position (the pattern is shortened/overextended on the in/outside of
|
|
211
245
|
// joins)
|
|
212
|
-
if (segmentLengthScreenDouble >=
|
|
246
|
+
if (segmentLengthScreenDouble >= EPS) {
|
|
213
247
|
// Project the actual vertex position onto the line segment. Note that the resulting factor is within [0..1]
|
|
214
248
|
// at the original vertex positions, and slightly outside of that range at the displaced positions
|
|
215
249
|
vec3 stippleDisplacement = pos.xyz - segmentOrigin;
|
|
@@ -230,7 +264,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
230
264
|
isStartVertex ?
|
|
231
265
|
vec2(-1e34, vStippleDistanceLimits.y) :
|
|
232
266
|
vec2(vStippleDistanceLimits.x, 1e34);
|
|
233
|
-
`)),
|
|
267
|
+
`)),F.main.add(D`
|
|
234
268
|
// Convert back into NDC
|
|
235
269
|
pos.xy = (pos.xy / viewport.zw) * pos.w;
|
|
236
270
|
pos.z = pos.z * pos.w;
|
|
@@ -238,42 +272,48 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteWorldToScreenRat
|
|
|
238
272
|
vColor = getColor();
|
|
239
273
|
vColor.a = noPerspectiveWrite(vColor.a * coverage, pos.w);
|
|
240
274
|
|
|
241
|
-
${
|
|
275
|
+
${T&&!A?"pos.z -= EPS * pos.w;":""}
|
|
242
276
|
|
|
243
277
|
// transform final position to camera space for slicing
|
|
244
278
|
vpos = (inverseProjectionMatrix * pos).xyz;
|
|
245
279
|
gl_Position = pos;
|
|
246
280
|
forwardObjectAndLayerIdColor();
|
|
247
|
-
}`),
|
|
281
|
+
}`),C.fragment.include(e,P),C.include(b,P),W.include(l),W.main.add(D`discardBySlice(vpos);`),C.include(c),W.include(L),W.main.add(D`
|
|
248
282
|
float lineWidth = noPerspectiveRead(vLineWidth);
|
|
249
283
|
float lineDistance = noPerspectiveRead(vLineDistance);
|
|
250
|
-
${
|
|
251
|
-
`)
|
|
284
|
+
${x(G,D`float lineDistanceNorm = noPerspectiveRead(vLineDistanceNorm);`)}
|
|
285
|
+
`),T?W.main.add(D`vec4 finalColor = vec4(1.0, 0.0, 1.0, 1.0);`):(k&&W.main.add(D`float sdf = noPerspectiveRead(min(vSegmentSDF, vReverseSegmentSDF));
|
|
252
286
|
vec2 fragmentPosition = vec2(min(sdf, 0.0), lineDistance);
|
|
253
287
|
float fragmentRadius = length(fragmentPosition);
|
|
254
288
|
float fragmentCapSDF = (fragmentRadius - lineWidth) * 0.5;
|
|
255
289
|
float capCoverage = clamp(0.5 - fragmentCapSDF, 0.0, 1.0);
|
|
256
290
|
if (capCoverage < alphaCutoff) {
|
|
257
291
|
discard;
|
|
258
|
-
}`),
|
|
292
|
+
}`),H?W.main.add(D`vec2 stipplePosition = vec2(
|
|
259
293
|
min(getStippleSDF() * 2.0 - 1.0, 0.0),
|
|
260
294
|
lineDistanceNorm
|
|
261
295
|
);
|
|
262
296
|
float stippleRadius = length(stipplePosition * lineWidth);
|
|
263
297
|
float stippleCapSDF = (stippleRadius - lineWidth) * 0.5;
|
|
264
298
|
float stippleCoverage = clamp(0.5 - stippleCapSDF, 0.0, 1.0);
|
|
265
|
-
float stippleAlpha = step(alphaCutoff, stippleCoverage);`):
|
|
266
|
-
color.a = noPerspectiveRead(color.a);`),
|
|
299
|
+
float stippleAlpha = step(alphaCutoff, stippleCoverage);`):W.main.add(D`float stippleAlpha = getStippleAlpha(lineWidth);`),11!==V&&W.main.add(D`discardByStippleAlpha(stippleAlpha, alphaCutoff);`),C.include(c),W.uniforms.add(new g("intrinsicColor",e=>e.color)).main.add(D`vec4 color = intrinsicColor * vColor;
|
|
300
|
+
color.a = noPerspectiveRead(color.a);`),J&&W.uniforms.add(new g("innerColor",e=>e.innerColor??e.color),new S("innerWidth",(e,i)=>e.innerWidth*i.camera.pixelRatio)).main.add(D`float distToInner = abs(lineDistance) - innerWidth;
|
|
267
301
|
float innerAA = clamp(0.5 - distToInner, 0.0, 1.0);
|
|
268
302
|
float innerAlpha = innerColor.a + color.a * (1.0 - innerColor.a);
|
|
269
|
-
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),
|
|
303
|
+
color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),W.main.add(D`vec4 finalColor = blendStipple(color, stippleAlpha);`),N&&(W.uniforms.add(new S("falloff",e=>e.falloff)),W.main.add(D`finalColor.a *= pow(max(0.0, 1.0 - abs(lineDistanceNorm)), falloff);`)),E||W.main.add(D`float stretchFactor = vIsInsideJoin > 0.0 ? noPerspectiveRead(vStretchFactor) : 1.0;
|
|
304
|
+
float featherWidth = 2.0;
|
|
305
|
+
float featherStartDistance = max(lineWidth - featherWidth / stretchFactor, 0.0);
|
|
306
|
+
float straightFeatherStartDistance = max(lineWidth - featherWidth, 0.0);
|
|
270
307
|
float value = abs(lineDistance);
|
|
271
308
|
float feather = (value - featherStartDistance) / (lineWidth - featherStartDistance);
|
|
272
|
-
|
|
309
|
+
float joinCenterLineDistance = abs(noPerspectiveRead(vJoinCenterLineSDF));
|
|
310
|
+
float straightFeather = (joinCenterLineDistance - straightFeatherStartDistance) / (lineWidth - straightFeatherStartDistance);
|
|
311
|
+
feather = vIsInsideJoin > 0.0 ? max(feather, straightFeather) : feather;
|
|
312
|
+
finalColor.a *= 1.0 - clamp(feather, 0.0, 1.0);`),_&&W.main.add(D`
|
|
273
313
|
finalColor = animate(finalColor);
|
|
274
314
|
|
|
275
|
-
${
|
|
315
|
+
${x(11!==V,D`
|
|
276
316
|
if (finalColor.a <= alphaCutoff) {
|
|
277
317
|
discard;
|
|
278
318
|
}`)}
|
|
279
|
-
`)),
|
|
319
|
+
`)),W.main.add(D`outputColorHighlightOLID(applySlice(finalColor, vpos), finalColor.rgb);`),C}const z=Object.freeze(Object.defineProperty({__proto__:null,build:C,ribbonlineNumRoundJoinSubdivisions:P},Symbol.toStringTag,{value:"Module"}));export{z as R,C as b,P as r};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{clone as o,fromValues as r,create as a}from"../core/libs/gl-matrix-2/factories/vec4f64.js";import{ScreenSpacePass as
|
|
2
|
+
import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{clone as o,fromValues as r,create as a}from"../core/libs/gl-matrix-2/factories/vec4f64.js";import{ScreenSpacePass as t}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{BlendColorsPremultiplied as l,premultiplyAlpha as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/BlendColorsPremultiplied.glsl.js";import{CameraSpace as n}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{Float2PassUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Float2PassUniform.js";import{Float4PassUniform as d}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{Float4sPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Float4sPassUniform.js";import{FloatPassUniform as h}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{FloatsPassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/FloatsPassUniform.js";import{glsl as u,If as c}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{IntegerPassUniform as g}from"../views/3d/webgl-engine/core/shaderModules/IntegerPassUniform.js";import{Texture2DPassUniform as v}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{maxColorRampSize as C}from"../views/3d/webgl-engine/shaders/colorRampParameters.js";import{S as w}from"./ShadowCastAccumulate.glsl.js";import{NoParameters as f}from"../views/webgl/NoParameters.js";import{ShaderBuilder as b}from"../views/webgl/ShaderBuilder.js";class S extends f{constructor(r){super(),this._data=r,this.sampleScale=e(),this.opacityFromElevation=1,this.gradientColorRamp=y,this.thresholdColor=o($),this.bandedGradientColorRamp=M,this.bandSize=.1,this.threshold=.5}get shadowCastMap(){return this._data.shadowCastTexture}}const R=.7,j=50/255,y=[[0,r(0,0,1,0)],[1,r(0,0,1,R)]],$=r(1,0,0,R),M=[[0,r(j,j,j,0)],[1,r(j,j,j,R)]];function P(e){const o=new b,r=o.fragment;o.include(n),o.include(t);const{thresholdRendersSunlight:a,visualization:f}=e;r.constants.add("inverseSampleValue","float",w),r.uniforms.add(new v("shadowCastMap",e=>e.shadowCastMap),new i("sampleScale",e=>e.sampleScale),new h("opacityFromElevation",e=>e.opacityFromElevation));const S=2===f,R=3===f,j=1===f;R&&r.include(l);const y=!S;switch(y&&r.code.add(u`vec4 evaluateColorRamp(float value) {
|
|
3
3
|
if (value <= vvColorValues[0]) {
|
|
4
4
|
return vvColorColors[0];
|
|
5
5
|
}
|
|
@@ -10,39 +10,42 @@ return mix(vvColorColors[i-1], vvColorColors[i], f);
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
return vvColorColors[colorRampSize - 1];
|
|
13
|
-
}`),
|
|
14
|
-
${
|
|
13
|
+
}`),f){case 0:r.uniforms.add(new m("vvColorColors",C,e=>e.gradientColorRamp.flatMap(([e,o])=>s(z,o))),new g("colorRampSize",e=>e.gradientColorRamp.length),new p("vvColorValues",C,e=>e.gradientColorRamp.map(([e,o])=>e)));break;case 1:r.uniforms.add(new m("vvColorColors",C,e=>e.bandedGradientColorRamp.flatMap(([e,o])=>s(z,o))),new g("colorRampSize",e=>e.bandedGradientColorRamp.length),new p("vvColorValues",C,e=>e.bandedGradientColorRamp.map(([e,o])=>e)),new h("bandSize",e=>e.bandSize));break;case 3:r.uniforms.add(new d("uColor",e=>s(z,e.thresholdColor)),new h("threshold",e=>e.threshold),new m("vvColorColors",C,e=>e.gradientColorRamp.flatMap(([e,o])=>s(z,o))),new g("colorRampSize",e=>e.gradientColorRamp.length),new p("vvColorValues",C,e=>e.gradientColorRamp.map(([e,o])=>e)));break;case 2:r.uniforms.add(new d("uColor",e=>s(z,e.thresholdColor)),new h("threshold",e=>e.threshold))}const{type:$,selector:M,thresholdStrengthSelector:P}=R?{type:"vec2",selector:"rg",thresholdStrengthSelector:"strength.x"}:{type:"float",selector:"r",thresholdStrengthSelector:"strength"},V=!(S||R)||!a;return r.main.add(u`
|
|
14
|
+
${$} numSamples = texture(shadowCastMap, uv).${M} * inverseSampleValue;
|
|
15
15
|
|
|
16
16
|
fragColor = vec4(0.0);
|
|
17
17
|
|
|
18
18
|
// early out if we do not have any samples in one or more channels and 0 samples would be fully transparent
|
|
19
|
-
|
|
19
|
+
${c(V,u`
|
|
20
|
+
if (${c(y,u`vvColorColors[0].a == 0.0 && `,"")}dot(numSamples, ${$}(1)) < 1.0) {
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
23
|
+
`)}
|
|
22
24
|
|
|
23
25
|
// sampleScale is the number of total samples taken, so this brings strength to a 0-1 range.
|
|
24
26
|
// note that sampleScale is always a vec2 even if we have only the primary channel.
|
|
25
|
-
${
|
|
27
|
+
${$} strength = numSamples * sampleScale.${M};
|
|
26
28
|
|
|
27
29
|
// in threshold mode, step the strength to 0 if we are at or below the threshold, 1 otherwise.
|
|
28
|
-
${
|
|
29
|
-
|
|
30
|
+
${c(S||R,u`
|
|
31
|
+
float thresholdStrength = ${a?u`1.0 - ${P}`:P};
|
|
32
|
+
${P} = 1.0 - step(thresholdStrength, threshold);
|
|
30
33
|
`)}
|
|
31
34
|
|
|
32
35
|
// bail out if we are below the threshold
|
|
33
|
-
${
|
|
36
|
+
${c(S,u`if (${P} == 0.0) { return; }`)}
|
|
34
37
|
|
|
35
|
-
${
|
|
38
|
+
${c(j,u`strength = ceil(strength / bandSize) * bandSize;`)}
|
|
36
39
|
|
|
37
|
-
${
|
|
40
|
+
${$} attenuation = opacityFromElevation * strength;
|
|
38
41
|
|
|
39
|
-
${
|
|
42
|
+
${c(R,u`
|
|
40
43
|
vec4 thresholdColor = uColor * attenuation.r;
|
|
41
44
|
vec4 gradientColor = evaluateColorRamp(attenuation.g);
|
|
42
|
-
fragColor = blendColorsPremultiplied(thresholdColor, gradientColor);
|
|
43
|
-
`,
|
|
45
|
+
fragColor = blendColorsPremultiplied(${c(a,u`gradientColor, thresholdColor`,u`thresholdColor, gradientColor`)});
|
|
46
|
+
`,c(S,u`
|
|
44
47
|
fragColor = uColor * attenuation;
|
|
45
|
-
`,
|
|
48
|
+
`,u`
|
|
46
49
|
fragColor = evaluateColorRamp(attenuation);
|
|
47
50
|
`))}
|
|
48
|
-
`),o}const z=a(),V=Object.freeze(Object.defineProperty({__proto__:null,ShadowCastVisualizePassParameters:S,build
|
|
51
|
+
`),o}const z=a(),V=Object.freeze(Object.defineProperty({__proto__:null,ShadowCastVisualizePassParameters:S,build:P},Symbol.toStringTag,{value:"Module"}));export{S,V as a,P as b};
|
package/config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.
|
|
2
|
+
import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.93";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
|
package/kernel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.
|
|
2
|
+
import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.93",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
|