@woosh/meep-engine 3.50.0 → 3.52.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.
Files changed (180) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/make_default_environment.d.ts.map +1 -1
  3. package/src/engine/graphics3/make_default_environment.js +11 -5
  4. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  5. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -1
  6. package/src/shade/playground/particle_ecs/moonlit_environment.js +11 -5
  7. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
  8. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +3 -1
  9. package/src/shade/playground/tonemap_sdr/README.md +5 -3
  10. package/src/shade/renderer/Renderer.d.ts +1 -1
  11. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  12. package/src/shade/renderer/Renderer.js +43 -15
  13. package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
  14. package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
  15. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts +3 -0
  16. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +1 -1
  17. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.js +11 -8
  18. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -0
  19. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  20. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +227 -215
  21. package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.d.ts.map +1 -1
  22. package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js +2 -0
  23. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.d.ts.map +1 -1
  24. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js +4 -2
  25. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.d.ts.map +1 -1
  26. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js +4 -2
  27. package/src/shade/renderer/deferred/shader_background.d.ts.map +1 -1
  28. package/src/shade/renderer/deferred/shader_background.js +4 -2
  29. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
  30. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
  31. package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
  32. package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
  33. package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
  34. package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
  35. package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
  36. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
  37. package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
  38. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
  39. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
  40. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
  41. package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
  42. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
  43. package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
  44. package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
  45. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
  46. package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
  47. package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
  48. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
  49. package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
  50. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
  51. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
  52. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
  53. package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
  54. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
  55. package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
  56. package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
  57. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
  58. package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
  59. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  60. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  61. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  62. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  63. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  64. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  65. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +3 -1
  66. package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.d.ts.map +1 -1
  67. package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +3 -1
  68. package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.d.ts.map +1 -1
  69. package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +3 -1
  70. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  71. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +3 -1
  72. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  73. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +4 -2
  74. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  75. package/src/shade/renderer/light/GPULightCollection.js +44 -0
  76. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts +2 -1
  77. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts.map +1 -1
  78. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.js +3 -2
  79. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts +14 -0
  80. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts.map +1 -0
  81. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js +25 -0
  82. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  83. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +3 -4
  84. package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts +19 -0
  85. package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts.map +1 -0
  86. package/src/shade/renderer/light/environment/octahedral_skirt_matches.js +67 -0
  87. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts +16 -0
  88. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts.map +1 -0
  89. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.js +35 -0
  90. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts +7 -2
  91. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts.map +1 -1
  92. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +23 -7
  93. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts +8 -2
  94. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
  95. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +24 -7
  96. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts +12 -0
  97. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts.map +1 -0
  98. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.js +54 -0
  99. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +2 -2
  100. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
  101. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +5 -4
  102. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  103. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +13 -9
  104. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
  105. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +3 -1
  106. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  107. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +3 -1
  108. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  109. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +3 -1
  110. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  111. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  112. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +3 -1
  113. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  114. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +3 -1
  115. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  116. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  117. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  118. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +3 -1
  119. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +0 -5
  120. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
  121. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +0 -6
  122. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -1
  123. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +4 -1
  124. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  125. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -0
  126. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  127. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +3 -0
  128. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
  129. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
  130. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
  131. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
  132. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
  133. package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
  134. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
  135. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
  136. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
  137. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
  138. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
  139. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
  140. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
  141. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
  142. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
  143. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
  144. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
  145. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
  146. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts +15 -0
  147. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts.map +1 -0
  148. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js +27 -0
  149. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts +18 -0
  150. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts.map +1 -0
  151. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js +24 -0
  152. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts +18 -1
  153. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts.map +1 -1
  154. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.js +45 -27
  155. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -169
  156. package/src/shade/renderer/volumetrics/NOTES.md +209 -0
  157. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
  158. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +1 -1
  159. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts +36 -0
  160. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts.map +1 -0
  161. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.js +129 -0
  162. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  163. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +75 -0
  164. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts +26 -0
  165. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts.map +1 -0
  166. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.js +110 -0
  167. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  168. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -14
  169. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  170. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +9 -4
  171. package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +31 -0
  172. package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -0
  173. package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.js +139 -0
  174. package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
  175. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
  176. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
  177. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
  178. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
  179. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
  180. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
