@woosh/meep-engine 3.54.0 → 3.56.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 (101) hide show
  1. package/package.json +1 -1
  2. package/src/engine/ecs/transform/Transform64.d.ts +21 -0
  3. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  4. package/src/engine/ecs/transform/Transform64.js +26 -0
  5. package/src/shade/RENDERER_CONTRACT.md +5 -2
  6. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -1
  7. package/src/shade/device/SHADE_DEVICE_FLOOR.js +2 -0
  8. package/src/shade/renderer/Renderer.d.ts +5 -0
  9. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  10. package/src/shade/renderer/Renderer.js +26 -3
  11. package/src/shade/renderer/hiz/generate_downsampler_code.js +1 -1
  12. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +1 -1
  13. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +2 -1
  14. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  15. package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
  16. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +2 -2
  17. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  18. package/src/shade/renderer/particles/graph_particles_avboit.js +4 -9
  19. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.d.ts.map +1 -1
  20. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +154 -147
  21. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +2 -1
  22. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  23. package/src/shade/renderer/postprocess/gtao/GTAO.js +5 -1
  24. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +8 -0
  25. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
  26. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +10 -1
  27. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  28. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +5 -0
  29. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts +22 -0
  30. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts.map +1 -0
  31. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js +33 -0
  32. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts +22 -0
  33. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts.map +1 -0
  34. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.js +56 -0
  35. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts +13 -0
  36. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts.map +1 -0
  37. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.js +42 -0
  38. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +2 -1
  39. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  40. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +382 -357
  41. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  42. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +414 -410
  43. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  44. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -7
  45. package/src/shade/renderer/view/GPUViewContext.d.ts +0 -14
  46. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  47. package/src/shade/renderer/view/GPUViewContext.js +0 -29
  48. package/src/shade/renderer/view/ViewManager.d.ts +1 -1
  49. package/src/shade/renderer/view/ViewManager.js +1 -1
  50. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +40 -3
  51. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  52. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +660 -583
  53. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +10 -5
  54. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -1
  55. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +30 -14
  56. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -1
  57. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +17 -3
  58. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  59. package/src/engine/graphics3/decal/DecalAtlas.d.ts +0 -43
  60. package/src/engine/graphics3/decal/DecalAtlas.d.ts.map +0 -1
  61. package/src/engine/graphics3/decal/DecalAtlasFill.d.ts +0 -12
  62. package/src/engine/graphics3/decal/DecalAtlasFill.d.ts.map +0 -1
  63. package/src/engine/graphics3/decal/decal_atlas_border.d.ts +0 -52
  64. package/src/engine/graphics3/decal/decal_atlas_border.d.ts.map +0 -1
  65. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +0 -26
  66. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +0 -1
  67. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +0 -268
  68. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts +0 -3
  69. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts.map +0 -1
  70. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.js +0 -32
  71. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +0 -17
  72. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +0 -1
  73. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +0 -98
  74. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +0 -23
  75. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +0 -1
  76. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +0 -118
  77. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts +0 -2
  78. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts.map +0 -1
  79. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.js +0 -1
  80. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts +0 -24
  81. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts.map +0 -1
  82. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +0 -15
  83. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +0 -1
  84. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +0 -17
  85. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +0 -1
  86. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts +0 -35
  87. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +0 -1
  88. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +0 -35
  89. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +0 -1
  90. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts +0 -10
  91. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts.map +0 -1
  92. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +0 -28
  93. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +0 -1
  94. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +0 -48
  95. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +0 -1
  96. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +0 -28
  97. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +0 -1
  98. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts +0 -16
  99. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts.map +0 -1
  100. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts +0 -23
  101. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts.map +0 -1
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.54.0",
9
+ "version": "3.56.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -80,6 +80,27 @@ export const TRANSFORM64_SIZE: number;
80
80
  * @copyright Company Named Limited (c) 2026
81
81
  */
