@woosh/meep-engine 3.34.0 → 3.36.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 (161) hide show
  1. package/package.json +1 -1
  2. package/src/engine/Engine.d.ts +2 -0
  3. package/src/engine/Engine.d.ts.map +1 -1
  4. package/src/engine/Engine.js +5 -1
  5. package/src/engine/input/devices/XRInputDevice.d.ts +63 -0
  6. package/src/engine/input/devices/XRInputDevice.d.ts.map +1 -0
  7. package/src/engine/input/devices/XRInputDevice.js +386 -0
  8. package/src/engine/input/devices/xr/XRInputAction.d.ts +37 -0
  9. package/src/engine/input/devices/xr/XRInputAction.d.ts.map +1 -0
  10. package/src/engine/input/devices/xr/XRInputAction.js +85 -0
  11. package/src/engine/input/devices/xr/XRInputButton.d.ts +28 -0
  12. package/src/engine/input/devices/xr/XRInputButton.d.ts.map +1 -0
  13. package/src/engine/input/devices/xr/XRInputButton.js +43 -0
  14. package/src/engine/input/devices/xr/XRInputCoordinates.d.ts +15 -0
  15. package/src/engine/input/devices/xr/XRInputCoordinates.d.ts.map +1 -0
  16. package/src/engine/input/devices/xr/XRInputCoordinates.js +21 -0
  17. package/src/engine/input/devices/xr/XRInputHandle.d.ts +63 -0
  18. package/src/engine/input/devices/xr/XRInputHandle.d.ts.map +1 -0
  19. package/src/engine/input/devices/xr/XRInputHandle.js +171 -0
  20. package/src/engine/input/devices/xr/XRInputPose.d.ts +23 -0
  21. package/src/engine/input/devices/xr/XRInputPose.d.ts.map +1 -0
  22. package/src/engine/input/devices/xr/XRInputPose.js +36 -0
  23. package/src/engine/input/devices/xr/XRInputTypes.d.ts +76 -0
  24. package/src/engine/input/devices/xr/XRInputTypes.d.ts.map +1 -0
  25. package/src/engine/input/devices/xr/XRInputTypes.js +31 -0
  26. package/src/engine/input/devices/xr/XRInputValueSource.d.ts +11 -0
  27. package/src/engine/input/devices/xr/XRInputValueSource.d.ts.map +1 -0
  28. package/src/engine/input/devices/xr/XRInputValueSource.js +11 -0
  29. package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.d.ts +15 -1
  30. package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.d.ts.map +1 -1
  31. package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.js +9 -0
  32. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts +15 -4
  33. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts.map +1 -1
  34. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.js +22 -0
  35. package/src/engine/input/ecs/ism/coordinate/InputCoordinateSwitches.d.ts +17 -2
  36. package/src/engine/input/ecs/ism/coordinate/InputCoordinateSwitches.d.ts.map +1 -1
  37. package/src/engine/input/ecs/ism/device/GamepadInputDeviceAdapter.d.ts +5 -0
  38. package/src/engine/input/ecs/ism/device/GamepadInputDeviceAdapter.d.ts.map +1 -1
  39. package/src/engine/input/ecs/ism/device/InputDeviceAdapter.d.ts +2 -0
  40. package/src/engine/input/ecs/ism/device/InputDeviceAdapter.d.ts.map +1 -1
  41. package/src/engine/input/ecs/ism/device/InputDeviceAdapter.js +2 -0
  42. package/src/engine/input/ecs/ism/device/KeyboardInputDeviceAdapter.d.ts +7 -0
  43. package/src/engine/input/ecs/ism/device/KeyboardInputDeviceAdapter.d.ts.map +1 -1
  44. package/src/engine/input/ecs/ism/device/ManualInputDeviceAdapter.d.ts +5 -0
  45. package/src/engine/input/ecs/ism/device/ManualInputDeviceAdapter.d.ts.map +1 -1
  46. package/src/engine/input/ecs/ism/device/PointerInputDeviceAdapter.d.ts +5 -0
  47. package/src/engine/input/ecs/ism/device/PointerInputDeviceAdapter.d.ts.map +1 -1
  48. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts +16 -0
  49. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts.map +1 -0
  50. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.js +54 -0
  51. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts +9 -0
  52. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts.map +1 -0
  53. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.js +12 -0
  54. package/src/engine/input/ecs/ism/trigger/InputTrigger.d.ts +11 -1
  55. package/src/engine/input/ecs/ism/trigger/InputTrigger.d.ts.map +1 -1
  56. package/src/engine/input/ecs/ism/trigger/InputTrigger.js +7 -0
  57. package/src/engine/input/ecs/ism/trigger/InputTriggerChord.d.ts +16 -2
  58. package/src/engine/input/ecs/ism/trigger/InputTriggerChord.d.ts.map +1 -1
  59. package/src/engine/input/ecs/ism/trigger/InputTriggerHold.d.ts +22 -2
  60. package/src/engine/input/ecs/ism/trigger/InputTriggerHold.d.ts.map +1 -1
  61. package/src/engine/input/ecs/ism/trigger/InputTriggerRelease.d.ts +16 -2
  62. package/src/engine/input/ecs/ism/trigger/InputTriggerRelease.d.ts.map +1 -1
  63. package/src/engine/input/ecs/ism/trigger/InputTriggerSequence.d.ts +24 -4
  64. package/src/engine/input/ecs/ism/trigger/InputTriggerSequence.d.ts.map +1 -1
  65. package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.d.ts +6 -8
  66. package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.d.ts.map +1 -1
  67. package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.js +5 -0
  68. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts +7 -0
  69. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts.map +1 -0
  70. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.js +15 -0
  71. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  72. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +25 -11
  73. package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
  74. package/src/shade/device/timing/profile/GPUProfileSession.js +553 -474
  75. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  76. package/src/shade/playground/avboit/main.js +888 -916
  77. package/src/shade/playground/particle_ecs/README.md +13 -7
  78. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +5 -5
  79. package/src/shade/playground/particle_ecs/bonfire_effects.js +5 -5
  80. package/src/shade/playground/particle_ecs/effects/smoke.json +1859 -1859
  81. package/src/shade/playground/particle_ecs/effects/soot.json +1605 -1605
  82. package/src/shade/playground/particle_system/README.md +1 -2
  83. package/src/shade/playground/profile_hotkey.d.ts.map +1 -1
  84. package/src/shade/playground/profile_hotkey.js +4 -40
  85. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  86. package/src/shade/playground/skinned_blas_refit/main.js +4 -39
  87. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  88. package/src/shade/playground/volumetrics_froxel/main.js +4 -39
  89. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  90. package/src/shade/playground/volumetrics_froxel/measure.js +2 -4
  91. package/src/shade/renderer/Renderer.d.ts +1 -1
  92. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  93. package/src/shade/renderer/Renderer.js +3 -1
  94. package/src/shade/renderer/light/GPULightCollection.d.ts +9 -1
  95. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  96. package/src/shade/renderer/light/GPULightCollection.js +41 -0
  97. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +37 -0
  98. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -0
  99. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +105 -0
  100. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  101. package/src/shade/renderer/particles/DESIGN.md +65 -8
  102. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +7 -1
  103. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  104. package/src/shade/renderer/particles/GPUParticleSystem.js +1247 -1244
  105. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +7 -1
  106. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  107. package/src/shade/renderer/particles/graph_particles_avboit.js +9 -0
  108. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  109. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +4 -2
  110. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +15 -9
  111. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  112. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +29 -11
  113. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts +24 -0
  114. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts.map +1 -0
  115. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.js +45 -0
  116. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +3 -0
  117. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  118. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -0
  119. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  120. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +190 -185
  121. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +8 -0
  122. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  123. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +5 -0
  124. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -1
  125. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  126. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +9 -0
  127. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +13 -3
  128. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  129. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +9 -1
  130. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +39 -0
  131. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -0
  132. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +107 -0
  133. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +15 -0
  134. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +1 -0
  135. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +44 -0
  136. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +19 -0
  137. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +1 -0
  138. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +48 -0
  139. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +29 -0
  140. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +1 -0
  141. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +90 -0
  142. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts +10 -0
  143. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts.map +1 -0
  144. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.js +55 -0
  145. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts +10 -0
  146. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts.map +1 -0
  147. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.js +47 -0
  148. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts +10 -0
  149. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts.map +1 -0
  150. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.js +63 -0
  151. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +17 -0
  152. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +1 -0
  153. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +26 -0
  154. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +8 -1
  155. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  156. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +50 -2
  157. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  158. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +488 -436
  159. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +1 -1
  160. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  161. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +254 -63
