@zephyr3d/scene 0.9.25 → 0.9.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +79 -25
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +184 -69
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +268 -44
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9044 -5139
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +48 -10
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +106 -19
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +734 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +2059 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +664 -56
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +20 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +3 -2
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +6 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +130 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +39 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +379 -10
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -2
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +546 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +1 -1
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +434 -101
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +401 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +186 -26
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1105 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +9 -8
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\n AbstractDevice,\n BindGroup,\n FrameBuffer,\n GPUDataBuffer,\n GPUProgram,\n PBInsideFunctionScope,\n PBShaderExp,\n ProgramBuilder,\n Texture2D\n} from '@zephyr3d/device';\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\nimport { fetchSampler } from '../utility/misc';\nimport type { Nullable } from '@zephyr3d/base';\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\nimport { uniformSphereSamples } from '../values';\nimport { getDevice } from '../app/api';\n\nconst TRANSMITTANCE_SAMPLES = 16;\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\nconst MIE_SIGMA = 3.996;\nconst MIE_ABSORPTION_SIGMA = 4.4;\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\n\n/** @internal */\nexport const CAMERA_POS_Y = 1;\n\n/** @internal */\nexport type AtmosphereParams = {\n plantRadius: number;\n atmosphereHeight: number;\n rayleighScatteringHeight: number;\n mieScatteringHeight: number;\n mieAnstropy: number;\n ozoneCenter: number;\n ozoneWidth: number;\n apDistance: number;\n cameraWorldMatrix: Matrix4x4;\n lightDir: Vector3;\n lightColor: Vector4;\n cameraAspect: number;\n cameraHeightScale: number;\n};\n\n/** @internal */\nexport function getDefaultAtmosphereParams() {\n return {\n plantRadius: 6360000,\n atmosphereHeight: 60000,\n rayleighScatteringHeight: 8000,\n mieScatteringHeight: 1200,\n mieAnstropy: 0.8,\n ozoneCenter: 25000,\n ozoneWidth: 15000,\n apDistance: 4000,\n cameraWorldMatrix: Matrix4x4.identity(),\n lightDir: new Vector3(1, 0, 0),\n lightColor: new Vector4(1, 1, 1, 10),\n cameraAspect: 1,\n cameraHeightScale: 1\n } as AtmosphereParams;\n}\n\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\n\nlet currentAtmosphereParams: Nullable<AtmosphereParams> = null;\n\nfunction checkParams(other?: Partial<AtmosphereParams>) {\n const result = {\n transmittance: false,\n multiScattering: false,\n skyView: false,\n aerialPerspective: false\n };\n other = { ...defaultAtmosphereParams, ...other };\n if (!currentAtmosphereParams) {\n currentAtmosphereParams = {\n ...defaultAtmosphereParams,\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\n };\n result.transmittance = true;\n result.multiScattering = true;\n result.skyView = true;\n result.aerialPerspective = true;\n } else {\n result.transmittance =\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\n result.multiScattering =\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\n result.skyView =\n result.transmittance ||\n result.multiScattering ||\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir!) ||\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor!) ||\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix!);\n result.aerialPerspective =\n result.transmittance ||\n result.multiScattering ||\n result.skyView ||\n currentAtmosphereParams.apDistance !== other.apDistance ||\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\n }\n if (result.transmittance) {\n currentAtmosphereParams.plantRadius = other.plantRadius!;\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight!;\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight!;\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight!;\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter!;\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth!;\n }\n if (result.multiScattering) {\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy!;\n }\n if (result.skyView) {\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale!;\n currentAtmosphereParams.lightDir.set(other.lightDir!);\n currentAtmosphereParams.lightColor.set(other.lightColor!);\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix!);\n }\n if (result.aerialPerspective) {\n currentAtmosphereParams.apDistance = other.apDistance!;\n currentAtmosphereParams.cameraAspect = other.cameraAspect!;\n }\n return result;\n}\n\n/** @internal */\nexport function rayIntersectSphere(\n scope: PBInsideFunctionScope,\n f3Center: PBShaderExp,\n fRadius: PBShaderExp,\n f3RayStart: PBShaderExp,\n f3RayDir: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_rayIntersectSphere';\n pb.func(\n funcName,\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\n function () {\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\n this.$return(pb.float(-1));\n });\n this.$l.t1 = pb.sub(this.SH, this.PH);\n this.$l.t2 = pb.add(this.SH, this.PH);\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\n }\n );\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir) as PBShaderExp;\n}\n\n/** @internal */\nexport function transmittanceToSky(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3Pos: PBShaderExp,\n f3Dir: PBShaderExp,\n texLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_transmittanceToSky';\n const Params = getAtmosphereParamsStruct(pb);\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\n this.$l.bottomRadius = this.params.plantRadius;\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\n this.$l.upVector = pb.normalize(this.p);\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\n this.$l.r = pb.length(this.p);\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\n });\n return scope[funcName](stParams, f3Pos, f3Dir);\n}\n\n/** @internal */\nexport function rayleighCoefficient(\n scope: PBInsideFunctionScope,\n fRayleighScatteringHeight: PBShaderExp,\n fH: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_rayleighCoefficient';\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\n this.$return(pb.mul(this.sigma, this.rho_h));\n });\n return scope[funcName](fRayleighScatteringHeight, fH);\n}\n\n/** @internal */\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\n const pb = scope.$builder;\n const funcName = 'z_rayleighPhase';\n pb.func(funcName, [pb.float('cosTheta')], function () {\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\n });\n return scope[funcName](fCosTheta);\n}\n\n/** @internal */\nexport function mieCoefficient(\n scope: PBInsideFunctionScope,\n fMieScatteringHeight: PBShaderExp,\n fH: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_mieCoefficient';\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\n this.$return(pb.mul(this.sigma, this.rho_h));\n });\n return scope[funcName](fMieScatteringHeight, fH);\n}\n\n/** @internal */\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\n const pb = scope.$builder;\n const funcName = 'z_miePhase';\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\n this.$l.g2 = pb.mul(this.g, this.g);\n this.$l.a = 3 / (8 * Math.PI);\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\n });\n return scope[funcName](fMieAnstropy, fCosTheta);\n}\n\n/** @internal */\nexport function mieAbsorption(\n scope: PBInsideFunctionScope,\n fMieScatteringHeight: PBShaderExp,\n fH: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_mieAbsorption';\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\n this.$return(pb.mul(this.sigma, this.rho_h));\n });\n return scope[funcName](fMieScatteringHeight, fH);\n}\n\n/** @internal */\nexport function ozoneAbsorption(\n scope: PBInsideFunctionScope,\n fOzoneLevelCenterHeight: PBShaderExp,\n fOzoneLevelWidth: PBShaderExp,\n fH: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_ozoneAbsorption';\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\n this.$l.sigma = pb.mul(\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\n 1e-6\n );\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\n this.$return(pb.mul(this.sigma, this.rho_h));\n });\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\n}\n\n/** @internal */\nexport function getSkyView(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3EyePos: PBShaderExp,\n f3ViewDir: PBShaderExp,\n fMaxDis: PBShaderExp,\n texTransmittanceLut: PBShaderExp,\n texMultiScatteringLut: PBShaderExp,\n withGround = true\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'z_getSkyView';\n pb.func(\n funcName,\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\n function () {\n const N_SAMPLE = 32;\n this.$l.color = pb.vec3(0);\n this.$l.dis = rayIntersectSphere(\n this,\n pb.vec3(0),\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\n this.eyePos,\n this.viewDir\n );\n this.$if(pb.lessThan(this.dis, 0), function () {\n this.$return(pb.vec3(0));\n });\n if (withGround) {\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\n this.$if(pb.greaterThan(this.d, 0), function () {\n this.dis = pb.min(this.dis, this.d);\n });\n }\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\n this.dis = pb.min(this.dis, this.maxDis);\n });\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\n this.$l.opticalDepth = pb.vec3(0);\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\n this.$l.extinction = pb.add(\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\n );\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\n\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\n this.color = pb.add(this.color, this.inScattering);\n\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\n\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\n });\n this.$return(this.color);\n }\n );\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\n}\n\n/** @internal */\nexport function getMultiScattering(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3Pos: PBShaderExp,\n texMultiScatteringLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_getMultiScattering';\n const Params = getAtmosphereParamsStruct(pb);\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\n this.$l.sigma_s = pb.add(\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\n );\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\n this.$l.uv = pb.vec2(\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\n pb.div(this.h, this.params.atmosphereHeight)\n );\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\n });\n return scope[funcName](stParams, f3Pos);\n}\n\n/** @internal */\nexport function integralMultiScattering(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3LightDir: PBShaderExp,\n f3SamplePoint: PBShaderExp,\n texTransmittanceLut: PBShaderExp\n) {\n const N_DIRECTION = 64;\n const N_SAMPLE = 32;\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'z_integralMultiScattering';\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\n const uniformPhase = 1 / (4 * Math.PI);\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\n this.$l.G_2 = pb.vec3(0);\n this.$l.f_ms = pb.vec3(0);\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\n this.$l.dis = rayIntersectSphere(\n this,\n pb.vec3(0),\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\n this.samplePoint,\n this.viewDir\n );\n this.$l.d = rayIntersectSphere(\n this,\n pb.vec3(0),\n this.params.plantRadius,\n this.samplePoint,\n this.viewDir\n );\n this.$if(pb.greaterThan(this.d, 0), function () {\n this.dis = pb.min(this.dis, this.d);\n });\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\n this.$l.opticalDepth = pb.vec3(0);\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\n this.$l.sigma_s = pb.add(\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\n );\n this.$l.sigma_a = pb.add(\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\n );\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\n });\n });\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\n });\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\n}\n\n/** @internal */\nexport function scattering(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3Pos: PBShaderExp,\n f3ViewDir: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'z_scattering';\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\n this.$l.rayleigh = pb.mul(\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\n rayleighPhase(this, this.cosTheta)\n );\n this.$l.mie = pb.mul(\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\n );\n this.$return(pb.add(this.rayleigh, this.mie));\n });\n return scope[funcName](stParams, f3Pos, f3ViewDir) as PBShaderExp;\n}\n\n/** @internal */\nexport function transmittance(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f3P1: PBShaderExp,\n f3P2: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'z_transmittance';\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\n this.$l.sum = pb.vec3(0);\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\n this.$l.scattering = pb.add(\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\n );\n this.$l.absorption = pb.add(\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\n );\n this.$l.extinction = pb.add(this.scattering, this.absorption);\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\n });\n this.$return(pb.exp(pb.neg(this.sum)));\n });\n return scope[funcName](stParams, f3P1, f3P2) as PBShaderExp;\n}\n\n/** @internal */\nexport function transmittanceLutToUV(\n scope: PBInsideFunctionScope,\n fBottomRadius: PBShaderExp,\n fTopRadius: PBShaderExp,\n fMu: PBShaderExp,\n fR: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_transmittanceToUV';\n pb.func(\n funcName,\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\n function () {\n this.$l.H = pb.sqrt(\n pb.max(\n 0,\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\n )\n );\n this.$l.rho = pb.sqrt(\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\n );\n this.$l.discriminant = pb.add(\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\n pb.mul(this.topRadius, this.topRadius)\n );\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\n this.$l.d_min = pb.sub(this.topRadius, this.r);\n this.$l.d_max = pb.add(this.rho, this.H);\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\n this.$l.x_r = pb.div(this.rho, this.H);\n this.$return(pb.vec2(this.x_mu, this.x_r));\n }\n );\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR) as PBShaderExp;\n}\n\n/** @internal */\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\n const pb = scope.$builder;\n const funcName = 'z_viewDirToUV';\n pb.func(funcName, [pb.vec3('viewDir')], function () {\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\n this.uv = pb.add(this.uv, pb.vec2(0.5));\n this.$return(this.uv);\n });\n return scope[funcName](f3ViewDir) as PBShaderExp;\n}\n\n/** @internal */\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\n const pb = scope.$builder;\n const funcName = 'z_uvToViewDir';\n pb.func(funcName, [pb.vec2('uv')], function () {\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\n this.$l.y = pb.cos(this.theta);\n this.$return(pb.vec3(this.x, this.y, this.z));\n });\n return scope[funcName](f2UV) as PBShaderExp;\n}\n\n/** @internal */\nexport function uvToTransmittanceLut(\n scope: PBInsideFunctionScope,\n f2UV: PBShaderExp,\n fBottomRadius: PBShaderExp,\n fTopRadius: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'z_uvToTransmittanceLut';\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\n this.$l.x_mu = this.uv.x;\n this.$l.x_r = this.uv.y;\n this.$l.H = pb.sqrt(\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\n );\n this.$l.rho = pb.mul(this.H, this.x_r);\n this.$l.r = pb.sqrt(\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\n );\n this.$l.d_min = pb.sub(this.topRadius, this.r);\n this.$l.d_max = pb.add(this.rho, this.H);\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\n this.$l.mu = this.$choice(\n pb.equal(this.d, 0),\n pb.float(1),\n pb.div(\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\n pb.mul(this.r, this.d, 2)\n )\n );\n this.mu = pb.clamp(this.mu, -1, 1);\n this.$return(pb.vec2(this.mu, this.r));\n });\n return scope[funcName](f2UV, fBottomRadius, fTopRadius) as PBShaderExp;\n}\n\nfunction sunBloom(\n scope: PBInsideFunctionScope,\n f3ViewDir: PBShaderExp,\n f3LightDir: PBShaderExp,\n f4LightColorAndIntensity: PBShaderExp,\n fSunSolidAngle: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'v_sunBloom';\n pb.func(\n funcName,\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\n function () {\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\n });\n this.$return(this.luminance);\n }\n );\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle) as PBShaderExp;\n}\n\n/** @internal */\nexport function skyBox(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f4SunColor: PBShaderExp,\n f3SkyBoxWorldPos: PBShaderExp,\n fSunSolidAngle: PBShaderExp,\n fIncludeSunDisk: PBShaderExp,\n texTransmittanceLut: PBShaderExp,\n texSkyViewLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const funcName = 'v_skybox';\n const Params = getAtmosphereParamsStruct(pb);\n pb.func(\n funcName,\n [\n Params('params'),\n pb.vec4('sunColor').out(),\n pb.vec3('worldPos'),\n pb.float('sunSolidAngle'),\n pb.int('includeSunDisk')\n ],\n function () {\n this.$l.rgb = pb.vec3(0);\n this.$l.viewDir = pb.normalize(this.worldPos);\n this.rgb = pb.add(\n this.rgb,\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\n );\n this.$l.groundDistance = rayIntersectSphere(\n this,\n pb.vec3(0),\n this.params.plantRadius,\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\n this.viewDir\n );\n this.$l.sunTransmittance = transmittanceToSky(\n this,\n this.params,\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\n this.params.lightDir,\n texTransmittanceLut\n );\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\n this.$if(pb.and(pb.notEqual(this.includeSunDisk, 0), pb.lessThan(this.groundDistance, 0)), function () {\n this.rgb = pb.add(\n this.rgb,\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\n );\n });\n this.$return(pb.vec4(this.rgb, 1));\n }\n );\n return scope[funcName](\n stParams,\n f4SunColor,\n f3SkyBoxWorldPos,\n fSunSolidAngle,\n fIncludeSunDisk\n ) as PBShaderExp;\n}\n\n/** @internal */\nexport function aerialPerspective(\n scope: PBInsideFunctionScope,\n f2UV: PBShaderExp,\n stParams: PBShaderExp,\n f3CameraPos: PBShaderExp,\n f3WorldPos: PBShaderExp,\n f3Dim: PBShaderExp,\n texAerialPerspectiveLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'z_aerialPerspective';\n pb.func(\n funcName,\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\n function () {\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\n this.$l.dis = pb.length(this.V);\n this.$l.viewDir = pb.normalize(this.V);\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\n this.$l.slice = pb.floor(this.dz);\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\n this.$l.transmittance = pb.dot(\n transmittance(\n this,\n this.params,\n pb.add(this.cameraPos, this.planetTranslate),\n pb.add(this.worldPos, this.planetTranslate)\n ),\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\n );\n this.$return(pb.vec4(this.inscattering, this.transmittance));\n }\n );\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim) as PBShaderExp;\n}\n\n/** @internal */\nexport function aerialPerspectiveLut(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f2UV: PBShaderExp,\n f3VoxelDim: PBShaderExp,\n texTransmittanceLut: PBShaderExp,\n texMultiScatteringLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcNameFixVoxel = 'z_fixVoxel';\n pb.func(\n funcNameFixVoxel,\n [\n Params('params'),\n pb.vec3('eyePos'),\n pb.vec3('viewDir').inout(),\n pb.float('maxDis'),\n pb.float('adjustedMaxDis').inout()\n ],\n function () {\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\n this.$l.voxelHeight = pb.length(this.voxelPos);\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\n this.$l.planetNearT = rayIntersectSphere(\n this,\n pb.vec3(0),\n this.params.plantRadius,\n this.eyePos,\n this.cameraToVoxelDir\n );\n this.$l.belowHorizon = pb.and(\n pb.greaterThan(this.planetNearT, 0),\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\n );\n this.$l.eyePos2 = this.eyePos;\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\n this.$if(this.belowHorizon, function () {\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\n this.$if(\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\n function () {\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\n }\n );\n }).$else(function () {\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\n });\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\n this.adjustedMaxDis = pb.length(this.V);\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\n });\n this.$return(this.eyePos2);\n }\n );\n const funcName = 'z_aerialPerspectiveLut';\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\n this.$l.uvw = pb.vec3(this.uv, 0);\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\n this.$l.viewDir = pb.normalize(\n pb.mul(\n this.params.cameraWorldMatrix,\n pb.vec4(\n pb.sub(pb.mul(this.uvw.x, 2), 1),\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\n -1,\n 0\n )\n ).xyz\n );\n this.$l.eyePos = pb.vec3(\n 0,\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\n 0\n );\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\n });\n this.$l.color = getSkyView(\n this,\n this.params,\n this.eyePos,\n this.viewDir,\n this.maxDis,\n texTransmittanceLut,\n texMultiScatteringLut\n );\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\n });\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y) as PBShaderExp;\n}\n\n/** @internal */\nexport function skyViewLut(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f2UV: PBShaderExp,\n texTransmittanceLut: PBShaderExp,\n texMultiScatteringLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'v_skyViewLut';\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\n this.$l.viewDir = uvToViewDir(this, this.uv);\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\n this.$l.eyePos = pb.vec3(0, this.h, 0);\n this.$l.rgb = getSkyView(\n this,\n this.params,\n this.eyePos,\n this.viewDir,\n pb.float(-1),\n texTransmittanceLut,\n texMultiScatteringLut\n );\n this.$return(pb.vec4(this.rgb, 1));\n });\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y) as PBShaderExp;\n}\n\n/** @internal */\nexport function multiScatteringLut(\n scope: PBInsideFunctionScope,\n stParams: PBShaderExp,\n f2UV: PBShaderExp,\n texTransmittanceLut: PBShaderExp\n) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'v_multiScatteringLut';\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\n this.$l.cosTheta = this.mu_s;\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\n this.$l.p = pb.vec3(0, this.r, 0);\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\n this.$return(pb.vec4(this.rgb, 1));\n });\n return scope[funcName](stParams, f2UV) as PBShaderExp;\n}\n\n/** @internal */\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\n const pb = scope.$builder;\n const Params = getAtmosphereParamsStruct(pb);\n const funcName = 'transmittanceLut';\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\n this.$l.color = pb.vec4(0, 0, 0, 1);\n this.$l.bottomRadius = this.params.plantRadius;\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\n this.$l.cos_theta = this.lutParams.x;\n this.$l.r = this.lutParams.y;\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\n this.$l.eyePos = pb.vec3(0, this.r, 0);\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\n });\n return scope[funcName](stParams, f2UV) as PBShaderExp;\n}\n\n/** @internal */\nexport function atmosphereLUTRendered() {\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\n}\n\n/** @internal */\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\n const checkResult = checkParams(params);\n if (checkResult.transmittance || !transmittanceLUT) {\n renderTransmittanceLut(currentAtmosphereParams!);\n }\n if (checkResult.multiScattering || !multiScatteringLUT) {\n renderMultiScatteringLut(currentAtmosphereParams!);\n }\n if (checkResult.skyView || !skyViewLUT) {\n renderSkyViewLut(currentAtmosphereParams!);\n }\n if (checkResult.aerialPerspective || !ApLut) {\n renderAPLut(currentAtmosphereParams!);\n }\n}\n\n/* For debug */\nlet transmittanceLutProgram: GPUProgram;\nlet multiScatteringLutProgram: GPUProgram;\nlet skyViewLutProgram: GPUProgram;\nlet APLutProgram: GPUProgram;\nlet transmittanceLutBindGroup: BindGroup;\nlet transmittanceLUT: Texture2D;\nlet transmittanceFramebuffer: FrameBuffer;\n\nlet multiScatteringLutBindGroup: BindGroup;\nlet multiScatteringLUT: Texture2D;\nlet uniformSphereSampleBuffer: GPUDataBuffer;\nlet multiScatteringFramebuffer: FrameBuffer;\n\nlet skyViewLutBindGroup: BindGroup;\nlet skyViewLUT: Texture2D;\nlet skyViewFramebuffer: FrameBuffer;\n\nlet APLutBindGroup: BindGroup;\nlet ApLut: Texture2D;\nlet APFramebuffer: FrameBuffer;\n\n/** @internal */\nexport function getTransmittanceLut() {\n return transmittanceLUT;\n}\n\n/** @internal */\nexport function getMultiScatteringLut() {\n return multiScatteringLUT;\n}\n\n/** @internal */\nexport function getSkyViewLut() {\n return skyViewLUT;\n}\n\n/** @internal */\nexport function getAerialPerspectiveLut() {\n return ApLut;\n}\n\n/** @internal */\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\n return pb.defineStruct([\n pb.mat4('cameraWorldMatrix'),\n pb.vec4('lightColor'),\n pb.vec3('lightDir'),\n pb.float('cameraAspect'),\n pb.float('plantRadius'),\n pb.float('atmosphereHeight'),\n pb.float('rayleighScatteringHeight'),\n pb.float('mieScatteringHeight'),\n pb.float('mieAnstropy'),\n pb.float('ozoneCenter'),\n pb.float('ozoneWidth'),\n pb.float('apDistance'),\n pb.float('cameraHeightScale')\n ]);\n}\n\n/** @internal */\nexport function createTransmittanceLutProgram(device: AbstractDevice) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.flip = 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, 0, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n this.$if(pb.notEqual(this.flip, 0), function () {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n });\n });\n },\n fragment(pb) {\n const Params = getAtmosphereParamsStruct(pb);\n this.params = Params().uniform(0);\n this.$outputs.outColor = pb.vec4();\n pb.main(function () {\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\n });\n }\n })!;\n program.name = '@TransmittanceLutProgram';\n return program;\n}\n\n/** @internal */\nexport function renderTransmittanceLut(params: AtmosphereParams) {\n const device = getDevice();\n if (transmittanceLutProgram === undefined) {\n try {\n transmittanceLutProgram = createTransmittanceLutProgram(device);\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\n mipmapping: false\n })!;\n transmittanceLUT.name = 'DebugTransmittanceLut';\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\n } catch (err) {\n console.error(err);\n }\n }\n if (transmittanceLutProgram) {\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\n transmittanceLutBindGroup.setValue('params', params);\n device.pushDeviceStates();\n device.setFramebuffer(transmittanceFramebuffer);\n device.setProgram(transmittanceLutProgram);\n device.setBindGroup(0, transmittanceLutBindGroup);\n drawFullscreenQuad();\n device.popDeviceStates();\n }\n}\n\n/** @internal */\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.flip = 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, 0, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n this.$if(pb.notEqual(this.flip, 0), function () {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n });\n });\n },\n fragment(pb) {\n const Params = getAtmosphereParamsStruct(pb);\n this.params = Params().uniform(0);\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\n this.transmittanceLut = pb.tex2D().uniform(0);\n this.$outputs.outColor = pb.vec4();\n pb.main(function () {\n this.$outputs.outColor = multiScatteringLut(\n this,\n this.params,\n this.$inputs.uv,\n this.transmittanceLut\n );\n });\n }\n })!;\n program.name = '@MultiScatteringLutProgram';\n return program;\n}\n\n/** @internal */\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\n const device = getDevice();\n if (multiScatteringLutProgram === undefined) {\n try {\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\n mipmapping: false\n })!;\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false)!;\n const sphereSamples = new Float32Array(64 * 4);\n for (let i = 0; i < 64; i++) {\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\n sphereSamples[i * 4 + 3] = 0;\n }\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\n } catch (err) {\n console.error(err);\n }\n }\n if (multiScatteringLutProgram) {\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\n multiScatteringLutBindGroup.setValue('params', params);\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\n multiScatteringLutBindGroup.setTexture(\n 'transmittanceLut',\n transmittanceLUT,\n fetchSampler('clamp_linear_nomip')\n );\n device.pushDeviceStates();\n device.setFramebuffer(multiScatteringFramebuffer);\n device.setProgram(multiScatteringLutProgram);\n device.setBindGroup(0, multiScatteringLutBindGroup);\n drawFullscreenQuad();\n device.popDeviceStates();\n }\n}\n\n/** @internal */\nexport function createSkyViewLutProgram(device: AbstractDevice) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.flip = 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, 0, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n this.$if(pb.notEqual(this.flip, 0), function () {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n });\n });\n },\n fragment(pb) {\n const Params = getAtmosphereParamsStruct(pb);\n this.params = Params().uniform(0);\n this.transmittanceLut = pb.tex2D().uniform(0);\n this.multiScatteringLut = pb.tex2D().uniform(0);\n this.$outputs.outColor = pb.vec4();\n pb.main(function () {\n this.$outputs.outColor = skyViewLut(\n this,\n this.params,\n this.$inputs.uv,\n this.transmittanceLut,\n this.multiScatteringLut\n );\n });\n }\n })!;\n program.name = '@SkyViewLutProgram';\n return program;\n}\n\n/** @internal */\nexport function renderSkyViewLut(params: AtmosphereParams) {\n const device = getDevice();\n if (skyViewLutProgram === undefined) {\n try {\n skyViewLutProgram = createSkyViewLutProgram(device);\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\n mipmapping: false\n })!;\n skyViewLUT.name = 'DebugSkyViewLut';\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\n } catch (err) {\n console.error(err);\n }\n }\n if (skyViewLutProgram) {\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\n skyViewLutBindGroup.setValue('params', params);\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\n skyViewLutBindGroup.setTexture(\n 'multiScatteringLut',\n multiScatteringLUT,\n fetchSampler('clamp_linear_nomip')\n );\n device.pushDeviceStates();\n device.setFramebuffer(skyViewFramebuffer);\n device.setProgram(skyViewLutProgram);\n device.setBindGroup(0, skyViewLutBindGroup);\n drawFullscreenQuad();\n device.popDeviceStates();\n }\n}\n\n/** @internal */\nexport function createAPLutProgram(device: AbstractDevice) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.flip = 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, 0, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n this.$if(pb.notEqual(this.flip, 0), function () {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n });\n });\n },\n fragment(pb) {\n const Params = getAtmosphereParamsStruct(pb);\n this.params = Params().uniform(0);\n this.transmittanceLut = pb.tex2D().uniform(0);\n this.multiScatteringLut = pb.tex2D().uniform(0);\n this.$outputs.outColor = pb.vec4();\n pb.main(function () {\n this.$outputs.outColor = aerialPerspectiveLut(\n this,\n this.params,\n this.$inputs.uv,\n pb.vec3(32, 32, 32),\n this.transmittanceLut,\n this.multiScatteringLut\n );\n });\n }\n })!;\n program.name = '@APLutProgram';\n return program;\n}\n\n/** @internal */\nexport function renderAPLut(params: AtmosphereParams) {\n const device = getDevice();\n if (APLutProgram === undefined) {\n try {\n APLutProgram = createAPLutProgram(device);\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false })!;\n ApLut.name = 'DebugAPLut';\n APFramebuffer = device.createFrameBuffer([ApLut], null);\n } catch (err) {\n console.error(err);\n }\n }\n if (APLutProgram) {\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\n APLutBindGroup.setValue('params', params);\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\n device.pushDeviceStates();\n device.setFramebuffer(APFramebuffer);\n device.setProgram(APLutProgram);\n device.setBindGroup(0, APLutBindGroup);\n drawFullscreenQuad();\n device.popDeviceStates();\n }\n}\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","fIncludeSunDisk","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","and","notEqual","includeSunDisk","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","fragment","outColor","name","getDevice","undefined","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/** @internal */\r\nexport const CAMERA_POS_Y = 1;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n apDistance: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraHeightScale: number;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams() {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n apDistance: 4000,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraHeightScale: 1\r\n } as AtmosphereParams;\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: Nullable<AtmosphereParams> = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>) {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n result.multiScattering =\r\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir!) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor!) ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix!);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius!;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight!;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight!;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight!;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter!;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth!;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy!;\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale!;\r\n currentAtmosphereParams.lightDir.set(other.lightDir!);\r\n currentAtmosphereParams.lightColor.set(other.lightColor!);\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix!);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance!;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect!;\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\r\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToSky';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.length(this.p);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.a = 3 / (8 * Math.PI);\r\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\r\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\r\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\r\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_getSkyView';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n if (withGround) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n }\r\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\r\n this.dis = pb.min(this.dis, this.maxDis);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n\r\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\r\n this.color = pb.add(this.color, this.inScattering);\r\n\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\r\n\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$return(this.color);\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n });\r\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\r\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [pb.vec3('viewDir')], function () {\r\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\r\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\r\n this.uv = pb.add(this.uv, pb.vec2(0.5));\r\n this.$return(this.uv);\r\n });\r\n return scope[funcName](f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\r\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\r\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\r\n this.$l.y = pb.cos(this.theta);\r\n this.$return(pb.vec3(this.x, this.y, this.z));\r\n });\r\n return scope[funcName](f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius) as PBShaderExp;\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3SkyBoxWorldPos: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n fIncludeSunDisk: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [\r\n Params('params'),\r\n pb.vec4('sunColor').out(),\r\n pb.vec3('worldPos'),\r\n pb.float('sunSolidAngle'),\r\n pb.int('includeSunDisk')\r\n ],\r\n function () {\r\n this.$l.rgb = pb.vec3(0);\r\n this.$l.viewDir = pb.normalize(this.worldPos);\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\r\n );\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.and(pb.notEqual(this.includeSunDisk, 0), pb.lessThan(this.groundDistance, 0)), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](\r\n stParams,\r\n f4SunColor,\r\n f3SkyBoxWorldPos,\r\n fSunSolidAngle,\r\n fIncludeSunDisk\r\n ) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\r\n this.$l.dis = pb.length(this.V);\r\n this.$l.viewDir = pb.normalize(this.V);\r\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\r\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\r\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\r\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\r\n this.$l.slice = pb.floor(this.dz);\r\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\r\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\r\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\r\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\r\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\r\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\r\n this.$l.transmittance = pb.dot(\r\n transmittance(\r\n this,\r\n this.params,\r\n pb.add(this.cameraPos, this.planetTranslate),\r\n pb.add(this.worldPos, this.planetTranslate)\r\n ),\r\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\r\n );\r\n this.$return(pb.vec4(this.inscattering, this.transmittance));\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcNameFixVoxel = 'z_fixVoxel';\r\n pb.func(\r\n funcNameFixVoxel,\r\n [\r\n Params('params'),\r\n pb.vec3('eyePos'),\r\n pb.vec3('viewDir').inout(),\r\n pb.float('maxDis'),\r\n pb.float('adjustedMaxDis').inout()\r\n ],\r\n function () {\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.voxelHeight = pb.length(this.voxelPos);\r\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\r\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\r\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\r\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.cameraToVoxelDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\r\n );\r\n this.$l.eyePos2 = this.eyePos;\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\r\n this.$if(this.belowHorizon, function () {\r\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\r\n this.$if(\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\r\n function () {\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\r\n }\r\n );\r\n }).$else(function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\r\n this.adjustedMaxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\r\n });\r\n this.$return(this.eyePos2);\r\n }\r\n );\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\r\n this.$l.uvw = pb.vec3(this.uv, 0);\r\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\r\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\r\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\r\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\r\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.sub(pb.mul(this.uvw.x, 2), 1),\r\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(\r\n 0,\r\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\r\n 0\r\n );\r\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\r\n });\r\n this.$l.color = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n this.maxDis,\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\r\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\r\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\r\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered() {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams!);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram;\r\nlet multiScatteringLutProgram: GPUProgram;\r\nlet skyViewLutProgram: GPUProgram;\r\nlet APLutProgram: GPUProgram;\r\nlet transmittanceLutBindGroup: BindGroup;\r\nlet transmittanceLUT: Texture2D;\r\nlet transmittanceFramebuffer: FrameBuffer;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup;\r\nlet multiScatteringLUT: Texture2D;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer;\r\nlet multiScatteringFramebuffer: FrameBuffer;\r\n\r\nlet skyViewLutBindGroup: BindGroup;\r\nlet skyViewLUT: Texture2D;\r\nlet skyViewFramebuffer: FrameBuffer;\r\n\r\nlet APLutBindGroup: BindGroup;\r\nlet ApLut: Texture2D;\r\nlet APFramebuffer: FrameBuffer;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('cameraHeightScale')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = 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, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n })!;\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n })!;\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = 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, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n })!;\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false)!;\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = 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, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\r\n mipmapping: false\r\n })!;\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = 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, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(32, 32, 32),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false })!;\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","fIncludeSunDisk","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","and","notEqual","includeSunDisk","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","fragment","outColor","name","getDevice","undefined","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":"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"}
|