@@ -1,216 +1,228 @@
1
- import { WebGPUArray } from "../shader/type/WebGPUArray.js";
2
- import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
3
- import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
4
- import {
5
- C_MIE_ABSORPTION_DECLARATION,
6
- C_MIE_SCATTERING_DECLARATION
7
- } from "../shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js";
8
- import { C_OZONE_DECLARATION } from "../shader/chunk/atmosphere/C_OZONE_DECLARATION.js";
9
- import { C_RAYLEIGH_DECLARATION } from "../shader/chunk/atmosphere/C_RAYLEIGH_DECLARATION.js";
10
- import { ATMOSPHERE_RADII_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js";
11
- import { chunk_atmosphere_density } from "../shader/chunk/atmosphere/chunk_atmosphere_density.js";
12
- import { chunk_atmosphere_ray_bounds } from "../shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js";
13
- import {
14
- chunk_position_relative_to_planet_center
15
- } from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
16
-
17
- import {
18
- chunk_phase_mie_cornette_shanks
19
- } from "../shader/chunk/atmosphere/phase/chunk_phase_mie_cornette_shanks.js";
20
- import { chunk_phase_rayleigh } from "../shader/chunk/atmosphere/phase/chunk_phase_rayleigh.js";
21
- import { PLANET_RADIUS_DECLARATION } from "../shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js";
22
- import { chunk_mat4_extract_position } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
23
- import {
24
- chunk_uv_octahedral_unit_decode
25
- } from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
26
- import { chunk_light_get_sun } from "../shader/chunk/light/sky/chunk_sample_sky_color.js";
27
- import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
28
- import { PI_DECLARATION } from "../shader/chunk/math/PI_DECLARATION.js";
29
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
30
- import { ImageShader } from "../shader/ImageShader.js";
31
- import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
32
- import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
33
- import { ATMOSPHERE_ALTITUDE_CUTOFF } from "./ATMOSPHERE_ALTITUDE_CUTOFF.js";
34
-
35
- import { chunk_sample_multiscatter_lut_params } from "./chunk_sample_multiscatter_lut.js";
36
- import { chunk_sample_transmittance_lut_params } from "./chunk_sample_transmittance_lut.js";
37
- import { MIE_G } from "./MIE_G.js";
38
- import { SAMPLER_SKY_LUT } from "./SAMPLER_SKY_LUT.js";
39
-
40
- /**
41
- * Ray-march steps per texel. Compile-time on purpose: as a uniform the march could not be
42
- * unrolled and its trip count had to be re-tested against an f32 every iteration.
43
- * @type {number}
44
- */
45
- const SKY_IRRADIANCE_LUT_STEPS = 32;
46
-
47
- const resources = new ShaderResourceSetDescriptor();
48
-
49
- resources.createGroup()
50
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
51
- // "float" rather than the default "unfilterable-float": both LUTs are rgba16float,
52
- // which is filterable in core WebGPU, so they go through the texture unit rather than a
53
- // 4-tap manual bilinear -- see chunk_sample_transmittance_lut.
54
- .addTexture("tSkyLutTransmittance", "float")
55
- .addTexture("tSkyLutMultiscatter", "float")
56
- .addSampler("sSkyLut", "filtering", SAMPLER_SKY_LUT)
57
- ;
58
-
59
- resources.createGroup()
60
- .addStorageBuffer("light_data", WebGPUArray.u32)
61
-
62
- const chunk_raymarch_scattering = CodeChunk.from(
63
- //language=WGSL
64
- `
65
- const SKY_IRRADIANCE_STEPS = ${SKY_IRRADIANCE_LUT_STEPS}u;
66
- const SKY_IRRADIANCE_STEPS_F = f32(SKY_IRRADIANCE_STEPS);
67
-
68
- fn raymarch_scattering(
69
- origin_rel: vec3<f32>,
70
- ray_dir: vec3<f32>,
71
- sun_dir: vec3<f32>,
72
- tMax: f32
73
- ) -> vec3<f32> {
74
- let cosTheta = dot(ray_dir, sun_dir);
75
-
76
- let miePhaseValue = phase_mie(cosTheta, ${MIE_G});
77
- let rayleighPhaseValue = phase_rayleigh(-cosTheta);
78
-
79
- var lum = vec3(0.0);
80
- var transmittance = vec3(1.0);
81
-
82
- var t = 0.0;
83
- for (var step_i = 0u; step_i < SKY_IRRADIANCE_STEPS; step_i++) {
84
-
85
- let newT = ((f32(step_i) + 0.3)/SKY_IRRADIANCE_STEPS_F)*tMax;
86
- let dt = newT - t;
87
- t = newT;
88
-
89
- // One square root for the whole step. Marching the planet-relative position yields
90
- // the altitude and the up vector from the same length, and both LUT lookups take
91
- // that pair directly -- each used to recover it from a world position of its own,
92
- // which was three lengths and two normalizes per step for one step's worth of work.
93
- let step_rel = origin_rel + t * ray_dir;
94
- let step_radius = length(step_rel);
95
- let up = step_rel / step_radius;
96
-
97
- let local_height = step_radius - ATMOSPHERE_GROUND_RADIUS;
98
- let sun_cos_zenith_angle = dot(sun_dir, up);
99
-
100
- let local_density = atmosphere_density(local_height);
101
-
102
- let ozone_density = local_density.z;
103
- let ozone_absorption = ozone_density * C_OZONE;
104
-
105
- let mie_density = local_density.y;
106
- let mie_absorption = mie_density * C_MIE_ABSORPTION;
107
- let mie_scattering = mie_density * C_MIE_SCATTERING;
108
-
109
- // note - taken from the Hillaire's atmosphere code: https://github.com/sebh/UnrealEngineSkyAtmosphere/blob/183ead5bdacc701b3b626347a680a2f3cd3d4fbd/Resources/RenderSkyCommon.hlsl#L248
110
- let rayleigh_absorption = 0.0;
111
- let rayleigh_scattering = local_density.x * C_RAYLEIGH;
112
-
113
- let extinction = rayleigh_scattering + rayleigh_absorption + mie_scattering + mie_absorption + ozone_absorption;
114
-
115
-
116
- let sample_transmittance = exp( -dt * extinction );
117
-
118
- let sun_transmittance = sample_transmittance_lut_params(local_height, sun_cos_zenith_angle);
119
- let psiMS = sample_multiscatter_lut_params(local_height, sun_cos_zenith_angle);
120
-
121
- let rayleigh_in_scattering = rayleigh_scattering * ( rayleighPhaseValue * sun_transmittance + psiMS );
122
- let mie_in_scattering = mie_scattering * ( miePhaseValue * sun_transmittance + psiMS );
123
- let in_scattering = ( rayleigh_in_scattering + mie_in_scattering );
124
-
125
- // Integrated scattering within path segment.
126
- let scattering_integral = ( in_scattering - in_scattering * sample_transmittance ) / extinction;
127
-
128
- lum += scattering_integral * transmittance;
129
-
130
- transmittance *= sample_transmittance;
131
- }
132
-
133
- return lum;
134
- }
135
- `, [
136
- ATMOSPHERE_RADII_DECLARATION,
137
- chunk_atmosphere_density,
138
- chunk_phase_mie_cornette_shanks,
139
- chunk_phase_rayleigh,
140
- chunk_sample_transmittance_lut_params,
141
- chunk_sample_multiscatter_lut_params,
142
- C_MIE_ABSORPTION_DECLARATION,
143
- C_MIE_SCATTERING_DECLARATION,
144
- C_OZONE_DECLARATION,
145
- C_RAYLEIGH_DECLARATION,
146
- ]
147
- );
148
-
149
- const body = CodeChunk.from(
150
- //language=WGSL
151
- `
152
- @fragment
153
- fn main(
154
- @builtin(position) coord: vec4<f32>,
155
- @location(0) uv: vec2<f32>,
156
- ) -> @location(0) vec4<f32> {
157
-
158
- var actual_view_position = mat4_extract_position(camera.transform);
159
-
160
- let relative_position = position_relative_to_planet_center(actual_view_position);
161
-
162
- let up = normalize(relative_position);
163
-
164
- let height = length(relative_position);
165
-
166
- // force view into valid range
167
- let clamped_height = clamp(height , PLANET_RADIUS + ${ATMOSPHERE_ALTITUDE_CUTOFF}, PLANET_RADIUS + ATMOSPHERE_HEIGHT - ${ATMOSPHERE_ALTITUDE_CUTOFF});
168
-
169
- // planet-relative, which is what both the bounds and the march want
170
- let view_rel = up * clamped_height;
171
-
172
- let rayDir = uv_octahedral_unit_decode(uv);
173
-
174
- let sun = light_get_sun();
175
-
176
- let sunAltitude = ( 0.5 * PI ) - safe_acos( dot(-sun.direction, up) );
177
- let sunDir = vec3(0.0, sin(sunAltitude), -cos(sunAltitude));
178
-
179
- // one quadratic setup for both spheres, rather than two calls sharing an origin and a
180
- // centre that differ only in radius
181
- let bounds = atmosphere_ray_bounds(view_rel, rayDir);
182
-
183
- let lum = raymarch_scattering(view_rel, rayDir, sunDir, bounds.t_max);
184
-
185
- // TODO validate this, it "feels" wrong to me
186
- let irradiance = lum * sun.color;
187
-
188
- return vec4(irradiance, 1.0);
189
-
190
- }
191
- `, [
192
- chunk_safe_acos,
193
- chunk_light_get_sun,
194
- chunk_position_relative_to_planet_center,
195
- chunk_mat4_extract_position,
196
- PLANET_RADIUS_DECLARATION,
197
- ATMOSPHERE_HEIGHT_DECLARATION,
198
- PI_DECLARATION,
199
- chunk_atmosphere_ray_bounds,
200
- chunk_uv_octahedral_unit_decode,
201
- chunk_raymarch_scattering,
202
- ]
203
- );
204
-
205
- export const shader_sky_irradiance_lut = new ImageShader({
206
- descriptor: ShaderDescriptor.from({
207
- label: "Sky / sky irradiance LUT",
208
- body,
209
- resources
210
- }),
211
- targets: [
212
- {
213
- format: "rgba16float"
214
- }
215
- ]
1
+ import { WebGPUArray } from "../shader/type/WebGPUArray.js";
2
+ import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
3
+ import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
4
+ import {
5
+ C_MIE_ABSORPTION_DECLARATION,
6
+ C_MIE_SCATTERING_DECLARATION
7
+ } from "../shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js";
8
+ import { C_OZONE_DECLARATION } from "../shader/chunk/atmosphere/C_OZONE_DECLARATION.js";
9
+ import { C_RAYLEIGH_DECLARATION } from "../shader/chunk/atmosphere/C_RAYLEIGH_DECLARATION.js";
10
+ import { ATMOSPHERE_RADII_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js";
11
+ import { chunk_atmosphere_density } from "../shader/chunk/atmosphere/chunk_atmosphere_density.js";
12
+ import { chunk_atmosphere_ray_bounds } from "../shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js";
13
+ import {
14
+ chunk_position_relative_to_planet_center
15
+ } from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
16
+
17
+ import {
18
+ chunk_phase_mie_cornette_shanks
19
+ } from "../shader/chunk/atmosphere/phase/chunk_phase_mie_cornette_shanks.js";
20
+ import { chunk_phase_rayleigh } from "../shader/chunk/atmosphere/phase/chunk_phase_rayleigh.js";
21
+ import { PLANET_RADIUS_DECLARATION } from "../shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js";
22
+ import { chunk_mat4_extract_position } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
23
+ import {
24
+ chunk_uv_octahedral_unit_decode
25
+ } from "../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
26
+ import { chunk_light_get_sun } from "../shader/chunk/light/sky/chunk_sample_sky_color.js";
27
+ import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
28
+ import { PI_DECLARATION } from "../shader/chunk/math/PI_DECLARATION.js";
29
+ import {
30
+ chunk_texture_octahedral_skirt_texel_uv
31
+ } from "../shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js";
32
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
33
+ import { ImageShader } from "../shader/ImageShader.js";
34
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
35
+ import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
36
+ import { ATMOSPHERE_ALTITUDE_CUTOFF } from "./ATMOSPHERE_ALTITUDE_CUTOFF.js";
37
+
38
+ import { chunk_sample_multiscatter_lut_params } from "./chunk_sample_multiscatter_lut.js";
39
+ import { chunk_sample_transmittance_lut_params } from "./chunk_sample_transmittance_lut.js";
40
+ import { MIE_G } from "./MIE_G.js";
41
+ import { SAMPLER_SKY_LUT } from "./SAMPLER_SKY_LUT.js";
42
+
43
+ /**
44
+ * Ray-march steps per texel. Compile-time on purpose: as a uniform the march could not be
45
+ * unrolled and its trip count had to be re-tested against an f32 every iteration.
46
+ * @type {number}
47
+ */
48
+ const SKY_IRRADIANCE_LUT_STEPS = 32;
49
+
50
+ /**
51
+ * Side of the sky irradiance map, skirt included: it is an environment map like any other, so its
52
+ * level 0 carries the one-texel octahedral skirt (see `texture_octahedral_skirt_uv`).
53
+ * @type {number}
54
+ */
55
+ export const SKY_IRRADIANCE_LUT_RESOLUTION = 1024;
56
+
57
+ const resources = new ShaderResourceSetDescriptor();
58
+
59
+ resources.createGroup()
60
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
61
+ // "float" rather than the default "unfilterable-float": both LUTs are rgba16float,
62
+ // which is filterable in core WebGPU, so they go through the texture unit rather than a
63
+ // 4-tap manual bilinear -- see chunk_sample_transmittance_lut.
64
+ .addTexture("tSkyLutTransmittance", "float")
65
+ .addTexture("tSkyLutMultiscatter", "float")
66
+ .addSampler("sSkyLut", "filtering", SAMPLER_SKY_LUT)
67
+ ;
68
+
69
+ resources.createGroup()
70
+ .addStorageBuffer("light_data", WebGPUArray.u32)
71
+
72
+ const chunk_raymarch_scattering = CodeChunk.from(
73
+ //language=WGSL
74
+ `
75
+ const SKY_IRRADIANCE_STEPS = ${SKY_IRRADIANCE_LUT_STEPS}u;
76
+ const SKY_IRRADIANCE_STEPS_F = f32(SKY_IRRADIANCE_STEPS);
77
+
78
+ fn raymarch_scattering(
79
+ origin_rel: vec3<f32>,
80
+ ray_dir: vec3<f32>,
81
+ sun_dir: vec3<f32>,
82
+ tMax: f32
83
+ ) -> vec3<f32> {
84
+ let cosTheta = dot(ray_dir, sun_dir);
85
+
86
+ let miePhaseValue = phase_mie(cosTheta, ${MIE_G});
87
+ let rayleighPhaseValue = phase_rayleigh(-cosTheta);
88
+
89
+ var lum = vec3(0.0);
90
+ var transmittance = vec3(1.0);
91
+
92
+ var t = 0.0;
93
+ for (var step_i = 0u; step_i < SKY_IRRADIANCE_STEPS; step_i++) {
94
+
95
+ let newT = ((f32(step_i) + 0.3)/SKY_IRRADIANCE_STEPS_F)*tMax;
96
+ let dt = newT - t;
97
+ t = newT;
98
+
99
+ // One square root for the whole step. Marching the planet-relative position yields
100
+ // the altitude and the up vector from the same length, and both LUT lookups take
101
+ // that pair directly -- each used to recover it from a world position of its own,
102
+ // which was three lengths and two normalizes per step for one step's worth of work.
103
+ let step_rel = origin_rel + t * ray_dir;
104
+ let step_radius = length(step_rel);
105
+ let up = step_rel / step_radius;
106
+
107
+ let local_height = step_radius - ATMOSPHERE_GROUND_RADIUS;
108
+ let sun_cos_zenith_angle = dot(sun_dir, up);
109
+
110
+ let local_density = atmosphere_density(local_height);
111
+
112
+ let ozone_density = local_density.z;
113
+ let ozone_absorption = ozone_density * C_OZONE;
114
+
115
+ let mie_density = local_density.y;
116
+ let mie_absorption = mie_density * C_MIE_ABSORPTION;
117
+ let mie_scattering = mie_density * C_MIE_SCATTERING;
118
+
119
+ // note - taken from the Hillaire's atmosphere code: https://github.com/sebh/UnrealEngineSkyAtmosphere/blob/183ead5bdacc701b3b626347a680a2f3cd3d4fbd/Resources/RenderSkyCommon.hlsl#L248
120
+ let rayleigh_absorption = 0.0;
121
+ let rayleigh_scattering = local_density.x * C_RAYLEIGH;
122
+
123
+ let extinction = rayleigh_scattering + rayleigh_absorption + mie_scattering + mie_absorption + ozone_absorption;
124
+
125
+
126
+ let sample_transmittance = exp( -dt * extinction );
127
+
128
+ let sun_transmittance = sample_transmittance_lut_params(local_height, sun_cos_zenith_angle);
129
+ let psiMS = sample_multiscatter_lut_params(local_height, sun_cos_zenith_angle);
130
+
131
+ let rayleigh_in_scattering = rayleigh_scattering * ( rayleighPhaseValue * sun_transmittance + psiMS );
132
+ let mie_in_scattering = mie_scattering * ( miePhaseValue * sun_transmittance + psiMS );
133
+ let in_scattering = ( rayleigh_in_scattering + mie_in_scattering );
134
+
135
+ // Integrated scattering within path segment.
136
+ let scattering_integral = ( in_scattering - in_scattering * sample_transmittance ) / extinction;
137
+
138
+ lum += scattering_integral * transmittance;
139
+
140
+ transmittance *= sample_transmittance;
141
+ }
142
+
143
+ return lum;
144
+ }
145
+ `, [
146
+ ATMOSPHERE_RADII_DECLARATION,
147
+ chunk_atmosphere_density,
148
+ chunk_phase_mie_cornette_shanks,
149
+ chunk_phase_rayleigh,
150
+ chunk_sample_transmittance_lut_params,
151
+ chunk_sample_multiscatter_lut_params,
152
+ C_MIE_ABSORPTION_DECLARATION,
153
+ C_MIE_SCATTERING_DECLARATION,
154
+ C_OZONE_DECLARATION,
155
+ C_RAYLEIGH_DECLARATION,
156
+ ]
157
+ );
158
+
159
+ const body = CodeChunk.from(
160
+ //language=WGSL
161
+ `
162
+ @fragment
163
+ fn main(
164
+ @builtin(position) coord: vec4<f32>,
165
+ @location(0) uv: vec2<f32>,
166
+ ) -> @location(0) vec4<f32> {
167
+
168
+ var actual_view_position = mat4_extract_position(camera.transform);
169
+
170
+ let relative_position = position_relative_to_planet_center(actual_view_position);
171
+
172
+ let up = normalize(relative_position);
173
+
174
+ let height = length(relative_position);
175
+
176
+ // force view into valid range
177
+ let clamped_height = clamp(height , PLANET_RADIUS + ${ATMOSPHERE_ALTITUDE_CUTOFF}, PLANET_RADIUS + ATMOSPHERE_HEIGHT - ${ATMOSPHERE_ALTITUDE_CUTOFF});
178
+
179
+ // planet-relative, which is what both the bounds and the march want
180
+ let view_rel = up * clamped_height;
181
+
182
+ // skirt texels compute their interior twin's direction, so the skirt is a copy of it
183
+ let rayDir = uv_octahedral_unit_decode(texture_octahedral_skirt_texel_uv(vec2<u32>(coord.xy), ${SKY_IRRADIANCE_LUT_RESOLUTION}u));
184
+
185
+ let sun = light_get_sun();
186
+
187
+ let sunAltitude = ( 0.5 * PI ) - safe_acos( dot(-sun.direction, up) );
188
+ let sunDir = vec3(0.0, sin(sunAltitude), -cos(sunAltitude));
189
+
190
+ // one quadratic setup for both spheres, rather than two calls sharing an origin and a
191
+ // centre that differ only in radius
192
+ let bounds = atmosphere_ray_bounds(view_rel, rayDir);
193
+
194
+ let lum = raymarch_scattering(view_rel, rayDir, sunDir, bounds.t_max);
195
+
196
+ // TODO validate this, it "feels" wrong to me
197
+ let irradiance = lum * sun.color;
198
+
199
+ return vec4(irradiance, 1.0);
200
+
201
+ }
202
+ `, [
203
+ chunk_safe_acos,
204
+ chunk_light_get_sun,
205
+ chunk_position_relative_to_planet_center,
206
+ chunk_mat4_extract_position,
207
+ PLANET_RADIUS_DECLARATION,
208
+ ATMOSPHERE_HEIGHT_DECLARATION,
209
+ PI_DECLARATION,
210
+ chunk_atmosphere_ray_bounds,
211
+ chunk_uv_octahedral_unit_decode,
212
+ chunk_texture_octahedral_skirt_texel_uv,
213
+ chunk_raymarch_scattering,
214
+ ]
215
+ );
216
+
217
+ export const shader_sky_irradiance_lut = new ImageShader({
218
+ descriptor: ShaderDescriptor.from({
219
+ label: "Sky / sky irradiance LUT",
220
+ body,
221
+ resources
222
+ }),
223
+ targets: [
224
+ {
225
+ format: "rgba16float"
226
+ }
227
+ ]
216
228
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SHADING_LIGHT_RESOURCE_GROUP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js"],"names":[],"mappings":"AAUA,yEAAgF;8CAHlC,qDAAqD"}
1
+ {"version":3,"file":"SHADING_LIGHT_RESOURCE_GROUP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js"],"names":[],"mappings":"AAWA,yEAAgF;8CAJlC,qDAAqD"}
@@ -7,12 +7,14 @@ import { ENVIRONMENT_MAP_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_R
7
7
  import { LIGHT_DATA_RESOURCE } from "../light/LIGHT_DATA_RESOURCE.js";
8
8
  import { ShaderResourceGroupDescriptor } from "../shader/resource/ShaderResourceGroupDescriptor.js";
9
9
  import { SHADOWMAP_ATLAS_RESOURCE, SHADOWMAP_COMPARE_SAMPLER_RESOURCE } from "../shadow/map/SHADOWMAP_RESOURCES.js";
10
+ import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
10
11
 
11
12
  export const SHADING_LIGHT_RESOURCE_GROUP = new ShaderResourceGroupDescriptor();
12
13
 
13
14
  SHADING_LIGHT_RESOURCE_GROUP
14
15
  .add(LIGHT_DATA_RESOURCE)
15
16
  .add(ENVIRONMENT_MAP_RESOURCE)
17
+ .add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
16
18
  // clusters
17
19
  .add(LIGHT_CLUSTER_PARAMETERS_RESOURCE)
18
20
  .add(LIGHT_CLUSTER_LOOKUP_RESOURCE)
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_get_ibl_irradiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,uCAFU,SAAS,CAYjB;0BAjBwB,oCAAoC"}
1
+ {"version":3,"file":"chunk_get_ibl_irradiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,uCAFU,SAAS,CAYjB;0BAlBwB,oCAAoC"}
@@ -2,6 +2,7 @@ import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
2
2
  import { chunk_sample_environment_map } from "../../shader/chunk/texture/sample/chunk_sample_environment_map.js";
3
3
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
4
  import { ENVIRONMENT_MAP_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_RESOURCE.js";
5
+ import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
5
6
 
6
7
  /**
7
8
  * see https://github.com/mrdoob/three.js/blob/089e36db16a6fbaf8cd12fbc8b6abfa3beaa4801/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js#L4
@@ -11,7 +12,7 @@ export const chunk_get_ibl_irradiance = CodeChunk.from(
11
12
  //language=WGSL
12
13
  `
13
14
  fn get_ibl_irradiance(normal: vec3<f32>) -> vec3<f32> {
14
- return sample_environment_map(tEnvironment, normal, 1.0) * PI;
15
+ return sample_environment_map(tEnvironment, sEnvironment, normal, 1.0) * PI;
15
16
  }
16
17
  `, [
17
18
  chunk_sample_environment_map,
@@ -19,4 +20,5 @@ fn get_ibl_irradiance(normal: vec3<f32>) -> vec3<f32> {
19
20
  ]
20
21
  );
21
22
 
22
- chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
23
+ chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
24
+ chunk_get_ibl_irradiance.requireResource(ENVIRONMENT_MAP_SAMPLER_RESOURCE);
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_get_ibl_radiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qCAFU,SAAS,CAqBZ;0BA1BmB,oCAAoC"}
1
+ {"version":3,"file":"chunk_get_ibl_radiance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,qCAFU,SAAS,CAqBZ;0BA3BmB,oCAAoC"}
@@ -2,6 +2,7 @@ import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
2
2
  import { chunk_sample_environment_map } from "../../shader/chunk/texture/sample/chunk_sample_environment_map.js";
3
3
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
4
  import { ENVIRONMENT_MAP_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_RESOURCE.js";
5
+ import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
5
6
 
6
7
  /**
7
8
  * @see https://github.com/mrdoob/three.js/blob/ac8d338cc4de9c9529cbdb0d256eb0fc50a86a93/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js#L22
@@ -21,11 +22,12 @@ fn get_ibl_radiance(
21
22
  // Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
22
23
  let sample_vector = normalize( mix( reflection_direction, normal_ws, roughness * roughness) );
23
24
 
24
- return sample_environment_map(tEnvironment, sample_vector, roughness );
25
+ return sample_environment_map(tEnvironment, sEnvironment, sample_vector, roughness );
25
26
  }
26
27
  `, [
27
28
  chunk_sample_environment_map,
28
29
  PI_DECLARATION,
29
30
  ]);
30
31
 
31
- chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
32
+ chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_RESOURCE);
33
+ chunk_get_ibl_radiance.requireResource(ENVIRONMENT_MAP_SAMPLER_RESOURCE);
@@ -1 +1 @@
1
- {"version":3,"file":"shader_background.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/shader_background.js"],"names":[],"mappings":"AA8CA,4CAiBE;4BA1D0B,0BAA0B"}
1
+ {"version":3,"file":"shader_background.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/deferred/shader_background.js"],"names":[],"mappings":"AAgDA,4CAiBE;4BA5D0B,0BAA0B"}
@@ -7,12 +7,14 @@ import { ImageShader } from "../shader/ImageShader.js";
7
7
  import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
8
  import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
9
9
  import { VIEW_UNIFORM_STRUCT } from "../view/VIEW_UNIFORM_STRUCT.js";
10
+ import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
10
11
 
11
12
  const resources = new ShaderResourceSetDescriptor();
12
13
  resources.createGroup()
13
14
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
14
15
  .addUniform("view", VIEW_UNIFORM_STRUCT)
15
- .addTexture("tEnvironment")
16
+ .addTexture("tEnvironment", "float")
17
+ .add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
16
18
  .addSampler("sLinear", "filtering", SamplerDescriptor.from({
17
19
  magFilter: "linear",
18
20
  }))
@@ -35,7 +37,7 @@ fn main(
35
37
  // The direction is the unprojected vector itself (ignoring translation implicitly)
36
38
  let view_direction = normalize(world_dir_h.xyz);
37
39
 
38
- result = sample_environment_color(tEnvironment, view_direction);
40
+ result = sample_environment_color(tEnvironment, sEnvironment, view_direction);
39
41
 
40
42
  return vec4(result, 1.0);
41
43
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * What {@link shader_tonemap_HDR_aces} binds as `aces2_tables`: two ACES 2.0 output transforms, each its parameters and
3
+ * gamut tables, both limited to Rec.709, the gamut of the SDR picture they expand.
4
+ *
5
+ * 1. An SDR display, 100 cd/m². The pass runs it backwards, from the SDR picture to the scene.
6
+ * 2. This display: the peak over the paper white, times 100 cd/m². A display at or under the paper white gets
7
+ * 100 cd/m², which the pass does not read.
8
+ *
9
+ * Both take SDR white for 100 cd/m², ACES 2.0's reference, so an SDR picture expanded for a display keeps SDR white
10
+ * where the paper white puts it.
11
+ *
12
+ * Building one transform takes 7 to 13 ms, so the tables are built on the first {@link update} rather than with the
13
+ * renderer, and again only when the display's peak changes.
14
+ */
15
+ export class TonemapAces2Tables {
16
+ /**
17
+ * Both blocks, the SDR one first. Zero until the first {@link update}.
18
+ * @type {Float32Array}
19
+ */
20
+ data: Float32Array;
21
+ /**
22
+ * Build the tables for a display, if they are not built for it already.
23
+ *
24
+ * @param {number} peak_nits the display's peak, cd/m²
25
+ * @returns {boolean} whether {@link data} changed
26
+ */
27
+ update(peak_nits: number): boolean;
28
+ /**
29
+ * The tables on the device, written if they changed since the last call.
30
+ *
31
+ * @param {GPUDevice} device
32
+ * @returns {GPUBuffer}
33
+ */
34
+ gpu_buffer(device: GPUDevice): GPUBuffer;
35
+ destroy(): void;
36
+ #private;
37
+ }
38
+ //# sourceMappingURL=TonemapAces2Tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TonemapAces2Tables.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH;IACI;;;OAGG;IACH,MAFU,YAAY,CAE0B;IAWhD;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAsBnB;IAED;;;;;OAKG;IACH,yCAgBC;IAED,gBAKC;;CACJ"}