82
82
  export class Transform64 extends Float64Array {
83
+ /**
84
+ * A transform over memory you own: {@link TRANSFORM64_SIZE} elements of `buffer`, starting at
85
+ * `byte_offset`, in the layout described on the class. Nothing is copied and nothing is written - the
86
+ * transform reads whatever the memory holds, so call {@link makeIdentity} first if it does not hold a
87
+ * transform yet.
88
+ *
89
+ * `new Transform64()` is untouched by this: the instance is built by `Float64Array`'s constructor with
90
+ * this class as `new.target`, so it shares the hidden class of an owning transform and every element
91
+ * access stays monomorphic, while our own constructor - and its identity fill - never runs.
92
+ *
93
+ * A buffer that can change length (a resizable `ArrayBuffer` or a growable `SharedArrayBuffer`) is
94
+ * refused: a view over one gets a different hidden class, and mixing those in would make element access
95
+ * on every transform polymorphic. A fixed-length `SharedArrayBuffer` is fine.
96
+ *
97
+ * NOTE: {@link clone} of a view is an ordinary owning transform, not another view.
98
+ *
99
+ * @param {ArrayBuffer|SharedArrayBuffer} buffer fixed-length
100
+ * @param {number} byte_offset multiple of 8, with {@link TRANSFORM64_SIZE} * 8 bytes available after it
101
+ * @returns {Transform64}
102
+ */
103
+ static view(buffer: ArrayBuffer | SharedArrayBuffer, byte_offset: number): Transform64;
83
104
  /**
84
105
  * Build a transform from loose components, with {@link matrix} already composed from them
85
106
  * @param {number} translation_x
@@ -1 +1 @@
1
- {"version":3,"file":"Transform64.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/Transform64.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Transform64.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/Transform64.js"],"names":[],"mappings":"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"}
@@ -777,6 +777,32 @@ export class Transform64 extends Float64Array {
777
777
  + `, scale: [${this.scale_x}, ${this.scale_y}, ${this.scale_z}] }`;
778
778
  }
779
779
 
780
+ /**
781
+ * A transform over memory you own: {@link TRANSFORM64_SIZE} elements of `buffer`, starting at
782
+ * `byte_offset`, in the layout described on the class. Nothing is copied and nothing is written - the
783
+ * transform reads whatever the memory holds, so call {@link makeIdentity} first if it does not hold a
784
+ * transform yet.
785
+ *
786
+ * `new Transform64()` is untouched by this: the instance is built by `Float64Array`'s constructor with
787
+ * this class as `new.target`, so it shares the hidden class of an owning transform and every element
788
+ * access stays monomorphic, while our own constructor - and its identity fill - never runs.
789
+ *
790
+ * A buffer that can change length (a resizable `ArrayBuffer` or a growable `SharedArrayBuffer`) is
791
+ * refused: a view over one gets a different hidden class, and mixing those in would make element access
792
+ * on every transform polymorphic. A fixed-length `SharedArrayBuffer` is fine.
793
+ *
794
+ * NOTE: {@link clone} of a view is an ordinary owning transform, not another view.
795
+ *
796
+ * @param {ArrayBuffer|SharedArrayBuffer} buffer fixed-length
797
+ * @param {number} byte_offset multiple of 8, with {@link TRANSFORM64_SIZE} * 8 bytes available after it
798
+ * @returns {Transform64}
799
+ */
800
+ static view(buffer, byte_offset) {
801
+ assert.notOk(buffer.resizable === true || buffer.growable === true, 'buffer must be fixed-length');
802
+
803
+ return Reflect.construct(Float64Array, [buffer, byte_offset, TRANSFORM64_SIZE], Transform64);
804
+ }
805
+
780
806
  /**
781
807
  * Build a transform from loose components, with {@link matrix} already composed from them
782
808
  * @param {number} translation_x
@@ -47,12 +47,15 @@ Three consequences that shape everything below:
47
47
  The renderer requires a WebGPU device that meets a fixed floor. There is no feature detection
48
48
  beyond it and no branch that produces a lesser frame.
49
49
 
50
- **Required features** — the adapter must have both, or startup fails:
50
+ **Required features** — the adapter must have all three, or startup fails:
51
51
 
52
52
  - `indirect-first-instance` — indirect draw is used throughout
53
53
  - `float32-blendable` — the MBOIT transparency mode blends into 32-bit float targets. The default mode,
54
54
  AVBOIT, blends `rgba16float` only and does not need it. The feature stays on the floor while MBOIT is
55
55
  selectable at all; retiring it from the floor means retiring MBOIT.
56
+ - `texture-formats-tier1` — the hierarchical Z buffer is reduced in compute into `rg16float` storage
57
+ textures, which core WebGPU cannot write. Without it the HZB texture and every HZB pipeline fail
58
+ validation, and occlusion culling, SSR, screen-space shadows and light culling all read the HZB.
56
59
 
57
60
  **Required limits:**
58
61
 
@@ -65,7 +68,7 @@ The required features and the two fixed limits are one definition, `device/SHADE
65
68
  All of it is checked against the adapter before a device is requested, so a refusal names every
66
69
  feature and limit the adapter lacks, with the value it offers, rather than the first one found.
67
70
 
68
- **Taken when offered, never required:** `timestamp-query`, `subgroups`, `texture-formats-tier1`.
71
+ **Taken when offered, never required:** `timestamp-query`, `subgroups`.
69
72
  `timestamp-query` drives GPU timers and nothing else, and some browsers withhold it on hardware that
70
73
  is otherwise fine — so the timers go quiet when it is absent rather than the renderer refusing to
71
74
  start.
@@ -1 +1 @@
1
- {"version":3,"file":"SHADE_DEVICE_FLOOR.d.ts","sourceRoot":"","sources":["../../../../src/shade/device/SHADE_DEVICE_FLOOR.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH;IACI;;OAEG;cADO,cAAc,mBAAmB,CAAC;IAS5C;;OAEG;YADO,SAAS,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC;GAO3C;oCAjCiC,sCAAsC"}
1
+ {"version":3,"file":"SHADE_DEVICE_FLOOR.d.ts","sourceRoot":"","sources":["../../../../src/shade/device/SHADE_DEVICE_FLOOR.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH;IACI;;OAEG;cADO,cAAc,mBAAmB,CAAC;IAW5C;;OAEG;YADO,SAAS,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC;GAO3C;oCAnCiC,sCAAsC"}
@@ -21,6 +21,8 @@ export const SHADE_DEVICE_FLOOR = Object.freeze({
21
21
  WebGPUExtensionType.IndirectFirstInstance,
22
22
  // the MBOIT transparency mode blends into 32-bit float targets; stays while MBOIT is selectable
23
23
  WebGPUExtensionType.Float32Blendable,
24
+ // the HZB is reduced in compute into rg16float storage textures; core WebGPU has no rg16float storage
25
+ WebGPUExtensionType.TextureFormatsTier1,
24
26
  ]),
25
27
 
26
28
  /**
@@ -226,6 +226,10 @@ export class Renderer {
226
226
  * @return {ViewManager}
227
227
  */
228
228
  get views(): ViewManager;
229
+ /**
230
+ * @returns {GPUViewVolumetrics}
231
+ */
232
+ get volumetrics(): GPUViewVolumetrics;
229
233
  /**
230
234
  *
231
235
  * @return {GraphicsContext}
@@ -546,6 +550,7 @@ import { MotionBlur } from "./postprocess/motion_blur/MotionBlur.js";
546
550
  import { DepthOfField } from "./postprocess/dof/raymarch/DepthOfField.js";
547
551
  import { DepthOfFieldU } from "./postprocess/dof/gather/DepthOfFieldU.js";
548
552
  import { ViewManager } from "./view/ViewManager.js";
553
+ import { GPUViewVolumetrics } from "./volumetrics/GPUViewVolumetrics.js";
549
554
  import { GraphicsContext } from "./GraphicsContext.js";
550
555
  import Vector2 from "../../core/geom/Vector2.js";
551
556
  import { GPUTextureContext } from "./texture/GPUTextureContext.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
@@ -114,6 +114,7 @@ import { GPUTextureContext } from "./texture/GPUTextureContext.js";
114
114
  import { RenderTarget } from "./texture/RenderTarget.js";
115
115
  import { View } from "./view/View.js";
116
116
  import { ViewManager } from "./view/ViewManager.js";
117
+ import { GPUViewVolumetrics } from "./volumetrics/GPUViewVolumetrics.js";
117
118
 
118
119
  /**
119
120
  * @typedef {import("../device/timing/profile/GPUFrameRecorder.js").GPUFrameRecorder} GPUFrameRecorder
@@ -582,6 +583,23 @@ export class Renderer {
582
583
  return this.#views;
583
584
  }
584
585
 
586
+ /**
587
+ * The main view's volumetric fog: the froxel grid, its TAA history, and the irradiance clipmap
588
+ * lit particles read. One, like the TAA history, since {@link render} draws one main view; a
589
+ * view of its own would put one on every shadow view as well.
590
+ *
591
+ * Constructed in {@link initialize}.
592
+ * @type {GPUViewVolumetrics | undefined}
593
+ */
594
+ #volumetrics;
595
+
596
+ /**
597
+ * @returns {GPUViewVolumetrics}
598
+ */
599
+ get volumetrics() {
600
+ return this.#volumetrics;
601
+ }
602
+
585
603
  /**
586
604
  * @type {GraphicsContext}
587
605
  */
@@ -1007,6 +1025,8 @@ export class Renderer {
1007
1025
  if (this.#nss !== undefined) {
1008
1026
  this.#nss.reset_history = true;
1009
1027
  }
1028
+
1029
+ this.#volumetrics?.reset_history();
1010
1030
  }
1011
1031
 
1012
1032
  /**
@@ -1562,7 +1582,6 @@ export class Renderer {
1562
1582
  // for the sake of a feature the renderer does not need to run.
1563
1583
  WebGPUExtensionType.TimestampQuery,
1564
1584
  WebGPUExtensionType.Subgroups,
1565
- WebGPUExtensionType.TextureFormatsTier1,
1566
1585
  /*
1567
1586
  Compressed textures. Taken when offered and never required: a device with none of
1568
1587
  them still loads every scene, because the asset layer asks what is supported before
@@ -1636,6 +1655,7 @@ export class Renderer {
1636
1655
 
1637
1656
  this.#cameras = new CameraManager(this.device);
1638
1657
  this.#views = new ViewManager(graphics, this.#cameras, this.#scenes);
1658
+ this.#volumetrics = new GPUViewVolumetrics(this.device);
1639
1659
 
1640
1660
  const resolution_internal = this.#internal_resolution.asArray();
1641
1661
 
@@ -1869,6 +1889,7 @@ export class Renderer {
1869
1889
  this.#depth_of_field_unreal?.destroy();
1870
1890
  this.#restir_di?.destroy();
1871
1891
  this.#nss?.destroy();
1892
+ this.#volumetrics?.destroy();
1872
1893
 
1873
1894
  this.#views?.destroy();
1874
1895
  this.#scenes?.destroy();
@@ -2750,7 +2771,7 @@ export class Renderer {
2750
2771
  limits: graphics.collection_limits,
2751
2772
  });
2752
2773
 
2753
- // The view's volumetrics: the fog every surface is seen through (participating media ->
2774
+ // The main view's volumetrics: the fog every surface is seen through (participating media ->
2754
2775
  // per-froxel lighting -> ray-marched integration), and the froxel irradiance lit particles
2755
2776
  // are lit by. Both need the light clusters and shadow atlas. A scene with no volumes records
2756
2777
  // no fog and hands the transparency pass a constant LUT that reads as none (transmittance 1,
@@ -2758,8 +2779,9 @@ export class Renderer {
2758
2779
  // below is skipped on the same fact.
2759
2780
  const has_volumetrics = view_ctx.scene.volumetrics.source.volumes.length > 0;
2760
2781
 
2761
- const volumetrics = view_ctx.volumetrics.graph_update({
2782
+ const volumetrics = this.#volumetrics.graph_update({
2762
2783
  graph,
2784
+ view: view_ctx,
2763
2785
  light_cluster_data: light_clusters.data,
2764
2786
  light_cluster_lookup: light_clusters.lookup,
2765
2787
  light_cluster_parameters: light_clusters.parameters,
@@ -2845,6 +2867,7 @@ export class Renderer {
2845
2867
  input_velocity: gr_velocity,
2846
2868
  input_normal: gr_texture_normal,
2847
2869
  input_occlusion: gr_occlusion_clip,
2870
+ input_hzb: gr_texture_hzb,
2848
2871
  // NOTE: AO is blended into the G-buffer
2849
2872
  output: gr_texture_material_albedo_ao,
2850
2873
  camera: gr_buffer_camera_current,
@@ -43,7 +43,7 @@ export function generate_downsampler_code({
43
43
  return CodeChunk.from(
44
44
  //language=WGSL
45
45
  `
46
- @compute @workgroup_size(8, 8, 1)
46
+ @compute @workgroup_size(16, 16)
47
47
  fn main(
48
48
  @builtin(global_invocation_id) global_id: vec3<u32>,
49
49
  ) {
@@ -31,7 +31,7 @@ resources.createGroup()
31
31
  const body = CodeChunk.from(
32
32
  //language=WGSL
33
33
  `
34
- @compute @workgroup_size(8, 8, 1)
34
+ @compute @workgroup_size(16, 16)
35
35
  fn main(
36
36
  @builtin(global_invocation_id) global_id: vec3<u32>,
37
37
  ) {
@@ -295,7 +295,7 @@ export class GPUParticleSystem {
295
295
  * @param {number} args.integral graph handle of the integral texture
296
296
  * @param {number} args.volumetrics_lut graph handle
297
297
  * @param {number} args.volumetrics_metadata graph handle
298
- * @param {{Y: number, CoCg: number}} args.volumetrics_irradiance graph handles of the froxel
298
+ * @param {{Y: number, CoCg: number, uniform: number}} args.volumetrics_irradiance graph handles of the froxel
299
299
  * irradiance volume, what an emitter flagged `EMITTER_FLAG.LIGHTING` is lit by
300
300
  * @param {{color: number, norm: number, extinction: number, emission: number}} args.accumulators
301
301
  * @returns {{color: number, norm: number, extinction: number, emission: number}} after the draw
@@ -312,6 +312,7 @@ export class GPUParticleSystem {
312
312
  volumetrics_irradiance: {
313
313
  Y: number;
314
314
  CoCg: number;
315
+ uniform: number;
315
316
  };
316
317
  accumulators: {
317
318
  color: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUParticleSystem.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/GPUParticleSystem.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GPUParticleSystem.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/GPUParticleSystem.js"],"names":[],"mappings":"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"}
@@ -609,7 +609,7 @@ export class GPUParticleSystem {
609
609
  * @param {number} args.integral graph handle of the integral texture
610
610
  * @param {number} args.volumetrics_lut graph handle
611
611
  * @param {number} args.volumetrics_metadata graph handle
612
- * @param {{Y: number, CoCg: number}} args.volumetrics_irradiance graph handles of the froxel
612
+ * @param {{Y: number, CoCg: number, uniform: number}} args.volumetrics_irradiance graph handles of the froxel
613
613
  * irradiance volume, what an emitter flagged `EMITTER_FLAG.LIGHTING` is lit by
614
614
  * @param {{color: number, norm: number, extinction: number, emission: number}} args.accumulators
615
615
  * @returns {{color: number, norm: number, extinction: number, emission: number}} after the draw
@@ -70,7 +70,7 @@ export function graph_particle_avboit_splat({ graph, camera, warp, depth_texture
70
70
  * @param {number} params.integral graph handle of the integral texture
71
71
  * @param {number} params.volumetrics_lut graph handle
72
72
  * @param {number} params.volumetrics_metadata graph handle
73
- * @param {{Y: number, CoCg: number, uniform?: number}} params.volumetrics_irradiance graph handles of
73
+ * @param {{Y: number, CoCg: number, uniform: number}} params.volumetrics_irradiance graph handles of
74
74
  * the world-space irradiance clipmap a lit emitter's particles are lit by
75
75
  * @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators to add to
76
76
  * @param {GPUTextureView} params.atlas
@@ -93,7 +93,7 @@ export function graph_particle_avboit_draw({ graph, view_ctx, scene_context, cam
93
93
  volumetrics_irradiance: {
94
94
  Y: number;
95
95
  CoCg: number;
96
- uniform?: number;
96
+ uniform: number;
97
97
  };
98
98
  accumulators: {
99
99
  color: number;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_particles_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles_avboit.js"],"names":[],"mappings":"AA2CA;;;;;;;;;;;;;;;GAeG;AACH;IARkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACoB,kBAAkB,EAA5C,UAAU,MAAM,CAAC;IACF,SAAS,EAAxB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,mBAAmB,EAAlC,MAAM;IACJ,MAAM,CA8ClB;AAED;;;;;;;;;;;;;;;GAeG;AACH;IAZkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACS,IAAI,EAAnB,MAAM;IACwD,MAAM,EAApE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;IAC9B,KAAK;IACT,aAAa;IACjB,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,SAAS,EAAxB,MAAM;IACJ;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CA0EjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAnBkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IACnB,QAAQ,EAAnE,OAAO,2BAA2B,EAAE,cAAc;IACnC,MAAM,EAArB,MAAM;IACS,aAAa,EAA5B,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,eAAe,EAA9B,MAAM;IACS,oBAAoB,EAAnC,MAAM;IAC8C,sBAAsB,EAA1E;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;IAEiC,YAAY,EAAxF;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;IAC5C,KAAK;IACT,aAAa;IACjB,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,SAAS,EAAxB,MAAM;IACJ;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAmI/E"}
1
+ {"version":3,"file":"graph_particles_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles_avboit.js"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;GAeG;AACH;IARkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACoB,kBAAkB,EAA5C,UAAU,MAAM,CAAC;IACF,SAAS,EAAxB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,mBAAmB,EAAlC,MAAM;IACJ,MAAM,CA8ClB;AAED;;;;;;;;;;;;;;;GAeG;AACH;IAZkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACS,IAAI,EAAnB,MAAM;IACwD,MAAM,EAApE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;IAC9B,KAAK;IACT,aAAa;IACjB,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,SAAS,EAAxB,MAAM;IACJ;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CA0EjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAnBkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IACnB,QAAQ,EAAnE,OAAO,2BAA2B,EAAE,cAAc;IACnC,MAAM,EAArB,MAAM;IACS,aAAa,EAA5B,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,eAAe,EAA9B,MAAM;IACS,oBAAoB,EAAnC,MAAM;IAC6C,sBAAsB,EAAzE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC;IAEkC,YAAY,EAAxF;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;IAC5C,KAAK;IACT,aAAa;IACjB,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,gBAAgB,EAA/B,MAAM;IACS,SAAS,EAAxB,MAAM;IACJ;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CA+H/E"}
@@ -7,7 +7,6 @@ import {
7
7
  METRO_L1_IRRADIANCE_STRUCT
8
8
  } from "../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
9
9
  import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../STATIC_GRAPHICS_ENGINE_ASSETS.js";
10
- import { IRRADIANCE_CLIPMAP_STRUCT } from "../volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js";
11
10
  import {
12
11
  PARTICLE_AVBOIT_DRAW_ADDITIVE_PIPELINE,
13
12
  PARTICLE_AVBOIT_DRAW_ALPHA_PIPELINE,
@@ -205,7 +204,7 @@ export function graph_particle_avboit_splat({
205
204
  * @param {number} params.integral graph handle of the integral texture
206
205
  * @param {number} params.volumetrics_lut graph handle
207
206
  * @param {number} params.volumetrics_metadata graph handle
208
- * @param {{Y: number, CoCg: number, uniform?: number}} params.volumetrics_irradiance graph handles of
207
+ * @param {{Y: number, CoCg: number, uniform: number}} params.volumetrics_irradiance graph handles of
209
208
  * the world-space irradiance clipmap a lit emitter's particles are lit by
210
209
  * @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators to add to
211
210
  * @param {GPUTextureView} params.atlas
@@ -240,6 +239,7 @@ export function graph_particle_avboit_draw({
240
239
  assert.isNonNegativeInteger(integral, "integral");
241
240
  assert.isNonNegativeInteger(volumetrics_irradiance.Y, "volumetrics_irradiance.Y");
242
241
  assert.isNonNegativeInteger(volumetrics_irradiance.CoCg, "volumetrics_irradiance.CoCg");
242
+ assert.isNonNegativeInteger(volumetrics_irradiance.uniform, "volumetrics_irradiance.uniform");
243
243
 
244
244
  function execute(data, resources, context) {
245
245
  const encoder = context.encoder;
@@ -249,10 +249,7 @@ export function graph_particle_avboit_draw({
249
249
  const depth_view = t_depth.obtainView(DEFAULT_DEPTH_TEXTURE_VIEW);
250
250
  const linear_sampler = graphics.samplers.obtain(SAMPLER_LINEAR);
251
251
 
252
- const irradiance_clipmap_buffer = data.irradiance_uniform !== undefined
253
- ? resources.get(data.irradiance_uniform)
254
- : (view_ctx.volumetrics?.irradiance_clipmap?.uniform
255
- ?? encoder.allocateTransientBuffer(GPUBufferUsage.UNIFORM, IRRADIANCE_CLIPMAP_STRUCT.size));
252
+ const irradiance_clipmap_buffer = resources.get(data.irradiance_uniform);
256
253
 
257
254
  const far_field_sh_buffer = scene_context?.lights?.far_field_irradiance_sh
258
255
  ?? view_ctx.scene?.lights?.far_field_irradiance_sh
@@ -326,9 +323,7 @@ export function graph_particle_avboit_draw({
326
323
  pass_data.volumetrics_metadata = pass.read(volumetrics_metadata);
327
324
  pass_data.irradiance_Y = pass.read(volumetrics_irradiance.Y);
328
325
  pass_data.irradiance_CoCg = pass.read(volumetrics_irradiance.CoCg);
329
- if (volumetrics_irradiance.uniform !== undefined) {
330
- pass_data.irradiance_uniform = pass.read(volumetrics_irradiance.uniform);
331
- }
326
+ pass_data.irradiance_uniform = pass.read(volumetrics_irradiance.uniform);
332
327
  pass_data.pool = pass.read(pool);
333
328
  pass_data.alive = pass.read(alive);
334
329
  pass_data.emitter_database = pass.read(emitter_database);
@@ -1 +1 @@
1
- {"version":3,"file":"fragment_shader_denoise_ao.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js"],"names":[],"mappings":"AAYA,kDAEG;AAsHH;;;GAGG;AACH,yCAFU,gBAAgB,CAMvB;AAEH,2DAKE;6BAlJ2B,mCAAmC;iCAQ/B,kCAAkC;4BAFvC,6BAA6B"}
1
+ {"version":3,"file":"fragment_shader_denoise_ao.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js"],"names":[],"mappings":"AAaA,kDAEG;AAsHH;;;GAGG;AACH,yCAFU,gBAAgB,CAMvB;AAEH,2DAWE;6BAxJ2B,mCAAmC;iCAQ/B,kCAAkC;4BAFvC,6BAA6B"}