@plasius/gpu-renderer 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -23,16 +23,46 @@ All notable changes to this project will be documented in this file.
23
23
  - **Security**
24
24
  - (placeholder)
25
25
 
26
- ## [0.2.3] - 2026-06-11
26
+ ## [0.2.5] - 2026-06-14
27
+
28
+ - **Added**
29
+ - (placeholder)
30
+
31
+ - **Changed**
32
+ - (placeholder)
33
+
34
+ - **Fixed**
35
+ - (placeholder)
36
+
37
+ - **Security**
38
+ - (placeholder)
39
+
40
+ ## [0.2.4] - 2026-06-11
27
41
 
28
42
  - **Added**
29
43
  - Added `updateCamera(...)` support for wavefront renderers so validation
30
44
  views can animate camera movement without rebuilding mesh buffers.
45
+ - Added `gpuParallelism` diagnostics to wavefront frame stats and snapshots so
46
+ consumers can inspect adapter compute limits, direct workgroups,
47
+ indirect-dispatch estimates, and whether a frame exposes multi-workgroup GPU
48
+ parallelism.
49
+ - Added optional equirectangular `environmentMap` sampling for wavefront
50
+ tracing so environment misses and surface environment estimates can use a
51
+ bound radiance texture before falling back to procedural sky/ambient values.
52
+ - Added default-on `deferredPathResolve` support for wavefront tracing so
53
+ surface traversal records material responses and terminal source radiance
54
+ before the output pass resolves the path backward into pixel accumulation.
31
55
 
32
56
  - **Changed**
33
57
  - Changed wavefront frame dispatch to split large tile/sample workloads into
34
58
  bounded command submissions instead of encoding an entire high-resolution
35
59
  frame into one command buffer.
60
+ - Changed display-quality wavefront tracing to require one additional
61
+ path-vertex storage buffer, raising the trace-stage storage-buffer request
62
+ from 9 to 10.
63
+ - Changed wavefront terminal/direct environment estimates to consume
64
+ `environmentLighting.sunlitBaseline` as a time-of-day daylight floor instead
65
+ of relying only on restrained ambient colour.
36
66
 
37
67
  - **Fixed**
38
68
  - Fixed low-sample wavefront renders so non-emissive surface hits receive a
@@ -333,4 +363,5 @@ All notable changes to this project will be documented in this file.
333
363
  [0.1.12]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.12
334
364
  [0.1.14]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.14
335
365
  [0.2.1]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.2.1
336
- [0.2.3]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.2.3
366
+ [0.2.4]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.2.4
367
+ [0.2.5]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.2.5
package/README.md CHANGED
@@ -196,21 +196,42 @@ tone mapping into the presented `rgba8unorm` output. Filtering in linear
196
196
  radiance space lets the denoise pass cross tile boundaries without compressing
197
197
  energy/detail before the final resolve. The renderer also stores compact
198
198
  emissive-triangle metadata in the existing BVH buffer tail and uses it to guide
199
- diffuse continuation rays toward finite mesh light geometry without adding a
200
- ninth trace storage buffer. This is not a separate shadow/direct-light pass: the
201
- active ray still has to hit emissive geometry or miss into the environment
202
- before radiance is accumulated. Guided emissive hits carry a bounded estimator
203
- weight so finite light guidance does not over-expose low-sample renders before
204
- full material PDFs/MIS are implemented. High-energy samples are clamped in
205
- linear radiance space to keep low-sample preview output stable while production
206
- sampling, temporal accumulation, and better material PDFs are hardened.
199
+ diffuse continuation rays toward finite mesh light geometry. This is not a
200
+ separate shadow/direct-light pass: the active ray still has to hit emissive
201
+ geometry or miss into the environment before radiance is committed. Guided
202
+ emissive hits carry a bounded estimator weight so finite light guidance does not
203
+ over-expose low-sample renders before full material PDFs/MIS are implemented.
204
+ High-energy samples are clamped in linear radiance space to keep low-sample
205
+ preview output stable while production sampling, temporal accumulation, and
206
+ better material PDFs are hardened. By default, `deferredPathResolve` records
207
+ per-bounce material responses in a tile-bounded path buffer and records the
208
+ terminal emissive/HDRI/environment source in the final path slot. The output
209
+ pass then resolves that recorded path backward and adds the weighted sample to
210
+ the pixel accumulation, so surface traversal no longer injects broad visible
211
+ ambient/direct environment light before a terminal source is known. Set
212
+ `deferredPathResolve: false` only for legacy forward-accumulation comparison.
213
+ When an `environmentMap` is provided, the wavefront trace shader samples it as
214
+ an equirectangular radiance source for environment misses and uses the same
215
+ mapped radiance for terminal residuals before falling back to static ambient.
216
+ The procedural horizon/zenith/sun model remains the fallback for callers that
217
+ have not supplied an HDRI/radiance texture. `environmentLighting.sunlitBaseline`
218
+ adds a time-of-day daylight floor to terminal and direct environment estimates,
219
+ so bright presets retain colour at the last collision without returning to a
220
+ whitewashed global ambient term.
207
221
  For static mesh scenes, the GPU acceleration build is submitted once and then
208
222
  reused by subsequent frames. Per-frame tracing writes one dynamic uniform slot
209
223
  per tile/sample or post-process pass and batches tile tracing, tile output,
210
224
  optional denoise, and presentation into bounded command submissions controlled
211
225
  by `maxFramePassesPerSubmission` to keep 4K/high-spp command buffers from
212
226
  becoming oversized. `updateCamera(...)` can update the per-frame camera uniforms
213
- between renders without rebuilding mesh buffers. After each
227
+ between renders without rebuilding mesh buffers. Frame stats and snapshots expose
228
+ `gpuParallelism` diagnostics with adapter compute limits, configured workgroup
229
+ size, direct compute dispatches, known workgroups/invocations, indirect dispatch
230
+ counts, and upper-bound indirect work estimates. WebGPU does not expose physical
231
+ GPU core counts, so `physicalCoreCount` remains `null`; use
232
+ `exposesMultiWorkgroupParallelism`, `largestDirectWorkgroupsPerDispatch`, and
233
+ `largestEstimatedIndirectWorkgroupsPerDispatch` to confirm the renderer is
234
+ submitting work that can occupy more than one GPU execution unit. After each
214
235
  primary-ray or compaction pass, the GPU writes the active-ray workgroup count
215
236
  into the counter buffer and the encoder copies it into an indirect-dispatch
216
237
  argument buffer. Intersection and surface-resolution passes therefore scale