@@ -0,0 +1,26 @@
1
+ import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
2
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
3
+ import { VOLUMETRICS_METADATA_STRUCT } from "../VOLUMETRICS_METADATA_STRUCT.js";
4
+
5
+ /**
6
+ * The bindings every froxel GI module has, whatever its mode reads: where the froxels are, and the
7
+ * two volumes it writes (`chunk_volumetrics_gi`). rgba16float for both, because rg16float is not a
8
+ * storage format without texture-formats-tier1.
9
+ *
10
+ * @returns {ShaderResourceGroupDescriptor}
11
+ */
12
+ export function volumetrics_gi_resource_group() {
13
+ return new ShaderResourceGroupDescriptor()
14
+ .addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
15
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
16
+ .addStorageTexture("tGIY", "rgba16float", "3d", "write-only")
17
+ .addStorageTexture("tGICoCg", "rgba16float", "3d", "write-only");
18
+ }
19
+
20
+ /**
21
+ * Workgroup shape of every froxel GI module, `[x, y, z]` in froxels: flat in z like the lighting
22
+ * pass, and 64 invocations.
23
+ *
24
+ * @type {number[]}
25
+ */
26
+ export const VOLUMETRICS_GI_WORKGROUP_RESOLUTION = [8, 8, 1];
@@ -29,11 +29,13 @@ export function graph_integrate_sky({ graph }: {
29
29
  * `[1, 1, 1]` when the froxels are marching instead, which keeps the passes in the graph without
30
30
  * doing any work
31
31
  * @param {number} options.volumetrics_metadata
32
+ * @param {import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode} options.indirect_lighting_mode which froxel GI module starts the
33
+ * froxel irradiance volume (`gi/graph_build_froxel_gi`)
32
34
  * @param {number} [options.taa_history] imported previous-frame accumulated scattering volume
33
35
  * @param {number} [options.taa_output] imported destination for this frame's accumulated scattering volume
34
36
  * @param {GPUCameraContext} [options.camera_previous] previous-frame camera, for temporal reprojection
35
37
  */
36
- export function graph_build_volumetrics({ graph, camera, lights, view, light_cluster_data, light_cluster_lookup, light_cluster_parameters, shadowmap_atlas, volumetric_resolution, sun_shadow_resolution, volumetrics_metadata, taa_history, taa_output, camera_previous, }: {
38
+ export function graph_build_volumetrics({ graph, camera, lights, view, light_cluster_data, light_cluster_lookup, light_cluster_parameters, shadowmap_atlas, volumetric_resolution, sun_shadow_resolution, volumetrics_metadata, indirect_lighting_mode, taa_history, taa_output, camera_previous, }: {
37
39
  graph: FrameGraph;
38
40
  camera: GPUCameraContext;
39
41
  lights: GPULightCollection;
@@ -45,6 +47,7 @@ export function graph_build_volumetrics({ graph, camera, lights, view, light_clu
45
47
  volumetric_resolution: number[];
46
48
  sun_shadow_resolution: number[];
47
49
  volumetrics_metadata: number;
50
+ indirect_lighting_mode: import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode;
48
51
  taa_history?: number;
49
52
  taa_output?: number;
50
53
  camera_previous?: GPUCameraContext;
@@ -52,6 +55,10 @@ export function graph_build_volumetrics({ graph, camera, lights, view, light_clu
52
55
  lut_transmittance: number;
53
56
  lut_multiple_scattering: number;
54
57
  lut_aerial: any;
58
+ irradiance: {
59
+ Y: number;
60
+ CoCg: number;
61
+ };
55
62
  volumetrics_metadata: number;
56
63
  };
57
64
  //# sourceMappingURL=graph_build_volumetrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"AAyBA;;;;;;;;GAQG;AACH;IAH+B,KAAK;IACvB;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,CA8DjE;AAuTD;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAjB+B,KAAK;IACC,MAAM;IACJ,MAAM;IACV,IAAI;IACZ,kBAAkB,EAAlC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACU,eAAe,EAA/B,MAAM;IACY,qBAAqB,EAAvC,MAAM,EAAE;IACU,qBAAqB,EAAvC,MAAM,EAAE;IAGQ,oBAAoB,EAApC,MAAM;IACW,WAAW,GAA5B,MAAM;IACW,UAAU,GAA3B,MAAM;IACqB,eAAe;;;;;;EA0KpD"}
1
+ {"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"AA0BA;;;;;;;;GAQG;AACH;IAH+B,KAAK;IACvB;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,CA8DjE;AAqVD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAnB+B,KAAK;IACC,MAAM;IACJ,MAAM;IACV,IAAI;IACZ,kBAAkB,EAAlC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACU,eAAe,EAA/B,MAAM;IACY,qBAAqB,EAAvC,MAAM,EAAE;IACU,qBAAqB,EAAvC,MAAM,EAAE;IAGQ,oBAAoB,EAApC,MAAM;IACuE,sBAAsB,EAAnG,OAAO,iCAAiC,EAAE,yBAAyB;IAElD,WAAW,GAA5B,MAAM;IACW,UAAU,GAA3B,MAAM;IACqB,eAAe;;;;;;WAjKH,MAAM;cAAQ,MAAM;;;EA0VrE"}
@@ -17,6 +17,7 @@ import {
17
17
  shader_volumetrics_build_sun_shadow_volume_seeded
18
18
  } from "./shader_volumetrics_build_sun_shadow_volume.js";
19
19
  import { shader_volumetrics_taa } from "./taa/shader_volumetrics_taa.js";
20
+ import { graph_build_froxel_gi } from "./gi/graph_build_froxel_gi.js";
20
21
  import {
21
22
  VOLUMETRICS_SUN_SHADOW_CASCADE_COUNT,
22
23
  VOLUMETRICS_SUN_SHADOW_WORKGROUP_RESOLUTION,
@@ -291,6 +292,9 @@ function graph_build_sun_shadow_volume({
291
292
  * @param view
292
293
  * @param camera
293
294
  * @param resolution
295
+ * @param {{Y: number, CoCg: number}} gi the froxel GI stage's volume, which the irradiance starts from
296
+ * @returns {{scattering: number, irradiance: {Y: number, CoCg: number}}} the lit scattering volume,
297
+ * and the froxel irradiance volume: the GI plus the same lights (chunk_volumetrics_irradiance_sh)
294
298
  */
295
299
  function graph_integrate_light_scattering({
296
300
  graph,
@@ -308,6 +312,7 @@ function graph_integrate_light_scattering({
308
312
  view,
309
313
  camera,
310
314
  resolution,
315
+ gi,
311
316
  }) {
312
317
 
313
318
  const data = {};
@@ -352,6 +357,10 @@ function graph_integrate_light_scattering({
352
357
  tParticipatingMedia0: participating_media0.obtainView(),
353
358
  tParticipatingMedia1: participating_media1.obtainView(),
354
359
  tLighting: output.obtainView(DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR),
360
+ tGIY: resources.get(data.gi_Y).obtainView(),
361
+ tGICoCg: resources.get(data.gi_CoCg).obtainView(),
362
+ tIrradianceY: resources.get(data.irradiance_Y).obtainView(DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR),
363
+ tIrradianceCoCg: resources.get(data.irradiance_CoCg).obtainView(DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR),
355
364
  //
356
365
  light_data: lights.buffer_data,
357
366
 
@@ -391,6 +400,9 @@ function graph_integrate_light_scattering({
391
400
  data.sun_multiple_scattering_lut = pass.read(sun_multiple_scattering_lut);
392
401
  data.sun_shadow_cascades = sun_shadow_cascades.map(handle => pass.read(handle));
393
402
 
403
+ data.gi_Y = pass.read(gi.Y);
404
+ data.gi_CoCg = pass.read(gi.CoCg);
405
+
394
406
  data.output = pass.create("Light Scattering LUT", TextureResourceDescriptor.from({
395
407
  resolution,
396
408
  dimension: "3d",
@@ -398,8 +410,27 @@ function graph_integrate_light_scattering({
398
410
  usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT
399
411
  }));
400
412
 
413
+ data.irradiance_Y = pass.create("Froxel Irradiance Y", TextureResourceDescriptor.from({
414
+ resolution,
415
+ dimension: "3d",
416
+ format: "rgba16float",
417
+ usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING
418
+ }));
401
419
 
402
- return data.output;
420
+ data.irradiance_CoCg = pass.create("Froxel Irradiance CoCg", TextureResourceDescriptor.from({
421
+ resolution,
422
+ dimension: "3d",
423
+ format: "rgba16float",
424
+ usage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING
425
+ }));
426
+
427
+ return {
428
+ scattering: data.output,
429
+ irradiance: {
430
+ Y: data.irradiance_Y,
431
+ CoCg: data.irradiance_CoCg,
432
+ },
433
+ };
403
434
 
404
435
  }
405
436
 
@@ -419,6 +450,8 @@ function graph_integrate_light_scattering({
419
450
  * `[1, 1, 1]` when the froxels are marching instead, which keeps the passes in the graph without
420
451
  * doing any work
421
452
  * @param {number} options.volumetrics_metadata
453
+ * @param {import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode} options.indirect_lighting_mode which froxel GI module starts the
454
+ * froxel irradiance volume (`gi/graph_build_froxel_gi`)
422
455
  * @param {number} [options.taa_history] imported previous-frame accumulated scattering volume
423
456
  * @param {number} [options.taa_output] imported destination for this frame's accumulated scattering volume
424
457
  * @param {GPUCameraContext} [options.camera_previous] previous-frame camera, for temporal reprojection
@@ -435,6 +468,7 @@ export function graph_build_volumetrics({
435
468
  volumetric_resolution,
436
469
  sun_shadow_resolution,
437
470
  volumetrics_metadata,
471
+ indirect_lighting_mode,
438
472
  taa_history,
439
473
  taa_output,
440
474
  camera_previous,
@@ -468,7 +502,20 @@ export function graph_build_volumetrics({
468
502
  resolution: sun_shadow_resolution,
469
503
  });
470
504
 
471
- const light_scattering_lut = graph_integrate_light_scattering({
505
+ const gi = graph_build_froxel_gi({
506
+ graph,
507
+ indirect_lighting_mode,
508
+ scene_ctx: view.scene,
509
+ camera,
510
+ volumetrics_metadata,
511
+ resolution: volumetric_resolution,
512
+ });
513
+
514
+ const {
515
+ scattering: light_scattering_lut,
516
+ irradiance,
517
+ } = graph_integrate_light_scattering({
518
+ gi,
472
519
  graph,
473
520
  resolution: volumetric_resolution,
474
521
  camera,
@@ -589,6 +636,7 @@ export function graph_build_volumetrics({
589
636
  lut_transmittance: transmittance_lut,
590
637
  lut_multiple_scattering: multiscatted_lut,
591
638
  lut_aerial: a_data.output,
639
+ irradiance,
592
640
  volumetrics_metadata,
593
641
  };
594
642
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shader_volumetrics_build_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;;;;;;GAeG;AACH,wDAFU,MAAM,EAAE,CAEiD;AAkXnE,8DAIE;8BA/Z4B,4BAA4B"}
1
+ {"version":3,"file":"shader_volumetrics_build_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js"],"names":[],"mappings":"AAiDA;;;;;;;;;;;;;;;GAeG;AACH,wDAFU,MAAM,EAAE,CAEiD;AAkanE,8DAIE;8BAnd4B,4BAA4B"}