@arcgis/core 5.1.0-next.57 → 5.1.0-next.59
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/applications/Components/SelectionOperation.d.ts +2 -2
- package/applications/Components/SelectionOperation.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/04ea806b933d4dd41609.js +1 -0
- package/assets/esri/core/workers/chunks/{278eecd729bed2832702.js → 0622e238693c257abacb.js} +1 -1
- package/assets/esri/core/workers/chunks/{05bc675c029ed311427f.js → 155c741a9839d24f04a2.js} +1 -1
- package/assets/esri/core/workers/chunks/1ae4e43a399e1974f106.js +1 -0
- package/assets/esri/core/workers/chunks/1f8e22df08c2f5fbb8c8.js +1 -0
- package/assets/esri/core/workers/chunks/{2327b368673a974dee8b.js → 2339465190c9d5ede25f.js} +1 -1
- package/assets/esri/core/workers/chunks/23f6d24bf850bc3280ec.js +1 -0
- package/assets/esri/core/workers/chunks/2541ac6e0ed1184edc9b.js +1 -0
- package/assets/esri/core/workers/chunks/34207774bc371e95ba3c.js +1 -0
- package/assets/esri/core/workers/chunks/{01777e91cd4e0bf04fd0.js → 35217befc8f9882d139e.js} +1 -1
- package/assets/esri/core/workers/chunks/{40bcfc4f8efe7de7ec9d.js → 3de17e89973160b42923.js} +1 -1
- package/assets/esri/core/workers/chunks/{992e74570b76f3f9e52e.js → 48d289db3145ce6c02bb.js} +1 -1
- package/assets/esri/core/workers/chunks/4c73c2f4331351e2a50c.js +1 -0
- package/assets/esri/core/workers/chunks/{2757cf54656b5d318b11.js → 55a0b69cf034ac32fc25.js} +1 -1
- package/assets/esri/core/workers/chunks/{4d54beab8ae5ff31e7b0.js → 5a9f5a49dc68b42762bb.js} +1 -1
- package/assets/esri/core/workers/chunks/{7cec3252e3ee56424b9e.js → 5c6e5f22450dd0583074.js} +1 -1
- package/assets/esri/core/workers/chunks/{b39b4db86a1049f0b901.js → 6be9d00839002f24fafd.js} +1 -1
- package/assets/esri/core/workers/chunks/6c886f19875291d02407.js +1 -0
- package/assets/esri/core/workers/chunks/75e28458e08b0738b35a.js +2 -0
- package/assets/esri/core/workers/chunks/{c460ca93ed8e20d8b53a.js → 86a6dd19903fa5023cc7.js} +1 -1
- package/assets/esri/core/workers/chunks/{4afddb66242438b38df0.js → 8ccf2f65d8ed3c48ffff.js} +1 -1
- package/assets/esri/core/workers/chunks/{fcfaaced184f8da3e28d.js → 9b53aa2429573f1b977f.js} +1 -1
- package/assets/esri/core/workers/chunks/9d580b5bcd59857a5702.js +1405 -0
- package/assets/esri/core/workers/chunks/a37697ef360e2425768a.js +1 -0
- package/assets/esri/core/workers/chunks/{a787fe09d3df9d4254ba.js → ab3183f2327ff26e2b45.js} +1 -1
- package/assets/esri/core/workers/chunks/b0f2ce61d3cad413898e.js +1 -0
- package/assets/esri/core/workers/chunks/{53c149bca42595b7dd1e.js → bbdf27bc34fadbe8e6fe.js} +1 -1
- package/assets/esri/core/workers/chunks/be42fe0b7ba0e27030b2.js +1 -0
- package/assets/esri/core/workers/chunks/d0c3ab70f390cd579fed.js +1 -0
- package/assets/esri/core/workers/chunks/{5a573fa1012092328b88.js → d816d1a4220d827faf63.js} +1 -1
- package/assets/esri/core/workers/chunks/e26894655823849947f4.js +1 -0
- package/assets/esri/core/workers/chunks/e59f5dc8c85bcea66e98.js +1 -0
- package/assets/esri/core/workers/chunks/{ccf845ac0ac354507a25.js → ec1b2eb05410848081c9.js} +1 -1
- package/assets/esri/core/workers/chunks/{851dd71d28681d4eccfd.js → f7af90c5f9d371eb7009.js} +1 -1
- package/assets/esri/core/workers/chunks/fa6e1ad099b43a6f5501.js +1 -0
- package/assets/esri/core/workers/chunks/{4a6186001323b47c23a4.js → fee1d873127dca02459f.js} +1 -1
- package/chunks/GlobalIllumination.glsl.js +101 -0
- package/chunks/GlobalIlluminationBlur.glsl.js +68 -0
- package/chunks/ScreenSpaceShadowHighlight.glsl.js +6 -0
- package/chunks/ShadowCastAccumulate.glsl.js +1 -1
- package/chunks/ShadowHighlight.glsl.js +15 -8
- package/config.js +1 -1
- package/geometry/Mesh.js +1 -1
- package/geometry/support/polygonUtils.js +1 -1
- package/geometry/support/{triangulationUtils.js → triangulationUtilsDeprecated.js} +1 -1
- package/kernel.js +1 -1
- package/layers/support/SceneModification.js +1 -1
- package/networks/support/jsonTypes.d.ts +6 -0
- package/package.json +2 -2
- package/renderers/ClassBreaksRenderer.js +1 -1
- package/renderers/DictionaryRenderer.js +1 -1
- package/renderers/DotDensityRenderer.js +1 -1
- package/renderers/HeatmapRenderer.js +1 -1
- package/renderers/PieChartRenderer.js +1 -1
- package/renderers/Renderer.js +1 -1
- package/renderers/SimpleRenderer.js +1 -1
- package/renderers/UniqueValueRenderer.js +1 -1
- package/renderers/support/AttributeColorInfo.js +1 -1
- package/renderers/support/ClassBreakInfo.d.ts +6 -0
- package/renderers/support/ClassBreakInfo.js +1 -1
- package/renderers/support/UniqueValueClass.d.ts +12 -0
- package/renderers/support/UniqueValueClass.js +1 -1
- package/renderers/support/UniqueValueInfo.d.ts +12 -0
- package/renderers/support/UniqueValueInfo.js +1 -1
- package/renderers/visualVariables/ColorVariable.js +1 -1
- package/renderers/visualVariables/OpacityVariable.js +1 -1
- package/renderers/visualVariables/SizeVariable.js +1 -1
- package/renderers/visualVariables/VisualVariable.js +1 -1
- package/rest/networks/support/FunctionResult.d.ts +6 -0
- package/rest/networks/support/FunctionResult.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
- package/views/2d/engine/vectorTiles/VTLPainter3D.js +1 -1
- package/views/2d/engine/webgl/GlyphMosaic.js +1 -1
- package/views/2d/engine/webgl/GlyphSource.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/vectorTiles/VTLTechniqueFill.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/engine/webgl/util/IntervalMatcher.js +1 -1
- package/views/2d/engine/webgl/util/MapMatcher.js +1 -1
- package/views/2d/layers/features/schema/processor/MatcherSchema.js +1 -1
- package/views/2d/layers/features/schema/processor/SimpleProcessorSchema.js +1 -1
- package/views/3d/FocusAreasView.js +1 -1
- package/views/3d/analysis/AreaMeasurement/support/MeasurementData.js +1 -1
- package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillController.js +1 -1
- package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillVisualization.js +1 -1
- package/views/3d/interactive/visualElements/MeasurementArrowVisualElement.js +1 -1
- package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
- package/views/3d/layers/Lyr3DWorker.js +1 -1
- package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPolygonFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/extrudeUtils.js +1 -1
- package/views/3d/layers/graphics/extrudeUtilsDeprecated.js +2 -0
- package/views/3d/layers/graphics/tessellationUtils.js +2 -0
- package/views/3d/layers/i3s/PointCloudHighlights.js +1 -1
- package/views/3d/layers/i3s/PointCloudRenderer.js +1 -1
- package/views/3d/layers/i3s/PointCloudRendererNode.js +1 -1
- package/views/3d/layers/support/Tiles3DBVH.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianSplatIntersectionHandler.js +1 -1
- package/views/3d/support/gaussianSplatting/GaussianTile.js +1 -1
- package/views/3d/support/renderInfoUtils/line.js +1 -1
- package/views/3d/support/renderInfoUtils/polygon.js +1 -1
- package/views/3d/support/renderInfoUtils/polygonDeprecated.js +2 -0
- package/views/3d/terrain/OverlayRenderer.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/webgl/RenderNode.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentData.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObject.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/collections/Component/RenderGeometry.js +1 -1
- package/views/3d/webgl-engine/collections/Component/RenderSubmitSystem.js +1 -1
- package/views/3d/webgl-engine/core/renderPasses/RenderPass.js +1 -1
- package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js +6 -5
- package/views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js +4 -0
- package/views/3d/webgl-engine/core/shaderLibrary/shading/EncodingColor.glsl.js +7 -0
- package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientLighting.glsl.js +6 -6
- package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js +93 -72
- package/views/3d/webgl-engine/core/shaderLibrary/shading/PhysicallyBasedRendering.glsl.js +46 -22
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadGlobalIllumination.glsl.js +20 -0
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js +18 -13
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceReflections.glsl.js +23 -9
- package/views/3d/webgl-engine/core/shaderLibrary/shading/WaterColor.glsl.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/util/CloudsParallaxShading.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/RenderPlugin.js +1 -1
- package/views/3d/webgl-engine/effects/RenderPluginManager.js +1 -1
- package/views/3d/webgl-engine/effects/emissive/emissions.js +2 -0
- package/views/3d/webgl-engine/effects/globalIllumination/BlueNoise.js +2 -0
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +2 -0
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationBlurTechnique.js +2 -0
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechnique.js +2 -0
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +2 -0
- package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlight.glsl.js +2 -0
- package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlightRenderNode.js +2 -0
- package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlightTechnique.js +2 -0
- package/views/3d/webgl-engine/effects/highlight/ShadowHighlight.js +1 -1
- package/views/3d/webgl-engine/effects/laserlines/LaserLineRenderer.js +1 -1
- package/views/3d/webgl-engine/effects/ssao/SSAO.js +1 -1
- package/views/3d/webgl-engine/effects/transparency/OITBlend.js +1 -1
- package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
- package/views/3d/webgl-engine/lib/Material.js +1 -1
- package/views/3d/webgl-engine/lib/RayIntersections.js +1 -1
- package/views/3d/webgl-engine/lib/RenderFeature.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/ReprojectionUniforms.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodComponentData.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodLevel.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/MeasurementArrowMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/materials/PatternMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/WaterTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
- package/views/3d/webgl-engine/parts/RenderView.js +1 -1
- package/views/3d/webgl-engine/shaders/DefaultMaterialTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/GlobalIllumination.glsl.js +2 -0
- package/views/3d/webgl-engine/shaders/GlobalIlluminationBlur.glsl.js +2 -0
- package/views/3d/webgl-engine/shaders/MeasurementArrowTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/MeasurementArrowTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/ReceiveShadowsConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/TerrainTechniqueConfiguration.js +1 -1
- package/views/3d/webgl.js +1 -1
- package/views/selection/SelectionOperation.d.ts +190 -0
- package/views/selection/SelectionOperation.js +2 -0
- package/views/selection/types.d.ts +146 -1
- package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/009db7b459b18f6a668b.js +0 -1
- package/assets/esri/core/workers/chunks/0fc60b4c44c4e865b699.js +0 -2
- package/assets/esri/core/workers/chunks/34484afe767d60f85982.js +0 -1
- package/assets/esri/core/workers/chunks/55bb5b7817c2963c8bfa.js +0 -1
- package/assets/esri/core/workers/chunks/572fcd33ae3648ed4f9c.js +0 -1
- package/assets/esri/core/workers/chunks/66a4d764937918a2779f.js +0 -1
- package/assets/esri/core/workers/chunks/6b56c8ba978ec6edd6b8.js +0 -1
- package/assets/esri/core/workers/chunks/9806cc96414065ae0afe.js +0 -1
- package/assets/esri/core/workers/chunks/9b365a6242b0287f8727.js +0 -1
- package/assets/esri/core/workers/chunks/a029db48079af4b5cccd.js +0 -1
- package/assets/esri/core/workers/chunks/ea068f75397c3b3337ec.js +0 -1034
- package/assets/esri/core/workers/chunks/ec91d5081f423755cb07.js +0 -1
- package/assets/esri/core/workers/chunks/f9fe89ced41b49608667.js +0 -1
- package/assets/esri/core/workers/chunks/fce30184f354fb7d11af.js +0 -1
- package/widgets/support/Selector2D/SelectionOperation.js +0 -2
- /package/assets/esri/core/workers/chunks/{0fc60b4c44c4e865b699.js.LICENSE.txt → 75e28458e08b0738b35a.js.LICENSE.txt} +0 -0
|
@@ -1,92 +1,113 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{EvaluateAmbientLighting as i}from"./EvaluateAmbientLighting.glsl.js";import{EvaluateAmbientOcclusion as n}from"./EvaluateAmbientOcclusion.glsl.js";import{Gamma as e}from"./Gamma.glsl.js";import{addMainLightDirection as
|
|
3
|
-
${m(0!==L,"const float GROUND_REFLECTANCE = 0.2;")}
|
|
4
|
-
`),p(g),f(g),o(g),g.code.add(s`
|
|
2
|
+
import{EvaluateAmbientLighting as i}from"./EvaluateAmbientLighting.glsl.js";import{EvaluateAmbientOcclusion as n}from"./EvaluateAmbientOcclusion.glsl.js";import{Gamma as e}from"./Gamma.glsl.js";import{addMainLightDirection as t,addMainLightIntensity as a,applyShading as o}from"./MainLighting.glsl.js";import{PhysicallyBasedRendering as l}from"./PhysicallyBasedRendering.glsl.js";import{PiUtils as r}from"./PiUtils.glsl.js";import{ReadGlobalIllumination as c}from"./ReadGlobalIllumination.glsl.js";import{BooleanBindUniform as s}from"../../shaderModules/BooleanBindUniform.js";import{FloatBindUniform as d}from"../../shaderModules/FloatBindUniform.js";import{glsl as m,If as u}from"../../shaderModules/glsl.js";import{ambientBoost as g}from"../../../lighting/SceneLighting.js";import{BlackLevelLightSoftCompression as h}from"../../../shaders/BlackLevelLightSoftCompression.glsl.js";import{ToneMapping as p}from"../../../shaders/ToneMapping.glsl.js";function f(i){i.constants.add("ambientBoostFactor","float",g)}function b(i){i.uniforms.add(new d("lightingGlobalFactor",i=>i.lighting.globalFactor))}function v(g,v){const{pbrMode:L,spherical:C,hasColorTexture:I,receiveGlobalIllumination:D}=v;g.include(e),g.include(c,v),g.include(n,v),0!==L&&g.include(l,v),g.include(i,v),g.include(r),g.include(p,v);const R=!(2===L&&!I);R&&g.include(h),f(g),b(g),t(g),g.code.add(m`
|
|
5
3
|
float additionalDirectedAmbientLight(float lightAlignment) {
|
|
6
4
|
return smoothstep(0.0, 1.0, clamp(lightAlignment * 2.5, 0.0, 1.0));
|
|
7
5
|
}
|
|
8
6
|
|
|
9
7
|
float additionalDirectedAmbientLight(vec3 vPosWorld) {
|
|
10
|
-
float lightAlignment = dot(${
|
|
8
|
+
float lightAlignment = dot(${C?m`normalize(vPosWorld)`:m`vec3(0.0, 0.0, 1.0)`}, mainLightDirection);
|
|
11
9
|
return smoothstep(0.0, 1.0, clamp(lightAlignment * 2.5, 0.0, 1.0));
|
|
12
10
|
}
|
|
13
|
-
`),
|
|
11
|
+
`),a(g),g.code.add(m`vec3 evaluateAdditionalLighting(float ambientOcclusion, vec3 vPosWorld) {
|
|
14
12
|
float additionalAmbientScale = additionalDirectedAmbientLight(vPosWorld);
|
|
15
13
|
return (1.0 - ambientOcclusion) * additionalAmbientScale * ambientBoostFactor * lightingGlobalFactor * mainLightIntensity;
|
|
16
|
-
}`),L){case 0:case 4:case 3:g.include(
|
|
14
|
+
}`);const y=D?"globalIlluminationOcclusion":"ssao",A=D?.75:1,S=D?1.5:1;switch(L){case 0:case 4:case 3:g.include(o),g.code.add(m`vec3 evaluateSceneLighting(vec3 normalWorld, vec3 albedo, float shadow, float ssao, vec3 additionalLight) {
|
|
17
15
|
vec3 mainLighting = applyShading(normalWorld, shadow);
|
|
18
|
-
vec3 ambientLighting = calculateAmbientIrradiance(normalWorld
|
|
16
|
+
vec3 ambientLighting = calculateAmbientIrradiance(normalWorld) * (1.0 - ssao);
|
|
19
17
|
vec3 albedoLinear = linearizeGamma(albedo);
|
|
20
18
|
vec3 totalLight = mainLighting + ambientLighting + additionalLight;
|
|
21
19
|
totalLight = min(totalLight, vec3(PI));
|
|
22
20
|
vec3 outColor = vec3((albedoLinear / PI) * totalLight);
|
|
23
21
|
return delinearizeGamma(outColor);
|
|
24
|
-
}`);break;case 1:case 2:g.code.add(
|
|
25
|
-
const float
|
|
26
|
-
const float
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
vec3
|
|
31
|
-
|
|
32
|
-
inputs
|
|
33
|
-
inputs
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
inputs.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
vec3
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
inputs.
|
|
50
|
-
|
|
51
|
-
inputs.
|
|
52
|
-
|
|
53
|
-
vec3
|
|
54
|
-
vec3
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
22
|
+
}`);break;case 1:case 2:{const i=D?.35:.2;g.code.add(m`
|
|
23
|
+
const float fillLightIntensity = 0.25;
|
|
24
|
+
const float horizonLightDiffusion = 0.4;
|
|
25
|
+
const float additionalAmbientIrradianceFactor = 0.02;
|
|
26
|
+
const float groundReflectance = ${m.float(i)};
|
|
27
|
+
|
|
28
|
+
vec3 evaluateSceneLightingPBR(vec3 normal, vec3 albedo, float shadow, float ssao, vec3 additionalLight,
|
|
29
|
+
vec3 viewDirection, vec3 upDirection, vec3 mrr, float additionalAmbientIrradiance) {
|
|
30
|
+
PBRShadingInfo inputs;
|
|
31
|
+
calculatePBRInputs(inputs, normal, viewDirection, upDirection, albedo, mrr);
|
|
32
|
+
|
|
33
|
+
${u(D,m`vec3 globalIlluminationOcclusion = min(1.2 * readGlobalIlluminationOcclusion(), 1.0);`)}
|
|
34
|
+
`),v.useFillLights?g.uniforms.add(new s("hasFillLights",i=>i.enableFillLights)):g.constants.add("hasFillLights","bool",!1),g.code.add(m`
|
|
35
|
+
vec3 ambientDir = vec3(5.0 * upDirection[1] - upDirection[0] * upDirection[2], - 5.0 * upDirection[0] - upDirection[2] * upDirection[1], upDirection[1] * upDirection[1] + upDirection[0] * upDirection[0]);
|
|
36
|
+
ambientDir = ambientDir != vec3(0.0) ? normalize(ambientDir) : normalize(vec3(5.0, -1.0, 0.0));
|
|
37
|
+
|
|
38
|
+
inputs.NdotAmbDir = hasFillLights ? abs(dot(normal, ambientDir)) : 1.0;
|
|
39
|
+
|
|
40
|
+
// Calculate the irradiance components: sun, fill lights and the sky.
|
|
41
|
+
vec3 mainLightIrradianceComponent = ${m.float(A)} * inputs.NdotL * (1.0 - shadow) * mainLightIntensity;
|
|
42
|
+
vec3 fillLightsIrradianceComponent = inputs.NdotAmbDir * mainLightIntensity * fillLightIntensity;
|
|
43
|
+
// calculate ambient irradiance for localView and additionalLight for globalView
|
|
44
|
+
vec3 ambientLightIrradianceComponent = ${m.float(S)} * calculateAmbientIrradiance(normal) * (1.0 - ${y}) + additionalLight;
|
|
45
|
+
|
|
46
|
+
// Assemble the overall irradiance of the sky that illuminates the surface
|
|
47
|
+
inputs.skyIrradianceToSurface = ambientLightIrradianceComponent + mainLightIrradianceComponent + fillLightsIrradianceComponent ;
|
|
48
|
+
// Assemble the overall irradiance of the ground that illuminates the surface. for this we use the simple model that changes only the sky irradiance by the groundReflectance
|
|
49
|
+
inputs.groundIrradianceToSurface = groundReflectance * ambientLightIrradianceComponent + mainLightIrradianceComponent + fillLightsIrradianceComponent ;
|
|
50
|
+
`),g.uniforms.add(new d("lightingSpecularStrength",i=>i.lighting.mainLight.specularStrength),new d("lightingEnvironmentStrength",i=>i.lighting.mainLight.environmentStrength)).code.add(m`
|
|
51
|
+
vec3 horizonRingDir = inputs.RdotUP * upDirection - inputs.reflectedView;
|
|
52
|
+
vec3 horizonRingH = normalize(horizonRingDir - viewDirection);
|
|
53
|
+
inputs.NdotH_Horizon = dot(normal, horizonRingH);
|
|
54
|
+
|
|
55
|
+
vec3 mainLightRadianceComponent = lightingSpecularStrength * normalDistribution(inputs.NdotH, inputs.roughness) * mainLightIntensity * (1.0 - shadow);
|
|
56
|
+
vec3 horizonLightRadianceComponent = lightingEnvironmentStrength * normalDistribution(inputs.NdotH_Horizon, min(inputs.roughness + horizonLightDiffusion, 1.0)) * mainLightIntensity * fillLightIntensity;
|
|
57
|
+
|
|
58
|
+
// calculateAmbientRadiance for localView and additionalLight for global view
|
|
59
|
+
vec3 ambientLightRadianceComponent = lightingEnvironmentStrength * calculateAmbientRadiance() * (1.0 - ${y}) + additionalLight;
|
|
60
|
+
float normalDirectionModifier = mix(1., min(mix(0.1, 2.0, (inputs.NdotUP + 1.) * 0.5), 1.0), clamp(inputs.roughness * 5.0, 0.0 , 1.0));
|
|
61
|
+
|
|
62
|
+
// Assemble the overall radiance of the sky that illuminates the surface
|
|
63
|
+
inputs.skyRadianceToSurface = (ambientLightRadianceComponent + horizonLightRadianceComponent) * normalDirectionModifier + mainLightRadianceComponent;
|
|
64
|
+
|
|
65
|
+
// Assemble the overall radiance of the ground that illuminates the surface. for this we use the simple model that changes only the sky radiance by the groundReflectance
|
|
66
|
+
inputs.groundRadianceToSurface = 0.5 * groundReflectance * (ambientLightRadianceComponent + horizonLightRadianceComponent) * normalDirectionModifier + mainLightRadianceComponent;
|
|
67
|
+
|
|
68
|
+
// Calculate average ambient radiance - This is used in the gamut mapping process to determine the black level for compression
|
|
69
|
+
inputs.averageAmbientRadiance = ambientLightIrradianceComponent[1] * (1.0 + groundReflectance);
|
|
70
|
+
`),g.code.add(m`
|
|
60
71
|
vec3 reflectedColorComponent = evaluateEnvironmentIllumination(inputs);
|
|
61
72
|
vec3 additionalMaterialReflectanceComponent = inputs.albedoLinear * additionalAmbientIrradiance;
|
|
62
73
|
vec3 outColorLinear = reflectedColorComponent + additionalMaterialReflectanceComponent;
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
|
|
75
|
+
${u(D,m`
|
|
76
|
+
vec3 globalIlluminationEmission = 2.25 * (0.75 * inputs.albedoLinear + 0.25) * readGlobalIlluminationEmission().rgb;
|
|
77
|
+
outColorLinear += globalIlluminationEmission;`)}
|
|
78
|
+
|
|
79
|
+
${R?m`vec3 adjustedOutColorLinear = blackLevelSoftCompression(outColorLinear, inputs.averageAmbientRadiance);`:m`vec3 adjustedOutColorLinear = max(vec3(0.0), outColorLinear - 0.005 * inputs.averageAmbientRadiance);`}
|
|
80
|
+
|
|
81
|
+
return delinearizeGamma(adjustedOutColorLinear);
|
|
82
|
+
}
|
|
83
|
+
`);break}case 5:case 6:{const i=D?.35:.5,n=D?.75:1,e=D?1.5:1;t(g),a(g),g.code.add(m`
|
|
84
|
+
const float roughnessTerrain = 0.5;
|
|
85
|
+
const float specularityTerrain = ${m.float(i)};
|
|
86
|
+
|
|
87
|
+
vec3 evaluatePBRSimplifiedLighting(vec3 normal, vec3 albedo, float shadow, float ssao, vec3 additionalLight, vec3 viewDirection, vec3 upDirection) {
|
|
88
|
+
PBRShadingInfo inputs;
|
|
89
|
+
calculateSimplifiedInputs(inputs, normal, viewDirection, upDirection, albedo);
|
|
90
|
+
|
|
91
|
+
${u(D,m`vec3 globalIlluminationOcclusion = min(1.2 * readGlobalIlluminationOcclusion(), 1.0);`)}
|
|
92
|
+
|
|
93
|
+
vec3 mainLightIrradianceComponent = ${m.float(n)} * (1.0 - shadow) * inputs.NdotL * mainLightIntensity;
|
|
94
|
+
vec3 ambientLightIrradianceComponent = ${m.float(e)} * calculateAmbientIrradiance(normal) * (1.0 - ${y}) + additionalLight;
|
|
95
|
+
vec3 ambientSky = ambientLightIrradianceComponent + mainLightIrradianceComponent;
|
|
96
|
+
|
|
97
|
+
vec3 indirectDiffuse = ((1.0 - inputs.NdotUP) * mainLightIrradianceComponent + (1.0 + inputs.NdotUP ) * ambientSky) * 0.5;
|
|
98
|
+
vec3 outDiffColor = inputs.albedoLinear * (1.0 - inputs.f0) * indirectDiffuse / PI;
|
|
99
|
+
|
|
100
|
+
vec3 mainLightRadianceComponent = normalDistribution(inputs.NdotH, roughnessTerrain) * mainLightIntensity;
|
|
101
|
+
vec2 dfg = prefilteredDFGAnalytical(roughnessTerrain, inputs.NdotV);
|
|
102
|
+
vec3 specularColor = inputs.f0 * dfg.x + inputs.f90 * dfg.y;
|
|
103
|
+
vec3 specularComponent = specularityTerrain * specularColor * mainLightRadianceComponent;
|
|
104
|
+
|
|
105
|
+
vec3 outColorLinear = outDiffColor + specularComponent;
|
|
106
|
+
|
|
107
|
+
${u(D,m`
|
|
108
|
+
vec3 globalIlluminationEmission = 2.25 * (0.75 * inputs.albedoLinear + 0.25) * readGlobalIlluminationEmission().rgb;
|
|
109
|
+
outColorLinear += globalIlluminationEmission;`)}
|
|
110
|
+
|
|
111
|
+
return delinearizeGamma(outColorLinear);
|
|
65
112
|
}
|
|
66
|
-
|
|
67
|
-
const float specularityTerrain = 0.5;
|
|
68
|
-
const vec3 fresnelReflectionTerrain = vec3(0.04);
|
|
69
|
-
vec3 evaluatePBRSimplifiedLighting(vec3 n, vec3 c, float shadow, float ssao, vec3 al, vec3 vd, vec3 nup) {
|
|
70
|
-
vec3 viewDirection = -vd;
|
|
71
|
-
vec3 h = normalize(viewDirection + mainLightDirection);
|
|
72
|
-
float NdotL = clamp(dot(n, mainLightDirection), 0.001, 1.0);
|
|
73
|
-
float NdotV = clamp(abs(dot(n, viewDirection)), 0.001, 1.0);
|
|
74
|
-
float NdotH = clamp(dot(n, h), 0.0, 1.0);
|
|
75
|
-
float NdotNG = clamp(dot(n, nup), -1.0, 1.0);
|
|
76
|
-
vec3 albedoLinear = linearizeGamma(c);
|
|
77
|
-
float lightness = 0.3 * albedoLinear[0] + 0.5 * albedoLinear[1] + 0.2 * albedoLinear[2];
|
|
78
|
-
vec3 f0 = (0.85 * lightness + 0.15) * fresnelReflectionTerrain;
|
|
79
|
-
vec3 f90 = vec3(clamp(dot(f0, vec3(50.0 * 0.33)), 0.0, 1.0));
|
|
80
|
-
vec3 mainLightIrradianceComponent = (1. - shadow) * NdotL * mainLightIntensity;
|
|
81
|
-
vec3 ambientLightIrradianceComponent = calculateAmbientIrradiance(n, ssao) + al;
|
|
82
|
-
vec3 ambientSky = ambientLightIrradianceComponent + mainLightIrradianceComponent;
|
|
83
|
-
vec3 indirectDiffuse = ((1.0 - NdotNG) * mainLightIrradianceComponent + (1.0 + NdotNG ) * ambientSky) * 0.5;
|
|
84
|
-
vec3 outDiffColor = albedoLinear * (1.0 - f0) * indirectDiffuse / PI;
|
|
85
|
-
vec3 mainLightRadianceComponent = normalDistribution(NdotH, roughnessTerrain) * mainLightIntensity;
|
|
86
|
-
vec2 dfg = prefilteredDFGAnalytical(roughnessTerrain, NdotV);
|
|
87
|
-
vec3 specularColor = f0 * dfg.x + f90 * dfg.y;
|
|
88
|
-
vec3 specularComponent = specularityTerrain * specularColor * mainLightRadianceComponent;
|
|
89
|
-
vec3 outColorLinear = outDiffColor + specularComponent;
|
|
90
|
-
vec3 outColor = delinearizeGamma(outColorLinear);
|
|
91
|
-
return outColor;
|
|
92
|
-
}`)}}export{v as EvaluateSceneLighting,p as addAmbientBoostFactor,f as addLightingGlobalFactor};
|
|
113
|
+
`);break}}}export{v as EvaluateSceneLighting,f as addAmbientBoostFactor,b as addLightingGlobalFactor};
|
|
@@ -1,65 +1,89 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{AnalyticalSkyModel as e}from"./AnalyticalSkyModel.glsl.js";import{
|
|
2
|
+
import{AnalyticalSkyModel as e}from"./AnalyticalSkyModel.glsl.js";import{Gamma as o}from"./Gamma.glsl.js";import{PiUtils as t}from"./PiUtils.glsl.js";import{glsl as n}from"../../shaderModules/glsl.js";function a(a,i){a.include(o),a.include(t),1!==i.pbrMode&&2!==i.pbrMode&&5!==i.pbrMode&&6!==i.pbrMode||(a.code.add(n`float normalDistribution(float NdotH, float roughness)
|
|
3
3
|
{
|
|
4
4
|
float a = NdotH * roughness;
|
|
5
5
|
float b = roughness / (1.0 - NdotH * NdotH + a * a);
|
|
6
6
|
return b * b * INV_PI;
|
|
7
|
-
}`),
|
|
7
|
+
}`),a.code.add(n`const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
|
8
8
|
const vec4 c1 = vec4( 1.0, 0.0425, 1.040, -0.040);
|
|
9
9
|
const vec2 c2 = vec2(-1.04, 1.04);
|
|
10
10
|
vec2 prefilteredDFGAnalytical(float roughness, float NdotV) {
|
|
11
11
|
vec4 r = roughness * c0 + c1;
|
|
12
12
|
float a004 = min(r.x * r.x, exp2(-9.28 * NdotV)) * r.x + r.y;
|
|
13
13
|
return c2 * a004 + r.zw;
|
|
14
|
-
}`)
|
|
14
|
+
}`),a.code.add(n`struct PBRShadingInfo
|
|
15
15
|
{
|
|
16
16
|
float NdotV;
|
|
17
|
+
float NdotL;
|
|
17
18
|
float LdotH;
|
|
18
|
-
float
|
|
19
|
-
float
|
|
19
|
+
float NdotUP;
|
|
20
|
+
float RdotUP;
|
|
20
21
|
float NdotAmbDir;
|
|
21
22
|
float NdotH_Horizon;
|
|
23
|
+
float NdotH;
|
|
22
24
|
vec3 skyRadianceToSurface;
|
|
23
25
|
vec3 groundRadianceToSurface;
|
|
24
26
|
vec3 skyIrradianceToSurface;
|
|
25
27
|
vec3 groundIrradianceToSurface;
|
|
28
|
+
vec3 reflectedView;
|
|
26
29
|
float averageAmbientRadiance;
|
|
27
|
-
float ssao;
|
|
28
30
|
vec3 albedoLinear;
|
|
29
31
|
vec3 f0;
|
|
30
32
|
vec3 f90;
|
|
31
33
|
vec3 diffuseColor;
|
|
32
34
|
float metalness;
|
|
33
35
|
float roughness;
|
|
34
|
-
};`),
|
|
35
|
-
vec3
|
|
36
|
-
|
|
36
|
+
};`),a.code.add(n`void calculateCommonInputs(out PBRShadingInfo inputs, vec3 normal, vec3 viewDirection, vec3 upDirection, vec3 albedo) {
|
|
37
|
+
vec3 h = normalize(mainLightDirection - viewDirection);
|
|
38
|
+
inputs.NdotV = clamp(abs(dot(normal, -viewDirection)), 0.001, 1.0);
|
|
39
|
+
inputs.NdotUP = clamp(dot(normal, upDirection), -1.0, 1.0);
|
|
40
|
+
inputs.reflectedView = normalize(reflect(-viewDirection, normal));
|
|
41
|
+
inputs.RdotUP = clamp(dot(inputs.reflectedView, upDirection), -1.0, 1.0);
|
|
42
|
+
inputs.albedoLinear = linearizeGamma(albedo);
|
|
43
|
+
inputs.NdotH = clamp(dot(normal, h), 0.0, 1.0);
|
|
44
|
+
inputs.NdotL = clamp(dot(normal, mainLightDirection), 0.001, 1.0);
|
|
45
|
+
}`)),1!==i.pbrMode&&2!==i.pbrMode||(a.include(e),a.code.add(n`vec3 evaluateEnvironmentIllumination(PBRShadingInfo inputs) {
|
|
46
|
+
vec3 indirectDiffuse = evaluateDiffuseIlluminationHemisphere(inputs.groundIrradianceToSurface, inputs.skyIrradianceToSurface, inputs.NdotUP);
|
|
47
|
+
vec3 indirectSpecular = evaluateSpecularIlluminationHemisphere(inputs.groundRadianceToSurface, inputs.skyRadianceToSurface, inputs.RdotUP, inputs.roughness);
|
|
37
48
|
vec3 diffuseComponent = inputs.diffuseColor * indirectDiffuse * INV_PI;
|
|
38
49
|
vec2 dfg = prefilteredDFGAnalytical(inputs.roughness, inputs.NdotV);
|
|
39
50
|
vec3 specularColor = inputs.f0 * dfg.x + inputs.f90 * dfg.y;
|
|
40
51
|
vec3 specularComponent = specularColor * indirectSpecular;
|
|
41
52
|
return (diffuseComponent + specularComponent);
|
|
42
|
-
}`)
|
|
53
|
+
}`),a.code.add(n`void calculatePBRInputs(out PBRShadingInfo inputs, vec3 normal, vec3 viewDirection, vec3 upDirection, vec3 albedo, vec3 mrr) {
|
|
54
|
+
calculateCommonInputs(inputs, normal, viewDirection, upDirection, albedo);
|
|
55
|
+
inputs.metalness = mrr[0];
|
|
56
|
+
inputs.roughness = clamp(mrr[1] * mrr[1], 0.001, 0.99);
|
|
57
|
+
inputs.f0 = (0.16 * mrr[2] * mrr[2]) * (1.0 - inputs.metalness) + inputs.albedoLinear * inputs.metalness;
|
|
58
|
+
inputs.f90 = vec3(clamp(dot(inputs.f0, vec3(50.0 * 0.33)), 0.0, 1.0));
|
|
59
|
+
inputs.diffuseColor = inputs.albedoLinear * (vec3(1.0) - inputs.f0) * (1.0 - inputs.metalness);
|
|
60
|
+
}`)),5!==i.pbrMode&&6!==i.pbrMode||a.code.add(n`const vec3 fresnelReflectionSimplified = vec3(0.04);
|
|
61
|
+
void calculateSimplifiedInputs(out PBRShadingInfo inputs, vec3 normal, vec3 viewDirection, vec3 upDirection, vec3 albedo) {
|
|
62
|
+
calculateCommonInputs(inputs, normal, viewDirection, upDirection, albedo);
|
|
63
|
+
float lightness = 0.3 * inputs.albedoLinear[0] + 0.5 * inputs.albedoLinear[1] + 0.2 * inputs.albedoLinear[2];
|
|
64
|
+
inputs.f0 = (0.85 * lightness + 0.15) * fresnelReflectionSimplified;
|
|
65
|
+
inputs.f90 = vec3(clamp(dot(inputs.f0, vec3(50.0 * 0.33)), 0.0, 1.0));
|
|
66
|
+
}`)}function i(e,o){e.include(t),e.code.add(n`
|
|
43
67
|
struct PBRShadingWater {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
68
|
+
float NdotL; // cos angle between normal and light direction
|
|
69
|
+
float NdotV; // cos angle between normal and view direction
|
|
70
|
+
float NdotH; // cos angle between normal and half vector
|
|
71
|
+
float VdotH; // cos angle between view direction and half vector
|
|
72
|
+
float LdotH; // cos angle between light direction and half vector
|
|
73
|
+
float VdotN; // cos angle between view direction and normal vector
|
|
50
74
|
};
|
|
51
75
|
|
|
52
|
-
float dtrExponent = ${
|
|
53
|
-
`),e.code.add(
|
|
76
|
+
float dtrExponent = ${o.useCustomDTRExponentForWater?"2.2":"2.0"};
|
|
77
|
+
`),e.code.add(n`vec3 fresnelReflection(float angle, vec3 f0, float f90) {
|
|
54
78
|
return f0 + (f90 - f0) * pow(1.0 - angle, 5.0);
|
|
55
|
-
}`),e.code.add(
|
|
79
|
+
}`),e.code.add(n`float normalDistributionWater(float NdotH, float roughness) {
|
|
56
80
|
float r2 = roughness * roughness;
|
|
57
81
|
float NdotH2 = NdotH * NdotH;
|
|
58
82
|
float denom = pow((NdotH2 * (r2 - 1.0) + 1.0), dtrExponent) * PI;
|
|
59
83
|
return r2 / denom;
|
|
60
|
-
}`),e.code.add(
|
|
84
|
+
}`),e.code.add(n`float geometricOcclusionKelemen(float LoH) {
|
|
61
85
|
return 0.25 / (LoH * LoH);
|
|
62
|
-
}`),e.code.add(
|
|
86
|
+
}`),e.code.add(n`vec3 brdfSpecularWater(in PBRShadingWater props, float roughness, vec3 F0, float F0Max) {
|
|
63
87
|
vec3 F = fresnelReflection(props.VdotH, F0, F0Max);
|
|
64
88
|
float dSun = normalDistributionWater(props.NdotH, roughness);
|
|
65
89
|
float V = geometricOcclusionKelemen(props.LdotH);
|
|
@@ -67,4 +91,4 @@ float diffusionSunHaze = mix(roughness + 0.045, roughness + 0.385, 1.0 - props.V
|
|
|
67
91
|
float strengthSunHaze = 1.2;
|
|
68
92
|
float dSunHaze = normalDistributionWater(props.NdotH, diffusionSunHaze) * strengthSunHaze;
|
|
69
93
|
return ((dSun + dSunHaze) * V) * F;
|
|
70
|
-
}`)}export{
|
|
94
|
+
}`)}export{a as PhysicallyBasedRendering,i as PhysicallyBasedRenderingWater};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
+
import{EncodeEmissionColors as e}from"./EncodingColor.glsl.js";import{glsl as l}from"../../shaderModules/glsl.js";import{Texture2DBindUniform as n}from"../../shaderModules/Texture2DBindUniform.js";import{blurSizePixels as o}from"../../../effects/globalIllumination/GlobalIllumination.js";function i(i,r){r.receiveGlobalIllumination?(i.include(e),i.uniforms.add(new n("globalIlluminationTexture",e=>e.globalIllumination?.getTexture())),i.constants.add("blurSizePixelsInverse","float",1/o),i.code.add(l`vec3 readGlobalIlluminationOcclusionInverse() {
|
|
3
|
+
ivec2 texel = ivec2(gl_FragCoord.xy * blurSizePixelsInverse);
|
|
4
|
+
return vec3(texelFetch(globalIlluminationTexture, texel, 0).a);
|
|
5
|
+
}
|
|
6
|
+
vec3 readGlobalIlluminationOcclusion() {
|
|
7
|
+
return 1.0 - readGlobalIlluminationOcclusionInverse();
|
|
8
|
+
}
|
|
9
|
+
vec4 readGlobalIlluminationEmissionInverse() {
|
|
10
|
+
ivec2 texel = ivec2(gl_FragCoord.xy * blurSizePixelsInverse);
|
|
11
|
+
vec3 encodedEmission = texelFetch(globalIlluminationTexture, texel, 0).rgb;
|
|
12
|
+
vec3 rgb = decodeVec2ToRGB(encodedEmission.rg);
|
|
13
|
+
return 1.0 - vec4(rgb, 0.0);
|
|
14
|
+
}
|
|
15
|
+
vec4 readGlobalIlluminationEmission() {
|
|
16
|
+
return max((1.0 - readGlobalIlluminationEmissionInverse() - 0.01) / 0.99, 0.);
|
|
17
|
+
}`)):i.code.add(l`vec3 readGlobalIlluminationOcclusionInverse() { return vec3(1.0); }
|
|
18
|
+
vec3 readGlobalIlluminationOcclusion() { return vec3(0.0); }
|
|
19
|
+
vec4 readGlobalIlluminationEmissionInverse() { return vec4(1.0); }
|
|
20
|
+
vec4 readGlobalIlluminationEmission() { return vec4(0.0); }`)}export{i as ReadGlobalIllumination};
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{create as a}from"../../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ForwardLinearDepthToReadShadowMap as
|
|
2
|
+
import{create as a}from"../../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ForwardLinearDepthToReadShadowMap as e}from"../ForwardLinearDepthToReadShadowMap.glsl.js";import{calculateUVZShadowPass as o,calculateUVZShadowDraw as r,ReadShadowMapOrigin as t}from"./calculateUVZShadow.glsl.js";import{ShadowmapFiltering as d}from"./ShadowmapFiltering.glsl.js";import{FloatBindUniform as i}from"../../shaderModules/FloatBindUniform.js";import{If as s,glsl as n}from"../../shaderModules/glsl.js";import{Texture2DBindUniform as l}from"../../shaderModules/Texture2DBindUniform.js";import{Texture2DShadowBindUniform as h}from"../../shaderModules/Texture2DShadowBindUniform.js";import{NoParameters as c}from"../../../../../webgl/NoParameters.js";class w extends t{}class u extends c{constructor(){super(...arguments),this.origin=a()}}function g(a,e){e.receiveShadows&&a.include(o),p(a,e)}function m(a,e){e.receiveShadows&&a.include(r),p(a,e)}function p(a,o){a.fragment.uniforms.add(new i("lightingGlobalFactor",a=>a.lighting.globalFactor));const{hasShadowHighlights:r,receiveShadows:t,spherical:d}=o;a.include(e,o),t&&f(a,r),a.fragment.code.add(n`
|
|
3
3
|
float readShadow(float additionalAmbientScale, vec3 vpos) {
|
|
4
|
-
return ${
|
|
4
|
+
return ${t?"max(lightingGlobalFactor * (1.0 - additionalAmbientScale), readShadowMap(vpos, linearDepth))":s(d,"lightingGlobalFactor * (1.0 - additionalAmbientScale)","0.0")};
|
|
5
5
|
}
|
|
6
|
-
`)}function
|
|
6
|
+
`)}function f(a,e){a.include(d),S(a,e),a.fragment.code.add(n`float readShadowMap(const in vec3 _worldPos, float _linearDepth) {
|
|
7
7
|
vec3 uvzShadow = calculateUVZShadow(_worldPos, _linearDepth, textureSize(shadowMap, 0));
|
|
8
8
|
return readShadowMaps(uvzShadow);
|
|
9
|
-
}`)}function S(a){a.include(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
}`)}function S(a,e){a.include(d),a.fragment.uniforms.add(new h("shadowMap",({shadowMap:a})=>a.getOutput(5)??a.getOutput(7))),e&&a.fragment.uniforms.add(new l("screenSpaceShadowHighlight",({screenSpaceShadowHighlightFbo:a})=>a?.getTexture())),a.fragment.code.add(n`
|
|
10
|
+
float readShadowMaps(const in vec3 uvzShadow) {
|
|
11
|
+
if (uvzShadow.z < 0.0) {
|
|
12
|
+
return 0.0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
float shadow1 = readShadowMapUVZ(uvzShadow, shadowMap);
|
|
16
|
+
// screenSpaceShadowHighlight is generated in camera screen space and assumes a
|
|
17
|
+
${s(e,n`
|
|
18
|
+
// matching full-resolution receiver viewport when this helper is used.
|
|
19
|
+
float shadow2 = texelFetch(screenSpaceShadowHighlight, ivec2(gl_FragCoord.xy), 0).r;
|
|
20
|
+
return shadow1 > shadow2 ? shadow1 : shadow2;
|
|
21
|
+
`,n`return shadow1;`)}
|
|
22
|
+
}
|
|
23
|
+
`)}export{m as ReadShadowMapDraw,w as ReadShadowMapDrawParameters,g as ReadShadowMapPass,u as ReadShadowMapPassParameters,S as readShadowMaps};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform as t}from"../../shaderModules/Float2BindUniform.js";import{FloatBindUniform as o}from"../../shaderModules/FloatBindUniform.js";import{glsl as r}from"../../shaderModules/glsl.js";import{Matrix4BindUniform as
|
|
2
|
+
import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform as t}from"../../shaderModules/Float2BindUniform.js";import{FloatBindUniform as o}from"../../shaderModules/FloatBindUniform.js";import{glsl as r}from"../../shaderModules/glsl.js";import{Matrix4BindUniform as a}from"../../shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as i}from"../../shaderModules/Texture2DBindUniform.js";function d(d,n){if(!n.screenSpaceReflections)return;const c=d.fragment;c.include(e),c.uniforms.add(new t("nearFar",e=>e.camera.nearFar),new i("depthMap",e=>e.depth?.attachment),new a("proj",e=>e.camera.projectionMatrix),new o("invResolutionHeight",e=>1/e.camera.height),new a("reprojectionMatrix",e=>e.reprojection.matrix)).code.add(r`
|
|
3
3
|
vec2 reprojectionCoordinate(vec3 projectionCoordinate)
|
|
4
4
|
{
|
|
5
5
|
vec4 zw = proj * vec4(0.0, 0.0, -projectionCoordinate.z, 1.0);
|
|
@@ -8,8 +8,6 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
8
8
|
return reprojectedCoord.xy * 0.5 + 0.5;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
const int maxSteps = ${n.highStepCount?"150":"75"};
|
|
12
|
-
|
|
13
11
|
vec4 applyProjectionMat(mat4 projectionMat, vec3 x)
|
|
14
12
|
{
|
|
15
13
|
vec4 projectedCoord = projectionMat * vec4(x, 1.0);
|
|
@@ -18,7 +16,7 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
18
16
|
return projectedCoord;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
vec3 screenSpaceIntersection(vec3 dir, vec3 startPosition, vec3 viewDir, vec3 normal)
|
|
19
|
+
vec3 screenSpaceIntersection(vec3 dir, vec3 startPosition, vec3 viewDir, vec3 normal, float offset, bool globalIllumination)
|
|
22
20
|
{
|
|
23
21
|
vec3 viewPos = startPosition;
|
|
24
22
|
vec3 viewPosEnd = startPosition;
|
|
@@ -42,18 +40,20 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
42
40
|
vec2 projectedCoordDir = (projectedCoordEnd.xy - projectedCoordStart.xy);
|
|
43
41
|
vec2 projectedCoordDistVanishingPoint = (projectedCoordVanishingPoint.xy - projectedCoordStart.xy);
|
|
44
42
|
|
|
45
|
-
float
|
|
43
|
+
float maxReach = globalIllumination ? 0.15 : 1.0;
|
|
44
|
+
float distMod = min(globalIllumination ? length(projectedCoordDistVanishingPoint.xy) : abs(projectedCoordDistVanishingPoint.y), maxReach);
|
|
46
45
|
|
|
47
46
|
float projectedCoordDirLength = length(projectedCoordDir);
|
|
47
|
+
int maxSteps = globalIllumination ? 16 : ${n.highStepCount?"150":"75"};
|
|
48
48
|
float maxSt = float(maxSteps);
|
|
49
49
|
|
|
50
50
|
// normalize the projection direction depending on maximum steps
|
|
51
51
|
// this determines how blocky the reflection looks
|
|
52
|
-
vec2 dP =
|
|
52
|
+
vec2 dP = distMod * (projectedCoordDir)/(maxSt * projectedCoordDirLength);
|
|
53
53
|
|
|
54
54
|
// Normalize the homogeneous camera space coordinates
|
|
55
|
-
vec3 dQ =
|
|
56
|
-
float dk =
|
|
55
|
+
vec3 dQ = distMod * (Q1 - Q0)/(maxSt * projectedCoordDirLength);
|
|
56
|
+
float dk = distMod * (k1 - k0)/(maxSt * projectedCoordDirLength);
|
|
57
57
|
|
|
58
58
|
// initialize the variables for ray marching
|
|
59
59
|
vec2 P = projectedCoordStart.xy;
|
|
@@ -72,6 +72,10 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
72
72
|
return vec3(P, 0.0);
|
|
73
73
|
float dDepthBefore = 0.0;
|
|
74
74
|
|
|
75
|
+
P = clamp(P + offset * dP, vec2(0.0), vec2(0.999));
|
|
76
|
+
Q.z += offset * dQ.z;
|
|
77
|
+
k += offset * dk;
|
|
78
|
+
|
|
75
79
|
for(int i = 0; i < maxSteps-1; i++)
|
|
76
80
|
{
|
|
77
81
|
depth = -linearDepthFromTexture(depthMap, P); // get linear depth from the depth buffer
|
|
@@ -106,12 +110,22 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
106
110
|
}
|
|
107
111
|
}
|
|
108
112
|
|
|
113
|
+
if (globalIllumination && (P.x <= 0.0 || P.x >= 1.0)) {
|
|
114
|
+
return vec3(P, 0.0);
|
|
115
|
+
}
|
|
116
|
+
|
|
109
117
|
// continue with ray marching
|
|
110
|
-
|
|
118
|
+
// Clamp to 0.999 to avoid sampling edge artifacts for water reflections
|
|
119
|
+
P = P + dP;
|
|
111
120
|
Q.z += dQ.z;
|
|
112
121
|
k += dk;
|
|
113
122
|
rayDiffZOld = rayDiffZ;
|
|
114
123
|
dDepthBefore = dDepth;
|
|
124
|
+
|
|
125
|
+
// Clamp to 0.999 to avoid sampling edge artifacts for water reflections
|
|
126
|
+
if (!globalIllumination) {
|
|
127
|
+
P = clamp(P, vec2(0.0), vec2(0.999));
|
|
128
|
+
}
|
|
115
129
|
}
|
|
116
130
|
return vec3(P, 0.0);
|
|
117
131
|
}
|
|
@@ -46,7 +46,7 @@ vec3 viewNormal = normalize(viewNormalVectorCoordinate.xyz);
|
|
|
46
46
|
vec4 viewUp = view * vec4(localUp, 0.0);
|
|
47
47
|
vec3 viewNormalCorrectedSSR = mix(viewUp.xyz, viewNormal, correctionViewingFactor);
|
|
48
48
|
vec3 reflected = normalize(reflect(viewDir, viewNormalCorrectedSSR));
|
|
49
|
-
vec3 hitCoordinate = screenSpaceIntersection(reflected, viewPosition, viewDir, viewUp.xyz);
|
|
49
|
+
vec3 hitCoordinate = screenSpaceIntersection(reflected, viewPosition, viewDir, viewUp.xyz, 0.0, false);
|
|
50
50
|
vec3 reflectedColor = vec3(0.0);
|
|
51
51
|
if (hitCoordinate.z > 0.0)
|
|
52
52
|
{
|
|
@@ -14,7 +14,7 @@ return (rotMat * vec4(inVec, 0.0)).xyz;
|
|
|
14
14
|
float upDotLight = dot(cameraPosition, mainLightDirection);
|
|
15
15
|
float dirDotLight = max(dot(worldSpaceRay, mainLightDirection), 0.0);
|
|
16
16
|
float sunsetTransition = clamp(pow(max(upDotLight, 0.0), sunsetTransitionFactor), 0.0, 1.0);
|
|
17
|
-
vec3 ambientLight = calculateAmbientIrradiance(cameraPosition
|
|
17
|
+
vec3 ambientLight = calculateAmbientIrradiance(cameraPosition);
|
|
18
18
|
vec3 combinedLight = clamp((mainLightIntensity + ambientLight )/PI, vec3(0.0), vec3(1.0));
|
|
19
19
|
vec3 baseCloudColor = pow(combinedLight * pow(clouds.xyz, vec3(GAMMA)), vec3(INV_GAMMA));
|
|
20
20
|
float scatteringMod = max(clouds.a < 0.5 ? clouds.a / 0.5 : - clouds.a / 0.5 + 2.0, 0.0);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import e from"../../../../core/Accessor.js";const r={required:[]},t={required:[3]};class s extends e{precompile(e){return!!this.acquireTechniques(e)}get usedMemory(){return 0}get renderOccludedFlags(){return 1}get testsTransparentRenderOrder(){return 0}get isDecoration(){return!1}get readyToRun(){return!1}get numGeometries(){return 0}get hasOccludees(){return!1}get
|
|
2
|
+
import e from"../../../../core/Accessor.js";const r={required:[]},t={required:[3]};class s extends e{precompile(e){return!!this.acquireTechniques(e)}get usedMemory(){return 0}get renderOccludedFlags(){return 1}get testsTransparentRenderOrder(){return 0}get isDecoration(){return!1}get readyToRun(){return!1}get numGeometries(){return 0}get hasOccludees(){return!1}get hasEmissions(){return 0}forEachGeometry(e){}}class n extends s{}class u extends s{}export{u as AsyncRenderPlugin,t as ConsumesDepth,r as ConsumesNone,n as SyncRenderPlugin};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{removeUnordered as e}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import{sort as t}from"../../../../core/heapSort.js";import{isPromiseLike as r,createAbortError as s}from"../../../../core/promiseUtils.js";import{signal as n}from"../../../../core/signal.js";import{
|
|
2
|
+
import{removeUnordered as e}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import{sort as t}from"../../../../core/heapSort.js";import{isPromiseLike as r,createAbortError as s}from"../../../../core/promiseUtils.js";import{signal as n}from"../../../../core/signal.js";import{someEmissions as o}from"./emissive/emissions.js";import{DepthRange as i}from"../lib/DepthRange.js";class h{constructor(e){this.context=e,this._renderPlugins=new Array,this._slots=new Array,this._version=n(0);for(let t=0;t<21;++t)this._slots[t]=[]}destroy(){this._renderPlugins.forEach(e=>e.destroy()),this._renderPlugins.length=0}get plugins(){return this._renderPlugins}add(e,t){const n=()=>{if(t?.aborted)throw e.uninitializeRenderContext(),s();this._renderPlugins.push(e),e.produces.forEach((t,r)=>this._slots[r].push(e)),this.context.requestRender(),this._version.value++},o=e.initializeRenderContext(this.context,t);if(r(o))return o.then(n);n()}remove(t){e(this._renderPlugins,t),t.uninitializeRenderContext();for(let e=0;e<this._slots.length;++e)this._slots[e]=this._slots[e].filter(e=>e!==t);this.context.requestRender(),this._version.value++}sortTestsTransparentOrderedSlots(e){if("test"!==process.env.NODE_ENV)return;if(this._renderPlugins.some(e=>0!==e.testsTransparentRenderOrder))for(const r of e){const e=this._slots[r];t(e,0,e.length,(e,t)=>(e.testsTransparentRenderOrder??0)-(t.testsTransparentRenderOrder??0))}}prepareRender(){this._renderPlugins.forEach(e=>{e.prepareRender&&e.prepareRender(this.context.renderContext)})}updateAnimation(e){let t=!1;return this._renderPlugins.forEach(r=>t=r.updateAnimation?.(e)||t),t}precompile(...e){++this.context.techniques.precompiling;const t=this.context.renderContext.bind.slot;for(const r of e)this.context.renderContext.bind.slot=r,this._forEachRender(()=>{});this.context.renderContext.bind.slot=t,--this.context.techniques.precompiling}render(...e){for(const t of e)this.context.renderContext.bind.slot=t,this._forEachRender((e,t)=>e.render(this.context.renderContext,t))}_forEachRender(e){const t=this.context.renderContext.bind.slot,r=this.context.renderContext.output;this._slots[t].forEach(s=>{const n=s.produces.get(t);if(!n?.(r)||s.isDecoration&&!this.context.renderContext.bind.decorations)return;const o=s.acquireTechniques(this.context.renderContext);o&&e(s,o)})}queryDepthRange(e){return this._renderPlugins.reduce((t,r)=>t.union(r.queryDepthRange?.(e)),new i)}get updating(){return this._version.value>=0&&this._renderPlugins.some(e=>e.readyToRun)}produces(e,...t){return t.some(t=>this._slots[t].some(r=>{const s=r.produces.get(t);return!!s&&s(e)}))}hasHighlight(e){return d.some(t=>this._slots[t].some(t=>t.hasHighlight(e)))}get hasDecorations(){return this._renderPlugins.some(e=>e.isDecoration)}get hasOccludees(){return this._renderPlugins.some(e=>e.hasOccludees)}get hasEmissions(){return o(this._renderPlugins)}get renderOccludedFlags(){return this._renderPlugins.reduce((e,t)=>e|(t.renderOccludedFlags??0),0)}get usedMemory(){return this._renderPlugins.reduce((e,t)=>t.material?e:e+(t.usedMemory??0),0)}get test(){}}const d=[2,4,19,13,14,15];export{h as RenderPluginManager};
|