@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.
Files changed (199) hide show
  1. package/applications/Components/SelectionOperation.d.ts +2 -2
  2. package/applications/Components/SelectionOperation.js +1 -1
  3. package/assets/esri/core/workers/RemoteClient.js +1 -1
  4. package/assets/esri/core/workers/chunks/04ea806b933d4dd41609.js +1 -0
  5. package/assets/esri/core/workers/chunks/{278eecd729bed2832702.js → 0622e238693c257abacb.js} +1 -1
  6. package/assets/esri/core/workers/chunks/{05bc675c029ed311427f.js → 155c741a9839d24f04a2.js} +1 -1
  7. package/assets/esri/core/workers/chunks/1ae4e43a399e1974f106.js +1 -0
  8. package/assets/esri/core/workers/chunks/1f8e22df08c2f5fbb8c8.js +1 -0
  9. package/assets/esri/core/workers/chunks/{2327b368673a974dee8b.js → 2339465190c9d5ede25f.js} +1 -1
  10. package/assets/esri/core/workers/chunks/23f6d24bf850bc3280ec.js +1 -0
  11. package/assets/esri/core/workers/chunks/2541ac6e0ed1184edc9b.js +1 -0
  12. package/assets/esri/core/workers/chunks/34207774bc371e95ba3c.js +1 -0
  13. package/assets/esri/core/workers/chunks/{01777e91cd4e0bf04fd0.js → 35217befc8f9882d139e.js} +1 -1
  14. package/assets/esri/core/workers/chunks/{40bcfc4f8efe7de7ec9d.js → 3de17e89973160b42923.js} +1 -1
  15. package/assets/esri/core/workers/chunks/{992e74570b76f3f9e52e.js → 48d289db3145ce6c02bb.js} +1 -1
  16. package/assets/esri/core/workers/chunks/4c73c2f4331351e2a50c.js +1 -0
  17. package/assets/esri/core/workers/chunks/{2757cf54656b5d318b11.js → 55a0b69cf034ac32fc25.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{4d54beab8ae5ff31e7b0.js → 5a9f5a49dc68b42762bb.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{7cec3252e3ee56424b9e.js → 5c6e5f22450dd0583074.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{b39b4db86a1049f0b901.js → 6be9d00839002f24fafd.js} +1 -1
  21. package/assets/esri/core/workers/chunks/6c886f19875291d02407.js +1 -0
  22. package/assets/esri/core/workers/chunks/75e28458e08b0738b35a.js +2 -0
  23. package/assets/esri/core/workers/chunks/{c460ca93ed8e20d8b53a.js → 86a6dd19903fa5023cc7.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{4afddb66242438b38df0.js → 8ccf2f65d8ed3c48ffff.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{fcfaaced184f8da3e28d.js → 9b53aa2429573f1b977f.js} +1 -1
  26. package/assets/esri/core/workers/chunks/9d580b5bcd59857a5702.js +1405 -0
  27. package/assets/esri/core/workers/chunks/a37697ef360e2425768a.js +1 -0
  28. package/assets/esri/core/workers/chunks/{a787fe09d3df9d4254ba.js → ab3183f2327ff26e2b45.js} +1 -1
  29. package/assets/esri/core/workers/chunks/b0f2ce61d3cad413898e.js +1 -0
  30. package/assets/esri/core/workers/chunks/{53c149bca42595b7dd1e.js → bbdf27bc34fadbe8e6fe.js} +1 -1
  31. package/assets/esri/core/workers/chunks/be42fe0b7ba0e27030b2.js +1 -0
  32. package/assets/esri/core/workers/chunks/d0c3ab70f390cd579fed.js +1 -0
  33. package/assets/esri/core/workers/chunks/{5a573fa1012092328b88.js → d816d1a4220d827faf63.js} +1 -1
  34. package/assets/esri/core/workers/chunks/e26894655823849947f4.js +1 -0
  35. package/assets/esri/core/workers/chunks/e59f5dc8c85bcea66e98.js +1 -0
  36. package/assets/esri/core/workers/chunks/{ccf845ac0ac354507a25.js → ec1b2eb05410848081c9.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{851dd71d28681d4eccfd.js → f7af90c5f9d371eb7009.js} +1 -1
  38. package/assets/esri/core/workers/chunks/fa6e1ad099b43a6f5501.js +1 -0
  39. package/assets/esri/core/workers/chunks/{4a6186001323b47c23a4.js → fee1d873127dca02459f.js} +1 -1
  40. package/chunks/GlobalIllumination.glsl.js +101 -0
  41. package/chunks/GlobalIlluminationBlur.glsl.js +68 -0
  42. package/chunks/ScreenSpaceShadowHighlight.glsl.js +6 -0
  43. package/chunks/ShadowCastAccumulate.glsl.js +1 -1
  44. package/chunks/ShadowHighlight.glsl.js +15 -8
  45. package/config.js +1 -1
  46. package/geometry/Mesh.js +1 -1
  47. package/geometry/support/polygonUtils.js +1 -1
  48. package/geometry/support/{triangulationUtils.js → triangulationUtilsDeprecated.js} +1 -1
  49. package/kernel.js +1 -1
  50. package/layers/support/SceneModification.js +1 -1
  51. package/networks/support/jsonTypes.d.ts +6 -0
  52. package/package.json +2 -2
  53. package/renderers/ClassBreaksRenderer.js +1 -1
  54. package/renderers/DictionaryRenderer.js +1 -1
  55. package/renderers/DotDensityRenderer.js +1 -1
  56. package/renderers/HeatmapRenderer.js +1 -1
  57. package/renderers/PieChartRenderer.js +1 -1
  58. package/renderers/Renderer.js +1 -1
  59. package/renderers/SimpleRenderer.js +1 -1
  60. package/renderers/UniqueValueRenderer.js +1 -1
  61. package/renderers/support/AttributeColorInfo.js +1 -1
  62. package/renderers/support/ClassBreakInfo.d.ts +6 -0
  63. package/renderers/support/ClassBreakInfo.js +1 -1
  64. package/renderers/support/UniqueValueClass.d.ts +12 -0
  65. package/renderers/support/UniqueValueClass.js +1 -1
  66. package/renderers/support/UniqueValueInfo.d.ts +12 -0
  67. package/renderers/support/UniqueValueInfo.js +1 -1
  68. package/renderers/visualVariables/ColorVariable.js +1 -1
  69. package/renderers/visualVariables/OpacityVariable.js +1 -1
  70. package/renderers/visualVariables/SizeVariable.js +1 -1
  71. package/renderers/visualVariables/VisualVariable.js +1 -1
  72. package/rest/networks/support/FunctionResult.d.ts +6 -0
  73. package/rest/networks/support/FunctionResult.js +1 -1
  74. package/support/revision.js +1 -1
  75. package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
  76. package/views/2d/engine/vectorTiles/VTLPainter3D.js +1 -1
  77. package/views/2d/engine/webgl/GlyphMosaic.js +1 -1
  78. package/views/2d/engine/webgl/GlyphSource.js +1 -1
  79. package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
  80. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  81. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  82. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
  83. package/views/2d/engine/webgl/shaderGraph/techniques/vectorTiles/VTLTechniqueFill.js +1 -1
  84. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  85. package/views/2d/engine/webgl/util/IntervalMatcher.js +1 -1
  86. package/views/2d/engine/webgl/util/MapMatcher.js +1 -1
  87. package/views/2d/layers/features/schema/processor/MatcherSchema.js +1 -1
  88. package/views/2d/layers/features/schema/processor/SimpleProcessorSchema.js +1 -1
  89. package/views/3d/FocusAreasView.js +1 -1
  90. package/views/3d/analysis/AreaMeasurement/support/MeasurementData.js +1 -1
  91. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillController.js +1 -1
  92. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillVisualization.js +1 -1
  93. package/views/3d/interactive/visualElements/MeasurementArrowVisualElement.js +1 -1
  94. package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
  95. package/views/3d/layers/Lyr3DWorker.js +1 -1
  96. package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
  97. package/views/3d/layers/graphics/Graphics3DPolygonFillSymbolLayer.js +1 -1
  98. package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
  99. package/views/3d/layers/graphics/extrudeUtils.js +1 -1
  100. package/views/3d/layers/graphics/extrudeUtilsDeprecated.js +2 -0
  101. package/views/3d/layers/graphics/tessellationUtils.js +2 -0
  102. package/views/3d/layers/i3s/PointCloudHighlights.js +1 -1
  103. package/views/3d/layers/i3s/PointCloudRenderer.js +1 -1
  104. package/views/3d/layers/i3s/PointCloudRendererNode.js +1 -1
  105. package/views/3d/layers/support/Tiles3DBVH.js +1 -1
  106. package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
  107. package/views/3d/support/gaussianSplatting/GaussianSplatIntersectionHandler.js +1 -1
  108. package/views/3d/support/gaussianSplatting/GaussianTile.js +1 -1
  109. package/views/3d/support/renderInfoUtils/line.js +1 -1
  110. package/views/3d/support/renderInfoUtils/polygon.js +1 -1
  111. package/views/3d/support/renderInfoUtils/polygonDeprecated.js +2 -0
  112. package/views/3d/terrain/OverlayRenderer.js +1 -1
  113. package/views/3d/terrain/TerrainRenderer.js +1 -1
  114. package/views/3d/terrain/TerrainSurface.js +1 -1
  115. package/views/3d/webgl/RenderNode.js +1 -1
  116. package/views/3d/webgl-engine/collections/Component/ComponentData.js +1 -1
  117. package/views/3d/webgl-engine/collections/Component/ComponentObject.js +1 -1
  118. package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
  119. package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
  120. package/views/3d/webgl-engine/collections/Component/Material/ComponentTechniqueConfiguration.js +1 -1
  121. package/views/3d/webgl-engine/collections/Component/RenderGeometry.js +1 -1
  122. package/views/3d/webgl-engine/collections/Component/RenderSubmitSystem.js +1 -1
  123. package/views/3d/webgl-engine/core/renderPasses/RenderPass.js +1 -1
  124. package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
  125. package/views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js +6 -5
  126. package/views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js +4 -0
  127. package/views/3d/webgl-engine/core/shaderLibrary/shading/EncodingColor.glsl.js +7 -0
  128. package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientLighting.glsl.js +6 -6
  129. package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js +93 -72
  130. package/views/3d/webgl-engine/core/shaderLibrary/shading/PhysicallyBasedRendering.glsl.js +46 -22
  131. package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadGlobalIllumination.glsl.js +20 -0
  132. package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js +18 -13
  133. package/views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceReflections.glsl.js +23 -9
  134. package/views/3d/webgl-engine/core/shaderLibrary/shading/WaterColor.glsl.js +1 -1
  135. package/views/3d/webgl-engine/core/shaderLibrary/util/CloudsParallaxShading.glsl.js +1 -1
  136. package/views/3d/webgl-engine/effects/RenderPlugin.js +1 -1
  137. package/views/3d/webgl-engine/effects/RenderPluginManager.js +1 -1
  138. package/views/3d/webgl-engine/effects/emissive/emissions.js +2 -0
  139. package/views/3d/webgl-engine/effects/globalIllumination/BlueNoise.js +2 -0
  140. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +2 -0
  141. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationBlurTechnique.js +2 -0
  142. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechnique.js +2 -0
  143. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +2 -0
  144. package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlight.glsl.js +2 -0
  145. package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlightRenderNode.js +2 -0
  146. package/views/3d/webgl-engine/effects/highlight/ScreenSpaceShadowHighlightTechnique.js +2 -0
  147. package/views/3d/webgl-engine/effects/highlight/ShadowHighlight.js +1 -1
  148. package/views/3d/webgl-engine/effects/laserlines/LaserLineRenderer.js +1 -1
  149. package/views/3d/webgl-engine/effects/ssao/SSAO.js +1 -1
  150. package/views/3d/webgl-engine/effects/transparency/OITBlend.js +1 -1
  151. package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
  152. package/views/3d/webgl-engine/lib/Material.js +1 -1
  153. package/views/3d/webgl-engine/lib/RayIntersections.js +1 -1
  154. package/views/3d/webgl-engine/lib/RenderFeature.js +1 -1
  155. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  156. package/views/3d/webgl-engine/lib/ReprojectionUniforms.js +1 -1
  157. package/views/3d/webgl-engine/lib/lodRendering/LodComponentData.js +1 -1
  158. package/views/3d/webgl-engine/lib/lodRendering/LodLevel.js +1 -1
  159. package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
  160. package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
  161. package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
  162. package/views/3d/webgl-engine/materials/MeasurementArrowMaterial.js +1 -1
  163. package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
  164. package/views/3d/webgl-engine/materials/PathTechniqueConfiguration.js +1 -1
  165. package/views/3d/webgl-engine/materials/PatternMaterial.js +1 -1
  166. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  167. package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
  168. package/views/3d/webgl-engine/materials/WaterTechniqueConfiguration.js +1 -1
  169. package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
  170. package/views/3d/webgl-engine/parts/RenderView.js +1 -1
  171. package/views/3d/webgl-engine/shaders/DefaultMaterialTechniqueConfiguration.js +1 -1
  172. package/views/3d/webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js +1 -1
  173. package/views/3d/webgl-engine/shaders/GlobalIllumination.glsl.js +2 -0
  174. package/views/3d/webgl-engine/shaders/GlobalIlluminationBlur.glsl.js +2 -0
  175. package/views/3d/webgl-engine/shaders/MeasurementArrowTechnique.js +1 -1
  176. package/views/3d/webgl-engine/shaders/MeasurementArrowTechniqueConfiguration.js +1 -1
  177. package/views/3d/webgl-engine/shaders/ReceiveShadowsConfiguration.js +1 -1
  178. package/views/3d/webgl-engine/shaders/TerrainTechniqueConfiguration.js +1 -1
  179. package/views/3d/webgl.js +1 -1
  180. package/views/selection/SelectionOperation.d.ts +190 -0
  181. package/views/selection/SelectionOperation.js +2 -0
  182. package/views/selection/types.d.ts +146 -1
  183. package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
  184. package/assets/esri/core/workers/chunks/009db7b459b18f6a668b.js +0 -1
  185. package/assets/esri/core/workers/chunks/0fc60b4c44c4e865b699.js +0 -2
  186. package/assets/esri/core/workers/chunks/34484afe767d60f85982.js +0 -1
  187. package/assets/esri/core/workers/chunks/55bb5b7817c2963c8bfa.js +0 -1
  188. package/assets/esri/core/workers/chunks/572fcd33ae3648ed4f9c.js +0 -1
  189. package/assets/esri/core/workers/chunks/66a4d764937918a2779f.js +0 -1
  190. package/assets/esri/core/workers/chunks/6b56c8ba978ec6edd6b8.js +0 -1
  191. package/assets/esri/core/workers/chunks/9806cc96414065ae0afe.js +0 -1
  192. package/assets/esri/core/workers/chunks/9b365a6242b0287f8727.js +0 -1
  193. package/assets/esri/core/workers/chunks/a029db48079af4b5cccd.js +0 -1
  194. package/assets/esri/core/workers/chunks/ea068f75397c3b3337ec.js +0 -1034
  195. package/assets/esri/core/workers/chunks/ec91d5081f423755cb07.js +0 -1
  196. package/assets/esri/core/workers/chunks/f9fe89ced41b49608667.js +0 -1
  197. package/assets/esri/core/workers/chunks/fce30184f354fb7d11af.js +0 -1
  198. package/widgets/support/Selector2D/SelectionOperation.js +0 -2
  199. /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 o,addMainLightIntensity as t,applyShading as a}from"./MainLighting.glsl.js";import{PhysicallyBasedRendering as r}from"./PhysicallyBasedRendering.glsl.js";import{PiUtils as l}from"./PiUtils.glsl.js";import{BooleanBindUniform as c}from"../../shaderModules/BooleanBindUniform.js";import{FloatBindUniform as d}from"../../shaderModules/FloatBindUniform.js";import{If as m,glsl as s}from"../../shaderModules/glsl.js";import{ambientBoost as g}from"../../../lighting/SceneLighting.js";import{BlackLevelLightSoftCompression as h}from"../../../shaders/BlackLevelLightSoftCompression.glsl.js";import{ToneMapping as u}from"../../../shaders/ToneMapping.glsl.js";function p(i){i.constants.add("ambientBoostFactor","float",g)}function f(i){i.uniforms.add(new d("lightingGlobalFactor",i=>i.lighting.globalFactor))}function v(g,v){const{pbrMode:L,spherical:b,hasColorTexture:C}=v;g.include(n,v),0!==L&&g.include(r,v),g.include(i,v),g.include(l),g.include(u,v),g.include(e);const N=!(2===L&&!C);switch(N&&g.include(h),g.code.add(s`
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(${b?s`normalize(vPosWorld)`:s`vec3(0.0, 0.0, 1.0)`}, mainLightDirection);
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
- `),t(g),g.code.add(s`vec3 evaluateAdditionalLighting(float ambientOcclusion, vec3 vPosWorld) {
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(a),g.code.add(s`vec3 evaluateSceneLighting(vec3 normalWorld, vec3 albedo, float shadow, float ssao, vec3 additionalLight) {
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, ssao);
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(s`const float fillLightIntensity = 0.25;
25
- const float horizonLightDiffusion = 0.4;
26
- const float additionalAmbientIrradianceFactor = 0.02;
27
- vec3 evaluateSceneLightingPBR(vec3 normal, vec3 albedo, float shadow, float ssao, vec3 additionalLight,
28
- vec3 viewDir, vec3 groundNormal, vec3 mrr, float additionalAmbientIrradiance) {
29
- vec3 viewDirection = -viewDir;
30
- vec3 h = normalize(viewDirection + mainLightDirection);
31
- PBRShadingInfo inputs;
32
- inputs.NdotV = clamp(abs(dot(normal, viewDirection)), 0.001, 1.0);
33
- inputs.NdotNG = clamp(dot(normal, groundNormal), -1.0, 1.0);
34
- vec3 reflectedView = normalize(reflect(viewDirection, normal));
35
- inputs.RdotNG = clamp(dot(reflectedView, groundNormal), -1.0, 1.0);
36
- inputs.albedoLinear = linearizeGamma(albedo);
37
- inputs.ssao = ssao;
38
- inputs.metalness = mrr[0];
39
- inputs.roughness = clamp(mrr[1] * mrr[1], 0.001, 0.99);`),g.code.add(s`inputs.f0 = (0.16 * mrr[2] * mrr[2]) * (1.0 - inputs.metalness) + inputs.albedoLinear * inputs.metalness;
40
- inputs.f90 = vec3(clamp(dot(inputs.f0, vec3(50.0 * 0.33)), 0.0, 1.0));
41
- inputs.diffuseColor = inputs.albedoLinear * (vec3(1.0) - inputs.f0) * (1.0 - inputs.metalness);`),v.useFillLights?g.uniforms.add(new c("hasFillLights",i=>i.enableFillLights)):g.constants.add("hasFillLights","bool",!1),g.code.add(s`vec3 ambientDir = vec3(5.0 * groundNormal[1] - groundNormal[0] * groundNormal[2], - 5.0 * groundNormal[0] - groundNormal[2] * groundNormal[1], groundNormal[1] * groundNormal[1] + groundNormal[0] * groundNormal[0]);
42
- ambientDir = ambientDir != vec3(0.0) ? normalize(ambientDir) : normalize(vec3(5.0, -1.0, 0.0));
43
- inputs.NdotAmbDir = hasFillLights ? abs(dot(normal, ambientDir)) : 1.0;
44
- float NdotL = clamp(dot(normal, mainLightDirection), 0.001, 1.0);
45
- vec3 mainLightIrradianceComponent = NdotL * (1.0 - shadow) * mainLightIntensity;
46
- vec3 fillLightsIrradianceComponent = inputs.NdotAmbDir * mainLightIntensity * fillLightIntensity;
47
- vec3 ambientLightIrradianceComponent = calculateAmbientIrradiance(normal, ssao) + additionalLight;
48
- inputs.skyIrradianceToSurface = ambientLightIrradianceComponent + mainLightIrradianceComponent + fillLightsIrradianceComponent ;
49
- inputs.groundIrradianceToSurface = GROUND_REFLECTANCE * ambientLightIrradianceComponent + mainLightIrradianceComponent + fillLightsIrradianceComponent ;`),g.uniforms.add(new d("lightingSpecularStrength",i=>i.lighting.mainLight.specularStrength),new d("lightingEnvironmentStrength",i=>i.lighting.mainLight.environmentStrength)).code.add(s`vec3 horizonRingDir = inputs.RdotNG * groundNormal - reflectedView;
50
- vec3 horizonRingH = normalize(viewDirection + horizonRingDir);
51
- inputs.NdotH_Horizon = dot(normal, horizonRingH);
52
- float NdotH = clamp(dot(normal, h), 0.0, 1.0);
53
- vec3 mainLightRadianceComponent = lightingSpecularStrength * normalDistribution(NdotH, inputs.roughness) * mainLightIntensity * (1.0 - shadow);
54
- vec3 horizonLightRadianceComponent = lightingEnvironmentStrength * normalDistribution(inputs.NdotH_Horizon, min(inputs.roughness + horizonLightDiffusion, 1.0)) * mainLightIntensity * fillLightIntensity;
55
- vec3 ambientLightRadianceComponent = lightingEnvironmentStrength * calculateAmbientRadiance(ssao) + additionalLight;
56
- float normalDirectionModifier = mix(1., min(mix(0.1, 2.0, (inputs.NdotNG + 1.) * 0.5), 1.0), clamp(inputs.roughness * 5.0, 0.0 , 1.0));
57
- inputs.skyRadianceToSurface = (ambientLightRadianceComponent + horizonLightRadianceComponent) * normalDirectionModifier + mainLightRadianceComponent;
58
- inputs.groundRadianceToSurface = 0.5 * GROUND_REFLECTANCE * (ambientLightRadianceComponent + horizonLightRadianceComponent) * normalDirectionModifier + mainLightRadianceComponent;
59
- inputs.averageAmbientRadiance = ambientLightIrradianceComponent[1] * (1.0 + GROUND_REFLECTANCE);`),g.code.add(s`
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
- ${N?s`vec3 outColor = blackLevelSoftCompression(outColorLinear, inputs.averageAmbientRadiance);`:s`vec3 outColor = max(vec3(0.0), outColorLinear - 0.005 * inputs.averageAmbientRadiance);`}
64
- return delinearizeGamma(outColor);
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
- `);break;case 5:case 6:o(g),t(g),g.code.add(s`const float roughnessTerrain = 0.5;
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{PiUtils as o}from"./PiUtils.glsl.js";import{glsl as t}from"../../shaderModules/glsl.js";function n(n,a){n.include(o),1!==a.pbrMode&&2!==a.pbrMode&&5!==a.pbrMode&&6!==a.pbrMode||(n.code.add(t`float normalDistribution(float NdotH, float roughness)
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
- }`),n.code.add(t`const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
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
- }`)),1!==a.pbrMode&&2!==a.pbrMode||(n.include(e),n.code.add(t`struct PBRShadingInfo
14
+ }`),a.code.add(n`struct PBRShadingInfo
15
15
  {
16
16
  float NdotV;
17
+ float NdotL;
17
18
  float LdotH;
18
- float NdotNG;
19
- float RdotNG;
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
- };`),n.code.add(t`vec3 evaluateEnvironmentIllumination(PBRShadingInfo inputs) {
35
- vec3 indirectDiffuse = evaluateDiffuseIlluminationHemisphere(inputs.groundIrradianceToSurface, inputs.skyIrradianceToSurface, inputs.NdotNG);
36
- vec3 indirectSpecular = evaluateSpecularIlluminationHemisphere(inputs.groundRadianceToSurface, inputs.skyRadianceToSurface, inputs.RdotNG, inputs.roughness);
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
- }`))}function a(e,n){e.include(o),e.code.add(t`
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
- float NdotL; // cos angle between normal and light direction
45
- float NdotV; // cos angle between normal and view direction
46
- float NdotH; // cos angle between normal and half vector
47
- float VdotH; // cos angle between view direction and half vector
48
- float LdotH; // cos angle between light direction and half vector
49
- float VdotN; // cos angle between view direction and normal vector
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 = ${n.useCustomDTRExponentForWater?"2.2":"2.0"};
53
- `),e.code.add(t`vec3 fresnelReflection(float angle, vec3 f0, float f90) {
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(t`float normalDistributionWater(float NdotH, float roughness) {
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(t`float geometricOcclusionKelemen(float LoH) {
84
+ }`),e.code.add(n`float geometricOcclusionKelemen(float LoH) {
61
85
  return 0.25 / (LoH * LoH);
62
- }`),e.code.add(t`vec3 brdfSpecularWater(in PBRShadingWater props, float roughness, vec3 F0, float F0Max) {
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{n as PhysicallyBasedRendering,a as PhysicallyBasedRenderingWater};
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 o}from"../ForwardLinearDepthToReadShadowMap.glsl.js";import{calculateUVZShadowPass as e,calculateUVZShadowDraw as d,ReadShadowMapOrigin as t}from"./calculateUVZShadow.glsl.js";import{ShadowmapFiltering as r}from"./ShadowmapFiltering.glsl.js";import{BooleanBindUniform as i}from"../../shaderModules/BooleanBindUniform.js";import{FloatBindUniform as s}from"../../shaderModules/FloatBindUniform.js";import{If as l,glsl as n}from"../../shaderModules/glsl.js";import{Texture2DShadowBindUniform as h}from"../../shaderModules/Texture2DShadowBindUniform.js";import{NoParameters as w}from"../../../../../webgl/NoParameters.js";class u extends t{}class c extends w{constructor(){super(...arguments),this.origin=a()}}function p(a,o){o.receiveShadows&&a.include(e),m(a,o)}function f(a,o){o.receiveShadows&&a.include(d),m(a,o)}function m(a,e){a.fragment.uniforms.add(new s("lightingGlobalFactor",a=>a.lighting.globalFactor));const{receiveShadows:d,spherical:t}=e;a.include(o,e),d&&g(a),a.fragment.code.add(n`
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 ${d?"max(lightingGlobalFactor * (1.0 - additionalAmbientScale), readShadowMap(vpos, linearDepth))":l(t,"lightingGlobalFactor * (1.0 - additionalAmbientScale)","0.0")};
4
+ return ${t?"max(lightingGlobalFactor * (1.0 - additionalAmbientScale), readShadowMap(vpos, linearDepth))":s(d,"lightingGlobalFactor * (1.0 - additionalAmbientScale)","0.0")};
5
5
  }
6
- `)}function g(a){a.include(r),S(a),a.fragment.code.add(n`float readShadowMap(const in vec3 _worldPos, float _linearDepth) {
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(r),a.fragment.uniforms.add(new i("singleShadowMap",({shadowMap:a})=>!!a.getOutput(5)),new h("shadowMap",({shadowMap:a})=>a.getOutput(5)??a.getOutput(7)),new h("shadowMapHighlight",({shadowMap:a})=>a.getOutput(5)??a.getOutput(6))).code.add(n`float readShadowMaps(const in vec3 uvzShadow) {
10
- if (uvzShadow.z < 0.0) {
11
- return 0.0;
12
- }
13
- float shadow1 = readShadowMapUVZ(uvzShadow, shadowMap);
14
- if (singleShadowMap)
15
- return shadow1;
16
- float shadow2 = readShadowMapUVZ(uvzShadow, shadowMapHighlight);
17
- return shadow1 > shadow2 ? shadow1 : shadow2;
18
- }`)}export{f as ReadShadowMapDraw,u as ReadShadowMapDrawParameters,p as ReadShadowMapPass,c as ReadShadowMapPassParameters,S as readShadowMaps};
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 i}from"../../shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as a}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 a("depthMap",e=>e.depth?.attachment),new i("proj",e=>e.camera.projectionMatrix),new o("invResolutionHeight",e=>1/e.camera.height),new i("reprojectionMatrix",e=>e.reprojection.matrix)).code.add(r`
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 yMod = min(abs(projectedCoordDistVanishingPoint.y), 1.0);
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 = yMod * (projectedCoordDir)/(maxSt * projectedCoordDirLength);
52
+ vec2 dP = distMod * (projectedCoordDir)/(maxSt * projectedCoordDirLength);
53
53
 
54
54
  // Normalize the homogeneous camera space coordinates
55
- vec3 dQ = yMod * (Q1 - Q0)/(maxSt * projectedCoordDirLength);
56
- float dk = yMod * (k1 - k0)/(maxSt * projectedCoordDirLength);
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
- P = clamp(P + dP, vec2(0.0), vec2(0.999));
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, 0.0);
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 hasEmitters(){return!1}forEachGeometry(e){}}class n extends s{}class u extends s{}export{u as AsyncRenderPlugin,t as ConsumesDepth,r as ConsumesNone,n as SyncRenderPlugin};
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{DepthRange as o}from"../lib/DepthRange.js";class i{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 o)}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 h.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 hasEmitters(){return this._renderPlugins.some(e=>e.hasEmitters)}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 h=[2,4,19,13,14,15];export{i as RenderPluginManager};
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};
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
+ function n(n){let o=0;for(const t of n){const n=t.hasEmissions;if(2===n&&1===o||1===n&&2===o?o=3:0!==n&&0===o&&(o=n),3===o)return o}return o}export{n as someEmissions};