@zephyr3d/scene 0.9.25 → 0.9.26

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 (262) hide show
  1. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  2. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  3. package/dist/animation/joint_dynamics/controller.js +7 -5
  4. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/morphtrack.js +3 -4
  8. package/dist/animation/morphtrack.js.map +1 -1
  9. package/dist/animation/skeleton.js +58 -24
  10. package/dist/animation/skeleton.js.map +1 -1
  11. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  12. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  13. package/dist/animation/spring/spring_collider.js +4 -3
  14. package/dist/animation/spring/spring_collider.js.map +1 -1
  15. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  16. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  17. package/dist/animation/spring/spring_particle.js +2 -0
  18. package/dist/animation/spring/spring_particle.js.map +1 -1
  19. package/dist/animation/spring/spring_system.js +11 -3
  20. package/dist/animation/spring/spring_system.js.map +1 -1
  21. package/dist/animation/spring_modifier.js +10 -0
  22. package/dist/animation/spring_modifier.js.map +1 -1
  23. package/dist/app/engine.js +53 -43
  24. package/dist/app/engine.js.map +1 -1
  25. package/dist/app/scriptingsystem.js +119 -6
  26. package/dist/app/scriptingsystem.js.map +1 -1
  27. package/dist/app/scriptregistry.js +3 -2
  28. package/dist/app/scriptregistry.js.map +1 -1
  29. package/dist/asset/assetmanager.js +284 -67
  30. package/dist/asset/assetmanager.js.map +1 -1
  31. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  32. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  33. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  34. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  35. package/dist/asset/model.js +178 -67
  36. package/dist/asset/model.js.map +1 -1
  37. package/dist/camera/camera.js +193 -21
  38. package/dist/camera/camera.js.map +1 -1
  39. package/dist/camera/perspectivecamera.js +3 -1
  40. package/dist/camera/perspectivecamera.js.map +1 -1
  41. package/dist/index.d.ts +4019 -1278
  42. package/dist/index.js +15 -5
  43. package/dist/index.js.map +1 -1
  44. package/dist/material/eye.js +932 -0
  45. package/dist/material/eye.js.map +1 -0
  46. package/dist/material/hair.js +917 -0
  47. package/dist/material/hair.js.map +1 -0
  48. package/dist/material/hairstrand.js +842 -0
  49. package/dist/material/hairstrand.js.map +1 -0
  50. package/dist/material/hairstrand_data.js +162 -0
  51. package/dist/material/hairstrand_data.js.map +1 -0
  52. package/dist/material/lambert.js +5 -2
  53. package/dist/material/lambert.js.map +1 -1
  54. package/dist/material/material.js +338 -300
  55. package/dist/material/material.js.map +1 -1
  56. package/dist/material/meshmaterial.js +120 -19
  57. package/dist/material/meshmaterial.js.map +1 -1
  58. package/dist/material/mixins/albedocolor.js +1 -1
  59. package/dist/material/mixins/albedocolor.js.map +1 -1
  60. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  61. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  63. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  65. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  67. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  70. package/dist/material/mixins/lit.js +73 -18
  71. package/dist/material/mixins/lit.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +4 -4
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/mixins/texture.js +48 -11
  75. package/dist/material/mixins/texture.js.map +1 -1
  76. package/dist/material/mtoon.js +6 -5
  77. package/dist/material/mtoon.js.map +1 -1
  78. package/dist/material/pbrblueprint.js +146 -28
  79. package/dist/material/pbrblueprint.js.map +1 -1
  80. package/dist/material/pbrblueprint_instance.js +501 -0
  81. package/dist/material/pbrblueprint_instance.js.map +1 -0
  82. package/dist/material/pbrmr.js +15 -16
  83. package/dist/material/pbrmr.js.map +1 -1
  84. package/dist/material/shader/helper.js +330 -20
  85. package/dist/material/shader/helper.js.map +1 -1
  86. package/dist/material/shader/terrain_blend.js +55 -0
  87. package/dist/material/shader/terrain_blend.js.map +1 -0
  88. package/dist/material/skin.js +192 -32
  89. package/dist/material/skin.js.map +1 -1
  90. package/dist/material/spriteblueprint.js +16 -1
  91. package/dist/material/spriteblueprint.js.map +1 -1
  92. package/dist/material/subsurfaceprofile.js +86 -23
  93. package/dist/material/subsurfaceprofile.js.map +1 -1
  94. package/dist/material/water.js +3 -1
  95. package/dist/material/water.js.map +1 -1
  96. package/dist/posteffect/bloom.js +167 -7
  97. package/dist/posteffect/bloom.js.map +1 -1
  98. package/dist/posteffect/coloradjust.js +2 -1
  99. package/dist/posteffect/coloradjust.js.map +1 -1
  100. package/dist/posteffect/compositor.js.map +1 -1
  101. package/dist/posteffect/fxaa.js +2 -1
  102. package/dist/posteffect/fxaa.js.map +1 -1
  103. package/dist/posteffect/grayscale.js +3 -1
  104. package/dist/posteffect/grayscale.js.map +1 -1
  105. package/dist/posteffect/motionblur.js +4 -1
  106. package/dist/posteffect/motionblur.js.map +1 -1
  107. package/dist/posteffect/posteffect.js.map +1 -1
  108. package/dist/posteffect/skinsss.js +368 -69
  109. package/dist/posteffect/skinsss.js.map +1 -1
  110. package/dist/posteffect/ssgi.js +16 -9
  111. package/dist/posteffect/ssgi.js.map +1 -1
  112. package/dist/posteffect/ssr.js +3 -0
  113. package/dist/posteffect/ssr.js.map +1 -1
  114. package/dist/posteffect/sss.js +91 -34
  115. package/dist/posteffect/sss.js.map +1 -1
  116. package/dist/posteffect/taa.js.map +1 -1
  117. package/dist/posteffect/tonemap.js +44 -1
  118. package/dist/posteffect/tonemap.js.map +1 -1
  119. package/dist/render/abuffer_oit.js +45 -39
  120. package/dist/render/abuffer_oit.js.map +1 -1
  121. package/dist/render/cull_visitor.js +19 -0
  122. package/dist/render/cull_visitor.js.map +1 -1
  123. package/dist/render/depthpass.js +36 -2
  124. package/dist/render/depthpass.js.map +1 -1
  125. package/dist/render/drawable_mixin.js +26 -1
  126. package/dist/render/drawable_mixin.js.map +1 -1
  127. package/dist/render/dualdepthpeeling_oit.js +52 -51
  128. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  129. package/dist/render/envlight.js +1 -1
  130. package/dist/render/envlight.js.map +1 -1
  131. package/dist/render/fbm_wavegenerator.js +3 -0
  132. package/dist/render/fbm_wavegenerator.js.map +1 -1
  133. package/dist/render/gerstner_wavegenerator.js +3 -0
  134. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  135. package/dist/render/globalbindgroup_allocator.js +3 -0
  136. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  137. package/dist/render/oit.js +29 -0
  138. package/dist/render/oit.js.map +1 -0
  139. package/dist/render/render_queue.js +3 -0
  140. package/dist/render/render_queue.js.map +1 -1
  141. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  142. package/dist/render/rendergraph/executor.js +2 -0
  143. package/dist/render/rendergraph/executor.js.map +1 -1
  144. package/dist/render/rendergraph/forward_plus_builder.js +61 -1
  145. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  146. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  147. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  148. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  149. package/dist/render/rendergraph/types.js.map +1 -1
  150. package/dist/render/shadow_mask_pass.js +73 -8
  151. package/dist/render/shadow_mask_pass.js.map +1 -1
  152. package/dist/render/sky.js +166 -126
  153. package/dist/render/sky.js.map +1 -1
  154. package/dist/render/weightedblended_oit.js +36 -35
  155. package/dist/render/weightedblended_oit.js.map +1 -1
  156. package/dist/scene/basesprite.js +8 -0
  157. package/dist/scene/basesprite.js.map +1 -1
  158. package/dist/scene/batchgroup.js +3 -0
  159. package/dist/scene/batchgroup.js.map +1 -1
  160. package/dist/scene/environment.js +4 -1
  161. package/dist/scene/environment.js.map +1 -1
  162. package/dist/scene/hair.js +963 -0
  163. package/dist/scene/hair.js.map +1 -0
  164. package/dist/scene/light.js +5 -1
  165. package/dist/scene/light.js.map +1 -1
  166. package/dist/scene/mesh.js +481 -47
  167. package/dist/scene/mesh.js.map +1 -1
  168. package/dist/scene/meshdrawable.js +6 -0
  169. package/dist/scene/meshdrawable.js.map +1 -1
  170. package/dist/scene/msdftext.js +3 -0
  171. package/dist/scene/msdftext.js.map +1 -1
  172. package/dist/scene/msdftextsprite.js +3 -0
  173. package/dist/scene/msdftextsprite.js.map +1 -1
  174. package/dist/scene/particlesys.js +6 -0
  175. package/dist/scene/particlesys.js.map +1 -1
  176. package/dist/scene/scene.js +3 -0
  177. package/dist/scene/scene.js.map +1 -1
  178. package/dist/scene/scene_node.js +6 -1
  179. package/dist/scene/scene_node.js.map +1 -1
  180. package/dist/scene/terrain-cm/grass.js +3 -0
  181. package/dist/scene/terrain-cm/grass.js.map +1 -1
  182. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  183. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  184. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  185. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  186. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  187. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  188. package/dist/scene/water.js +6 -0
  189. package/dist/scene/water.js.map +1 -1
  190. package/dist/shaders/atmosphere.js.map +1 -1
  191. package/dist/shaders/diffusion.js +54 -0
  192. package/dist/shaders/diffusion.js.map +1 -0
  193. package/dist/shaders/shadow.js +33 -21
  194. package/dist/shaders/shadow.js.map +1 -1
  195. package/dist/shaders/temporal.js +71 -33
  196. package/dist/shaders/temporal.js.map +1 -1
  197. package/dist/shadow/dom.js +546 -0
  198. package/dist/shadow/dom.js.map +1 -0
  199. package/dist/shadow/pcf_opt.js +3 -5
  200. package/dist/shadow/pcf_opt.js.map +1 -1
  201. package/dist/shadow/pcf_pd.js +1 -1
  202. package/dist/shadow/pcf_pd.js.map +1 -1
  203. package/dist/shadow/receiver_bias.js +41 -0
  204. package/dist/shadow/receiver_bias.js.map +1 -0
  205. package/dist/shadow/shader.js +20 -60
  206. package/dist/shadow/shader.js.map +1 -1
  207. package/dist/shadow/shadow_impl.js +89 -0
  208. package/dist/shadow/shadow_impl.js.map +1 -1
  209. package/dist/shadow/shadow_region.js +50 -50
  210. package/dist/shadow/shadow_region.js.map +1 -1
  211. package/dist/shadow/shadowmapper.js +150 -37
  212. package/dist/shadow/shadowmapper.js.map +1 -1
  213. package/dist/shapes/shape.js +11 -2
  214. package/dist/shapes/shape.js.map +1 -1
  215. package/dist/shapes/sphere.js +50 -9
  216. package/dist/shapes/sphere.js.map +1 -1
  217. package/dist/utility/blueprint/common/constants.js +112 -2
  218. package/dist/utility/blueprint/common/constants.js.map +1 -1
  219. package/dist/utility/blueprint/material/func.js +142 -49
  220. package/dist/utility/blueprint/material/func.js.map +1 -1
  221. package/dist/utility/blueprint/material/ir.js +490 -25
  222. package/dist/utility/blueprint/material/ir.js.map +1 -1
  223. package/dist/utility/blueprint/material/texture.js +898 -4
  224. package/dist/utility/blueprint/material/texture.js.map +1 -1
  225. package/dist/utility/serialization/manager.js +431 -100
  226. package/dist/utility/serialization/manager.js.map +1 -1
  227. package/dist/utility/serialization/scene/animation.js +370 -3
  228. package/dist/utility/serialization/scene/animation.js.map +1 -1
  229. package/dist/utility/serialization/scene/batch.js +4 -0
  230. package/dist/utility/serialization/scene/batch.js.map +1 -1
  231. package/dist/utility/serialization/scene/camera.js +133 -1
  232. package/dist/utility/serialization/scene/camera.js.map +1 -1
  233. package/dist/utility/serialization/scene/common.js +26 -5
  234. package/dist/utility/serialization/scene/common.js.map +1 -1
  235. package/dist/utility/serialization/scene/hair.js +1141 -0
  236. package/dist/utility/serialization/scene/hair.js.map +1 -0
  237. package/dist/utility/serialization/scene/light.js +84 -4
  238. package/dist/utility/serialization/scene/light.js.map +1 -1
  239. package/dist/utility/serialization/scene/material.js +1867 -166
  240. package/dist/utility/serialization/scene/material.js.map +1 -1
  241. package/dist/utility/serialization/scene/mesh.js +231 -14
  242. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  243. package/dist/utility/serialization/scene/node.js +141 -7
  244. package/dist/utility/serialization/scene/node.js.map +1 -1
  245. package/dist/utility/serialization/scene/particle.js +4 -0
  246. package/dist/utility/serialization/scene/particle.js.map +1 -1
  247. package/dist/utility/serialization/scene/primitive.js +18 -0
  248. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  249. package/dist/utility/serialization/scene/sprite.js +4 -0
  250. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  251. package/dist/utility/serialization/scene/terrain.js +4 -0
  252. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  253. package/dist/utility/serialization/scene/text.js +4 -0
  254. package/dist/utility/serialization/scene/text.js.map +1 -1
  255. package/dist/utility/serialization/scene/water.js +4 -0
  256. package/dist/utility/serialization/scene/water.js.map +1 -1
  257. package/dist/utility/serialization/types.js.map +1 -1
  258. package/dist/utility/shprojector.js +96 -95
  259. package/dist/utility/shprojector.js.map +1 -1
  260. package/dist/values.js +49 -2
  261. package/dist/values.js.map +1 -1
  262. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"sky.js","sources":["../../src/render/sky.ts"],"sourcesContent":["import { linearToGamma } from '../shaders/misc';\nimport type { AtmosphereParams } from '../shaders';\nimport {\n getDefaultAtmosphereParams,\n getAerialPerspectiveLut,\n getAtmosphereParamsStruct,\n getSkyViewLut,\n getTransmittanceLut,\n renderAtmosphereLUTs,\n skyBox,\n smoothNoise3D,\n createTransmittanceLutProgram,\n createMultiScatteringLutProgram,\n createSkyViewLutProgram,\n createAPLutProgram,\n atmosphereLUTRendered\n} from '../shaders';\nimport type { Immutable, Nullable } from '@zephyr3d/base';\nimport { Disposable, DRef, objectKeys, Vector3 } from '@zephyr3d/base';\nimport {\n CubeFace,\n DEPTH_COMPARE_DEFAULT,\n DEPTH_COMPARE_FARTHER,\n DEPTH_FARTHEST,\n Matrix4x4,\n Vector2,\n Vector4\n} from '@zephyr3d/base';\nimport { Primitive } from './primitive';\nimport { BoxShape } from '../shapes';\nimport type { Camera } from '../camera/camera';\nimport { prefilterCubemap } from '../utility/pmrem';\nimport type { DirectionalLight } from '../scene';\nimport type { BaseTexture, GPUDataBuffer, Texture2D } from '@zephyr3d/device';\nimport type {\n AbstractDevice,\n BindGroup,\n FrameBuffer,\n GPUProgram,\n RenderStateSet,\n TextureCube,\n TextureFormat,\n VertexLayout\n} from '@zephyr3d/device';\nimport type { DrawContext } from './drawable';\nimport { ShaderHelper } from '../material/shader/helper';\nimport { PHYSICAL_BAKE_EXPOSURE } from '../utility/physical';\nimport { fetchSampler } from '../utility/misc';\nimport { CubemapSHProjector } from '../utility/shprojector';\nimport { Fog, uniformSphereSamples } from '../values';\nimport type { HeightFogParams } from '../shaders/fog';\nimport {\n calculateFog,\n getDefaultHeightFogParams,\n getHeightFogParamsStruct,\n MAX_FOG_HEIGHT\n} from '../shaders/fog';\nimport { getDevice, getEngine } from '../app/api';\nimport { drawFullscreenQuad } from './fullscreenquad';\nimport { panoramaToCubemap } from '../utility/panorama';\nimport { PerspectiveCamera } from '../camera';\n\n/**\n * Type of sky\n *\n * @remarks\n * none - Sky will not be rendered\n * color - Sky will be rendered with a solid color.\n * skybox - Sky will be rendered as box using a preloaded cube texture.\n * scatter - Render dynamic sky with atmospheric scattering.\n *\n * @public\n */\nexport type SkyType = 'image' | 'skybox' | 'scatter' | 'none';\n\n/**\n * Type of fog\n * @public\n */\nexport type FogType = 'height_fog' | 'none';\n\nconst fogTypeMap: Record<FogType, number> = {\n height_fog: Fog.FOG_TYPE_HEIGHT,\n none: Fog.FOG_TYPE_NONE\n};\n\nconst defaultSkyWorldMatrix = Matrix4x4.identity();\n\n/**\n * The sky renderer\n * @public\n */\nexport class SkyRenderer extends Disposable {\n /**\n * @internal\n *\n * The atmospheric scattering model predates photometric lighting and was authored around a\n * sun input of 10. This normalization maps the physical daylight reference (100,000 lux at\n * Sunny 16, whose camera exposure is 1 / 38,400) onto that model reference: 10 / (100000 / 38400).\n */\n static readonly PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE = 3.84;\n /**\n * @internal\n * Fixed exposure the physical sky bake is stored at. See {@link PHYSICAL_BAKE_EXPOSURE}.\n */\n static readonly PHYSICAL_BAKE_EXPOSURE = PHYSICAL_BAKE_EXPOSURE;\n /**\n * @internal\n *\n * Reference-exposure anchor previously used to lift authored fog colors into photometric space.\n *\n * @deprecated Physical fog now derives its luminance from `EnvLightWrapper.intensity`, mirroring\n * Filament, which scales fog color by `iblLuminance`. Retained only because it documents the\n * Sunny-16 equivalence: 38,400 = 1 / exposure(f/16, 1/125s, ISO 100).\n */\n static readonly FOG_PHYSICAL_LUMINANCE = 38400;\n private static readonly _skyCamera = (() => {\n return new PerspectiveCamera(null, Math.PI * 0.5, 1, 20, 1);\n })();\n private static transmittanceLutProgram: Nullable<GPUProgram> = null;\n private static multiScatteringLutProgram: Nullable<GPUProgram> = null;\n private static skyViewLutProgram: Nullable<GPUProgram> = null;\n private static APLutProgram: Nullable<GPUProgram> = null;\n private static readonly _programSky: Partial<Record<SkyType, GPUProgram>> = {};\n private static _programDistantLight: Nullable<GPUProgram> = null;\n private static _programFog: Nullable<GPUProgram> = null;\n private static _programFogNoDepth: Nullable<GPUProgram> = null;\n private static _vertexLayout: Nullable<VertexLayout> = null;\n private static _primitiveSky: Nullable<Primitive> = null;\n private static _primitiveDistantLight: Nullable<Primitive> = null;\n private static _renderStatesSky: Nullable<RenderStateSet> = null;\n private static _renderStatesSkyNoDepthTest: Nullable<RenderStateSet> = null;\n private static _renderStatesFog: Nullable<RenderStateSet> = null;\n private static _renderStatesFogScatter: Nullable<RenderStateSet> = null;\n private static _renderStatesDistantLight: Nullable<RenderStateSet> = null;\n private static _defaultSkyImage: DRef<Texture2D> = new DRef();\n private _skyType: SkyType;\n private readonly _skyColor: Vector4;\n private readonly _skyImage: DRef<Texture2D>;\n private _bakedSkyboxDirty: boolean;\n private _bakedSkyboxTextureSize: number;\n private _skyboxTextureSize: number;\n private readonly _skyboxTexture: DRef<TextureCube>;\n private readonly _bakedSkyboxTexture: DRef<TextureCube>;\n private readonly _bakedSkyboxFrameBuffer: DRef<FrameBuffer>;\n private readonly _radianceMap: DRef<TextureCube>;\n private readonly _radianceFrameBuffer: DRef<FrameBuffer>;\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\n private readonly _skyDistantLightLut: DRef<FrameBuffer>;\n private readonly _irradianceFrameBuffer: DRef<FrameBuffer>;\n private readonly _radianceMapWidth: number;\n private readonly _atmosphereParams: AtmosphereParams;\n private _atmosphereExposure: number;\n private _fogType: FogType;\n private readonly _heightFogParams: HeightFogParams;\n private _cloudy: number;\n private _cloudIntensity: number;\n private _debugAerialPerspective: number;\n private readonly _wind: Vector2;\n private readonly _skyboxRotation: Vector3;\n private _skyWorldMatrix: Matrix4x4;\n private readonly _lastSunDir: Vector3;\n private readonly _lastSunColor: Vector4;\n private _panoramaAsset: string;\n private readonly _shProjector: CubemapSHProjector;\n private readonly _shWindowWeights: Vector3;\n private _radianceConvSamples: number;\n private _irradianceConvSamples: number;\n private readonly _bindgroupDistantLight: Nullable<DRef<BindGroup>> = null;\n private _bindgroupSky: Partial<Record<SkyType, DRef<BindGroup>>> = {};\n private readonly _bindgroupFog: Nullable<DRef<BindGroup>> = null;\n private readonly _bindgroupFogNoDepth: Nullable<DRef<BindGroup>> = null;\n private _format: Nullable<TextureFormat>;\n /**\n * @internal Scale lifting the authored 0..1 height-fog colors into the pre-exposed space for the\n * current frame (1 in legacy, `EnvLightWrapper.intensity * cameraExposure` in physical).\n */\n private _fogLuminanceScale: number;\n /**\n * @internal Ratio converting the fog shader's atmosphere-derived LUT samples from the fixed bake\n * exposure to the live one (1 in legacy).\n */\n private _fogPreExposure: number;\n /**\n * Creates an instance of SkyRenderer\n */\n constructor() {\n super();\n this._skyType = 'scatter';\n this._skyColor = new Vector4(0, 0, 0, 1);\n this._skyImage = new DRef();\n this._skyboxTexture = new DRef();\n this._skyboxTextureSize = 1024;\n this._bakedSkyboxTexture = new DRef();\n this._bakedSkyboxFrameBuffer = new DRef();\n this._bakedSkyboxDirty = true;\n this._bakedSkyboxTextureSize = 256;\n this._radianceMap = new DRef();\n this._radianceFrameBuffer = new DRef();\n this._radianceMapWidth = 128;\n this._irradianceSH = new DRef();\n this._irradianceSHFB = new DRef();\n this._skyDistantLightLut = new DRef();\n this._irradianceFrameBuffer = new DRef();\n this._atmosphereParams = getDefaultAtmosphereParams();\n this._atmosphereExposure = 1;\n this._debugAerialPerspective = 0;\n this._fogType = 'height_fog';\n this._heightFogParams = getDefaultHeightFogParams();\n this._cloudy = 0.45;\n this._cloudIntensity = 15;\n this._wind = new Vector2(0, 0);\n this._skyboxRotation = new Vector3(0, 0, 0);\n this._skyWorldMatrix = defaultSkyWorldMatrix;\n this._lastSunDir = SkyRenderer._getSunDir(null);\n this._lastSunColor = SkyRenderer._getSunColor(null);\n this._panoramaAsset = '';\n this._shProjector = new CubemapSHProjector(10000);\n this._shWindowWeights = new Vector3(1, 0.8, 0.6);\n this._radianceConvSamples = 64;\n this._irradianceConvSamples = 256;\n this._bindgroupDistantLight = new DRef();\n this._bindgroupSky = {};\n this._bindgroupFog = new DRef();\n this._bindgroupFogNoDepth = new DRef();\n this._format = null;\n this._fogLuminanceScale = 1;\n this._fogPreExposure = 1;\n }\n /** @internal */\n getHash(_ctx: DrawContext) {\n return `${this.skyType}:${this.fogType}`;\n }\n /**\n * Gets the preferred environment texture format.\n */\n get envTextureFormat() {\n if (!this._format) {\n const texCaps = getDevice().getDeviceCaps().textureCaps;\n this._format = texCaps.getTextureFormatInfo('rg11b10uf')?.renderable\n ? 'rg11b10uf'\n : texCaps.supportHalfFloatColorBuffer && texCaps.supportLinearHalfFloatTexture\n ? 'rgba16f'\n : 'rgba32f';\n }\n return this._format;\n }\n /** Which type of the sky should be rendered */\n get skyType() {\n return this._skyType;\n }\n set skyType(val) {\n if (val !== this._skyType) {\n this._skyType = val;\n this.invalidate();\n }\n }\n /** @internal */\n get panoramaTextureAsset() {\n return this._panoramaAsset;\n }\n /** @internal */\n set panoramaTextureAsset(id: string) {\n if (id !== this._panoramaAsset) {\n this._panoramaAsset = id ?? '';\n if (!this._panoramaAsset) {\n this.skyboxTexture = null;\n return;\n }\n this._updateSkyboxTexture();\n }\n }\n /** @internal */\n get skyboxTextureSize() {\n return this._skyboxTextureSize;\n }\n /** @internal */\n set skyboxTextureSize(size: number) {\n if (size !== this._skyboxTextureSize) {\n this._skyboxTextureSize = size;\n this._updateSkyboxTexture();\n }\n }\n /** Baked sky texture */\n getBakedSkyTexture(ctx: DrawContext) {\n if (this._bakedSkyboxDirty) {\n this.update(ctx);\n }\n return this._bakedSkyboxTexture.get()!;\n }\n /**\n * The color used when sky type is `image`\n */\n get skyColor(): Immutable<Vector4> {\n return this._skyColor;\n }\n set skyColor(val: Immutable<Vector4>) {\n if (!val.equalsTo(this._skyColor)) {\n this._skyColor.set(val);\n this.invalidate();\n }\n }\n /**\n * The image used when sky type is `image`\n */\n get skyImage() {\n return this._skyImage.get();\n }\n set skyImage(texture) {\n if (texture !== this._skyImage.get()) {\n this._skyImage.set(texture);\n this.invalidate();\n }\n }\n /**\n * Window weights for SH projection\n */\n get shWindowWeights(): Immutable<Vector3> {\n return this._shWindowWeights;\n }\n set shWindowWeights(weights: Immutable<Vector3>) {\n this._shWindowWeights.set(weights);\n this.invalidate();\n }\n /**\n * Sample count for radiance convolution\n */\n get radianceConvSamples() {\n return this._radianceConvSamples;\n }\n set radianceConvSamples(val) {\n if (val !== this._radianceConvSamples) {\n this._radianceConvSamples = val;\n this.invalidate();\n }\n }\n /**\n * Sample count for irradiance convolution\n */\n get irradianceConvSamples() {\n return this._irradianceConvSamples;\n }\n set irradianceConvSamples(val) {\n if (val !== this._irradianceConvSamples) {\n this._irradianceConvSamples = val;\n this.invalidate();\n }\n }\n /** Aerial perspective density */\n get aerialPerspectiveDistance() {\n return this._atmosphereParams.apDistance;\n }\n set aerialPerspectiveDistance(val) {\n if (val !== this._atmosphereParams.apDistance) {\n this._atmosphereParams.apDistance = val;\n this.invalidate();\n }\n }\n /** Atmosphere exposure */\n get atmosphereExposure() {\n return this._atmosphereExposure;\n }\n set atmosphereExposure(val) {\n if (val !== this._atmosphereExposure) {\n this._atmosphereExposure = val;\n this.invalidate();\n }\n }\n /** Aerial perspective density */\n get cameraHeightScale() {\n return this._atmosphereParams.cameraHeightScale;\n }\n set cameraHeightScale(val) {\n if (val !== this._atmosphereParams.cameraHeightScale) {\n this._atmosphereParams.cameraHeightScale = val;\n this.invalidate();\n }\n }\n /** Height fog color */\n get heightFogColor(): Immutable<Vector3> {\n return this._heightFogParams.parameter1.xyz();\n }\n set heightFogColor(val: Immutable<Vector3>) {\n if (!val.equalsTo(this._heightFogParams.parameter1.xyz())) {\n this._heightFogParams.parameter1.set(val);\n this.invalidate();\n }\n }\n /** Height fog density */\n get heightFogDensity() {\n return this._heightFogParams.parameter2.x;\n }\n set heightFogDensity(val) {\n if (val !== this._heightFogParams.parameter2.x) {\n this._heightFogParams.parameter2.x = val;\n this.invalidate();\n }\n }\n /** Height fog falloff */\n get heightFogFalloff() {\n return this._heightFogParams.parameter1.w;\n }\n set heightFogFalloff(val) {\n if (val !== this._heightFogParams.parameter1.w) {\n this._heightFogParams.parameter1.w = val;\n this.invalidate();\n }\n }\n /** Height fog start height */\n get heightFogStartHeight() {\n return this._heightFogParams.parameter2.y;\n }\n set heightFogStartHeight(val) {\n if (val !== this._heightFogParams.parameter2.y) {\n this._heightFogParams.parameter2.y = val;\n this.invalidate();\n }\n }\n /** Height fog start distance */\n get heightFogStartDistance() {\n return this._heightFogParams.parameter2.z;\n }\n set heightFogStartDistance(val) {\n if (val !== this._heightFogParams.parameter2.z) {\n this._heightFogParams.parameter2.z = val;\n this.invalidate();\n }\n }\n /** Height fog end distance */\n get heightFogEndDistance() {\n return this._heightFogParams.parameter2.w;\n }\n set heightFogEndDistance(val) {\n if (val !== this._heightFogParams.parameter2.w) {\n this._heightFogParams.parameter2.w = val;\n this.invalidate();\n }\n }\n /** Height fog maximum opacity */\n get heightFogMaxOpacity() {\n return this._heightFogParams.parameter3.x;\n }\n set heightFogMaxOpacity(val) {\n if (val !== this._heightFogParams.parameter3.x) {\n this._heightFogParams.parameter3.x = val;\n this.invalidate();\n }\n }\n /** Height fog atmosphere contribution strength */\n get heightFogAtmosphereContribution() {\n return this._heightFogParams.parameter3.y;\n }\n set heightFogAtmosphereContribution(val) {\n if (val !== this._heightFogParams.parameter3.y) {\n this._heightFogParams.parameter3.y = val;\n this.invalidate();\n }\n }\n /** Height fog directional exponent */\n get heightFogDirExponent() {\n return this._heightFogParams.parameter3.w;\n }\n set heightFogDirExponent(val) {\n if (val !== this._heightFogParams.parameter3.w) {\n this._heightFogParams.parameter3.w = val;\n this.invalidate();\n }\n }\n /** Height fog directional inscattering color */\n get heightFogDirColor(): Immutable<Vector3> {\n return this._heightFogParams.parameter4.xyz();\n }\n set heightFogDirColor(val: Immutable<Vector3>) {\n if (!val.equalsTo(this._heightFogParams.parameter4.xyz())) {\n this._heightFogParams.parameter4.set(val);\n this.invalidate();\n }\n }\n /**\n * Light density of the sky.\n *\n * @remarks\n * This value controls how much cloud should be rendered when the sky type is scatter.\n * Typically, the value should be in the range of 0 to 1.\n */\n get cloudy() {\n return this._cloudy;\n }\n set cloudy(val) {\n if (val !== this._cloudy && this._skyType === 'scatter') {\n this._cloudy = val;\n this.invalidate();\n }\n }\n /**\n * Intensity of the sky color\n */\n get cloudIntensity() {\n return this._cloudIntensity;\n }\n set cloudIntensity(val) {\n if (val !== this._cloudIntensity && this._skyType === 'scatter') {\n this._cloudIntensity = val;\n this.invalidate();\n }\n }\n /**\n * Wind velocity\n *\n * @remarks\n * This value affects the movement of the cloud\n */\n get wind(): Immutable<Vector2> {\n return this._wind;\n }\n set wind(val: Immutable<Vector2>) {\n this._wind.set(val);\n }\n /**\n * Radiance map of the sky.\n */\n get radianceMap() {\n if (!this._radianceMap.get()) {\n this._radianceMap.set(getDevice().createCubeTexture(this.envTextureFormat, this._radianceMapWidth)!);\n this._radianceMap.get()!.name = 'SkyRadianceMap';\n }\n return this._radianceMap.get()!;\n }\n /**\n * Radiance map of the sky reused for sheen.\n *\n * @remarks\n * Dynamic sky is smooth enough that the GGX-prefiltered radiance map is a practical approximation for sheen.\n */\n get sheenRadianceMap() {\n return this.radianceMap;\n }\n /** @internal */\n get atmosphereParams() {\n return this._atmosphereParams;\n }\n /** @internal */\n get heightFogParams() {\n return this._heightFogParams;\n }\n /** @internal */\n get radianceFramebuffer() {\n if (!this._radianceFrameBuffer.get()) {\n this._radianceFrameBuffer.set(getDevice().createFrameBuffer([this.radianceMap], null));\n }\n return this._radianceFrameBuffer.get();\n }\n /**\n * Irradiance SH coeffecients buffer\n */\n get irradianceSH() {\n if (!this._irradianceSH.get()) {\n const buffer = getDevice().createBuffer(4 * 4 * 9, { usage: 'uniform' })!;\n this._irradianceSH.set(buffer);\n }\n return this._irradianceSH.get()!;\n }\n /**\n * Irradiance SH coeffecients texture\n */\n get irradianceSHFB() {\n if (!this._irradianceSHFB.get()) {\n const device = getDevice();\n const texCaps = device.getDeviceCaps().textureCaps;\n const format =\n !device.getDeviceCaps().framebufferCaps.supportFloatBlending && texCaps.supportHalfFloatColorBuffer\n ? 'rgba16f'\n : 'rgba32f';\n const texture = device.createTexture2D(format, 3, 3, {\n mipmapping: false\n })!;\n this._irradianceSHFB.set(device.createFrameBuffer([texture], null));\n }\n return this._irradianceSHFB.get()!;\n }\n /**\n * Cube texture for skybox.\n */\n get skyboxTexture() {\n return this._skyboxTexture.get();\n }\n set skyboxTexture(tex) {\n if (tex !== this.skyboxTexture) {\n this._skyboxTexture.set(tex);\n if (this._skyType === 'skybox') {\n this.invalidate();\n }\n }\n }\n /**\n * Additional euler rotation (in degrees) applied to skybox.\n */\n get skyboxRotation(): Immutable<Vector3> {\n return this._skyboxRotation;\n }\n set skyboxRotation(val: Immutable<Vector3>) {\n if (!val.equalsTo(this._skyboxRotation)) {\n this._skyboxRotation.set(val);\n if (this._skyType === 'skybox') {\n this.invalidate();\n }\n }\n }\n /** @internal */\n get skyWorldMatrix(): Immutable<Matrix4x4> {\n return this._skyWorldMatrix;\n }\n /** @internal */\n set skyWorldMatrix(val: Immutable<Matrix4x4>) {\n val = val ?? defaultSkyWorldMatrix;\n if (!val.equalsTo(this._skyWorldMatrix)) {\n this._skyWorldMatrix = val;\n this.invalidate();\n }\n }\n /** @internal */\n get mappedFogType() {\n return fogTypeMap[this._fogType];\n }\n /** Current fog type */\n get fogType() {\n return this._fogType;\n }\n set fogType(val) {\n if (val !== this._fogType) {\n this._fogType = val;\n this.invalidate();\n }\n }\n /** @internal */\n get aerialPerspectiveDebug() {\n return this._debugAerialPerspective;\n }\n /** @internal */\n set aerialPerspectiveDebug(val) {\n this._debugAerialPerspective = val;\n }\n /** @internal */\n get fogPresents() {\n return this._skyType === 'scatter' || this._fogType !== 'none';\n }\n /**\n * Force the radiance map and irradiance map to be regenerated.\n */\n invalidate() {\n this._bakedSkyboxDirty = true;\n }\n /** @internal */\n drawScatteredFog(_ctx: DrawContext) {\n return this.skyType === 'scatter';\n }\n /** @internal */\n getAerialPerspectiveLUT(_ctx: DrawContext) {\n return getAerialPerspectiveLut();\n }\n /** @internal */\n getSkyDistantLightLUT(_ctx: DrawContext) {\n return this._skyDistantLightLut.get()!.getColorAttachments()[0] as Texture2D;\n }\n update(ctx: DrawContext) {\n // Latch the fog scales for this frame. The bake path (updateBakedSkyMap) uses the sky camera\n // whose scene is null, so it cannot read lightingMode itself; both bake and main pass run after\n // update(), so caching them here keeps them consistent.\n // The fog shader mixes two differently-scaled sources, so it needs both factors:\n // - the atmosphere-derived LUTs (distant sky, aerial perspective) are stored at the fixed bake\n // exposure, so they convert with the bake-to-live ratio;\n // - the authored 0..1 fog colors are lifted by the environment intensity (lux) -- the same\n // anchor the sky and IBL use, mirroring Filament's `fogColor *= iblLuminance` -- and then\n // take the plain camera pre-exposure.\n // Legacy leaves both at 1 so its authored colors are untouched.\n this._fogPreExposure = SkyRenderer.getBakeToPreExposedScale(ctx);\n this._fogLuminanceScale =\n ctx.scene.lightingMode === 'physical'\n ? ctx.scene.env.light.intensity * ShaderHelper.getPreExposure(ctx)\n : 1;\n const useScatter = this._skyType === 'scatter';\n if (useScatter || !atmosphereLUTRendered()) {\n this.renderAtmosphereLUTs(ctx);\n }\n const oldSunLight = ctx.sunLight && useScatter ? ctx.sunLight.color : null;\n const sunDir = SkyRenderer._getSunDir(ctx.sunLight);\n const sunColor = SkyRenderer._getSunColor(ctx.sunLight);\n if (this._skyType === 'scatter' && (this._wind.x !== 0 || this._wind.y !== 0)) {\n this._bakedSkyboxDirty = true;\n }\n if (!this._skyDistantLightLut.get()) {\n const tex = ctx.device.createTexture2D(this.envTextureFormat, 1, 1, { mipmapping: false })!;\n tex.name = 'DistantSkyLut';\n this._skyDistantLightLut.set(ctx.device.createFrameBuffer([tex], null));\n this._bakedSkyboxDirty = true;\n }\n if (!sunDir.equalsTo(this._lastSunDir) || !sunColor.equalsTo(this._lastSunColor)) {\n this._lastSunDir.set(sunDir);\n this._lastSunColor.set(sunColor);\n this._bakedSkyboxDirty = true;\n }\n if (this._bakedSkyboxDirty) {\n this._bakedSkyboxDirty = false;\n // updateBakedSkyMap derives the IBL (specular prefilter + irradiance SH) from the fog-free\n // cubemap internally, before compositing fog. The distant-light LUT is re-baked here against\n // the fogged cubemap to preserve the pre-refactor fog shading appearance.\n this.updateBakedSkyMap(ctx);\n this.renderSkyDistantLut(ctx, this._bakedSkyboxTexture.get()!);\n }\n const newSunLight = oldSunLight\n ? Vector3.mul(ctx.sunLight!.color.xyz(), this.sunTransmittance(ctx.sunLight!))\n : Vector3.zero();\n if (oldSunLight) {\n ctx.sunLight!.setColor(newSunLight);\n }\n // Update height fog parameters\n if (this._fogType === 'height_fog') {\n const cameraY = Math.min(\n this._heightFogParams.parameter2.y + MAX_FOG_HEIGHT,\n ctx.camera.getWorldPosition().y\n );\n const p = Math.max(\n -125,\n Math.min(126, -this._heightFogParams.parameter1.w * (cameraY - this._heightFogParams.parameter2.y))\n );\n this._heightFogParams.parameter3.z = this._heightFogParams.parameter2.x * Math.pow(2, p);\n // The legacy directional fog term expects a display-relative 0..1 light color. It cannot be\n // mixed directly with photometric illuminance; physical fog instead receives its radiance\n // from the distant-sky integration below.\n if (ctx.scene.lightingMode === 'physical') {\n this._heightFogParams.lightColor.setXYZ(0, 0, 0);\n } else {\n this._heightFogParams.lightColor.set(newSunLight);\n }\n this._heightFogParams.lightDir.set(SkyRenderer._getSunDir(ctx.sunLight));\n }\n return oldSunLight;\n }\n renderAtmosphereLUTs(ctx: DrawContext) {\n this._atmosphereParams.lightDir.set(SkyRenderer._getSunDir(ctx.sunLight));\n this._atmosphereParams.lightColor.set(SkyRenderer._getSunColor(ctx.sunLight));\n // Physical: the sun input is photometric (lux), normalized onto the model's authored reference\n // and stored at the fixed PHYSICAL_BAKE_EXPOSURE rather than the live camera exposure. That\n // keeps the cached IBL bake exposure-independent while staying inside the environment cubemap's\n // limited float range -- raw luminance would overflow it to Inf. Consumers rescale to the live\n // exposure via getBakeToPreExposedScale().\n this._atmosphereParams.lightColor.w *=\n this._atmosphereExposure *\n (ctx.scene.lightingMode === 'physical'\n ? SkyRenderer.PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE * SkyRenderer.PHYSICAL_BAKE_EXPOSURE\n : 1);\n this._atmosphereParams.cameraAspect = ctx.camera.getAspect();\n this._atmosphereParams.cameraWorldMatrix.set(ctx.camera.worldMatrix);\n renderAtmosphereLUTs(this._atmosphereParams);\n }\n renderSkyDistantLut(ctx: DrawContext, skybox: TextureCube) {\n this._prepareSkyBox(ctx.device);\n ctx.device.pushDeviceStates();\n ctx.device.setRenderStates(SkyRenderer._renderStatesDistantLight);\n ctx.device.setProgram(SkyRenderer._programDistantLight);\n ctx.device.setFramebuffer(this._skyDistantLightLut.get());\n ctx.device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\n this._bindgroupDistantLight!.get()!.setTexture('skybox', skybox, fetchSampler('clamp_linear_nomip'));\n this._bindgroupDistantLight!.get()!.setValue('physical', ctx.scene.lightingMode === 'physical' ? 1 : 0);\n ctx.device.setBindGroup(0, this._bindgroupDistantLight!.get()!);\n SkyRenderer._primitiveDistantLight!.draw();\n ctx.device.popDeviceStates();\n }\n updateBakedSkyMap(ctx: DrawContext) {\n const device = ctx.device;\n const tex =\n this._bakedSkyboxTexture.get() && this._bakedSkyboxTexture.get()!.width === this._bakedSkyboxTextureSize\n ? this._bakedSkyboxTexture.get()!\n : device.createCubeTexture(this.envTextureFormat, this._bakedSkyboxTextureSize, {\n mipmapping: false\n })!;\n tex.name = 'BakedSkyboxTexture';\n if (tex !== this._bakedSkyboxTexture.get()) {\n this._bakedSkyboxFrameBuffer.set(device.createFrameBuffer([tex], null));\n }\n const camera = SkyRenderer._skyCamera;\n const saveRenderStates = device.getRenderStates();\n device.pushDeviceStates();\n device.setFramebuffer(this._bakedSkyboxFrameBuffer.get());\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\n camera.lookAtCubeFace(face);\n this._bakedSkyboxFrameBuffer.get()!.setColorAttachmentCubeFace(0, face);\n // Direct sunlight is represented by the scene's directional sun light. Keep the analytic\n // sun disk out of both diffuse and specular IBL to avoid baking that direct contribution a\n // second time. Atmospheric scattering and clouds remain in the cubemap.\n this._renderSky(camera, false, false, this._getSkyBakeLuminanceScale(ctx));\n }\n device.popDeviceStates();\n\n this.renderSkyDistantLut(ctx, tex);\n\n // Publish the texture reference before deriving IBL so _updateIBLFromBakedSky reads the\n // current cubemap.\n this._bakedSkyboxTexture.set(tex);\n\n // Derive the IBL from the fog-free cubemap. Height fog is a view/position-dependent participating\n // medium applied per-pixel in screen space (see lightpass renderFog); baking it into the distant\n // environment probe would both double-count it against that screen-space pass and wrongly lift the\n // lower hemisphere (ground direction) from the atmosphere's dark value to a bright fog color. The\n // same reasoning that keeps the sun disk out of the IBL applies to fog, for diffuse and specular alike.\n this._updateIBLFromBakedSky(ctx, tex);\n\n // Composite fog into the cubemap afterwards. This copy is only used as the visible skybox\n // background (UNIFORM_NAME_BAKED_SKY_MAP), where the fogged distant sky is desired.\n device.pushDeviceStates();\n device.setFramebuffer(this._bakedSkyboxFrameBuffer.get());\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\n camera.lookAtCubeFace(face);\n this._bakedSkyboxFrameBuffer.get()!.setColorAttachmentCubeFace(0, face);\n this.renderFog(camera);\n }\n device.popDeviceStates();\n\n device.setRenderStates(saveRenderStates);\n }\n /**\n * @internal\n * Updates the scene's IBL (GGX-prefiltered specular radiance map + irradiance SH) from the given\n * cubemap, provided the scene environment light is still driven by this dynamic sky. Must be called\n * with the fog-free cubemap so height fog does not leak into the environment lighting.\n */\n private _updateIBLFromBakedSky(ctx: DrawContext, skybox: TextureCube) {\n if (\n ctx.scene.env.light.radianceMap &&\n (ctx.scene.env.light.radianceMap === this.radianceMap ||\n (this._irradianceSH.get() && ctx.scene.env.light.irradianceSH === this.irradianceSH) ||\n (this._irradianceSHFB.get() && ctx.scene.env.light.irradianceSHFB === this.irradianceSHFB))\n ) {\n prefilterCubemap(skybox, 'ggx', this.radianceFramebuffer!, this._radianceConvSamples);\n ctx.scene.env.light.sheenRadianceMap = this.radianceMap;\n this._shProjector.projectCubemapToTexture(skybox, this.irradianceSHFB);\n ctx.scene.env.light.irradianceSHFB = this.irradianceSHFB;\n ctx.scene.env.light.irradianceSH = null;\n ctx.scene.env.light.irradianceWindow = this._shWindowWeights;\n }\n }\n renderUberFog(camera: Camera, depthTexture: Nullable<BaseTexture>) {\n const device = getDevice();\n const fogProgram = depthTexture ? SkyRenderer._programFog : SkyRenderer._programFogNoDepth;\n const renderStates = SkyRenderer._renderStatesFog;\n const bindgroup = depthTexture ? this._bindgroupFog!.get()! : this._bindgroupFogNoDepth!.get()!;\n if (depthTexture) {\n bindgroup.setTexture('depthTex', depthTexture, fetchSampler('clamp_nearest_nomip'));\n }\n bindgroup.setTexture(\n 'skyDistantLightLut',\n this._skyDistantLightLut.get()!.getColorAttachments()[0],\n fetchSampler('clamp_nearest_nomip')\n );\n bindgroup.setTexture('apLut', getAerialPerspectiveLut(), fetchSampler('clamp_linear_nomip'));\n bindgroup.setValue('rt', device.getFramebuffer() ? 1 : 0);\n bindgroup.setValue('invProjViewMatrix', camera.invViewProjectionMatrix);\n bindgroup.setValue('cameraNearFar', new Vector2(camera.getNearPlane(), camera.getFarPlane()));\n bindgroup.setValue('cameraPosition', camera.getWorldPosition());\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\n bindgroup.setValue('withAerialPerspective', this.skyType === 'scatter' ? 1 : 0);\n bindgroup.setValue('fogType', this.mappedFogType);\n bindgroup.setValue('atmosphereParams', this._atmosphereParams);\n bindgroup.setValue('heightFogParams', this._getUploadHeightFogParams());\n device.setProgram(fogProgram);\n device.setBindGroup(0, bindgroup);\n device.setVertexLayout(SkyRenderer._vertexLayout);\n device.setRenderStates(renderStates);\n device.draw('triangle-strip', 0, 4);\n }\n /**\n * @internal\n * Height-fog upload params with the authored base/directional colors lifted into the pre-exposed\n * physical space when physical lighting is active, plus the pre-exposure the shader applies to its\n * atmosphere-derived LUT samples. Legacy returns the stored params untouched so its upload stays\n * byte-identical. Stored authored values are never mutated.\n */\n private _getUploadHeightFogParams() {\n const scale = this._fogLuminanceScale;\n const p = this._heightFogParams;\n if (scale === 1 && this._fogPreExposure === 1) {\n return p;\n }\n const p1 = p.parameter1;\n const p4 = p.parameter4;\n return {\n ...p,\n parameter1: new Vector4(p1.x * scale, p1.y * scale, p1.z * scale, p1.w),\n parameter4: new Vector4(p4.x * scale, p4.y * scale, p4.z * scale, p4.w),\n preExposure: this._fogPreExposure\n };\n }\n /** @internal */\n renderFog(camera: Camera) {\n const device = getDevice();\n const currentFramebuffer = device.getFramebuffer();\n const depthBuffer = currentFramebuffer?.getDepthAttachment() ?? null;\n const colorBuffer = currentFramebuffer?.getColorAttachments()[0] ?? null;\n const fogFramebuffer =\n depthBuffer && colorBuffer\n ? device.pool.fetchTemporalFramebuffer(false, 0, 0, colorBuffer, null, false)\n : null;\n if (fogFramebuffer) {\n const vp = device.getViewport();\n const scissor = device.getScissor();\n device.pushDeviceStates();\n device.setFramebuffer(fogFramebuffer);\n device.setViewport(vp);\n device.setScissor(scissor);\n }\n const savedRenderStates = device.getRenderStates();\n this._prepareSkyBox(device);\n this.renderUberFog(camera, depthBuffer);\n /*\n if (this._skyType === 'scatter') {\n this.renderAtmosphericFog(ctx, depthBuffer);\n }\n */\n /*\n if (this._fogType === 'height_fog') {\n this.renderHeightFog(ctx, depthBuffer);\n }\n */\n device.setRenderStates(savedRenderStates);\n if (fogFramebuffer) {\n device.popDeviceStates();\n device.pool.releaseFrameBuffer(fogFramebuffer);\n }\n }\n /** @internal */\n private _beginSingleColorPass(withDepth: boolean) {\n const device = getDevice();\n const currentFramebuffer = device.getFramebuffer();\n const colorBuffer = currentFramebuffer?.getColorAttachments()[0] ?? null;\n const depthBuffer = withDepth ? (currentFramebuffer?.getDepthAttachment() ?? null) : null;\n if (!currentFramebuffer || currentFramebuffer.getColorAttachments().length <= 1 || !colorBuffer) {\n return null;\n }\n const framebuffer = device.pool.fetchTemporalFramebuffer(false, 0, 0, colorBuffer, depthBuffer, false);\n const vp = device.getViewport();\n const scissor = device.getScissor();\n device.pushDeviceStates();\n device.setFramebuffer(framebuffer);\n device.setViewport(vp);\n device.setScissor(scissor);\n return framebuffer;\n }\n /** @internal */\n private _endSingleColorPass(framebuffer: Nullable<FrameBuffer>) {\n if (!framebuffer) {\n return;\n }\n const device = getDevice();\n device.popDeviceStates();\n device.pool.releaseFrameBuffer(framebuffer);\n }\n /** @internal */\n renderSky(ctx: DrawContext) {\n let skyCamera = ctx.camera;\n if (!skyCamera.isPerspective()) {\n skyCamera = SkyRenderer._skyCamera;\n ctx.camera.worldMatrix.decompose(null, skyCamera.rotation, null);\n }\n const framebuffer = this._beginSingleColorPass(true);\n try {\n this._renderSky(skyCamera, true, true, this._getSkyScreenLuminanceScale(ctx));\n } finally {\n this._endSingleColorPass(framebuffer);\n }\n }\n /** Disposes resources of this SkyRenderer */\n protected onDispose() {\n super.onDispose();\n this._skyboxTexture.dispose();\n this._bakedSkyboxTexture.dispose();\n this._bakedSkyboxFrameBuffer.dispose();\n this._radianceMap.dispose();\n this._radianceFrameBuffer.dispose();\n this._irradianceSH.dispose();\n this._irradianceSHFB.dispose();\n this._irradianceFrameBuffer.dispose();\n this._shProjector.dispose();\n if (this._skyDistantLightLut.get()) {\n this._skyDistantLightLut.get()!.getColorAttachments()[0].dispose();\n this._skyDistantLightLut.dispose();\n }\n this._bindgroupDistantLight!.dispose();\n for (const k of objectKeys(this._bindgroupSky)) {\n this._bindgroupSky[k]?.dispose();\n }\n this._bindgroupSky = {};\n this._bindgroupFog!.dispose();\n this._bindgroupFogNoDepth!.dispose();\n }\n /** @internal */\n private _updateSkyboxTexture() {\n if (this._panoramaAsset) {\n getEngine()\n .resourceManager.fetchTexture<Texture2D>(this._panoramaAsset, { linearColorSpace: true })\n .then((tex) => {\n if (!tex.isTexture2D()) {\n console.error(`Invalid panorama texture asset: ${this._panoramaAsset}`);\n } else {\n const skyboxTexture = getDevice().createCubeTexture(\n this.envTextureFormat,\n this._skyboxTextureSize,\n {\n mipmapping: false\n }\n )!;\n panoramaToCubemap(tex, skyboxTexture);\n skyboxTexture.name = 'SkyboxTexture';\n this.skyboxTexture = skyboxTexture;\n }\n })\n .catch((err) => {\n console.error(`Load asset failed: ${this._panoramaAsset}: ${err}`);\n });\n }\n }\n /** @internal */\n private _renderSky(camera: Camera, depthTest: boolean, includeSunDisk: boolean, luminanceScale = 1) {\n const device = getDevice();\n const savedRenderStates = device.getRenderStates();\n this._prepareSkyBox(device);\n if (this._skyType === 'scatter') {\n // The atmosphere LUTs already hold physical luminance, so only the caller's exposure applies.\n this._drawScattering(camera, depthTest, includeSunDisk, luminanceScale);\n } else if (this._skyType === 'skybox' && this.skyboxTexture) {\n this._drawSkybox(camera, depthTest, luminanceScale);\n } else {\n this._drawSkyColor(camera, depthTest, luminanceScale);\n }\n device.setRenderStates(savedRenderStates);\n }\n /**\n * @internal\n *\n * Converts a value stored at {@link PHYSICAL_BAKE_EXPOSURE} into the live pre-exposed space.\n *\n * @remarks\n * Everything derived from the cached sky bake (the IBL, the distant-light LUT, the visible baked\n * skybox) is stored at the fixed reference exposure. Multiplying by this ratio yields the same\n * result as if the live camera exposure had been baked in, without invalidating the cache when\n * the camera stops down. Returns 1 in legacy.\n */\n static getBakeToPreExposedScale(ctx: DrawContext) {\n return ctx.scene.lightingMode === 'physical'\n ? ShaderHelper.getPreExposure(ctx) / SkyRenderer.PHYSICAL_BAKE_EXPOSURE\n : 1;\n }\n /**\n * @internal\n *\n * Scale that normalizes a sky into the IBL bake's storage space.\n *\n * @remarks\n * An authored 0..1 `skybox` / `image` is treated as an emitter of `EnvLightWrapper.intensity` lux.\n * The scattering atmosphere needs no lift: its LUTs already carry photometric sun illuminance.\n *\n * Both are then scaled to {@link PHYSICAL_BAKE_EXPOSURE}. The bake is cached and only invalidated\n * by sun changes, so it must be exposure-independent; storing it at raw photometric magnitude\n * would overflow the environment cubemap's float range (see {@link PHYSICAL_BAKE_EXPOSURE}).\n *\n * Returns 1 in legacy so its bake stays byte-identical.\n */\n private _getSkyBakeLuminanceScale(ctx: DrawContext) {\n if (ctx.scene.lightingMode !== 'physical') {\n return 1;\n }\n // scatter already includes the bake exposure via renderAtmosphereLUTs().\n return this._skyType === 'scatter'\n ? 1\n : ctx.scene.env.light.intensity * SkyRenderer.PHYSICAL_BAKE_EXPOSURE;\n }\n /**\n * @internal\n *\n * On-screen sky scale: the bake-time normalization converted from the stored reference exposure\n * to the live one, so the visible sky lands in the same pre-exposed space as every lit surface.\n */\n private _getSkyScreenLuminanceScale(ctx: DrawContext) {\n return this._getSkyBakeLuminanceScale(ctx) * SkyRenderer.getBakeToPreExposedScale(ctx);\n }\n /** @internal */\n private _drawSkyColor(camera: Camera, depthTest: boolean, luminanceScale: number) {\n const device = getDevice();\n const bindgroup = this._bindgroupSky.image!.get()!;\n bindgroup.setValue('color', this._skyColor);\n bindgroup.setValue('luminanceScale', luminanceScale);\n bindgroup.setTexture(\n 'texture',\n this._skyImage.get() ?? SkyRenderer._defaultSkyImage.get()!,\n fetchSampler('clamp_linear_nomip')\n );\n bindgroup.setValue('flip', device.getFramebuffer() && device.type === 'webgpu' ? -1 : 1);\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\n device.setProgram(SkyRenderer._programSky.image!);\n device.setBindGroup(0, bindgroup);\n drawFullscreenQuad(depthTest ? SkyRenderer._renderStatesSky! : SkyRenderer._renderStatesSkyNoDepthTest!);\n }\n /** @internal */\n private _drawSkybox(camera: Camera, depthTest: boolean, luminanceScale: number) {\n const device = getDevice();\n const bindgroup = this._bindgroupSky.skybox!.get()!;\n bindgroup.setTexture('skyCubeMap', this.skyboxTexture!, fetchSampler('clamp_linear_nomip'));\n bindgroup.setValue('luminanceScale', luminanceScale);\n bindgroup.setValue(\n 'flip',\n device.getFramebuffer() && device.type === 'webgpu' ? new Vector4(1, -1, 1, 1) : new Vector4(1, 1, 1, 1)\n );\n bindgroup.setValue('viewProjMatrix', camera.viewProjectionMatrix);\n bindgroup.setValue('worldMatrix', this._skyWorldMatrix);\n bindgroup.setValue('cameraPos', camera.getWorldPosition());\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\n device.setProgram(SkyRenderer._programSky.skybox!);\n device.setBindGroup(0, bindgroup);\n device.setRenderStates(\n depthTest ? SkyRenderer._renderStatesSky : SkyRenderer._renderStatesSkyNoDepthTest\n );\n SkyRenderer._primitiveSky!.draw();\n }\n /** @internal */\n private _rayIntersectSphere(radius: number, rayStart: Vector3, rayDir: Vector3) {\n const OS = rayStart.magnitude;\n const SH = -Vector3.dot(rayStart, rayDir);\n const OH = Math.sqrt(Math.max(0, OS * OS - SH * SH));\n const PH = Math.sqrt(Math.max(0, radius * radius - OH * OH));\n if (OH > radius) {\n return -1;\n }\n const t1 = SH - PH;\n const t2 = SH + PH;\n return t1 < 0 ? t2 : t1;\n }\n /** @internal */\n sunTransmittance(sunLight: DirectionalLight) {\n const TRANSMITTANCE_SAMPLES = 32;\n const RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\n const MIE_SIGMA = 3.996;\n const MIE_ABSORPTION_SIGMA = 4.4;\n const OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\n function rayleighSc(params: AtmosphereParams, fH: number) {\n const sigma = new Vector3(RAYLEIGH_SIGMA[0] * 1e-6, RAYLEIGH_SIGMA[1] * 1e-6, RAYLEIGH_SIGMA[2] * 1e-6);\n const rho_h = Math.exp(-fH / params.rayleighScatteringHeight);\n return Vector3.scale(sigma, rho_h);\n }\n function mieSc(params: AtmosphereParams, fH: number) {\n const sigma = new Vector3(MIE_SIGMA * 1e-6, MIE_SIGMA * 1e-6, MIE_SIGMA * 1e-6);\n const rho_h = Math.exp(-(fH / params.mieScatteringHeight));\n return Vector3.scale(sigma, rho_h);\n }\n function mieAb(params: AtmosphereParams, fH: number) {\n const sigma = new Vector3(\n MIE_ABSORPTION_SIGMA * 1e-6,\n MIE_ABSORPTION_SIGMA * 1e-6,\n MIE_ABSORPTION_SIGMA * 1e-6\n );\n const rho_h = Math.exp(-(fH / params.mieScatteringHeight));\n return Vector3.scale(sigma, rho_h);\n }\n function ozoneAb(params: AtmosphereParams, fH: number) {\n const sigma = new Vector3(\n OZONE_ABSORPTION_SIGMA[0] * 1e-6,\n OZONE_ABSORPTION_SIGMA[1] * 1e-6,\n OZONE_ABSORPTION_SIGMA[2] * 1e-6\n );\n const rho_h = Math.max(0, 1 - (Math.abs(fH - params.ozoneCenter) * 0.5) / params.ozoneWidth);\n return Vector3.scale(sigma, rho_h);\n }\n const eyePos = new Vector3(\n 0,\n this._atmosphereParams.plantRadius + this._atmosphereParams.cameraHeightScale,\n 0\n );\n const lightDir = SkyRenderer._getSunDir(sunLight);\n const d = this._rayIntersectSphere(\n this._atmosphereParams.plantRadius + this._atmosphereParams.atmosphereHeight,\n eyePos,\n lightDir\n );\n if (d < 0) {\n return new Vector3(0, 0, 0);\n }\n const ds = d / TRANSMITTANCE_SAMPLES;\n const sum = new Vector3(0, 0, 0);\n const p = Vector3.combine(eyePos, lightDir, 1, ds * 0.5);\n for (let i = 0; i < TRANSMITTANCE_SAMPLES; i++) {\n const h = p.magnitude - this._atmosphereParams.plantRadius;\n const scattering = Vector3.add(rayleighSc(this._atmosphereParams, h), mieSc(this._atmosphereParams, h));\n const absorption = Vector3.add(ozoneAb(this._atmosphereParams, h), mieAb(this._atmosphereParams, h));\n const extinction = Vector3.add(scattering, absorption);\n Vector3.add(sum, Vector3.scale(extinction, ds), sum);\n Vector3.add(p, Vector3.scale(lightDir, ds), p);\n }\n return new Vector3(Math.exp(-sum.x), Math.exp(-sum.y), Math.exp(-sum.z));\n }\n /** @internal */\n private _drawScattering(\n camera: Camera,\n depthTest: boolean,\n includeSunDisk: boolean,\n luminanceScale: number\n ) {\n const device = getDevice();\n const tLut = getTransmittanceLut();\n const skyLut = getSkyViewLut();\n //const apLut = ScatteringLut.getAerialPerspectiveLut(alpha, 8000);\n const program = SkyRenderer._programSky.scatter!;\n const bindgroup = this._bindgroupSky.scatter!.get()!;\n bindgroup.setValue(\n 'flip',\n device.getFramebuffer() && device.type === 'webgpu' ? new Vector4(1, -1, 1, 1) : new Vector4(1, 1, 1, 1)\n );\n bindgroup.setValue('params', this._atmosphereParams);\n bindgroup.setValue('viewProjMatrix', camera.viewProjectionMatrix);\n bindgroup.setValue('worldMatrix', this._skyWorldMatrix);\n bindgroup.setValue('cameraPos', camera.getWorldPosition());\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\n bindgroup.setValue('includeSunDisk', includeSunDisk ? 1 : 0);\n bindgroup.setValue('luminanceScale', luminanceScale);\n bindgroup.setTexture('tLut', tLut, fetchSampler('clamp_linear_nomip'));\n bindgroup.setTexture('skyLut', skyLut, fetchSampler('clamp_linear_nomip'));\n bindgroup.setValue('cloudy', this._cloudy);\n bindgroup.setValue('cloudIntensity', this._cloudIntensity);\n bindgroup.setValue('time', device.frameInfo.elapsedOverall * 0.001);\n bindgroup.setValue('velocity', this._wind);\n device.setProgram(program);\n device.setBindGroup(0, bindgroup);\n device.setRenderStates(\n depthTest ? SkyRenderer._renderStatesSky : SkyRenderer._renderStatesSkyNoDepthTest\n );\n SkyRenderer._primitiveSky!.draw();\n }\n /** @internal */\n private _prepareSkyBox(device: AbstractDevice) {\n SkyRenderer._createAtmosphereLUTPrograms(device);\n if (!SkyRenderer._defaultSkyImage.get()) {\n const texture = device.createTexture2D('rgba8unorm', 1, 1, { mipmapping: false })!;\n texture.update(new Uint8Array([255, 255, 255, 255]), 0, 0, 1, 1);\n SkyRenderer._defaultSkyImage.set(texture);\n }\n if (!SkyRenderer._programDistantLight) {\n SkyRenderer._programDistantLight = device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.vector = pb.vec3().attrib('position');\n pb.main(function () {\n this.$outputs.vector = this.$inputs.vector;\n this.$builtins.position = pb.vec4(0, 0, 0, 1);\n if (pb.getDevice().type !== 'webgpu') {\n this.$builtins.pointSize = 1;\n }\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n this.skybox = pb.texCube().uniform(0);\n this.physical = pb.int().uniform(0);\n pb.main(function () {\n this.$l.sunColor = pb.vec4();\n // Height-fog in-scattering is lit by the sky hemisphere. The old full-sphere average\n // is retained verbatim in legacy mode; in physical mode, mirror lower samples into the\n // upper hemisphere so a dark ground/lower sky cannot turn the horizon into a black band.\n this.$l.sampleDirection = this.$choice(\n pb.notEqual(this.physical, 0),\n pb.vec3(this.$inputs.vector.x, pb.abs(this.$inputs.vector.y), this.$inputs.vector.z),\n this.$inputs.vector\n );\n this.$l.skyColor = pb.textureSampleLevel(this.skybox, this.sampleDirection, 0).rgb;\n this.$outputs.color = pb.vec4(pb.mul(this.skyColor, 1 / 64), 1);\n });\n }\n })!;\n SkyRenderer._programDistantLight.name = '@SkyDistantLight';\n }\n if (!this._bindgroupDistantLight!.get()) {\n this._bindgroupDistantLight!.set(\n device.createBindGroup(SkyRenderer._programDistantLight.bindGroupLayouts[0])\n );\n }\n if (!SkyRenderer._programFog) {\n SkyRenderer._programFog = SkyRenderer._createFogProgram(device, false);\n }\n if (!SkyRenderer._programFogNoDepth) {\n SkyRenderer._programFogNoDepth = SkyRenderer._createFogProgram(device, true);\n }\n if (!this._bindgroupFog!.get()) {\n this._bindgroupFog!.set(device.createBindGroup(SkyRenderer._programFog.bindGroupLayouts[0]));\n }\n if (!this._bindgroupFogNoDepth!.get()) {\n this._bindgroupFogNoDepth!.set(\n device.createBindGroup(SkyRenderer._programFogNoDepth.bindGroupLayouts[0])\n );\n }\n if (!SkyRenderer._programSky.image) {\n SkyRenderer._programSky.image = device.buildRenderProgram({\n label: 'ImageSky',\n vertex(pb) {\n this.$inputs.pos = pb.vec2().attrib('position');\n this.$outputs.uv = pb.vec2();\n this.flip = pb.int().uniform(0);\n pb.main(function () {\n this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n if (device.type !== 'webgpu') {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n }\n });\n },\n fragment(pb) {\n this.$outputs.outColor = pb.vec4();\n this.color = pb.vec4().uniform(0);\n this.texture = pb.tex2D().uniform(0);\n this.srgbOut = pb.int().uniform(0);\n this.luminanceScale = pb.float().uniform(0);\n pb.main(function () {\n this.$l.sampleColor = pb.textureSampleLevel(this.texture, this.$inputs.uv, 0);\n // luminanceScale is 1 in legacy and for the IBL bake; on screen in physical mode it\n // carries the environment intensity (lux) pre-multiplied by the camera exposure.\n this.$l.outColor = pb.mul(this.sampleColor, this.color, this.luminanceScale);\n this.$if(pb.equal(this.srgbOut, 0), function () {\n this.$outputs.outColor = pb.vec4(this.outColor.rgb, 1);\n }).$else(function () {\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.outColor.rgb), 1);\n });\n });\n }\n })!;\n SkyRenderer._programSky.image.name = '@SkyImage';\n }\n if (!this._bindgroupSky.image) {\n this._bindgroupSky.image = new DRef(\n device.createBindGroup(SkyRenderer._programSky.image.bindGroupLayouts[0])\n );\n }\n if (!SkyRenderer._programSky.scatter) {\n SkyRenderer._programSky.scatter = SkyRenderer._createScatterProgram(device, true);\n }\n if (!this._bindgroupSky.scatter) {\n this._bindgroupSky.scatter = new DRef(\n device.createBindGroup(SkyRenderer._programSky.scatter.bindGroupLayouts[0])\n );\n }\n if (!SkyRenderer._programSky.skybox) {\n SkyRenderer._programSky.skybox = device.buildRenderProgram({\n label: 'SkyBoxSky',\n vertex(pb) {\n this.$inputs.pos = pb.vec3().attrib('position');\n this.$outputs.texCoord = pb.vec3();\n this.worldMatrix = pb.mat4().uniform(0);\n this.viewProjMatrix = pb.mat4().uniform(0);\n this.cameraPos = pb.vec3().uniform(0);\n this.flip = pb.vec4().uniform(0);\n pb.main(function () {\n this.$outputs.texCoord = this.$inputs.pos;\n this.$l.worldPos = pb.add(\n this.cameraPos,\n pb.mul(this.worldMatrix, pb.vec4(this.$inputs.pos, 0)).xyz\n );\n this.$builtins.position = pb.mul(this.viewProjMatrix, pb.vec4(this.worldPos, 1), this.flip);\n this.$builtins.position.z = ShaderHelper.farthestClipZ(this, this.$builtins.position.w);\n });\n },\n fragment(pb) {\n this.$outputs.outColor = pb.vec4();\n this.skyCubeMap = pb.texCube().uniform(0);\n this.srgbOut = pb.int().uniform(0);\n this.luminanceScale = pb.float().uniform(0);\n pb.main(function () {\n this.$l.texCoord = pb.normalize(this.$inputs.texCoord);\n // luminanceScale is 1 in legacy and for the IBL bake; on screen in physical mode it\n // carries the environment intensity (lux) pre-multiplied by the camera exposure.\n this.$l.color = pb.mul(\n pb.textureSampleLevel(this.skyCubeMap, this.texCoord, 0).rgb,\n this.luminanceScale\n );\n this.$if(pb.equal(this.srgbOut, 0), function () {\n this.$outputs.outColor = pb.vec4(this.color, 1);\n }).$else(function () {\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), 1);\n });\n });\n }\n })!;\n SkyRenderer._programSky.skybox.name = '@SkySkybox';\n }\n if (!this._bindgroupSky.skybox) {\n this._bindgroupSky.skybox = new DRef(\n device.createBindGroup(SkyRenderer._programSky.skybox.bindGroupLayouts[0])\n );\n }\n if (!SkyRenderer._renderStatesSky) {\n SkyRenderer._renderStatesSky = device.createRenderStateSet();\n SkyRenderer._renderStatesSky\n .useDepthState()\n .enableTest(true)\n .enableWrite(false)\n .setCompareFunc(DEPTH_COMPARE_DEFAULT);\n SkyRenderer._renderStatesSky.useRasterizerState().setCullMode('none');\n }\n if (!SkyRenderer._renderStatesSkyNoDepthTest) {\n SkyRenderer._renderStatesSkyNoDepthTest = device.createRenderStateSet();\n SkyRenderer._renderStatesSkyNoDepthTest.useDepthState().enableTest(false).enableWrite(false);\n SkyRenderer._renderStatesSkyNoDepthTest.useRasterizerState().setCullMode('none');\n }\n if (!SkyRenderer._renderStatesFog) {\n SkyRenderer._renderStatesFog = device.createRenderStateSet();\n SkyRenderer._renderStatesFog.useRasterizerState().setCullMode('none');\n SkyRenderer._renderStatesFog.useBlendingState().enable(true).setBlendFunc('one', 'src-alpha');\n SkyRenderer._renderStatesFog.useDepthState().enableTest(false).enableWrite(false);\n }\n if (!SkyRenderer._renderStatesFogScatter) {\n SkyRenderer._renderStatesFogScatter = device.createRenderStateSet();\n SkyRenderer._renderStatesFogScatter.useRasterizerState().setCullMode('none');\n SkyRenderer._renderStatesFogScatter.useBlendingState().enable(true).setBlendFunc('one', 'src-alpha');\n SkyRenderer._renderStatesFogScatter\n .useDepthState()\n .enableTest(true)\n .enableWrite(false)\n .setCompareFunc(DEPTH_COMPARE_FARTHER);\n }\n if (!SkyRenderer._renderStatesDistantLight) {\n SkyRenderer._renderStatesDistantLight = device.createRenderStateSet();\n SkyRenderer._renderStatesDistantLight.useDepthState().enableTest(false).enableWrite(false);\n SkyRenderer._renderStatesDistantLight\n .useBlendingState()\n .enable(true)\n .setBlendEquation('add', 'add')\n .setBlendFuncRGB('one', 'one')\n .setBlendFuncAlpha('zero', 'one');\n SkyRenderer._renderStatesDistantLight.useRasterizerState().setCullMode('none');\n }\n if (!SkyRenderer._vertexLayout) {\n SkyRenderer._vertexLayout = device.createVertexLayout({\n vertexBuffers: [\n {\n buffer: device.createVertexBuffer(\n 'position_f32x2',\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\n )!\n }\n ]\n });\n }\n if (!SkyRenderer._primitiveSky) {\n SkyRenderer._primitiveSky = new BoxShape({ size: 8 });\n }\n if (!SkyRenderer._primitiveDistantLight) {\n const data = new Float32Array(uniformSphereSamples.length * 3);\n let i = 0;\n for (const v of uniformSphereSamples) {\n data[i++] = v.x;\n data[i++] = v.y;\n data[i++] = v.z;\n }\n SkyRenderer._primitiveDistantLight = new Primitive();\n SkyRenderer._primitiveDistantLight.createAndSetVertexBuffer('position_f32x3', data);\n SkyRenderer._primitiveDistantLight.indexCount = uniformSphereSamples.length;\n SkyRenderer._primitiveDistantLight.indexStart = 0;\n SkyRenderer._primitiveDistantLight.primitiveType = 'point-list';\n }\n }\n /** @internal */\n private static _createFogProgram(device: AbstractDevice, noDepth: boolean) {\n const program = device.buildRenderProgram({\n label: 'Fog',\n vertex(pb) {\n this.rt = pb.int().uniform(0);\n this.$inputs.pos = pb.vec2().attrib('position');\n this.$outputs.uv = pb.vec2();\n pb.main(function () {\n this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n if (device.type === 'webgpu') {\n this.$if(pb.notEqual(this.rt, 0), function () {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n });\n }\n });\n },\n fragment(pb) {\n const AtmosphereParams = getAtmosphereParamsStruct(pb);\n const HeightFogParams = getHeightFogParamsStruct(pb);\n if (!noDepth) {\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\n }\n this.apLut = pb.tex2D().uniform(0);\n this.skyDistantLightLut = pb.tex2D().uniform(0);\n this.invProjViewMatrix = pb.mat4().uniform(0);\n this.cameraNearFar = pb.vec2().uniform(0);\n this.cameraPosition = pb.vec3().uniform(0);\n this.withAerialPerspective = pb.int().uniform(0);\n this.fogType = pb.int().uniform(0);\n this.atmosphereParams = AtmosphereParams().uniform(0);\n this.heightFogParams = HeightFogParams().uniform(0);\n this.srgbOut = pb.int().uniform(0);\n this.$outputs.outColor = pb.vec4();\n pb.main(function () {\n this.$l.depthValue = noDepth\n ? pb.float(DEPTH_FARTHEST)\n : pb.textureSample(this.depthTex, this.$inputs.uv).r;\n this.$l.clipSpacePos = pb.vec4(\n pb.sub(pb.mul(this.$inputs.uv, 2), pb.vec2(1)),\n ShaderHelper.deviceDepthToClipZ(this, this.depthValue),\n 1\n );\n this.$l.hPos = pb.mul(this.invProjViewMatrix, this.clipSpacePos);\n this.$l.worldPos = pb.div(this.$l.hPos, this.$l.hPos.w).xyz;\n this.$l.isSky = ShaderHelper.isFarthestDepth(this, this.$l.depthValue);\n this.$l.color = calculateFog(\n this,\n this.withAerialPerspective,\n this.fogType,\n this.atmosphereParams,\n this.heightFogParams,\n this.$inputs.uv,\n this.isSky,\n this.cameraPosition,\n this.worldPos,\n 0,\n this.apLut,\n this.skyDistantLightLut\n );\n this.$if(pb.equal(this.srgbOut, 0), function () {\n this.$outputs.outColor = this.color;\n }).$else(function () {\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color.rgb), this.color.a);\n });\n });\n }\n })!;\n program.name = noDepth ? '@FogNoDepth' : '@Fog';\n return program;\n }\n /** @internal */\n private static _getSunDir(sunLight?: Nullable<DirectionalLight>) {\n // TODO: reduce GC\n return sunLight?.directionAndCutoff.xyz().scaleBy(-1) ?? ShaderHelper.defaultSunDir;\n }\n /** @internal */\n private static _getSunColor(sunLight?: Nullable<DirectionalLight>) {\n // TODO: reduce GC\n return sunLight?.diffuseAndIntensity ?? new Vector4(1, 1, 1, 10);\n }\n private static _createAtmosphereLUTPrograms(device: AbstractDevice) {\n if (!this.transmittanceLutProgram) {\n this.transmittanceLutProgram = createTransmittanceLutProgram(device);\n }\n if (!this.multiScatteringLutProgram) {\n this.multiScatteringLutProgram = createMultiScatteringLutProgram(device);\n }\n if (!this.skyViewLutProgram) {\n this.skyViewLutProgram = createSkyViewLutProgram(device);\n }\n if (!this.APLutProgram) {\n this.APLutProgram = createAPLutProgram(device);\n }\n }\n private static _createScatterProgram(device: AbstractDevice, cloud: boolean) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.pos = pb.vec3().attrib('position');\n this.worldMatrix = pb.mat4().uniform(0);\n this.viewProjMatrix = pb.mat4().uniform(0);\n this.cameraPos = pb.vec3().uniform(0);\n this.flip = pb.vec4().uniform(0);\n pb.main(function () {\n this.$outputs.worldDirection = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.pos, 0)).xyz;\n this.$builtins.position = pb.mul(\n this.viewProjMatrix,\n pb.vec4(pb.add(this.$outputs.worldDirection, this.cameraPos), 1),\n this.flip\n );\n this.$builtins.position.z = ShaderHelper.farthestClipZ(this, this.$builtins.position.w);\n });\n },\n fragment(pb) {\n this.$outputs.outColor = pb.vec4();\n this.tLut = pb.tex2D().uniform(0);\n this.skyLut = pb.tex2D().uniform(0);\n this.params = getAtmosphereParamsStruct(pb)().uniform(0);\n this.includeSunDisk = pb.int().uniform(0);\n if (cloud) {\n this.cloudy = pb.float().uniform(0);\n this.cloudIntensity = pb.float().uniform(0);\n this.time = pb.float().uniform(0);\n this.velocity = pb.vec2().uniform(0);\n }\n this.srgbOut = pb.int().uniform(0);\n this.luminanceScale = pb.float().uniform(0);\n pb.func('noise', [pb.vec3('p'), pb.float('t')], function () {\n this.p2 = pb.mul(this.p, 0.25);\n this.f = pb.mul(smoothNoise3D(this, this.p2), 0.5);\n this.p2 = pb.mul(this.p2, 3.02);\n this.p2.y = pb.sub(this.p2.y, pb.mul(this.t, 0.02));\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.25));\n this.p2 = pb.mul(this.p2, 3.03);\n this.p2.y = pb.add(this.p2.y, pb.mul(this.t, 0.01));\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.125));\n this.p2 = pb.mul(this.p2, 3.02);\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.0625));\n this.p2 = pb.mul(this.p2, 3.01);\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.03125));\n this.p2 = pb.mul(this.p2, 3.01);\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.015625));\n this.$return(this.f);\n });\n pb.main(function () {\n // Calculate sky color\n this.$l.sunColor = pb.vec4();\n this.$l.skyColor = skyBox(\n this,\n this.params,\n this.sunColor,\n this.$inputs.worldDirection,\n pb.float(0.01),\n this.includeSunDisk,\n this.tLut,\n this.skyLut\n ).rgb;\n\n this.$l.rayDir = pb.normalize(this.$inputs.worldDirection);\n this.$l.sunDir = this.params.lightDir;\n // ad-hoc\n this.$l.sunIntensity = pb.sqrt(pb.max(0, pb.mul(this.sunDir.y, this.rayDir.y)));\n\n // compute cloud\n if (cloud) {\n this.$l.noiseValue = pb.float();\n this.$if(pb.lessThanEqual(this.rayDir.y, 0), function () {\n this.noiseValue = 0;\n }).$else(function () {\n this.$l.tMin = pb.div(3000, this.rayDir.y);\n this.$l.cloudPoint = pb.mul(this.rayDir, this.tMin);\n this.speed = pb.mul(pb.vec3(this.velocity.x, 0, this.velocity.y), this.time);\n this.$l.noiseScale = pb.float(4e-4);\n this.noiseValue = this.noise(\n pb.mul(pb.add(this.cloudPoint, this.speed), this.noiseScale),\n this.time\n );\n this.noiseValue = pb.add(this.noiseValue, this.cloudy);\n this.noiseValue = pb.smoothStep(1, pb.add(1, this.cloudy), this.noiseValue);\n });\n // use sun color as cloud color\n /*\n this.$l.sunColor = pb.mul(\n pb.textureSampleLevel(this.skyLut, viewDirToUV(this, this.sunDir), 0),\n this.sunIntensity\n );\n */\n this.$l.cloudColor = pb.mul(\n this.sunColor.rgb,\n this.sunIntensity,\n pb.mul(this.noiseValue, this.cloudIntensity)\n );\n }\n\n // Compute sky color\n if (cloud) {\n // blend\n this.$l.vfactor = pb.clamp(pb.div(pb.sub(this.rayDir.y, 0.01), pb.sub(0.03, 0.01)), 0, 1);\n this.$l.factor = pb.clamp(pb.mul(this.noiseValue, this.vfactor), 0, 1);\n this.$l.color = pb.mix(this.skyColor, this.cloudColor, this.factor);\n } else {\n this.$l.color = this.skyColor;\n }\n // 1 for legacy and for the IBL bake; the camera pre-exposure when drawn on screen.\n this.color = pb.mul(this.color, this.luminanceScale);\n this.$if(pb.equal(this.srgbOut, 0), function () {\n this.$outputs.outColor = pb.vec4(this.color, 1);\n }).$else(function () {\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), 1);\n });\n });\n }\n })!;\n program.name = cloud ? '@SkyScatterCloud' : '@SkyScatter';\n return program;\n }\n}\n"],"names":["fogTypeMap","height_fog","Fog","FOG_TYPE_HEIGHT","none","FOG_TYPE_NONE","defaultSkyWorldMatrix","Matrix4x4","identity","SkyRenderer","Disposable","PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE","PHYSICAL_BAKE_EXPOSURE","FOG_PHYSICAL_LUMINANCE","_skyCamera","PerspectiveCamera","Math","PI","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","_programSky","_programDistantLight","_programFog","_programFogNoDepth","_vertexLayout","_primitiveSky","_primitiveDistantLight","_renderStatesSky","_renderStatesSkyNoDepthTest","_renderStatesFog","_renderStatesFogScatter","_renderStatesDistantLight","_defaultSkyImage","DRef","_skyType","_skyColor","_skyImage","_bakedSkyboxDirty","_bakedSkyboxTextureSize","_skyboxTextureSize","_skyboxTexture","_bakedSkyboxTexture","_bakedSkyboxFrameBuffer","_radianceMap","_radianceFrameBuffer","_irradianceSH","_irradianceSHFB","_skyDistantLightLut","_irradianceFrameBuffer","_radianceMapWidth","_atmosphereParams","_atmosphereExposure","_fogType","_heightFogParams","_cloudy","_cloudIntensity","_debugAerialPerspective","_wind","_skyboxRotation","_skyWorldMatrix","_lastSunDir","_lastSunColor","_panoramaAsset","_shProjector","_shWindowWeights","_radianceConvSamples","_irradianceConvSamples","_bindgroupDistantLight","_bindgroupSky","_bindgroupFog","_bindgroupFogNoDepth","_format","Vector4","getDefaultAtmosphereParams","getDefaultHeightFogParams","Vector2","Vector3","_getSunDir","_getSunColor","CubemapSHProjector","_fogLuminanceScale","_fogPreExposure","getHash","_ctx","skyType","fogType","envTextureFormat","texCaps","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","renderable","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","val","invalidate","panoramaTextureAsset","id","skyboxTexture","_updateSkyboxTexture","skyboxTextureSize","size","getBakedSkyTexture","ctx","update","get","skyColor","equalsTo","set","skyImage","texture","shWindowWeights","weights","radianceConvSamples","irradianceConvSamples","aerialPerspectiveDistance","apDistance","atmosphereExposure","cameraHeightScale","heightFogColor","parameter1","xyz","heightFogDensity","parameter2","x","heightFogFalloff","w","heightFogStartHeight","y","heightFogStartDistance","z","heightFogEndDistance","heightFogMaxOpacity","parameter3","heightFogAtmosphereContribution","heightFogDirExponent","heightFogDirColor","parameter4","cloudy","cloudIntensity","wind","radianceMap","createCubeTexture","name","sheenRadianceMap","atmosphereParams","heightFogParams","radianceFramebuffer","createFrameBuffer","irradianceSH","buffer","createBuffer","usage","irradianceSHFB","device","format","framebufferCaps","supportFloatBlending","createTexture2D","mipmapping","tex","skyboxRotation","skyWorldMatrix","mappedFogType","aerialPerspectiveDebug","fogPresents","drawScatteredFog","getAerialPerspectiveLUT","getAerialPerspectiveLut","getSkyDistantLightLUT","getColorAttachments","getBakeToPreExposedScale","scene","lightingMode","env","light","intensity","ShaderHelper","getPreExposure","useScatter","atmosphereLUTRendered","renderAtmosphereLUTs","oldSunLight","sunLight","color","sunDir","sunColor","updateBakedSkyMap","renderSkyDistantLut","newSunLight","mul","sunTransmittance","zero","setColor","cameraY","min","MAX_FOG_HEIGHT","camera","getWorldPosition","p","max","pow","lightColor","setXYZ","lightDir","cameraAspect","getAspect","cameraWorldMatrix","worldMatrix","skybox","_prepareSkyBox","pushDeviceStates","setRenderStates","setProgram","setFramebuffer","clearFrameBuffer","setTexture","fetchSampler","setValue","setBindGroup","draw","popDeviceStates","width","saveRenderStates","getRenderStates","face","CubeFace","PX","NX","PY","NY","PZ","NZ","lookAtCubeFace","setColorAttachmentCubeFace","_renderSky","_getSkyBakeLuminanceScale","_updateIBLFromBakedSky","renderFog","prefilterCubemap","projectCubemapToTexture","irradianceWindow","renderUberFog","depthTexture","fogProgram","renderStates","bindgroup","getFramebuffer","invViewProjectionMatrix","getNearPlane","getFarPlane","_getUploadHeightFogParams","setVertexLayout","scale","p1","p4","preExposure","currentFramebuffer","depthBuffer","getDepthAttachment","colorBuffer","fogFramebuffer","pool","fetchTemporalFramebuffer","vp","getViewport","scissor","getScissor","setViewport","setScissor","savedRenderStates","releaseFrameBuffer","_beginSingleColorPass","withDepth","length","framebuffer","_endSingleColorPass","renderSky","skyCamera","isPerspective","decompose","rotation","_getSkyScreenLuminanceScale","onDispose","dispose","k","objectKeys","getEngine","resourceManager","fetchTexture","linearColorSpace","then","isTexture2D","console","error","panoramaToCubemap","catch","err","depthTest","includeSunDisk","luminanceScale","_drawScattering","_drawSkybox","_drawSkyColor","image","type","drawFullscreenQuad","viewProjectionMatrix","radius","rayStart","rayDir","OS","magnitude","SH","dot","OH","sqrt","PH","t1","t2","TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","rayleighSc","params","fH","sigma","rho_h","exp","rayleighScatteringHeight","mieSc","mieScatteringHeight","mieAb","ozoneAb","abs","ozoneCenter","ozoneWidth","eyePos","plantRadius","d","_rayIntersectSphere","atmosphereHeight","ds","sum","combine","i","h","scattering","add","absorption","extinction","tLut","getTransmittanceLut","skyLut","getSkyViewLut","program","scatter","frameInfo","elapsedOverall","_createAtmosphereLUTPrograms","Uint8Array","buildRenderProgram","vertex","pb","$inputs","vector","vec3","attrib","main","$outputs","$builtins","position","vec4","pointSize","fragment","texCube","uniform","physical","int","$l","sampleDirection","$choice","notEqual","textureSampleLevel","rgb","createBindGroup","bindGroupLayouts","_createFogProgram","label","pos","vec2","uv","flip","DEPTH_FARTHEST","xy","neg","outColor","tex2D","srgbOut","float","sampleColor","$if","equal","$else","linearToGamma","_createScatterProgram","texCoord","mat4","viewProjMatrix","cameraPos","worldPos","farthestClipZ","skyCubeMap","normalize","createRenderStateSet","useDepthState","enableTest","enableWrite","setCompareFunc","DEPTH_COMPARE_DEFAULT","useRasterizerState","setCullMode","useBlendingState","enable","setBlendFunc","DEPTH_COMPARE_FARTHER","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","createVertexLayout","vertexBuffers","createVertexBuffer","Float32Array","BoxShape","data","uniformSphereSamples","v","Primitive","createAndSetVertexBuffer","indexCount","indexStart","primitiveType","noDepth","rt","AtmosphereParams","getAtmosphereParamsStruct","HeightFogParams","getHeightFogParamsStruct","depthTex","sampleType","apLut","skyDistantLightLut","invProjViewMatrix","cameraNearFar","cameraPosition","withAerialPerspective","depthValue","textureSample","r","clipSpacePos","sub","deviceDepthToClipZ","hPos","div","isSky","isFarthestDepth","calculateFog","a","directionAndCutoff","scaleBy","defaultSunDir","diffuseAndIntensity","createTransmittanceLutProgram","createMultiScatteringLutProgram","createSkyViewLutProgram","createAPLutProgram","cloud","worldDirection","time","velocity","func","p2","f","smoothNoise3D","t","$return","skyBox","sunIntensity","noiseValue","lessThanEqual","tMin","cloudPoint","speed","noiseScale","noise","smoothStep","cloudColor","vfactor","clamp","factor","mix"],"mappings":"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"}
