@woosh/meep-engine 3.67.0 → 3.68.0
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/package.json +1 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +4 -9
- package/src/engine/graphics3/load_cube_environment.js +3 -3
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/probe_clipmap/index.html +43 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +29 -0
- package/src/shade/renderer/Renderer.d.ts +7 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +213 -15
- package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
- package/src/shade/renderer/ShadeIndirectLightingMode.js +9 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +22 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js +160 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts +45 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.js +57 -0
- package/src/shade/renderer/atmosphere/GPUSky.d.ts +23 -8
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +91 -34
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +17 -0
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +55 -25
- package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts +164 -0
- package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/SceneAtmosphere.js +308 -0
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +3 -12
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +52 -89
- package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts +14 -0
- package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.js +103 -0
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +10 -4
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +95 -57
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +10 -14
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +97 -69
- package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts +17 -0
- package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.js +117 -48
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +8 -0
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +65 -35
- package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +2 -1
- package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/compute_mie_absorption.js +6 -6
- package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts +41 -0
- package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.js +123 -0
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +21 -64
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -2
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +55 -179
- package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts +7 -0
- package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts.map +1 -0
- package/src/shade/renderer/atmosphere/shader_sky_view_lut.js +111 -0
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts +0 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +68 -79
- package/src/shade/renderer/deferred/shader_background.js +1 -1
- package/src/shade/renderer/deferred/shader_background_sky.d.ts +5 -0
- package/src/shade/renderer/deferred/shader_background_sky.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_background_sky.js +130 -0
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +2 -1
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +6 -2
- package/src/shade/renderer/extension/ViewTextures.d.ts +3 -2
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +3 -2
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts +47 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.js +246 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +4 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +8 -148
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +4 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +9 -58
- package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts +142 -0
- package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.js +938 -0
- package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts +192 -0
- package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.js +231 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts +11 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.js +25 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts +110 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.js +197 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts +150 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.js +408 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts +23 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.js +63 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts +24 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.js +61 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts +39 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.js +126 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts +21 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.js +74 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts +20 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.js +26 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts +24 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.js +57 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts +22 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.js +53 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts +62 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.js +156 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts +18 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.js +50 -0
- package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts +21 -0
- package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.js +54 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts +67 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.js +509 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts +20 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js +128 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts +62 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.js +478 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts +69 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.js +457 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts +27 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js +219 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts +22 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.js +151 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts +66 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.js +301 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts +59 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js +364 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts +40 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js +275 -0
- package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -1
- package/src/shade/renderer/grass/blade/GPUGrassBlades.js +17 -2
- package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +18 -8
- package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -1
- package/src/shade/renderer/grass/blade/grass_blade_resolve.js +114 -32
- package/src/shade/renderer/light/GPULightCollection.d.ts +1 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +213 -80
- package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.d.ts +1 -2
- package/src/shade/renderer/light/environment/chunk_sample_environment_color.d.ts.map +1 -0
- package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.js +3 -4
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +1 -1
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +1 -1
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +1 -1
- package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +1 -1
- package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +2 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +2 -0
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts +6 -0
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +9 -1
- package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +4 -3
- package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts +17 -0
- package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.js +16 -0
- package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts +21 -0
- package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.js +30 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -5
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +19 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +2 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +2 -1
- package/src/shade/renderer/scene/Scene.d.ts +9 -2
- package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/Scene.js +10 -2
- package/src/shade/renderer/shader/ImageShader.d.ts +24 -12
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +11 -8
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts +3 -1
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js +11 -3
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +2 -11
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +23 -32
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js +14 -2
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.js +4 -2
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.js +11 -3
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +68 -69
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts +4 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.js +46 -39
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js +5 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +18 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +30 -27
- package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.js +30 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js +60 -0
- package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.d.ts → io/chunk_light_get_sun.d.ts} +3 -6
- package/src/shade/renderer/shader/chunk/light/io/chunk_light_get_sun.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.js → io/chunk_light_get_sun.js} +6 -26
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +3 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -2
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +743 -739
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +2 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +19 -17
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +5 -3
- package/src/shade/renderer/water/chunk_water_gi.js +2 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts +0 -2
- package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +0 -45
- package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts +0 -2
- package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.js +0 -17
- package/src/engine/graphics/sh3/sky/hosek/README.md +0 -4
- package/src/engine/graphics/sh3/sky/hosek/data.d.ts +0 -17
- package/src/engine/graphics/sh3/sky/hosek/data.d.ts.map +0 -1
- package/src/engine/graphics/sh3/sky/hosek/data.js +0 -3744
- package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts +0 -2
- package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts.map +0 -1
- package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.js +0 -71
- package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts +0 -26
- package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts.map +0 -1
- package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +0 -70
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +0 -22
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +0 -1
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +0 -388
- package/src/engine/graphics3/make_default_environment.d.ts +0 -15
- package/src/engine/graphics3/make_default_environment.d.ts.map +0 -1
- package/src/engine/graphics3/make_default_environment.js +0 -111
- package/src/shade/renderer/atmosphere/MIE_G.d.ts +0 -6
- package/src/shade/renderer/atmosphere/MIE_G.d.ts.map +0 -1
- package/src/shade/renderer/atmosphere/MIE_G.js +0 -5
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +0 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts +0 -4
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts.map +0 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +0 -44
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +0 -2
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +0 -43
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.js +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.js +0 -18
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts +0 -14
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.js +0 -86
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts +0 -8
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +0 -125
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.js +0 -17
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.js +0 -38
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +0 -16
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +0 -28
- package/src/shade/renderer/shader/chunk/light/sky/chunk_sample_sky_color.d.ts.map +0 -1
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts +0 -26
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +0 -1
- package/src/shade/renderer/view/GPUViewSkyContext.js +0 -170
|
@@ -1,25 +1,55 @@
|
|
|
1
|
-
import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
|
|
2
|
+
import { ShaderResourceDescriptor } from "../shader/resource/ShaderResourceDescriptor.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Filtering sampler for the sky LUTs (transmittance, multiple-scattering).
|
|
6
|
+
*
|
|
7
|
+
* Both LUTs are `rgba16float`, which is filterable in core WebGPU — only the 32-bit float
|
|
8
|
+
* formats need the `float32-filterable` feature — so these can go through the texture unit
|
|
9
|
+
* instead of the 4-tap manual bilinear in `texture_sample_bilinear_uv`.
|
|
10
|
+
*
|
|
11
|
+
* `min` and `mag` are both set: the LUTs are single-mip and sampled with an explicit LOD of
|
|
12
|
+
* 0, which selects the magnification filter, but relying on that alone would silently fall
|
|
13
|
+
* back to point sampling if either LUT ever grew mips.
|
|
14
|
+
*
|
|
15
|
+
* Clamp-to-edge reproduces the manual filter's per-corner clamping exactly: `uv` is
|
|
16
|
+
* saturated by `sky_lut_uv`, and at the edges both bilinear taps collapse onto the edge
|
|
17
|
+
* texel.
|
|
18
|
+
*
|
|
19
|
+
* @type {Readonly<SamplerDescriptor>}
|
|
20
|
+
*/
|
|
21
|
+
export const SAMPLER_SKY_LUT = Object.freeze(SamplerDescriptor.from({
|
|
22
|
+
magFilter: "linear",
|
|
23
|
+
minFilter: "linear",
|
|
24
|
+
addressModeU: "clamp-to-edge",
|
|
25
|
+
addressModeV: "clamp-to-edge",
|
|
26
|
+
}));
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resource declaration for `sSkyLut`, paired with {@link SKY_LUT_TRANSMITTANCE_RESOURCE} and
|
|
30
|
+
* {@link SKY_LUT_MULTISCATTER_RESOURCE}.
|
|
31
|
+
* @type {ShaderResourceDescriptor}
|
|
32
|
+
*/
|
|
33
|
+
export const SKY_LUT_SAMPLER_RESOURCE = ShaderResourceDescriptor.sampler(
|
|
34
|
+
"sSkyLut",
|
|
35
|
+
"filtering",
|
|
36
|
+
SAMPLER_SKY_LUT
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Resource declaration for `tSkyLutTransmittance`.
|
|
41
|
+
* @type {ShaderResourceDescriptor}
|
|
42
|
+
*/
|
|
43
|
+
export const SKY_LUT_TRANSMITTANCE_RESOURCE = ShaderResourceDescriptor.texture(
|
|
44
|
+
"tSkyLutTransmittance",
|
|
45
|
+
"float"
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Resource declaration for `tSkyLutMultiscatter`.
|
|
50
|
+
* @type {ShaderResourceDescriptor}
|
|
51
|
+
*/
|
|
52
|
+
export const SKY_LUT_MULTISCATTER_RESOURCE = ShaderResourceDescriptor.texture(
|
|
53
|
+
"tSkyLutMultiscatter",
|
|
54
|
+
"float"
|
|
55
|
+
);
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene-owned physical atmosphere configuration for Hillaire (2020) sky and aerial scattering.
|
|
3
|
+
*
|
|
4
|
+
* All CPU properties on this class are authored in world-space metres and inverse metres
|
|
5
|
+
* ($\text{m}^{-1}$). {@link write_uniform} converts lengths and coefficients into GPU atmosphere
|
|
6
|
+
* units ($\text{km}$ and $\text{km}^{-1}$, via `ATMOSPHERE_UNIT_METERS`) when uploading to
|
|
7
|
+
* {@link ATMOSPHERE_PARAMETERS_STRUCT}.
|
|
8
|
+
*
|
|
9
|
+
* Mutating parameters in place requires calling {@link invalidate} (or setting `needsUpdate = true`)
|
|
10
|
+
* so {@link GPUSky} and {@link GPULightCollection} know to rebuild the atmosphere LUTs and sky IBL,
|
|
11
|
+
* matching {@link SceneVolumetrics} and {@link LightCollection}. Assigning {@link enabled} bumps
|
|
12
|
+
* {@link version} automatically.
|
|
13
|
+
*
|
|
14
|
+
* @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
|
|
15
|
+
*/
|
|
16
|
+
export class SceneAtmosphere {
|
|
17
|
+
/**
|
|
18
|
+
* Monotonically increasing change counter; bumped by {@link enabled} transitions and
|
|
19
|
+
* {@link invalidate}.
|
|
20
|
+
*
|
|
21
|
+
* @type {number}
|
|
22
|
+
*/
|
|
23
|
+
version: number;
|
|
24
|
+
/**
|
|
25
|
+
* Planet radius from centre to sea level, in metres.
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
planet_radius: number;
|
|
29
|
+
/**
|
|
30
|
+
* Thickness of the atmosphere shell above {@link planet_radius}, in metres.
|
|
31
|
+
* @type {number}
|
|
32
|
+
*/
|
|
33
|
+
atmosphere_height: number;
|
|
34
|
+
/**
|
|
35
|
+
* Exponential scale height of Rayleigh (molecular) density, in metres.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
rayleigh_scale_height: number;
|
|
39
|
+
/**
|
|
40
|
+
* Sea-level Rayleigh scattering coefficients (RGB), in $\text{m}^{-1}$.
|
|
41
|
+
* @type {number[]}
|
|
42
|
+
*/
|
|
43
|
+
rayleigh_scattering: number[];
|
|
44
|
+
/**
|
|
45
|
+
* Exponential scale height of Mie (aerosol) density, in metres.
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
mie_scale_height: number;
|
|
49
|
+
/**
|
|
50
|
+
* Sea-level Mie scattering coefficients (RGB), in $\text{m}^{-1}$.
|
|
51
|
+
* @type {number[]}
|
|
52
|
+
*/
|
|
53
|
+
mie_scattering: number[];
|
|
54
|
+
/**
|
|
55
|
+
* Sea-level Mie extinction coefficients (RGB), in $\text{m}^{-1}$. Mie absorption is derived as
|
|
56
|
+
* `max(mie_extinction - mie_scattering, 0)`.
|
|
57
|
+
* @type {number[]}
|
|
58
|
+
*/
|
|
59
|
+
mie_extinction: number[];
|
|
60
|
+
/**
|
|
61
|
+
* Cornette–Shanks aerosol phase asymmetry factor $g \in (-1, 1)$.
|
|
62
|
+
* @type {number}
|
|
63
|
+
*/
|
|
64
|
+
mie_phase_g: number;
|
|
65
|
+
/**
|
|
66
|
+
* Altitude of peak ozone tent density above sea level, in metres.
|
|
67
|
+
* @type {number}
|
|
68
|
+
*/
|
|
69
|
+
ozone_center_height: number;
|
|
70
|
+
/**
|
|
71
|
+
* Half-width of the symmetric tent profile for ozone density, in metres.
|
|
72
|
+
* @type {number}
|
|
73
|
+
*/
|
|
74
|
+
ozone_half_width: number;
|
|
75
|
+
/**
|
|
76
|
+
* Peak ozone absorption coefficients (RGB), in $\text{m}^{-1}$.
|
|
77
|
+
* @type {number[]}
|
|
78
|
+
*/
|
|
79
|
+
ozone_absorption: number[];
|
|
80
|
+
/**
|
|
81
|
+
* Diffuse Lambertian reflectance (RGB) of the planet surface for multiple scattering and
|
|
82
|
+
* lower-hemisphere ground bounce.
|
|
83
|
+
* @type {number[]}
|
|
84
|
+
*/
|
|
85
|
+
ground_albedo: number[];
|
|
86
|
+
/**
|
|
87
|
+
* Reference observer altitude above sea level (in metres) used when baking the scene-wide
|
|
88
|
+
* octahedral sky IBL map (`GPULightCollection.environment`).
|
|
89
|
+
* @type {number}
|
|
90
|
+
*/
|
|
91
|
+
reference_altitude: number;
|
|
92
|
+
/**
|
|
93
|
+
* Multiplier applied to the sun directional light's irradiance when driving atmospheric
|
|
94
|
+
* scattering.
|
|
95
|
+
* @type {number}
|
|
96
|
+
*/
|
|
97
|
+
sun_irradiance_scale: number;
|
|
98
|
+
/**
|
|
99
|
+
* Whether to synthesise atmospheric skylight from {@link fallback_sun_direction} and
|
|
100
|
+
* {@link fallback_sun_irradiance} when the scene contains no `DirectionalLight` — ensuring
|
|
101
|
+
* sunless scenes still receive outdoor indirect illumination when the atmosphere is enabled.
|
|
102
|
+
* @type {boolean}
|
|
103
|
+
*/
|
|
104
|
+
fallback_sun_enabled: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* World-space unit vector pointing **toward** the fallback sun (+Y up), matching the default
|
|
107
|
+
* orientation of `make_sunlight()`.
|
|
108
|
+
* @type {number[]}
|
|
109
|
+
*/
|
|
110
|
+
fallback_sun_direction: number[];
|
|
111
|
+
/**
|
|
112
|
+
* Extraterrestrial RGB solar irradiance used with {@link fallback_sun_direction} when no
|
|
113
|
+
* `DirectionalLight` is present in the scene.
|
|
114
|
+
* @type {number[]}
|
|
115
|
+
*/
|
|
116
|
+
fallback_sun_irradiance: number[];
|
|
117
|
+
/**
|
|
118
|
+
* @param {boolean} value
|
|
119
|
+
*/
|
|
120
|
+
set enabled(value: boolean);
|
|
121
|
+
/**
|
|
122
|
+
* Whether procedural Hillaire sky IBL and camera sky background are active when
|
|
123
|
+
* `scene.lights.environment` is `undefined`.
|
|
124
|
+
*
|
|
125
|
+
* @returns {boolean}
|
|
126
|
+
*/
|
|
127
|
+
get enabled(): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Whether {@link enabled} was explicitly set by caller code.
|
|
130
|
+
* @returns {boolean}
|
|
131
|
+
*/
|
|
132
|
+
get enabled_explicitly(): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Enable the atmosphere as an engine-supplied default unless caller code already explicitly
|
|
135
|
+
* configured {@link enabled}.
|
|
136
|
+
*/
|
|
137
|
+
enable_by_default(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Mark atmosphere parameters dirty so GPU LUTs and procedural sky IBL rebuild on the next
|
|
140
|
+
* update.
|
|
141
|
+
*/
|
|
142
|
+
invalidate(): void;
|
|
143
|
+
/**
|
|
144
|
+
* Alias matching `LightCollection.needsUpdate`.
|
|
145
|
+
* @param {boolean} value
|
|
146
|
+
*/
|
|
147
|
+
set needsUpdate(value: boolean);
|
|
148
|
+
/**
|
|
149
|
+
* Marshal physical atmosphere parameters (authored in $\text{m}$ and $\text{m}^{-1}$) into a
|
|
150
|
+
* POJO matching {@link ATMOSPHERE_PARAMETERS_STRUCT} (in GPU atmosphere units: $\text{km}$ and
|
|
151
|
+
* $\text{km}^{-1}$).
|
|
152
|
+
*
|
|
153
|
+
* @param {Record<string, any>} [out]
|
|
154
|
+
* @returns {Record<string, any>}
|
|
155
|
+
*/
|
|
156
|
+
write_uniform(out?: Record<string, any>): Record<string, any>;
|
|
157
|
+
/**
|
|
158
|
+
* @readonly
|
|
159
|
+
* @type {boolean}
|
|
160
|
+
*/
|
|
161
|
+
readonly isSceneAtmosphere: boolean;
|
|
162
|
+
#private;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=SceneAtmosphere.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneAtmosphere.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/SceneAtmosphere.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;GAcG;AACH;IAeI;;;;;OAKG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,eAFU,MAAM,CAEU;IAE1B;;;OAGG;IACH,mBAFU,MAAM,CAEY;IAE5B;;;OAGG;IACH,uBAFU,MAAM,CAEc;IAE9B;;;OAGG;IACH,qBAFU,MAAM,EAAE,CAEqC;IAEvD;;;OAGG;IACH,kBAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,gBAFU,MAAM,EAAE,CAE8B;IAEhD;;;;OAIG;IACH,gBAFU,MAAM,EAAE,CAE8B;IAEhD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,qBAFU,MAAM,CAEa;IAE7B;;;OAGG;IACH,kBAFU,MAAM,CAEU;IAE1B;;;OAGG;IACH,kBAFU,MAAM,EAAE,CAEgC;IAElD;;;;OAIG;IACH,eAFU,MAAM,EAAE,CAEc;IAEhC;;;;OAIG;IACH,oBAFU,MAAM,CAES;IAEzB;;;;OAIG;IACH,sBAFU,MAAM,CAEW;IAE3B;;;;;OAKG;IACH,sBAFU,OAAO,CAEW;IAE5B;;;;OAIG;IACH,wBAFU,MAAM,EAAE,CAMhB;IAEF;;;;OAIG;IACH,yBAFU,MAAM,EAAE,CAEwB;IAY1C;;OAEG;IACH,4BASC;IAtBD;;;;;OAKG;IACH,uBAEC;IAgBD;;;OAGG;IACH,kCAEC;IAED;;;OAGG;IACH,0BAKC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,gCAIC;IAED;;;;;;;OAOG;IACH,oBAHW,OAAO,MAAM,EAAE,GAAG,CAAC,GACjB,OAAO,MAAM,EAAE,GAAG,CAAC,CA0D/B;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import {
|
|
3
|
+
INVERSE_METERS_TO_ATMOSPHERE_UNITS,
|
|
4
|
+
METERS_TO_ATMOSPHERE_UNITS,
|
|
5
|
+
MIN_ATMOSPHERE_LENGTH_UNITS
|
|
6
|
+
} from "./ATMOSPHERE_UNIT_SCALE.js";
|
|
7
|
+
import { compute_mie_absorption } from "./compute_mie_absorption.js";
|
|
8
|
+
|
|
9
|
+
const DEFAULT_FALLBACK_SUN_LEN = Math.hypot(0.2, 1.0, -0.2);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {readonly number[]} src
|
|
13
|
+
* @param {number} scale
|
|
14
|
+
* @param {number[]} [out]
|
|
15
|
+
* @returns {number[]}
|
|
16
|
+
*/
|
|
17
|
+
function scale_rgb(src, scale, out = [0, 0, 0]) {
|
|
18
|
+
out[0] = src[0] * scale;
|
|
19
|
+
out[1] = src[1] * scale;
|
|
20
|
+
out[2] = src[2] * scale;
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Scene-owned physical atmosphere configuration for Hillaire (2020) sky and aerial scattering.
|
|
26
|
+
*
|
|
27
|
+
* All CPU properties on this class are authored in world-space metres and inverse metres
|
|
28
|
+
* ($\text{m}^{-1}$). {@link write_uniform} converts lengths and coefficients into GPU atmosphere
|
|
29
|
+
* units ($\text{km}$ and $\text{km}^{-1}$, via `ATMOSPHERE_UNIT_METERS`) when uploading to
|
|
30
|
+
* {@link ATMOSPHERE_PARAMETERS_STRUCT}.
|
|
31
|
+
*
|
|
32
|
+
* Mutating parameters in place requires calling {@link invalidate} (or setting `needsUpdate = true`)
|
|
33
|
+
* so {@link GPUSky} and {@link GPULightCollection} know to rebuild the atmosphere LUTs and sky IBL,
|
|
34
|
+
* matching {@link SceneVolumetrics} and {@link LightCollection}. Assigning {@link enabled} bumps
|
|
35
|
+
* {@link version} automatically.
|
|
36
|
+
*
|
|
37
|
+
* @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
|
|
38
|
+
*/
|
|
39
|
+
export class SceneAtmosphere {
|
|
40
|
+
/**
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
*/
|
|
43
|
+
#enabled = false;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Tracks whether application code explicitly assigned {@link enabled}, allowing
|
|
47
|
+
* {@link GraphicsEngine#set_scene} to enable outdoor sky lighting by default on unconfigured
|
|
48
|
+
* scenes without overriding a caller that deliberately turned it off.
|
|
49
|
+
*
|
|
50
|
+
* @type {boolean}
|
|
51
|
+
*/
|
|
52
|
+
#enabled_explicitly = false;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Monotonically increasing change counter; bumped by {@link enabled} transitions and
|
|
56
|
+
* {@link invalidate}.
|
|
57
|
+
*
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
60
|
+
version = 0;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Planet radius from centre to sea level, in metres.
|
|
64
|
+
* @type {number}
|
|
65
|
+
*/
|
|
66
|
+
planet_radius = 6_378_000;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Thickness of the atmosphere shell above {@link planet_radius}, in metres.
|
|
70
|
+
* @type {number}
|
|
71
|
+
*/
|
|
72
|
+
atmosphere_height = 100_000;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Exponential scale height of Rayleigh (molecular) density, in metres.
|
|
76
|
+
* @type {number}
|
|
77
|
+
*/
|
|
78
|
+
rayleigh_scale_height = 8_000;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Sea-level Rayleigh scattering coefficients (RGB), in $\text{m}^{-1}$.
|
|
82
|
+
* @type {number[]}
|
|
83
|
+
*/
|
|
84
|
+
rayleigh_scattering = [5.802e-6, 13.558e-6, 33.100e-6];
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Exponential scale height of Mie (aerosol) density, in metres.
|
|
88
|
+
* @type {number}
|
|
89
|
+
*/
|
|
90
|
+
mie_scale_height = 1_200;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Sea-level Mie scattering coefficients (RGB), in $\text{m}^{-1}$.
|
|
94
|
+
* @type {number[]}
|
|
95
|
+
*/
|
|
96
|
+
mie_scattering = [3.996e-6, 3.996e-6, 3.996e-6];
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Sea-level Mie extinction coefficients (RGB), in $\text{m}^{-1}$. Mie absorption is derived as
|
|
100
|
+
* `max(mie_extinction - mie_scattering, 0)`.
|
|
101
|
+
* @type {number[]}
|
|
102
|
+
*/
|
|
103
|
+
mie_extinction = [4.440e-6, 4.440e-6, 4.440e-6];
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Cornette–Shanks aerosol phase asymmetry factor $g \in (-1, 1)$.
|
|
107
|
+
* @type {number}
|
|
108
|
+
*/
|
|
109
|
+
mie_phase_g = 0.8;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Altitude of peak ozone tent density above sea level, in metres.
|
|
113
|
+
* @type {number}
|
|
114
|
+
*/
|
|
115
|
+
ozone_center_height = 25_000;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Half-width of the symmetric tent profile for ozone density, in metres.
|
|
119
|
+
* @type {number}
|
|
120
|
+
*/
|
|
121
|
+
ozone_half_width = 15_000;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Peak ozone absorption coefficients (RGB), in $\text{m}^{-1}$.
|
|
125
|
+
* @type {number[]}
|
|
126
|
+
*/
|
|
127
|
+
ozone_absorption = [0.650e-6, 1.881e-6, 0.085e-6];
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Diffuse Lambertian reflectance (RGB) of the planet surface for multiple scattering and
|
|
131
|
+
* lower-hemisphere ground bounce.
|
|
132
|
+
* @type {number[]}
|
|
133
|
+
*/
|
|
134
|
+
ground_albedo = [0.3, 0.3, 0.3];
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Reference observer altitude above sea level (in metres) used when baking the scene-wide
|
|
138
|
+
* octahedral sky IBL map (`GPULightCollection.environment`).
|
|
139
|
+
* @type {number}
|
|
140
|
+
*/
|
|
141
|
+
reference_altitude = 1.0;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Multiplier applied to the sun directional light's irradiance when driving atmospheric
|
|
145
|
+
* scattering.
|
|
146
|
+
* @type {number}
|
|
147
|
+
*/
|
|
148
|
+
sun_irradiance_scale = 1.0;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Whether to synthesise atmospheric skylight from {@link fallback_sun_direction} and
|
|
152
|
+
* {@link fallback_sun_irradiance} when the scene contains no `DirectionalLight` — ensuring
|
|
153
|
+
* sunless scenes still receive outdoor indirect illumination when the atmosphere is enabled.
|
|
154
|
+
* @type {boolean}
|
|
155
|
+
*/
|
|
156
|
+
fallback_sun_enabled = true;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* World-space unit vector pointing **toward** the fallback sun (+Y up), matching the default
|
|
160
|
+
* orientation of `make_sunlight()`.
|
|
161
|
+
* @type {number[]}
|
|
162
|
+
*/
|
|
163
|
+
fallback_sun_direction = [
|
|
164
|
+
0.2 / DEFAULT_FALLBACK_SUN_LEN,
|
|
165
|
+
1.0 / DEFAULT_FALLBACK_SUN_LEN,
|
|
166
|
+
-0.2 / DEFAULT_FALLBACK_SUN_LEN,
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Extraterrestrial RGB solar irradiance used with {@link fallback_sun_direction} when no
|
|
171
|
+
* `DirectionalLight` is present in the scene.
|
|
172
|
+
* @type {number[]}
|
|
173
|
+
*/
|
|
174
|
+
fallback_sun_irradiance = [6.0, 6.0, 6.0];
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Whether procedural Hillaire sky IBL and camera sky background are active when
|
|
178
|
+
* `scene.lights.environment` is `undefined`.
|
|
179
|
+
*
|
|
180
|
+
* @returns {boolean}
|
|
181
|
+
*/
|
|
182
|
+
get enabled() {
|
|
183
|
+
return this.#enabled;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @param {boolean} value
|
|
188
|
+
*/
|
|
189
|
+
set enabled(value) {
|
|
190
|
+
assert.isBoolean(value, "value");
|
|
191
|
+
|
|
192
|
+
this.#enabled_explicitly = true;
|
|
193
|
+
|
|
194
|
+
if (this.#enabled !== value) {
|
|
195
|
+
this.#enabled = value;
|
|
196
|
+
this.version++;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Whether {@link enabled} was explicitly set by caller code.
|
|
202
|
+
* @returns {boolean}
|
|
203
|
+
*/
|
|
204
|
+
get enabled_explicitly() {
|
|
205
|
+
return this.#enabled_explicitly;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Enable the atmosphere as an engine-supplied default unless caller code already explicitly
|
|
210
|
+
* configured {@link enabled}.
|
|
211
|
+
*/
|
|
212
|
+
enable_by_default() {
|
|
213
|
+
if (!this.#enabled_explicitly && !this.#enabled) {
|
|
214
|
+
this.#enabled = true;
|
|
215
|
+
this.version++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Mark atmosphere parameters dirty so GPU LUTs and procedural sky IBL rebuild on the next
|
|
221
|
+
* update.
|
|
222
|
+
*/
|
|
223
|
+
invalidate() {
|
|
224
|
+
this.version++;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Alias matching `LightCollection.needsUpdate`.
|
|
229
|
+
* @param {boolean} value
|
|
230
|
+
*/
|
|
231
|
+
set needsUpdate(value) {
|
|
232
|
+
if (value) {
|
|
233
|
+
this.version++;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Marshal physical atmosphere parameters (authored in $\text{m}$ and $\text{m}^{-1}$) into a
|
|
239
|
+
* POJO matching {@link ATMOSPHERE_PARAMETERS_STRUCT} (in GPU atmosphere units: $\text{km}$ and
|
|
240
|
+
* $\text{km}^{-1}$).
|
|
241
|
+
*
|
|
242
|
+
* @param {Record<string, any>} [out]
|
|
243
|
+
* @returns {Record<string, any>}
|
|
244
|
+
*/
|
|
245
|
+
write_uniform(out = {}) {
|
|
246
|
+
out.planet_radius = Math.max(
|
|
247
|
+
MIN_ATMOSPHERE_LENGTH_UNITS,
|
|
248
|
+
this.planet_radius * METERS_TO_ATMOSPHERE_UNITS
|
|
249
|
+
);
|
|
250
|
+
out.atmosphere_height = Math.max(
|
|
251
|
+
MIN_ATMOSPHERE_LENGTH_UNITS,
|
|
252
|
+
this.atmosphere_height * METERS_TO_ATMOSPHERE_UNITS
|
|
253
|
+
);
|
|
254
|
+
out.rayleigh_scale_height = Math.max(
|
|
255
|
+
MIN_ATMOSPHERE_LENGTH_UNITS,
|
|
256
|
+
this.rayleigh_scale_height * METERS_TO_ATMOSPHERE_UNITS
|
|
257
|
+
);
|
|
258
|
+
out.mie_scale_height = Math.max(
|
|
259
|
+
MIN_ATMOSPHERE_LENGTH_UNITS,
|
|
260
|
+
this.mie_scale_height * METERS_TO_ATMOSPHERE_UNITS
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
out.rayleigh_scattering = scale_rgb(
|
|
264
|
+
this.rayleigh_scattering,
|
|
265
|
+
INVERSE_METERS_TO_ATMOSPHERE_UNITS,
|
|
266
|
+
out.rayleigh_scattering
|
|
267
|
+
);
|
|
268
|
+
// Cornette-Shanks evaluates 0 / 0 along the sun/anti-sun axis when |g| == 1.
|
|
269
|
+
out.mie_phase_g = Math.min(0.999, Math.max(-0.999, this.mie_phase_g));
|
|
270
|
+
|
|
271
|
+
out.mie_scattering = scale_rgb(
|
|
272
|
+
this.mie_scattering,
|
|
273
|
+
INVERSE_METERS_TO_ATMOSPHERE_UNITS,
|
|
274
|
+
out.mie_scattering
|
|
275
|
+
);
|
|
276
|
+
out.ozone_center_height = this.ozone_center_height * METERS_TO_ATMOSPHERE_UNITS;
|
|
277
|
+
|
|
278
|
+
const mie_absorption = compute_mie_absorption(
|
|
279
|
+
this.mie_scattering,
|
|
280
|
+
this.mie_extinction,
|
|
281
|
+
out.mie_absorption ?? [0, 0, 0]
|
|
282
|
+
);
|
|
283
|
+
out.mie_absorption = scale_rgb(
|
|
284
|
+
mie_absorption,
|
|
285
|
+
INVERSE_METERS_TO_ATMOSPHERE_UNITS,
|
|
286
|
+
mie_absorption
|
|
287
|
+
);
|
|
288
|
+
out.ozone_half_width = Math.max(
|
|
289
|
+
MIN_ATMOSPHERE_LENGTH_UNITS,
|
|
290
|
+
this.ozone_half_width * METERS_TO_ATMOSPHERE_UNITS
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
out.ozone_absorption = scale_rgb(
|
|
294
|
+
this.ozone_absorption,
|
|
295
|
+
INVERSE_METERS_TO_ATMOSPHERE_UNITS,
|
|
296
|
+
out.ozone_absorption
|
|
297
|
+
);
|
|
298
|
+
out.ground_albedo = scale_rgb(this.ground_albedo, 1.0, out.ground_albedo);
|
|
299
|
+
|
|
300
|
+
return out;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* @readonly
|
|
306
|
+
* @type {boolean}
|
|
307
|
+
*/
|
|
308
|
+
SceneAtmosphere.prototype.isSceneAtmosphere = true;
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* One direction's contribution to Equations (5) and (7) from
|
|
3
|
-
* second-order in-scattered luminance along `rayDir`, `out_fms` the luminance that would
|
|
4
|
-
*
|
|
5
|
-
* over the direction set -- see {@link chunk_multiscatter_sample_direction} -- by taking the
|
|
6
|
-
* mean, which is what the paper's uniform phase p_u = 1/(4*PI) reduces to.
|
|
7
|
-
*
|
|
8
|
-
* Splitting one direction out of the loop is what lets `shader_multiscatter_lut` put a
|
|
9
|
-
* thread on each of the 64 directions.
|
|
10
|
-
*
|
|
11
|
-
* `pos` is assumed to be inside the atmosphere and at or above the surface, which is what
|
|
12
|
-
* makes the far root of the outer sphere the atmosphere exit.
|
|
2
|
+
* One direction's contribution to Equations (5) and (7) from Hillaire (2020): `out_lum` is the
|
|
3
|
+
* second-order in-scattered luminance along `rayDir`, `out_fms` the luminance that would come back
|
|
4
|
+
* if the medium scattered one unit of light isotropically.
|
|
13
5
|
*
|
|
14
6
|
* @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
|
|
15
|
-
* @see https://www.shadertoy.com/view/slSXRW
|
|
16
7
|
* @type {CodeChunk}
|
|
17
8
|
*/
|
|
18
9
|
export const chunk_get_multiscatter_values: CodeChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_get_multiscatter_values.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_get_multiscatter_values.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,4CAFU,SAAS,CAyGjB;0BAvHwB,iCAAiC"}
|