1
+ {"version":3,"file":"sky.js","sources":["../../src/render/sky.ts"],"sourcesContent":["import { linearToGamma } from '../shaders/misc';\r\nimport type { AtmosphereParams } from '../shaders';\r\nimport {\r\n getDefaultAtmosphereParams,\r\n getAerialPerspectiveLut,\r\n getAtmosphereParamsStruct,\r\n getSkyViewLut,\r\n getTransmittanceLut,\r\n renderAtmosphereLUTs,\r\n skyBox,\r\n smoothNoise3D,\r\n createTransmittanceLutProgram,\r\n createMultiScatteringLutProgram,\r\n createSkyViewLutProgram,\r\n createAPLutProgram,\r\n atmosphereLUTRendered\r\n} from '../shaders';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, objectKeys, Vector3 } from '@zephyr3d/base';\r\nimport {\r\n CubeFace,\r\n DEPTH_COMPARE_DEFAULT,\r\n DEPTH_COMPARE_FARTHER,\r\n DEPTH_FARTHEST,\r\n Matrix4x4,\r\n Vector2,\r\n Vector4\r\n} from '@zephyr3d/base';\r\nimport { Primitive } from './primitive';\r\nimport { BoxShape } from '../shapes';\r\nimport type { Camera } from '../camera/camera';\r\nimport { prefilterCubemap } from '../utility/pmrem';\r\nimport type { DirectionalLight } from '../scene';\r\nimport type { BaseTexture, GPUDataBuffer, Texture2D } from '@zephyr3d/device';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n RenderStateSet,\r\n TextureCube,\r\n TextureFormat,\r\n VertexLayout\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PHYSICAL_BAKE_EXPOSURE } from '../utility/physical';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { CubemapSHProjector } from '../utility/shprojector';\r\nimport { Fog, uniformSphereSamples } from '../values';\r\nimport type { HeightFogParams } from '../shaders/fog';\r\nimport {\r\n calculateFog,\r\n getDefaultHeightFogParams,\r\n getHeightFogParamsStruct,\r\n MAX_FOG_HEIGHT\r\n} from '../shaders/fog';\r\nimport { getDevice, getEngine } from '../app/api';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { panoramaToCubemap } from '../utility/panorama';\r\nimport { PerspectiveCamera } from '../camera';\r\n\r\n/**\r\n * Type of sky\r\n *\r\n * @remarks\r\n * none - Sky will not be rendered\r\n * color - Sky will be rendered with a solid color.\r\n * skybox - Sky will be rendered as box using a preloaded cube texture.\r\n * scatter - Render dynamic sky with atmospheric scattering.\r\n *\r\n * @public\r\n */\r\nexport type SkyType = 'image' | 'skybox' | 'scatter' | 'none';\r\n\r\n/**\r\n * Type of fog\r\n * @public\r\n */\r\nexport type FogType = 'height_fog' | 'none';\r\n\r\nconst fogTypeMap: Record<FogType, number> = {\r\n height_fog: Fog.FOG_TYPE_HEIGHT,\r\n none: Fog.FOG_TYPE_NONE\r\n};\r\n\r\nconst defaultSkyWorldMatrix = Matrix4x4.identity();\r\n\r\n/**\r\n * The sky renderer\r\n * @public\r\n */\r\nexport class SkyRenderer extends Disposable {\r\n /**\r\n * @internal\r\n *\r\n * The atmospheric scattering model predates photometric lighting and was authored around a\r\n * sun input of 10. This normalization maps the physical daylight reference (100,000 lux at\r\n * Sunny 16, whose camera exposure is 1 / 38,400) onto that model reference: 10 / (100000 / 38400).\r\n */\r\n static readonly PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE = 3.84;\r\n /**\r\n * @internal\r\n * Fixed exposure the physical sky bake is stored at. See {@link PHYSICAL_BAKE_EXPOSURE}.\r\n */\r\n static readonly PHYSICAL_BAKE_EXPOSURE = PHYSICAL_BAKE_EXPOSURE;\r\n /**\r\n * @internal\r\n *\r\n * Reference-exposure anchor previously used to lift authored fog colors into photometric space.\r\n *\r\n * @deprecated Physical fog now derives its luminance from `EnvLightWrapper.intensity`, mirroring\r\n * Filament, which scales fog color by `iblLuminance`. Retained only because it documents the\r\n * Sunny-16 equivalence: 38,400 = 1 / exposure(f/16, 1/125s, ISO 100).\r\n */\r\n static readonly FOG_PHYSICAL_LUMINANCE = 38400;\r\n /**\r\n * @internal\r\n *\r\n * Direct-sun transmittance floor under full cloud cover. Heavy overcast leaves only a few\r\n * percent of direct sunlight; keeping a small non-zero floor lets shadows fade out smoothly\r\n * instead of snapping off.\r\n */\r\n static readonly CLOUD_SUN_MIN_TRANSMITTANCE = 0.05;\r\n private static readonly _skyCamera = (() => {\r\n return new PerspectiveCamera(null, Math.PI * 0.5, 1, 20, 1);\r\n })();\r\n private static transmittanceLutProgram: Nullable<GPUProgram> = null;\r\n private static multiScatteringLutProgram: Nullable<GPUProgram> = null;\r\n private static skyViewLutProgram: Nullable<GPUProgram> = null;\r\n private static APLutProgram: Nullable<GPUProgram> = null;\r\n private static readonly _programSky: Partial<Record<SkyType, GPUProgram>> = {};\r\n private static _programDistantLight: Nullable<GPUProgram> = null;\r\n private static _programFog: Nullable<GPUProgram> = null;\r\n private static _programFogNoDepth: Nullable<GPUProgram> = null;\r\n private static _vertexLayout: Nullable<VertexLayout> = null;\r\n private static _primitiveSky: Nullable<Primitive> = null;\r\n private static _primitiveDistantLight: Nullable<Primitive> = null;\r\n private static _renderStatesSky: Nullable<RenderStateSet> = null;\r\n private static _renderStatesSkyNoDepthTest: Nullable<RenderStateSet> = null;\r\n private static _renderStatesFog: Nullable<RenderStateSet> = null;\r\n private static _renderStatesFogScatter: Nullable<RenderStateSet> = null;\r\n private static _renderStatesDistantLight: Nullable<RenderStateSet> = null;\r\n private static _defaultSkyImage: DRef<Texture2D> = new DRef();\r\n private _skyType: SkyType;\r\n private readonly _skyColor: Vector4;\r\n private readonly _skyImage: DRef<Texture2D>;\r\n private _bakedSkyboxDirty: boolean;\r\n private _bakedSkyboxTextureSize: number;\r\n private _skyboxTextureSize: number;\r\n private readonly _skyboxTexture: DRef<TextureCube>;\r\n private readonly _bakedSkyboxTexture: DRef<TextureCube>;\r\n private readonly _bakedSkyboxFrameBuffer: DRef<FrameBuffer>;\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n private readonly _radianceFrameBuffer: DRef<FrameBuffer>;\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n private readonly _skyDistantLightLut: DRef<FrameBuffer>;\r\n private readonly _irradianceFrameBuffer: DRef<FrameBuffer>;\r\n private readonly _radianceMapWidth: number;\r\n private readonly _atmosphereParams: AtmosphereParams;\r\n private _atmosphereExposure: number;\r\n private _fogType: FogType;\r\n private readonly _heightFogParams: HeightFogParams;\r\n private _cloudy: number;\r\n private _cloudIntensity: number;\r\n private _debugAerialPerspective: number;\r\n private readonly _wind: Vector2;\r\n private readonly _skyboxRotation: Vector3;\r\n private _skyWorldMatrix: Matrix4x4;\r\n private readonly _lastSunDir: Vector3;\r\n private readonly _lastSunColor: Vector4;\r\n private _panoramaAsset: string;\r\n private readonly _shProjector: CubemapSHProjector;\r\n private readonly _shWindowWeights: Vector3;\r\n private _radianceConvSamples: number;\r\n private _irradianceConvSamples: number;\r\n private readonly _bindgroupDistantLight: Nullable<DRef<BindGroup>> = null;\r\n private _bindgroupSky: Partial<Record<SkyType, DRef<BindGroup>>> = {};\r\n private readonly _bindgroupFog: Nullable<DRef<BindGroup>> = null;\r\n private readonly _bindgroupFogNoDepth: Nullable<DRef<BindGroup>> = null;\r\n private _format: Nullable<TextureFormat>;\r\n /**\r\n * @internal Scale lifting the authored 0..1 height-fog colors into the pre-exposed space for the\r\n * current frame (1 in legacy, `EnvLightWrapper.intensity * cameraExposure` in physical).\r\n */\r\n private _fogLuminanceScale: number;\r\n /**\r\n * @internal Ratio converting the fog shader's atmosphere-derived LUT samples from the fixed bake\r\n * exposure to the live one (1 in legacy).\r\n */\r\n private _fogPreExposure: number;\r\n /**\r\n * Creates an instance of SkyRenderer\r\n */\r\n constructor() {\r\n super();\r\n this._skyType = 'scatter';\r\n this._skyColor = new Vector4(0, 0, 0, 1);\r\n this._skyImage = new DRef();\r\n this._skyboxTexture = new DRef();\r\n this._skyboxTextureSize = 1024;\r\n this._bakedSkyboxTexture = new DRef();\r\n this._bakedSkyboxFrameBuffer = new DRef();\r\n this._bakedSkyboxDirty = true;\r\n this._bakedSkyboxTextureSize = 256;\r\n this._radianceMap = new DRef();\r\n this._radianceFrameBuffer = new DRef();\r\n this._radianceMapWidth = 128;\r\n this._irradianceSH = new DRef();\r\n this._irradianceSHFB = new DRef();\r\n this._skyDistantLightLut = new DRef();\r\n this._irradianceFrameBuffer = new DRef();\r\n this._atmosphereParams = getDefaultAtmosphereParams();\r\n this._atmosphereExposure = 1;\r\n this._debugAerialPerspective = 0;\r\n this._fogType = 'height_fog';\r\n this._heightFogParams = getDefaultHeightFogParams();\r\n this._cloudy = 0.45;\r\n this._cloudIntensity = 15;\r\n this._wind = new Vector2(0, 0);\r\n this._skyboxRotation = new Vector3(0, 0, 0);\r\n this._skyWorldMatrix = defaultSkyWorldMatrix;\r\n this._lastSunDir = SkyRenderer._getSunDir(null);\r\n this._lastSunColor = SkyRenderer._getSunColor(null);\r\n this._panoramaAsset = '';\r\n this._shProjector = new CubemapSHProjector(10000);\r\n this._shWindowWeights = new Vector3(1, 0.8, 0.6);\r\n this._radianceConvSamples = 64;\r\n this._irradianceConvSamples = 256;\r\n this._bindgroupDistantLight = new DRef();\r\n this._bindgroupSky = {};\r\n this._bindgroupFog = new DRef();\r\n this._bindgroupFogNoDepth = new DRef();\r\n this._format = null;\r\n this._fogLuminanceScale = 1;\r\n this._fogPreExposure = 1;\r\n }\r\n /** @internal */\r\n getHash(_ctx: DrawContext) {\r\n return `${this.skyType}:${this.fogType}`;\r\n }\r\n /**\r\n * Gets the preferred environment texture format.\r\n */\r\n get envTextureFormat() {\r\n if (!this._format) {\r\n const texCaps = getDevice().getDeviceCaps().textureCaps;\r\n this._format = texCaps.getTextureFormatInfo('rg11b10uf')?.renderable\r\n ? 'rg11b10uf'\r\n : texCaps.supportHalfFloatColorBuffer && texCaps.supportLinearHalfFloatTexture\r\n ? 'rgba16f'\r\n : 'rgba32f';\r\n }\r\n return this._format;\r\n }\r\n /** Which type of the sky should be rendered */\r\n get skyType() {\r\n return this._skyType;\r\n }\r\n set skyType(val) {\r\n if (val !== this._skyType) {\r\n this._skyType = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** @internal */\r\n get panoramaTextureAsset() {\r\n return this._panoramaAsset;\r\n }\r\n /** @internal */\r\n set panoramaTextureAsset(id: string) {\r\n if (id !== this._panoramaAsset) {\r\n this._panoramaAsset = id ?? '';\r\n if (!this._panoramaAsset) {\r\n this.skyboxTexture = null;\r\n return;\r\n }\r\n this._updateSkyboxTexture();\r\n }\r\n }\r\n /** @internal */\r\n get skyboxTextureSize() {\r\n return this._skyboxTextureSize;\r\n }\r\n /** @internal */\r\n set skyboxTextureSize(size: number) {\r\n if (size !== this._skyboxTextureSize) {\r\n this._skyboxTextureSize = size;\r\n this._updateSkyboxTexture();\r\n }\r\n }\r\n /** Baked sky texture */\r\n getBakedSkyTexture(ctx: DrawContext) {\r\n if (this._bakedSkyboxDirty) {\r\n this.update(ctx);\r\n }\r\n return this._bakedSkyboxTexture.get()!;\r\n }\r\n /**\r\n * The color used when sky type is `image`\r\n */\r\n get skyColor(): Immutable<Vector4> {\r\n return this._skyColor;\r\n }\r\n set skyColor(val: Immutable<Vector4>) {\r\n if (!val.equalsTo(this._skyColor)) {\r\n this._skyColor.set(val);\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * The image used when sky type is `image`\r\n */\r\n get skyImage() {\r\n return this._skyImage.get();\r\n }\r\n set skyImage(texture) {\r\n if (texture !== this._skyImage.get()) {\r\n this._skyImage.set(texture);\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Window weights for SH projection\r\n */\r\n get shWindowWeights(): Immutable<Vector3> {\r\n return this._shWindowWeights;\r\n }\r\n set shWindowWeights(weights: Immutable<Vector3>) {\r\n this._shWindowWeights.set(weights);\r\n this.invalidate();\r\n }\r\n /**\r\n * Sample count for radiance convolution\r\n */\r\n get radianceConvSamples() {\r\n return this._radianceConvSamples;\r\n }\r\n set radianceConvSamples(val) {\r\n if (val !== this._radianceConvSamples) {\r\n this._radianceConvSamples = val;\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Sample count for irradiance convolution\r\n */\r\n get irradianceConvSamples() {\r\n return this._irradianceConvSamples;\r\n }\r\n set irradianceConvSamples(val) {\r\n if (val !== this._irradianceConvSamples) {\r\n this._irradianceConvSamples = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Aerial perspective density */\r\n get aerialPerspectiveDistance() {\r\n return this._atmosphereParams.apDistance;\r\n }\r\n set aerialPerspectiveDistance(val) {\r\n if (val !== this._atmosphereParams.apDistance) {\r\n this._atmosphereParams.apDistance = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Atmosphere exposure */\r\n get atmosphereExposure() {\r\n return this._atmosphereExposure;\r\n }\r\n set atmosphereExposure(val) {\r\n if (val !== this._atmosphereExposure) {\r\n this._atmosphereExposure = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Aerial perspective density */\r\n get cameraHeightScale() {\r\n return this._atmosphereParams.cameraHeightScale;\r\n }\r\n set cameraHeightScale(val) {\r\n if (val !== this._atmosphereParams.cameraHeightScale) {\r\n this._atmosphereParams.cameraHeightScale = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog color */\r\n get heightFogColor(): Immutable<Vector3> {\r\n return this._heightFogParams.parameter1.xyz();\r\n }\r\n set heightFogColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._heightFogParams.parameter1.xyz())) {\r\n this._heightFogParams.parameter1.set(val);\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog density */\r\n get heightFogDensity() {\r\n return this._heightFogParams.parameter2.x;\r\n }\r\n set heightFogDensity(val) {\r\n if (val !== this._heightFogParams.parameter2.x) {\r\n this._heightFogParams.parameter2.x = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog falloff */\r\n get heightFogFalloff() {\r\n return this._heightFogParams.parameter1.w;\r\n }\r\n set heightFogFalloff(val) {\r\n if (val !== this._heightFogParams.parameter1.w) {\r\n this._heightFogParams.parameter1.w = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog start height */\r\n get heightFogStartHeight() {\r\n return this._heightFogParams.parameter2.y;\r\n }\r\n set heightFogStartHeight(val) {\r\n if (val !== this._heightFogParams.parameter2.y) {\r\n this._heightFogParams.parameter2.y = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog start distance */\r\n get heightFogStartDistance() {\r\n return this._heightFogParams.parameter2.z;\r\n }\r\n set heightFogStartDistance(val) {\r\n if (val !== this._heightFogParams.parameter2.z) {\r\n this._heightFogParams.parameter2.z = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog end distance */\r\n get heightFogEndDistance() {\r\n return this._heightFogParams.parameter2.w;\r\n }\r\n set heightFogEndDistance(val) {\r\n if (val !== this._heightFogParams.parameter2.w) {\r\n this._heightFogParams.parameter2.w = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog maximum opacity */\r\n get heightFogMaxOpacity() {\r\n return this._heightFogParams.parameter3.x;\r\n }\r\n set heightFogMaxOpacity(val) {\r\n if (val !== this._heightFogParams.parameter3.x) {\r\n this._heightFogParams.parameter3.x = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog atmosphere contribution strength */\r\n get heightFogAtmosphereContribution() {\r\n return this._heightFogParams.parameter3.y;\r\n }\r\n set heightFogAtmosphereContribution(val) {\r\n if (val !== this._heightFogParams.parameter3.y) {\r\n this._heightFogParams.parameter3.y = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog directional exponent */\r\n get heightFogDirExponent() {\r\n return this._heightFogParams.parameter3.w;\r\n }\r\n set heightFogDirExponent(val) {\r\n if (val !== this._heightFogParams.parameter3.w) {\r\n this._heightFogParams.parameter3.w = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** Height fog directional inscattering color */\r\n get heightFogDirColor(): Immutable<Vector3> {\r\n return this._heightFogParams.parameter4.xyz();\r\n }\r\n set heightFogDirColor(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._heightFogParams.parameter4.xyz())) {\r\n this._heightFogParams.parameter4.set(val);\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Light density of the sky.\r\n *\r\n * @remarks\r\n * This value controls how much cloud should be rendered when the sky type is scatter.\r\n * Typically, the value should be in the range of 0 to 1.\r\n */\r\n get cloudy() {\r\n return this._cloudy;\r\n }\r\n set cloudy(val) {\r\n if (val !== this._cloudy && this._skyType === 'scatter') {\r\n this._cloudy = val;\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Intensity of the sky color\r\n */\r\n get cloudIntensity() {\r\n return this._cloudIntensity;\r\n }\r\n set cloudIntensity(val) {\r\n if (val !== this._cloudIntensity && this._skyType === 'scatter') {\r\n this._cloudIntensity = val;\r\n this.invalidate();\r\n }\r\n }\r\n /**\r\n * Wind velocity\r\n *\r\n * @remarks\r\n * This value affects the movement of the cloud\r\n */\r\n get wind(): Immutable<Vector2> {\r\n return this._wind;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n this._wind.set(val);\r\n }\r\n /**\r\n * Radiance map of the sky.\r\n */\r\n get radianceMap() {\r\n if (!this._radianceMap.get()) {\r\n this._radianceMap.set(getDevice().createCubeTexture(this.envTextureFormat, this._radianceMapWidth)!);\r\n this._radianceMap.get()!.name = 'SkyRadianceMap';\r\n }\r\n return this._radianceMap.get()!;\r\n }\r\n /**\r\n * Radiance map of the sky reused for sheen.\r\n *\r\n * @remarks\r\n * Dynamic sky is smooth enough that the GGX-prefiltered radiance map is a practical approximation for sheen.\r\n */\r\n get sheenRadianceMap() {\r\n return this.radianceMap;\r\n }\r\n /** @internal */\r\n get atmosphereParams() {\r\n return this._atmosphereParams;\r\n }\r\n /** @internal */\r\n get heightFogParams() {\r\n return this._heightFogParams;\r\n }\r\n /** @internal */\r\n get radianceFramebuffer() {\r\n if (!this._radianceFrameBuffer.get()) {\r\n this._radianceFrameBuffer.set(getDevice().createFrameBuffer([this.radianceMap], null));\r\n }\r\n return this._radianceFrameBuffer.get();\r\n }\r\n /**\r\n * Irradiance SH coeffecients buffer\r\n */\r\n get irradianceSH() {\r\n if (!this._irradianceSH.get()) {\r\n const buffer = getDevice().createBuffer(4 * 4 * 9, { usage: 'uniform' })!;\r\n this._irradianceSH.set(buffer);\r\n }\r\n return this._irradianceSH.get()!;\r\n }\r\n /**\r\n * Irradiance SH coeffecients texture\r\n */\r\n get irradianceSHFB() {\r\n if (!this._irradianceSHFB.get()) {\r\n const device = getDevice();\r\n const texCaps = device.getDeviceCaps().textureCaps;\r\n const format =\r\n !device.getDeviceCaps().framebufferCaps.supportFloatBlending && texCaps.supportHalfFloatColorBuffer\r\n ? 'rgba16f'\r\n : 'rgba32f';\r\n const texture = device.createTexture2D(format, 3, 3, {\r\n mipmapping: false\r\n })!;\r\n this._irradianceSHFB.set(device.createFrameBuffer([texture], null));\r\n }\r\n return this._irradianceSHFB.get()!;\r\n }\r\n /**\r\n * Cube texture for skybox.\r\n */\r\n get skyboxTexture() {\r\n return this._skyboxTexture.get();\r\n }\r\n set skyboxTexture(tex) {\r\n if (tex !== this.skyboxTexture) {\r\n this._skyboxTexture.set(tex);\r\n if (this._skyType === 'skybox') {\r\n this.invalidate();\r\n }\r\n }\r\n }\r\n /**\r\n * Additional euler rotation (in degrees) applied to skybox.\r\n */\r\n get skyboxRotation(): Immutable<Vector3> {\r\n return this._skyboxRotation;\r\n }\r\n set skyboxRotation(val: Immutable<Vector3>) {\r\n if (!val.equalsTo(this._skyboxRotation)) {\r\n this._skyboxRotation.set(val);\r\n if (this._skyType === 'skybox') {\r\n this.invalidate();\r\n }\r\n }\r\n }\r\n /** @internal */\r\n get skyWorldMatrix(): Immutable<Matrix4x4> {\r\n return this._skyWorldMatrix;\r\n }\r\n /** @internal */\r\n set skyWorldMatrix(val: Immutable<Matrix4x4>) {\r\n val = val ?? defaultSkyWorldMatrix;\r\n if (!val.equalsTo(this._skyWorldMatrix)) {\r\n this._skyWorldMatrix = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** @internal */\r\n get mappedFogType() {\r\n return fogTypeMap[this._fogType];\r\n }\r\n /** Current fog type */\r\n get fogType() {\r\n return this._fogType;\r\n }\r\n set fogType(val) {\r\n if (val !== this._fogType) {\r\n this._fogType = val;\r\n this.invalidate();\r\n }\r\n }\r\n /** @internal */\r\n get aerialPerspectiveDebug() {\r\n return this._debugAerialPerspective;\r\n }\r\n /** @internal */\r\n set aerialPerspectiveDebug(val) {\r\n this._debugAerialPerspective = val;\r\n }\r\n /** @internal */\r\n get fogPresents() {\r\n return this._skyType === 'scatter' || this._fogType !== 'none';\r\n }\r\n /**\r\n * Force the radiance map and irradiance map to be regenerated.\r\n */\r\n invalidate() {\r\n this._bakedSkyboxDirty = true;\r\n }\r\n /** @internal */\r\n drawScatteredFog(_ctx: DrawContext) {\r\n return this.skyType === 'scatter';\r\n }\r\n /** @internal */\r\n getAerialPerspectiveLUT(_ctx: DrawContext) {\r\n return getAerialPerspectiveLut();\r\n }\r\n /** @internal */\r\n getSkyDistantLightLUT(_ctx: DrawContext) {\r\n return this._skyDistantLightLut.get()!.getColorAttachments()[0] as Texture2D;\r\n }\r\n update(ctx: DrawContext) {\r\n // Latch the fog scales for this frame. The bake path (updateBakedSkyMap) uses the sky camera\r\n // whose scene is null, so it cannot read lightingMode itself; both bake and main pass run after\r\n // update(), so caching them here keeps them consistent.\r\n // The fog shader mixes two differently-scaled sources, so it needs both factors:\r\n // - the atmosphere-derived LUTs (distant sky, aerial perspective) are stored at the fixed bake\r\n // exposure, so they convert with the bake-to-live ratio;\r\n // - the authored 0..1 fog colors are lifted by the environment intensity (lux) -- the same\r\n // anchor the sky and IBL use, mirroring Filament's `fogColor *= iblLuminance` -- and then\r\n // take the plain camera pre-exposure.\r\n // Legacy leaves both at 1 so its authored colors are untouched.\r\n this._fogPreExposure = SkyRenderer.getBakeToPreExposedScale(ctx);\r\n this._fogLuminanceScale =\r\n ctx.scene.lightingMode === 'physical'\r\n ? ctx.scene.env.light.intensity * ShaderHelper.getPreExposure(ctx)\r\n : 1;\r\n const useScatter = this._skyType === 'scatter';\r\n if (useScatter || !atmosphereLUTRendered()) {\r\n this.renderAtmosphereLUTs(ctx);\r\n }\r\n const oldSunLight = ctx.sunLight && useScatter ? ctx.sunLight.color : null;\r\n const sunDir = SkyRenderer._getSunDir(ctx.sunLight);\r\n const sunColor = SkyRenderer._getSunColor(ctx.sunLight);\r\n if (this._skyType === 'scatter' && (this._wind.x !== 0 || this._wind.y !== 0)) {\r\n this._bakedSkyboxDirty = true;\r\n }\r\n if (!this._skyDistantLightLut.get()) {\r\n const tex = ctx.device.createTexture2D(this.envTextureFormat, 1, 1, { mipmapping: false })!;\r\n tex.name = 'DistantSkyLut';\r\n this._skyDistantLightLut.set(ctx.device.createFrameBuffer([tex], null));\r\n this._bakedSkyboxDirty = true;\r\n }\r\n if (!sunDir.equalsTo(this._lastSunDir) || !sunColor.equalsTo(this._lastSunColor)) {\r\n this._lastSunDir.set(sunDir);\r\n this._lastSunColor.set(sunColor);\r\n this._bakedSkyboxDirty = true;\r\n }\r\n if (this._bakedSkyboxDirty) {\r\n this._bakedSkyboxDirty = false;\r\n // updateBakedSkyMap derives the IBL (specular prefilter + irradiance SH) from the fog-free\r\n // cubemap internally, before compositing fog. The distant-light LUT is re-baked here against\r\n // the fogged cubemap to preserve the pre-refactor fog shading appearance.\r\n this.updateBakedSkyMap(ctx);\r\n this.renderSkyDistantLut(ctx, this._bakedSkyboxTexture.get()!);\r\n }\r\n // Atmosphere extinction times cloud occlusion. The cloud term intentionally applies only to\r\n // the scene's directional light, not to the sky bake: the clouds in the cubemap are lit by\r\n // the unoccluded sun above the layer, and the bake is where their scattered share of the\r\n // energy re-enters as ambient.\r\n const newSunLight = oldSunLight\r\n ? Vector3.mul(\r\n Vector3.mul(ctx.sunLight!.color.xyz(), this.sunTransmittance(ctx.sunLight!)),\r\n this.cloudSunTransmittance(sunDir)\r\n )\r\n : Vector3.zero();\r\n if (oldSunLight) {\r\n ctx.sunLight!.setColor(newSunLight);\r\n }\r\n // Update height fog parameters\r\n if (this._fogType === 'height_fog') {\r\n const cameraY = Math.min(\r\n this._heightFogParams.parameter2.y + MAX_FOG_HEIGHT,\r\n ctx.camera.getWorldPosition().y\r\n );\r\n const p = Math.max(\r\n -125,\r\n Math.min(126, -this._heightFogParams.parameter1.w * (cameraY - this._heightFogParams.parameter2.y))\r\n );\r\n this._heightFogParams.parameter3.z = this._heightFogParams.parameter2.x * Math.pow(2, p);\r\n // The legacy directional fog term expects a display-relative 0..1 light color. It cannot be\r\n // mixed directly with photometric illuminance; physical fog instead receives its radiance\r\n // from the distant-sky integration below.\r\n if (ctx.scene.lightingMode === 'physical') {\r\n this._heightFogParams.lightColor.setXYZ(0, 0, 0);\r\n } else {\r\n this._heightFogParams.lightColor.set(newSunLight);\r\n }\r\n this._heightFogParams.lightDir.set(SkyRenderer._getSunDir(ctx.sunLight));\r\n }\r\n return oldSunLight;\r\n }\r\n renderAtmosphereLUTs(ctx: DrawContext) {\r\n this._atmosphereParams.lightDir.set(SkyRenderer._getSunDir(ctx.sunLight));\r\n this._atmosphereParams.lightColor.set(SkyRenderer._getSunColor(ctx.sunLight));\r\n // Physical: the sun input is photometric (lux), normalized onto the model's authored reference\r\n // and stored at the fixed PHYSICAL_BAKE_EXPOSURE rather than the live camera exposure. That\r\n // keeps the cached IBL bake exposure-independent while staying inside the environment cubemap's\r\n // limited float range -- raw luminance would overflow it to Inf. Consumers rescale to the live\r\n // exposure via getBakeToPreExposedScale().\r\n this._atmosphereParams.lightColor.w *=\r\n this._atmosphereExposure *\r\n (ctx.scene.lightingMode === 'physical'\r\n ? SkyRenderer.PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE * SkyRenderer.PHYSICAL_BAKE_EXPOSURE\r\n : 1);\r\n this._atmosphereParams.cameraAspect = ctx.camera.getAspect();\r\n this._atmosphereParams.cameraWorldMatrix.set(ctx.camera.worldMatrix);\r\n renderAtmosphereLUTs(this._atmosphereParams);\r\n }\r\n renderSkyDistantLut(ctx: DrawContext, skybox: TextureCube) {\r\n this._prepareSkyBox(ctx.device);\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setRenderStates(SkyRenderer._renderStatesDistantLight);\r\n ctx.device.setProgram(SkyRenderer._programDistantLight);\r\n ctx.device.setFramebuffer(this._skyDistantLightLut.get());\r\n ctx.device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\r\n this._bindgroupDistantLight!.get()!.setTexture('skybox', skybox, fetchSampler('clamp_linear_nomip'));\r\n this._bindgroupDistantLight!.get()!.setValue('physical', ctx.scene.lightingMode === 'physical' ? 1 : 0);\r\n ctx.device.setBindGroup(0, this._bindgroupDistantLight!.get()!);\r\n SkyRenderer._primitiveDistantLight!.draw();\r\n ctx.device.popDeviceStates();\r\n }\r\n updateBakedSkyMap(ctx: DrawContext) {\r\n const device = ctx.device;\r\n const tex =\r\n this._bakedSkyboxTexture.get() && this._bakedSkyboxTexture.get()!.width === this._bakedSkyboxTextureSize\r\n ? this._bakedSkyboxTexture.get()!\r\n : device.createCubeTexture(this.envTextureFormat, this._bakedSkyboxTextureSize, {\r\n mipmapping: false\r\n })!;\r\n tex.name = 'BakedSkyboxTexture';\r\n if (tex !== this._bakedSkyboxTexture.get()) {\r\n this._bakedSkyboxFrameBuffer.set(device.createFrameBuffer([tex], null));\r\n }\r\n const camera = SkyRenderer._skyCamera;\r\n const saveRenderStates = device.getRenderStates();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(this._bakedSkyboxFrameBuffer.get());\r\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\r\n camera.lookAtCubeFace(face);\r\n this._bakedSkyboxFrameBuffer.get()!.setColorAttachmentCubeFace(0, face);\r\n // Direct sunlight is represented by the scene's directional sun light. Keep the analytic\r\n // sun disk out of both diffuse and specular IBL to avoid baking that direct contribution a\r\n // second time. Atmospheric scattering and clouds remain in the cubemap.\r\n this._renderSky(camera, false, false, this._getSkyBakeLuminanceScale(ctx));\r\n }\r\n device.popDeviceStates();\r\n\r\n this.renderSkyDistantLut(ctx, tex);\r\n\r\n // Publish the texture reference before deriving IBL so _updateIBLFromBakedSky reads the\r\n // current cubemap.\r\n this._bakedSkyboxTexture.set(tex);\r\n\r\n // Derive the IBL from the fog-free cubemap. Height fog is a view/position-dependent participating\r\n // medium applied per-pixel in screen space (see lightpass renderFog); baking it into the distant\r\n // environment probe would both double-count it against that screen-space pass and wrongly lift the\r\n // lower hemisphere (ground direction) from the atmosphere's dark value to a bright fog color. The\r\n // same reasoning that keeps the sun disk out of the IBL applies to fog, for diffuse and specular alike.\r\n this._updateIBLFromBakedSky(ctx, tex);\r\n\r\n // Composite fog into the cubemap afterwards. This copy is only used as the visible skybox\r\n // background (UNIFORM_NAME_BAKED_SKY_MAP), where the fogged distant sky is desired.\r\n device.pushDeviceStates();\r\n device.setFramebuffer(this._bakedSkyboxFrameBuffer.get());\r\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\r\n camera.lookAtCubeFace(face);\r\n this._bakedSkyboxFrameBuffer.get()!.setColorAttachmentCubeFace(0, face);\r\n this.renderFog(camera);\r\n }\r\n device.popDeviceStates();\r\n\r\n device.setRenderStates(saveRenderStates);\r\n }\r\n /**\r\n * @internal\r\n * Updates the scene's IBL (GGX-prefiltered specular radiance map + irradiance SH) from the given\r\n * cubemap, provided the scene environment light is still driven by this dynamic sky. Must be called\r\n * with the fog-free cubemap so height fog does not leak into the environment lighting.\r\n */\r\n private _updateIBLFromBakedSky(ctx: DrawContext, skybox: TextureCube) {\r\n if (\r\n ctx.scene.env.light.radianceMap &&\r\n (ctx.scene.env.light.radianceMap === this.radianceMap ||\r\n (this._irradianceSH.get() && ctx.scene.env.light.irradianceSH === this.irradianceSH) ||\r\n (this._irradianceSHFB.get() && ctx.scene.env.light.irradianceSHFB === this.irradianceSHFB))\r\n ) {\r\n prefilterCubemap(skybox, 'ggx', this.radianceFramebuffer!, this._radianceConvSamples);\r\n ctx.scene.env.light.sheenRadianceMap = this.radianceMap;\r\n this._shProjector.projectCubemapToTexture(skybox, this.irradianceSHFB);\r\n ctx.scene.env.light.irradianceSHFB = this.irradianceSHFB;\r\n ctx.scene.env.light.irradianceSH = null;\r\n ctx.scene.env.light.irradianceWindow = this._shWindowWeights;\r\n }\r\n }\r\n renderUberFog(camera: Camera, depthTexture: Nullable<BaseTexture>) {\r\n const device = getDevice();\r\n const fogProgram = depthTexture ? SkyRenderer._programFog : SkyRenderer._programFogNoDepth;\r\n const renderStates = SkyRenderer._renderStatesFog;\r\n const bindgroup = depthTexture ? this._bindgroupFog!.get()! : this._bindgroupFogNoDepth!.get()!;\r\n if (depthTexture) {\r\n bindgroup.setTexture('depthTex', depthTexture, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n bindgroup.setTexture(\r\n 'skyDistantLightLut',\r\n this._skyDistantLightLut.get()!.getColorAttachments()[0],\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindgroup.setTexture('apLut', getAerialPerspectiveLut(), fetchSampler('clamp_linear_nomip'));\r\n bindgroup.setValue('rt', device.getFramebuffer() ? 1 : 0);\r\n bindgroup.setValue('invProjViewMatrix', camera.invViewProjectionMatrix);\r\n bindgroup.setValue('cameraNearFar', new Vector2(camera.getNearPlane(), camera.getFarPlane()));\r\n bindgroup.setValue('cameraPosition', camera.getWorldPosition());\r\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\r\n bindgroup.setValue('withAerialPerspective', this.skyType === 'scatter' ? 1 : 0);\r\n bindgroup.setValue('fogType', this.mappedFogType);\r\n bindgroup.setValue('atmosphereParams', this._atmosphereParams);\r\n bindgroup.setValue('heightFogParams', this._getUploadHeightFogParams());\r\n device.setProgram(fogProgram);\r\n device.setBindGroup(0, bindgroup);\r\n device.setVertexLayout(SkyRenderer._vertexLayout);\r\n device.setRenderStates(renderStates);\r\n device.draw('triangle-strip', 0, 4);\r\n }\r\n /**\r\n * @internal\r\n * Height-fog upload params with the authored base/directional colors lifted into the pre-exposed\r\n * physical space when physical lighting is active, plus the pre-exposure the shader applies to its\r\n * atmosphere-derived LUT samples. Legacy returns the stored params untouched so its upload stays\r\n * byte-identical. Stored authored values are never mutated.\r\n */\r\n private _getUploadHeightFogParams() {\r\n const scale = this._fogLuminanceScale;\r\n const p = this._heightFogParams;\r\n if (scale === 1 && this._fogPreExposure === 1) {\r\n return p;\r\n }\r\n const p1 = p.parameter1;\r\n const p4 = p.parameter4;\r\n return {\r\n ...p,\r\n parameter1: new Vector4(p1.x * scale, p1.y * scale, p1.z * scale, p1.w),\r\n parameter4: new Vector4(p4.x * scale, p4.y * scale, p4.z * scale, p4.w),\r\n preExposure: this._fogPreExposure\r\n };\r\n }\r\n /** @internal */\r\n renderFog(camera: Camera) {\r\n const device = getDevice();\r\n const currentFramebuffer = device.getFramebuffer();\r\n const depthBuffer = currentFramebuffer?.getDepthAttachment() ?? null;\r\n const colorBuffer = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n const fogFramebuffer =\r\n depthBuffer && colorBuffer\r\n ? device.pool.fetchTemporalFramebuffer(false, 0, 0, colorBuffer, null, false)\r\n : null;\r\n if (fogFramebuffer) {\r\n const vp = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(fogFramebuffer);\r\n device.setViewport(vp);\r\n device.setScissor(scissor);\r\n }\r\n const savedRenderStates = device.getRenderStates();\r\n this._prepareSkyBox(device);\r\n this.renderUberFog(camera, depthBuffer);\r\n /*\r\n if (this._skyType === 'scatter') {\r\n this.renderAtmosphericFog(ctx, depthBuffer);\r\n }\r\n */\r\n /*\r\n if (this._fogType === 'height_fog') {\r\n this.renderHeightFog(ctx, depthBuffer);\r\n }\r\n */\r\n device.setRenderStates(savedRenderStates);\r\n if (fogFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(fogFramebuffer);\r\n }\r\n }\r\n /** @internal */\r\n private _beginSingleColorPass(withDepth: boolean) {\r\n const device = getDevice();\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorBuffer = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n const depthBuffer = withDepth ? (currentFramebuffer?.getDepthAttachment() ?? null) : null;\r\n if (!currentFramebuffer || currentFramebuffer.getColorAttachments().length <= 1 || !colorBuffer) {\r\n return null;\r\n }\r\n const framebuffer = device.pool.fetchTemporalFramebuffer(false, 0, 0, colorBuffer, depthBuffer, false);\r\n const vp = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(vp);\r\n device.setScissor(scissor);\r\n return framebuffer;\r\n }\r\n /** @internal */\r\n private _endSingleColorPass(framebuffer: Nullable<FrameBuffer>) {\r\n if (!framebuffer) {\r\n return;\r\n }\r\n const device = getDevice();\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(framebuffer);\r\n }\r\n /** @internal */\r\n renderSky(ctx: DrawContext) {\r\n let skyCamera = ctx.camera;\r\n if (!skyCamera.isPerspective()) {\r\n skyCamera = SkyRenderer._skyCamera;\r\n ctx.camera.worldMatrix.decompose(null, skyCamera.rotation, null);\r\n }\r\n const framebuffer = this._beginSingleColorPass(true);\r\n try {\r\n this._renderSky(skyCamera, true, true, this._getSkyScreenLuminanceScale(ctx));\r\n } finally {\r\n this._endSingleColorPass(framebuffer);\r\n }\r\n }\r\n /** Disposes resources of this SkyRenderer */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._skyboxTexture.dispose();\r\n this._bakedSkyboxTexture.dispose();\r\n this._bakedSkyboxFrameBuffer.dispose();\r\n this._radianceMap.dispose();\r\n this._radianceFrameBuffer.dispose();\r\n this._irradianceSH.dispose();\r\n this._irradianceSHFB.dispose();\r\n this._irradianceFrameBuffer.dispose();\r\n this._shProjector.dispose();\r\n if (this._skyDistantLightLut.get()) {\r\n this._skyDistantLightLut.get()!.getColorAttachments()[0].dispose();\r\n this._skyDistantLightLut.dispose();\r\n }\r\n this._bindgroupDistantLight!.dispose();\r\n for (const k of objectKeys(this._bindgroupSky)) {\r\n this._bindgroupSky[k]?.dispose();\r\n }\r\n this._bindgroupSky = {};\r\n this._bindgroupFog!.dispose();\r\n this._bindgroupFogNoDepth!.dispose();\r\n }\r\n /** @internal */\r\n private _updateSkyboxTexture() {\r\n if (this._panoramaAsset) {\r\n getEngine()\r\n .resourceManager.fetchTexture<Texture2D>(this._panoramaAsset, { linearColorSpace: true })\r\n .then((tex) => {\r\n if (!tex.isTexture2D()) {\r\n console.error(`Invalid panorama texture asset: ${this._panoramaAsset}`);\r\n } else {\r\n const skyboxTexture = getDevice().createCubeTexture(\r\n this.envTextureFormat,\r\n this._skyboxTextureSize,\r\n {\r\n mipmapping: false\r\n }\r\n )!;\r\n panoramaToCubemap(tex, skyboxTexture);\r\n skyboxTexture.name = 'SkyboxTexture';\r\n this.skyboxTexture = skyboxTexture;\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(`Load asset failed: ${this._panoramaAsset}: ${err}`);\r\n });\r\n }\r\n }\r\n /** @internal */\r\n private _renderSky(camera: Camera, depthTest: boolean, includeSunDisk: boolean, luminanceScale = 1) {\r\n const device = getDevice();\r\n const savedRenderStates = device.getRenderStates();\r\n this._prepareSkyBox(device);\r\n if (this._skyType === 'scatter') {\r\n // The atmosphere LUTs already hold physical luminance, so only the caller's exposure applies.\r\n this._drawScattering(camera, depthTest, includeSunDisk, luminanceScale);\r\n } else if (this._skyType === 'skybox' && this.skyboxTexture) {\r\n this._drawSkybox(camera, depthTest, luminanceScale);\r\n } else {\r\n this._drawSkyColor(camera, depthTest, luminanceScale);\r\n }\r\n device.setRenderStates(savedRenderStates);\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Converts a value stored at {@link PHYSICAL_BAKE_EXPOSURE} into the live pre-exposed space.\r\n *\r\n * @remarks\r\n * Everything derived from the cached sky bake (the IBL, the distant-light LUT, the visible baked\r\n * skybox) is stored at the fixed reference exposure. Multiplying by this ratio yields the same\r\n * result as if the live camera exposure had been baked in, without invalidating the cache when\r\n * the camera stops down. Returns 1 in legacy.\r\n */\r\n static getBakeToPreExposedScale(ctx: DrawContext) {\r\n return ctx.scene.lightingMode === 'physical'\r\n ? ShaderHelper.getPreExposure(ctx) / SkyRenderer.PHYSICAL_BAKE_EXPOSURE\r\n : 1;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Scale that normalizes a sky into the IBL bake's storage space.\r\n *\r\n * @remarks\r\n * An authored 0..1 `skybox` / `image` is treated as an emitter of `EnvLightWrapper.intensity` lux.\r\n * The scattering atmosphere needs no lift: its LUTs already carry photometric sun illuminance.\r\n *\r\n * Both are then scaled to {@link PHYSICAL_BAKE_EXPOSURE}. The bake is cached and only invalidated\r\n * by sun changes, so it must be exposure-independent; storing it at raw photometric magnitude\r\n * would overflow the environment cubemap's float range (see {@link PHYSICAL_BAKE_EXPOSURE}).\r\n *\r\n * Returns 1 in legacy so its bake stays byte-identical.\r\n */\r\n private _getSkyBakeLuminanceScale(ctx: DrawContext) {\r\n if (ctx.scene.lightingMode !== 'physical') {\r\n return 1;\r\n }\r\n // scatter already includes the bake exposure via renderAtmosphereLUTs().\r\n return this._skyType === 'scatter'\r\n ? 1\r\n : ctx.scene.env.light.intensity * SkyRenderer.PHYSICAL_BAKE_EXPOSURE;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * On-screen sky scale: the bake-time normalization converted from the stored reference exposure\r\n * to the live one, so the visible sky lands in the same pre-exposed space as every lit surface.\r\n */\r\n private _getSkyScreenLuminanceScale(ctx: DrawContext) {\r\n return this._getSkyBakeLuminanceScale(ctx) * SkyRenderer.getBakeToPreExposedScale(ctx);\r\n }\r\n /** @internal */\r\n private _drawSkyColor(camera: Camera, depthTest: boolean, luminanceScale: number) {\r\n const device = getDevice();\r\n const bindgroup = this._bindgroupSky.image!.get()!;\r\n bindgroup.setValue('color', this._skyColor);\r\n bindgroup.setValue('luminanceScale', luminanceScale);\r\n bindgroup.setTexture(\r\n 'texture',\r\n this._skyImage.get() ?? SkyRenderer._defaultSkyImage.get()!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindgroup.setValue('flip', device.getFramebuffer() && device.type === 'webgpu' ? -1 : 1);\r\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\r\n device.setProgram(SkyRenderer._programSky.image!);\r\n device.setBindGroup(0, bindgroup);\r\n drawFullscreenQuad(depthTest ? SkyRenderer._renderStatesSky! : SkyRenderer._renderStatesSkyNoDepthTest!);\r\n }\r\n /** @internal */\r\n private _drawSkybox(camera: Camera, depthTest: boolean, luminanceScale: number) {\r\n const device = getDevice();\r\n const bindgroup = this._bindgroupSky.skybox!.get()!;\r\n bindgroup.setTexture('skyCubeMap', this.skyboxTexture!, fetchSampler('clamp_linear_nomip'));\r\n bindgroup.setValue('luminanceScale', luminanceScale);\r\n bindgroup.setValue(\r\n 'flip',\r\n device.getFramebuffer() && device.type === 'webgpu' ? new Vector4(1, -1, 1, 1) : new Vector4(1, 1, 1, 1)\r\n );\r\n bindgroup.setValue('viewProjMatrix', camera.viewProjectionMatrix);\r\n bindgroup.setValue('worldMatrix', this._skyWorldMatrix);\r\n bindgroup.setValue('cameraPos', camera.getWorldPosition());\r\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\r\n device.setProgram(SkyRenderer._programSky.skybox!);\r\n device.setBindGroup(0, bindgroup);\r\n device.setRenderStates(\r\n depthTest ? SkyRenderer._renderStatesSky : SkyRenderer._renderStatesSkyNoDepthTest\r\n );\r\n SkyRenderer._primitiveSky!.draw();\r\n }\r\n /** @internal */\r\n private _rayIntersectSphere(radius: number, rayStart: Vector3, rayDir: Vector3) {\r\n const OS = rayStart.magnitude;\r\n const SH = -Vector3.dot(rayStart, rayDir);\r\n const OH = Math.sqrt(Math.max(0, OS * OS - SH * SH));\r\n const PH = Math.sqrt(Math.max(0, radius * radius - OH * OH));\r\n if (OH > radius) {\r\n return -1;\r\n }\r\n const t1 = SH - PH;\r\n const t2 = SH + PH;\r\n return t1 < 0 ? t2 : t1;\r\n }\r\n /**\r\n * Transmittance of the cloud layer along the sun direction.\r\n *\r\n * @remarks\r\n * Energy-conservation counterpart of the clouds baked into the environment map: the light the\r\n * cloud layer scatters into the sky dome has to be removed from the direct sun, otherwise\r\n * raising cloud density only ever adds energy. This method is the seam where a future cloud\r\n * renderer plugs in; a volumetric implementation should replace it with the transmittance\r\n * ray-marched toward the sun (spectral, hence a Vector3).\r\n *\r\n * The procedural 2D cloud has no real optical depth, so the sun direction is unused and the\r\n * result is a gray-scale estimate from coverage alone. In the scatter shader, cloud opacity is\r\n * `smoothStep(1, 1 + cloudy, noise + cloudy)`: by `cloudy = 1` the whole 0..1-ish fbm noise\r\n * range falls inside the ramp, i.e. the sky is visually fully covered. `cloudy` (clamped to\r\n * 0..1) is therefore used directly as the sky coverage. Squaring it accounts for thin/partial\r\n * clouds at low coverage barely attenuating the sun, while full cover drops to the\r\n * heavy-overcast floor {@link SkyRenderer.CLOUD_SUN_MIN_TRANSMITTANCE}.\r\n */\r\n cloudSunTransmittance(_sunDir: Immutable<Vector3>): Vector3 {\r\n if (this._skyType !== 'scatter') {\r\n return Vector3.one();\r\n }\r\n const coverage = Math.min(1, Math.max(0, this._cloudy));\r\n const t = 1 - coverage * coverage * (1 - SkyRenderer.CLOUD_SUN_MIN_TRANSMITTANCE);\r\n return new Vector3(t, t, t);\r\n }\r\n /** @internal */\r\n sunTransmittance(sunLight: DirectionalLight) {\r\n const TRANSMITTANCE_SAMPLES = 32;\r\n const RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\n const MIE_SIGMA = 3.996;\r\n const MIE_ABSORPTION_SIGMA = 4.4;\r\n const OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n function rayleighSc(params: AtmosphereParams, fH: number) {\r\n const sigma = new Vector3(RAYLEIGH_SIGMA[0] * 1e-6, RAYLEIGH_SIGMA[1] * 1e-6, RAYLEIGH_SIGMA[2] * 1e-6);\r\n const rho_h = Math.exp(-fH / params.rayleighScatteringHeight);\r\n return Vector3.scale(sigma, rho_h);\r\n }\r\n function mieSc(params: AtmosphereParams, fH: number) {\r\n const sigma = new Vector3(MIE_SIGMA * 1e-6, MIE_SIGMA * 1e-6, MIE_SIGMA * 1e-6);\r\n const rho_h = Math.exp(-(fH / params.mieScatteringHeight));\r\n return Vector3.scale(sigma, rho_h);\r\n }\r\n function mieAb(params: AtmosphereParams, fH: number) {\r\n const sigma = new Vector3(\r\n MIE_ABSORPTION_SIGMA * 1e-6,\r\n MIE_ABSORPTION_SIGMA * 1e-6,\r\n MIE_ABSORPTION_SIGMA * 1e-6\r\n );\r\n const rho_h = Math.exp(-(fH / params.mieScatteringHeight));\r\n return Vector3.scale(sigma, rho_h);\r\n }\r\n function ozoneAb(params: AtmosphereParams, fH: number) {\r\n const sigma = new Vector3(\r\n OZONE_ABSORPTION_SIGMA[0] * 1e-6,\r\n OZONE_ABSORPTION_SIGMA[1] * 1e-6,\r\n OZONE_ABSORPTION_SIGMA[2] * 1e-6\r\n );\r\n const rho_h = Math.max(0, 1 - (Math.abs(fH - params.ozoneCenter) * 0.5) / params.ozoneWidth);\r\n return Vector3.scale(sigma, rho_h);\r\n }\r\n const eyePos = new Vector3(\r\n 0,\r\n this._atmosphereParams.plantRadius + this._atmosphereParams.cameraHeightScale,\r\n 0\r\n );\r\n const lightDir = SkyRenderer._getSunDir(sunLight);\r\n const d = this._rayIntersectSphere(\r\n this._atmosphereParams.plantRadius + this._atmosphereParams.atmosphereHeight,\r\n eyePos,\r\n lightDir\r\n );\r\n if (d < 0) {\r\n return new Vector3(0, 0, 0);\r\n }\r\n const ds = d / TRANSMITTANCE_SAMPLES;\r\n const sum = new Vector3(0, 0, 0);\r\n const p = Vector3.combine(eyePos, lightDir, 1, ds * 0.5);\r\n for (let i = 0; i < TRANSMITTANCE_SAMPLES; i++) {\r\n const h = p.magnitude - this._atmosphereParams.plantRadius;\r\n const scattering = Vector3.add(rayleighSc(this._atmosphereParams, h), mieSc(this._atmosphereParams, h));\r\n const absorption = Vector3.add(ozoneAb(this._atmosphereParams, h), mieAb(this._atmosphereParams, h));\r\n const extinction = Vector3.add(scattering, absorption);\r\n Vector3.add(sum, Vector3.scale(extinction, ds), sum);\r\n Vector3.add(p, Vector3.scale(lightDir, ds), p);\r\n }\r\n return new Vector3(Math.exp(-sum.x), Math.exp(-sum.y), Math.exp(-sum.z));\r\n }\r\n /** @internal */\r\n private _drawScattering(\r\n camera: Camera,\r\n depthTest: boolean,\r\n includeSunDisk: boolean,\r\n luminanceScale: number\r\n ) {\r\n const device = getDevice();\r\n const tLut = getTransmittanceLut();\r\n const skyLut = getSkyViewLut();\r\n //const apLut = ScatteringLut.getAerialPerspectiveLut(alpha, 8000);\r\n const program = SkyRenderer._programSky.scatter!;\r\n const bindgroup = this._bindgroupSky.scatter!.get()!;\r\n bindgroup.setValue(\r\n 'flip',\r\n device.getFramebuffer() && device.type === 'webgpu' ? new Vector4(1, -1, 1, 1) : new Vector4(1, 1, 1, 1)\r\n );\r\n bindgroup.setValue('params', this._atmosphereParams);\r\n bindgroup.setValue('viewProjMatrix', camera.viewProjectionMatrix);\r\n bindgroup.setValue('worldMatrix', this._skyWorldMatrix);\r\n bindgroup.setValue('cameraPos', camera.getWorldPosition());\r\n bindgroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\r\n bindgroup.setValue('includeSunDisk', includeSunDisk ? 1 : 0);\r\n bindgroup.setValue('luminanceScale', luminanceScale);\r\n bindgroup.setTexture('tLut', tLut, fetchSampler('clamp_linear_nomip'));\r\n bindgroup.setTexture('skyLut', skyLut, fetchSampler('clamp_linear_nomip'));\r\n bindgroup.setValue('cloudy', this._cloudy);\r\n bindgroup.setValue('cloudIntensity', this._cloudIntensity);\r\n bindgroup.setValue('time', device.frameInfo.elapsedOverall * 0.001);\r\n bindgroup.setValue('velocity', this._wind);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindgroup);\r\n device.setRenderStates(\r\n depthTest ? SkyRenderer._renderStatesSky : SkyRenderer._renderStatesSkyNoDepthTest\r\n );\r\n SkyRenderer._primitiveSky!.draw();\r\n }\r\n /** @internal */\r\n private _prepareSkyBox(device: AbstractDevice) {\r\n SkyRenderer._createAtmosphereLUTPrograms(device);\r\n if (!SkyRenderer._defaultSkyImage.get()) {\r\n const texture = device.createTexture2D('rgba8unorm', 1, 1, { mipmapping: false })!;\r\n texture.update(new Uint8Array([255, 255, 255, 255]), 0, 0, 1, 1);\r\n SkyRenderer._defaultSkyImage.set(texture);\r\n }\r\n if (!SkyRenderer._programDistantLight) {\r\n SkyRenderer._programDistantLight = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.vector = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$outputs.vector = this.$inputs.vector;\r\n this.$builtins.position = pb.vec4(0, 0, 0, 1);\r\n if (pb.getDevice().type !== 'webgpu') {\r\n this.$builtins.pointSize = 1;\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.skybox = pb.texCube().uniform(0);\r\n this.physical = pb.int().uniform(0);\r\n pb.main(function () {\r\n this.$l.sunColor = pb.vec4();\r\n // Height-fog in-scattering is lit by the sky hemisphere. The old full-sphere average\r\n // is retained verbatim in legacy mode; in physical mode, mirror lower samples into the\r\n // upper hemisphere so a dark ground/lower sky cannot turn the horizon into a black band.\r\n this.$l.sampleDirection = this.$choice(\r\n pb.notEqual(this.physical, 0),\r\n pb.vec3(this.$inputs.vector.x, pb.abs(this.$inputs.vector.y), this.$inputs.vector.z),\r\n this.$inputs.vector\r\n );\r\n this.$l.skyColor = pb.textureSampleLevel(this.skybox, this.sampleDirection, 0).rgb;\r\n this.$outputs.color = pb.vec4(pb.mul(this.skyColor, 1 / 64), 1);\r\n });\r\n }\r\n })!;\r\n SkyRenderer._programDistantLight.name = '@SkyDistantLight';\r\n }\r\n if (!this._bindgroupDistantLight!.get()) {\r\n this._bindgroupDistantLight!.set(\r\n device.createBindGroup(SkyRenderer._programDistantLight.bindGroupLayouts[0])\r\n );\r\n }\r\n if (!SkyRenderer._programFog) {\r\n SkyRenderer._programFog = SkyRenderer._createFogProgram(device, false);\r\n }\r\n if (!SkyRenderer._programFogNoDepth) {\r\n SkyRenderer._programFogNoDepth = SkyRenderer._createFogProgram(device, true);\r\n }\r\n if (!this._bindgroupFog!.get()) {\r\n this._bindgroupFog!.set(device.createBindGroup(SkyRenderer._programFog.bindGroupLayouts[0]));\r\n }\r\n if (!this._bindgroupFogNoDepth!.get()) {\r\n this._bindgroupFogNoDepth!.set(\r\n device.createBindGroup(SkyRenderer._programFogNoDepth.bindGroupLayouts[0])\r\n );\r\n }\r\n if (!SkyRenderer._programSky.image) {\r\n SkyRenderer._programSky.image = device.buildRenderProgram({\r\n label: 'ImageSky',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n this.flip = pb.int().uniform(0);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type !== 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.color = pb.vec4().uniform(0);\r\n this.texture = pb.tex2D().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.luminanceScale = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.sampleColor = pb.textureSampleLevel(this.texture, this.$inputs.uv, 0);\r\n // luminanceScale is 1 in legacy and for the IBL bake; on screen in physical mode it\r\n // carries the environment intensity (lux) pre-multiplied by the camera exposure.\r\n this.$l.outColor = pb.mul(this.sampleColor, this.color, this.luminanceScale);\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.outColor.rgb, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.outColor.rgb), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n SkyRenderer._programSky.image.name = '@SkyImage';\r\n }\r\n if (!this._bindgroupSky.image) {\r\n this._bindgroupSky.image = new DRef(\r\n device.createBindGroup(SkyRenderer._programSky.image.bindGroupLayouts[0])\r\n );\r\n }\r\n if (!SkyRenderer._programSky.scatter) {\r\n SkyRenderer._programSky.scatter = SkyRenderer._createScatterProgram(device, true);\r\n }\r\n if (!this._bindgroupSky.scatter) {\r\n this._bindgroupSky.scatter = new DRef(\r\n device.createBindGroup(SkyRenderer._programSky.scatter.bindGroupLayouts[0])\r\n );\r\n }\r\n if (!SkyRenderer._programSky.skybox) {\r\n SkyRenderer._programSky.skybox = device.buildRenderProgram({\r\n label: 'SkyBoxSky',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.$outputs.texCoord = pb.vec3();\r\n this.worldMatrix = pb.mat4().uniform(0);\r\n this.viewProjMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.flip = pb.vec4().uniform(0);\r\n pb.main(function () {\r\n this.$outputs.texCoord = this.$inputs.pos;\r\n this.$l.worldPos = pb.add(\r\n this.cameraPos,\r\n pb.mul(this.worldMatrix, pb.vec4(this.$inputs.pos, 0)).xyz\r\n );\r\n this.$builtins.position = pb.mul(this.viewProjMatrix, pb.vec4(this.worldPos, 1), this.flip);\r\n this.$builtins.position.z = ShaderHelper.farthestClipZ(this, this.$builtins.position.w);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.skyCubeMap = pb.texCube().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.luminanceScale = pb.float().uniform(0);\r\n pb.main(function () {\r\n this.$l.texCoord = pb.normalize(this.$inputs.texCoord);\r\n // luminanceScale is 1 in legacy and for the IBL bake; on screen in physical mode it\r\n // carries the environment intensity (lux) pre-multiplied by the camera exposure.\r\n this.$l.color = pb.mul(\r\n pb.textureSampleLevel(this.skyCubeMap, this.texCoord, 0).rgb,\r\n this.luminanceScale\r\n );\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n SkyRenderer._programSky.skybox.name = '@SkySkybox';\r\n }\r\n if (!this._bindgroupSky.skybox) {\r\n this._bindgroupSky.skybox = new DRef(\r\n device.createBindGroup(SkyRenderer._programSky.skybox.bindGroupLayouts[0])\r\n );\r\n }\r\n if (!SkyRenderer._renderStatesSky) {\r\n SkyRenderer._renderStatesSky = device.createRenderStateSet();\r\n SkyRenderer._renderStatesSky\r\n .useDepthState()\r\n .enableTest(true)\r\n .enableWrite(false)\r\n .setCompareFunc(DEPTH_COMPARE_DEFAULT);\r\n SkyRenderer._renderStatesSky.useRasterizerState().setCullMode('none');\r\n }\r\n if (!SkyRenderer._renderStatesSkyNoDepthTest) {\r\n SkyRenderer._renderStatesSkyNoDepthTest = device.createRenderStateSet();\r\n SkyRenderer._renderStatesSkyNoDepthTest.useDepthState().enableTest(false).enableWrite(false);\r\n SkyRenderer._renderStatesSkyNoDepthTest.useRasterizerState().setCullMode('none');\r\n }\r\n if (!SkyRenderer._renderStatesFog) {\r\n SkyRenderer._renderStatesFog = device.createRenderStateSet();\r\n SkyRenderer._renderStatesFog.useRasterizerState().setCullMode('none');\r\n // RGB composites premultiplied inscattering over the scene weighted by transmittance. Alpha is\r\n // left untouched: `src-alpha` applied to the alpha channel too would fold transmittance into\r\n // the framebuffer coverage (dstA = T + dstA * T), so dense fog drove the backbuffer alpha\r\n // toward 0 and the page showed through wherever the canvas alpha is composited.\r\n SkyRenderer._renderStatesFog\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n SkyRenderer._renderStatesFog.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n if (!SkyRenderer._renderStatesFogScatter) {\r\n SkyRenderer._renderStatesFogScatter = device.createRenderStateSet();\r\n SkyRenderer._renderStatesFogScatter.useRasterizerState().setCullMode('none');\r\n SkyRenderer._renderStatesFogScatter\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n SkyRenderer._renderStatesFogScatter\r\n .useDepthState()\r\n .enableTest(true)\r\n .enableWrite(false)\r\n .setCompareFunc(DEPTH_COMPARE_FARTHER);\r\n }\r\n if (!SkyRenderer._renderStatesDistantLight) {\r\n SkyRenderer._renderStatesDistantLight = device.createRenderStateSet();\r\n SkyRenderer._renderStatesDistantLight.useDepthState().enableTest(false).enableWrite(false);\r\n SkyRenderer._renderStatesDistantLight\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendEquation('add', 'add')\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n SkyRenderer._renderStatesDistantLight.useRasterizerState().setCullMode('none');\r\n }\r\n if (!SkyRenderer._vertexLayout) {\r\n SkyRenderer._vertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n {\r\n buffer: device.createVertexBuffer(\r\n 'position_f32x2',\r\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\r\n )!\r\n }\r\n ]\r\n });\r\n }\r\n if (!SkyRenderer._primitiveSky) {\r\n SkyRenderer._primitiveSky = new BoxShape({ size: 8 });\r\n }\r\n if (!SkyRenderer._primitiveDistantLight) {\r\n const data = new Float32Array(uniformSphereSamples.length * 3);\r\n let i = 0;\r\n for (const v of uniformSphereSamples) {\r\n data[i++] = v.x;\r\n data[i++] = v.y;\r\n data[i++] = v.z;\r\n }\r\n SkyRenderer._primitiveDistantLight = new Primitive();\r\n SkyRenderer._primitiveDistantLight.createAndSetVertexBuffer('position_f32x3', data);\r\n SkyRenderer._primitiveDistantLight.indexCount = uniformSphereSamples.length;\r\n SkyRenderer._primitiveDistantLight.indexStart = 0;\r\n SkyRenderer._primitiveDistantLight.primitiveType = 'point-list';\r\n }\r\n }\r\n /** @internal */\r\n private static _createFogProgram(device: AbstractDevice, noDepth: boolean) {\r\n const program = device.buildRenderProgram({\r\n label: 'Fog',\r\n vertex(pb) {\r\n this.rt = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$if(pb.notEqual(this.rt, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n const AtmosphereParams = getAtmosphereParamsStruct(pb);\r\n const HeightFogParams = getHeightFogParamsStruct(pb);\r\n if (!noDepth) {\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n this.apLut = pb.tex2D().uniform(0);\r\n this.skyDistantLightLut = pb.tex2D().uniform(0);\r\n this.invProjViewMatrix = pb.mat4().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPosition = pb.vec3().uniform(0);\r\n this.withAerialPerspective = pb.int().uniform(0);\r\n this.fogType = pb.int().uniform(0);\r\n this.atmosphereParams = AtmosphereParams().uniform(0);\r\n this.heightFogParams = HeightFogParams().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.depthValue = noDepth\r\n ? pb.float(DEPTH_FARTHEST)\r\n : pb.textureSample(this.depthTex, this.$inputs.uv).r;\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.$inputs.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, this.depthValue),\r\n 1\r\n );\r\n this.$l.hPos = pb.mul(this.invProjViewMatrix, this.clipSpacePos);\r\n this.$l.worldPos = pb.div(this.$l.hPos, this.$l.hPos.w).xyz;\r\n this.$l.isSky = ShaderHelper.isFarthestDepth(this, this.$l.depthValue);\r\n this.$l.color = calculateFog(\r\n this,\r\n this.withAerialPerspective,\r\n this.fogType,\r\n this.atmosphereParams,\r\n this.heightFogParams,\r\n this.$inputs.uv,\r\n this.isSky,\r\n this.cameraPosition,\r\n this.worldPos,\r\n 0,\r\n this.apLut,\r\n this.skyDistantLightLut\r\n );\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = this.color;\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color.rgb), this.color.a);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = noDepth ? '@FogNoDepth' : '@Fog';\r\n return program;\r\n }\r\n /** @internal */\r\n private static _getSunDir(sunLight?: Nullable<DirectionalLight>) {\r\n // TODO: reduce GC\r\n return sunLight?.directionAndCutoff.xyz().scaleBy(-1) ?? ShaderHelper.defaultSunDir;\r\n }\r\n /** @internal */\r\n private static _getSunColor(sunLight?: Nullable<DirectionalLight>) {\r\n // TODO: reduce GC\r\n return sunLight?.diffuseAndIntensity ?? new Vector4(1, 1, 1, 10);\r\n }\r\n private static _createAtmosphereLUTPrograms(device: AbstractDevice) {\r\n if (!this.transmittanceLutProgram) {\r\n this.transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n }\r\n if (!this.multiScatteringLutProgram) {\r\n this.multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n }\r\n if (!this.skyViewLutProgram) {\r\n this.skyViewLutProgram = createSkyViewLutProgram(device);\r\n }\r\n if (!this.APLutProgram) {\r\n this.APLutProgram = createAPLutProgram(device);\r\n }\r\n }\r\n private static _createScatterProgram(device: AbstractDevice, cloud: boolean) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.worldMatrix = pb.mat4().uniform(0);\r\n this.viewProjMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.flip = pb.vec4().uniform(0);\r\n pb.main(function () {\r\n this.$outputs.worldDirection = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.pos, 0)).xyz;\r\n this.$builtins.position = pb.mul(\r\n this.viewProjMatrix,\r\n pb.vec4(pb.add(this.$outputs.worldDirection, this.cameraPos), 1),\r\n this.flip\r\n );\r\n this.$builtins.position.z = ShaderHelper.farthestClipZ(this, this.$builtins.position.w);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.tLut = pb.tex2D().uniform(0);\r\n this.skyLut = pb.tex2D().uniform(0);\r\n this.params = getAtmosphereParamsStruct(pb)().uniform(0);\r\n this.includeSunDisk = pb.int().uniform(0);\r\n if (cloud) {\r\n this.cloudy = pb.float().uniform(0);\r\n this.cloudIntensity = pb.float().uniform(0);\r\n this.time = pb.float().uniform(0);\r\n this.velocity = pb.vec2().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.luminanceScale = pb.float().uniform(0);\r\n pb.func('noise', [pb.vec3('p'), pb.float('t')], function () {\r\n this.p2 = pb.mul(this.p, 0.25);\r\n this.f = pb.mul(smoothNoise3D(this, this.p2), 0.5);\r\n this.p2 = pb.mul(this.p2, 3.02);\r\n this.p2.y = pb.sub(this.p2.y, pb.mul(this.t, 0.02));\r\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.25));\r\n this.p2 = pb.mul(this.p2, 3.03);\r\n this.p2.y = pb.add(this.p2.y, pb.mul(this.t, 0.01));\r\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.125));\r\n this.p2 = pb.mul(this.p2, 3.02);\r\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.0625));\r\n this.p2 = pb.mul(this.p2, 3.01);\r\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.03125));\r\n this.p2 = pb.mul(this.p2, 3.01);\r\n this.f = pb.add(this.f, pb.mul(smoothNoise3D(this, this.p2), 0.015625));\r\n this.$return(this.f);\r\n });\r\n pb.main(function () {\r\n // Calculate sky color\r\n this.$l.sunColor = pb.vec4();\r\n this.$l.skyColor = skyBox(\r\n this,\r\n this.params,\r\n this.sunColor,\r\n this.$inputs.worldDirection,\r\n pb.float(0.01),\r\n this.includeSunDisk,\r\n this.tLut,\r\n this.skyLut\r\n ).rgb;\r\n\r\n this.$l.rayDir = pb.normalize(this.$inputs.worldDirection);\r\n this.$l.sunDir = this.params.lightDir;\r\n // ad-hoc\r\n this.$l.sunIntensity = pb.sqrt(pb.max(0, pb.mul(this.sunDir.y, this.rayDir.y)));\r\n\r\n // compute cloud\r\n if (cloud) {\r\n this.$l.noiseValue = pb.float();\r\n this.$if(pb.lessThanEqual(this.rayDir.y, 0), function () {\r\n this.noiseValue = 0;\r\n }).$else(function () {\r\n this.$l.tMin = pb.div(3000, this.rayDir.y);\r\n this.$l.cloudPoint = pb.mul(this.rayDir, this.tMin);\r\n this.speed = pb.mul(pb.vec3(this.velocity.x, 0, this.velocity.y), this.time);\r\n this.$l.noiseScale = pb.float(4e-4);\r\n this.noiseValue = this.noise(\r\n pb.mul(pb.add(this.cloudPoint, this.speed), this.noiseScale),\r\n this.time\r\n );\r\n this.noiseValue = pb.add(this.noiseValue, this.cloudy);\r\n this.noiseValue = pb.smoothStep(1, pb.add(1, this.cloudy), this.noiseValue);\r\n });\r\n // use sun color as cloud color\r\n /*\r\n this.$l.sunColor = pb.mul(\r\n pb.textureSampleLevel(this.skyLut, viewDirToUV(this, this.sunDir), 0),\r\n this.sunIntensity\r\n );\r\n */\r\n this.$l.cloudColor = pb.mul(\r\n this.sunColor.rgb,\r\n this.sunIntensity,\r\n pb.mul(this.noiseValue, this.cloudIntensity)\r\n );\r\n }\r\n\r\n // Compute sky color\r\n if (cloud) {\r\n // blend\r\n this.$l.vfactor = pb.clamp(pb.div(pb.sub(this.rayDir.y, 0.01), pb.sub(0.03, 0.01)), 0, 1);\r\n this.$l.factor = pb.clamp(pb.mul(this.noiseValue, this.vfactor), 0, 1);\r\n this.$l.color = pb.mix(this.skyColor, this.cloudColor, this.factor);\r\n } else {\r\n this.$l.color = this.skyColor;\r\n }\r\n // 1 for legacy and for the IBL bake; the camera pre-exposure when drawn on screen.\r\n this.color = pb.mul(this.color, this.luminanceScale);\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = cloud ? '@SkyScatterCloud' : '@SkyScatter';\r\n return program;\r\n }\r\n}\r\n"],"names":["fogTypeMap","height_fog","Fog","FOG_TYPE_HEIGHT","none","FOG_TYPE_NONE","defaultSkyWorldMatrix","Matrix4x4","identity","SkyRenderer","Disposable","PHYSICAL_ATMOSPHERE_LUMINANCE_SCALE","PHYSICAL_BAKE_EXPOSURE","FOG_PHYSICAL_LUMINANCE","CLOUD_SUN_MIN_TRANSMITTANCE","_skyCamera","PerspectiveCamera","Math","PI","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","_programSky","_programDistantLight","_programFog","_programFogNoDepth","_vertexLayout","_primitiveSky","_primitiveDistantLight","_renderStatesSky","_renderStatesSkyNoDepthTest","_renderStatesFog","_renderStatesFogScatter","_renderStatesDistantLight","_defaultSkyImage","DRef","_skyType","_skyColor","_skyImage","_bakedSkyboxDirty","_bakedSkyboxTextureSize","_skyboxTextureSize","_skyboxTexture","_bakedSkyboxTexture","_bakedSkyboxFrameBuffer","_radianceMap","_radianceFrameBuffer","_irradianceSH","_irradianceSHFB","_skyDistantLightLut","_irradianceFrameBuffer","_radianceMapWidth","_atmosphereParams","_atmosphereExposure","_fogType","_heightFogParams","_cloudy","_cloudIntensity","_debugAerialPerspective","_wind","_skyboxRotation","_skyWorldMatrix","_lastSunDir","_lastSunColor","_panoramaAsset","_shProjector","_shWindowWeights","_radianceConvSamples","_irradianceConvSamples","_bindgroupDistantLight","_bindgroupSky","_bindgroupFog","_bindgroupFogNoDepth","_format","Vector4","getDefaultAtmosphereParams","getDefaultHeightFogParams","Vector2","Vector3","_getSunDir","_getSunColor","CubemapSHProjector","_fogLuminanceScale","_fogPreExposure","getHash","_ctx","skyType","fogType","envTextureFormat","texCaps","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","renderable","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","val","invalidate","panoramaTextureAsset","id","skyboxTexture","_updateSkyboxTexture","skyboxTextureSize","size","getBakedSkyTexture","ctx","update","get","skyColor","equalsTo","set","skyImage","texture","shWindowWeights","weights","radianceConvSamples","irradianceConvSamples","aerialPerspectiveDistance","apDistance","atmosphereExposure","cameraHeightScale","heightFogColor","parameter1","xyz","heightFogDensity","parameter2","x","heightFogFalloff","w","heightFogStartHeight","y","heightFogStartDistance","z","heightFogEndDistance","heightFogMaxOpacity","parameter3","heightFogAtmosphereContribution","heightFogDirExponent","heightFogDirColor","parameter4","cloudy","cloudIntensity","wind","radianceMap","createCubeTexture","name","sheenRadianceMap","atmosphereParams","heightFogParams","radianceFramebuffer","createFrameBuffer","irradianceSH","buffer","createBuffer","usage","irradianceSHFB","device","format","framebufferCaps","supportFloatBlending","createTexture2D","mipmapping","tex","skyboxRotation","skyWorldMatrix","mappedFogType","aerialPerspectiveDebug","fogPresents","drawScatteredFog","getAerialPerspectiveLUT","getAerialPerspectiveLut","getSkyDistantLightLUT","getColorAttachments","getBakeToPreExposedScale","scene","lightingMode","env","light","intensity","ShaderHelper","getPreExposure","useScatter","atmosphereLUTRendered","renderAtmosphereLUTs","oldSunLight","sunLight","color","sunDir","sunColor","updateBakedSkyMap","renderSkyDistantLut","newSunLight","mul","sunTransmittance","cloudSunTransmittance","zero","setColor","cameraY","min","MAX_FOG_HEIGHT","camera","getWorldPosition","p","max","pow","lightColor","setXYZ","lightDir","cameraAspect","getAspect","cameraWorldMatrix","worldMatrix","skybox","_prepareSkyBox","pushDeviceStates","setRenderStates","setProgram","setFramebuffer","clearFrameBuffer","setTexture","fetchSampler","setValue","setBindGroup","draw","popDeviceStates","width","saveRenderStates","getRenderStates","face","CubeFace","PX","NX","PY","NY","PZ","NZ","lookAtCubeFace","setColorAttachmentCubeFace","_renderSky","_getSkyBakeLuminanceScale","_updateIBLFromBakedSky","renderFog","prefilterCubemap","projectCubemapToTexture","irradianceWindow","renderUberFog","depthTexture","fogProgram","renderStates","bindgroup","getFramebuffer","invViewProjectionMatrix","getNearPlane","getFarPlane","_getUploadHeightFogParams","setVertexLayout","scale","p1","p4","preExposure","currentFramebuffer","depthBuffer","getDepthAttachment","colorBuffer","fogFramebuffer","pool","fetchTemporalFramebuffer","vp","getViewport","scissor","getScissor","setViewport","setScissor","savedRenderStates","releaseFrameBuffer","_beginSingleColorPass","withDepth","length","framebuffer","_endSingleColorPass","renderSky","skyCamera","isPerspective","decompose","rotation","_getSkyScreenLuminanceScale","onDispose","dispose","k","objectKeys","getEngine","resourceManager","fetchTexture","linearColorSpace","then","isTexture2D","console","error","panoramaToCubemap","catch","err","depthTest","includeSunDisk","luminanceScale","_drawScattering","_drawSkybox","_drawSkyColor","image","type","drawFullscreenQuad","viewProjectionMatrix","radius","rayStart","rayDir","OS","magnitude","SH","dot","OH","sqrt","PH","t1","t2","_sunDir","one","coverage","t","TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","rayleighSc","params","fH","sigma","rho_h","exp","rayleighScatteringHeight","mieSc","mieScatteringHeight","mieAb","ozoneAb","abs","ozoneCenter","ozoneWidth","eyePos","plantRadius","d","_rayIntersectSphere","atmosphereHeight","ds","sum","combine","i","h","scattering","add","absorption","extinction","tLut","getTransmittanceLut","skyLut","getSkyViewLut","program","scatter","frameInfo","elapsedOverall","_createAtmosphereLUTPrograms","Uint8Array","buildRenderProgram","vertex","pb","$inputs","vector","vec3","attrib","main","$outputs","$builtins","position","vec4","pointSize","fragment","texCube","uniform","physical","int","$l","sampleDirection","$choice","notEqual","textureSampleLevel","rgb","createBindGroup","bindGroupLayouts","_createFogProgram","label","pos","vec2","uv","flip","DEPTH_FARTHEST","xy","neg","outColor","tex2D","srgbOut","float","sampleColor","$if","equal","$else","linearToGamma","_createScatterProgram","texCoord","mat4","viewProjMatrix","cameraPos","worldPos","farthestClipZ","skyCubeMap","normalize","createRenderStateSet","useDepthState","enableTest","enableWrite","setCompareFunc","DEPTH_COMPARE_DEFAULT","useRasterizerState","setCullMode","useBlendingState","enable","setBlendFuncRGB","setBlendFuncAlpha","DEPTH_COMPARE_FARTHER","setBlendEquation","createVertexLayout","vertexBuffers","createVertexBuffer","Float32Array","BoxShape","data","uniformSphereSamples","v","Primitive","createAndSetVertexBuffer","indexCount","indexStart","primitiveType","noDepth","rt","AtmosphereParams","getAtmosphereParamsStruct","HeightFogParams","getHeightFogParamsStruct","depthTex","sampleType","apLut","skyDistantLightLut","invProjViewMatrix","cameraNearFar","cameraPosition","withAerialPerspective","depthValue","textureSample","r","clipSpacePos","sub","deviceDepthToClipZ","hPos","div","isSky","isFarthestDepth","calculateFog","a","directionAndCutoff","scaleBy","defaultSunDir","diffuseAndIntensity","createTransmittanceLutProgram","createMultiScatteringLutProgram","createSkyViewLutProgram","createAPLutProgram","cloud","worldDirection","time","velocity","func","p2","f","smoothNoise3D","$return","skyBox","sunIntensity","noiseValue","lessThanEqual","tMin","cloudPoint","speed","noiseScale","noise","smoothStep","cloudColor","vfactor","clamp","factor","mix"],"mappings":"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"}