rayzee 11.5.0 → 11.7.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 (41) hide show
  1. package/README.md +14 -14
  2. package/dist/{ArchiveImporter-29Nl1567.js → ArchiveImporter-DYcRXeKE.js} +2 -2
  3. package/dist/{BidirectionalIntegrator-CJay8tXK.js → BidirectionalIntegrator-BvjRpbTP.js} +289 -289
  4. package/dist/{EngineEvents-Ci8dVWCP.js → EngineEvents-CLckhYbL.js} +1 -0
  5. package/dist/{NeuralRetouch-KqGVPV7u.js → NeuralRetouch-ClaMiKYg.js} +1 -1
  6. package/dist/{NeuralSuperRes-BHxhYzlD.js → NeuralSuperRes-WNEXun9s.js} +2 -2
  7. package/dist/{PathTracer-Cldt0mXi.js → PathTracer-B9wZPPVL.js} +3197 -3167
  8. package/dist/{PhysicalSky-CUWrTcmT.js → PhysicalSky-DcjItqKi.js} +1 -1
  9. package/dist/{RayzeeRenderer-Dd-Dit0v.js → RayzeeRenderer-p-NeE6E2.js} +405 -437
  10. package/dist/addons/archives.es.js +1 -1
  11. package/dist/addons/bidirectional.es.js +1 -1
  12. package/dist/addons/physical-sky.es.js +1 -1
  13. package/dist/rayzee-core.es.js +5 -5
  14. package/dist/rayzee.es.js +1003 -1686
  15. package/dist/rayzee.umd.js +104 -143
  16. package/dist/{sceneCachePolicy--ta6moJu.js → sceneCachePolicy-B9w3BnaP.js} +2 -2
  17. package/package.json +2 -2
  18. package/src/EngineEvents.js +2 -0
  19. package/src/Passes/OIDNDenoiser.js +106 -100
  20. package/src/PathTracerApp.js +8 -19
  21. package/src/Pipeline/BindingAudit.js +2 -3
  22. package/src/Pipeline/PipelineContext.js +0 -1
  23. package/src/Pipeline/RenderPipeline.js +1 -2
  24. package/src/Pipeline/RenderStage.js +1 -1
  25. package/src/Processor/PackedRayBuffer.js +2 -2
  26. package/src/Processor/StorageTexturePool.js +1 -1
  27. package/src/Processor/TextureReadback.js +18 -1
  28. package/src/RayzeeRenderer.js +5 -5
  29. package/src/Stages/DenoiserSettings.js +5 -81
  30. package/src/Stages/MotionVector.js +21 -215
  31. package/src/Stages/NormalDepth.js +5 -5
  32. package/src/Stages/PathTracer.js +3 -11
  33. package/src/Stages/PathTracerStage.js +4 -17
  34. package/src/TSL/FinalWriteKernel.js +2 -2
  35. package/src/TSL/ShadeKernel.js +3 -3
  36. package/src/index.js +1 -1
  37. package/src/managers/DenoisingManager.js +93 -187
  38. package/src/Stages/ASVGF.js +0 -932
  39. package/src/Stages/BilateralFilter.js +0 -486
  40. package/src/Stages/EdgeFilter.js +0 -545
  41. package/src/Stages/Variance.js +0 -443
package/README.md CHANGED
@@ -500,7 +500,7 @@ Key settings:
500
500
  | `transparentBackground` | `boolean` | false | Transparent canvas background |
501
501
  | `interactionModeEnabled` | `boolean` | true | Render at lower resolution while the camera moves, keeping the full bounce budget ("Fast Navigation" in the app) |
502
502
  | `interactionRenderScale` | `number` | 0.5 | Per-axis render scale while the camera moves (0.5 = a quarter of the pixels); `1` turns the drop off. Ignored while OIDN is the live denoiser. `PathTracerApp` only |
503
- | `renderMode` | `number` | 0 | Internal preview(0)/production(1) flag driving accumulation & ASVGF behavior — normally set via `configureForMode()`, not written directly |
503
+ | `renderMode` | `number` | 0 | Internal preview(0)/production(1) flag driving accumulation & denoiser history — normally set via `configureForMode()`, not written directly |
504
504
  | `visMode` | `number` | 0 | Debug visualization mode (0 = off) |
505
505
  | `environmentMode` | `string` | 'hdri' | Sky mode: `'hdri'` \| `'procedural'` \| `'color'` — not routed through `engine.settings`; use `engine.environmentManager.setMode()` instead |
506
506
  | `cameraProjection` | `string` | 'perspective' | `'perspective'` \| `'orthographic'` \| `'equirectangular'` — see [Camera Projection](#camera-projection-orthographic-360-panorama) |
@@ -748,7 +748,7 @@ Depth of field still works: the lens plane is built from each ray's own frame, n
748
748
 
749
749
  Two features are incompatible with a non-frustum camera and the engine switches them off for you when panorama is enabled:
750
750
 
751
- - **ASVGF** falls back to the `edgeaware` denoiser — ASVGF's motion vectors unproject through the projection matrix, which is meaningless when every pixel is its own direction.
751
+ - **NRD** hands the view to OIDN — NRD's motion vectors unproject through the projection matrix, which is meaningless when every pixel is its own direction. OIDN keeps working (without its motion history). Asking for `'nrd'` while in a panorama runs `'oidn'` and records `denoiser.unavailable`.
752
752
  - **Auto-focus** pauses and focus holds its last distance — it raycasts via `Raycaster.setFromCamera`, which only understands a frustum. It resumes when you leave the panorama.
753
753
 
754
754
  Read the denoiser outcome back rather than duplicating the rule (`engine.denoisingManager.denoiserStrategy`); it is not restored automatically when you leave the panorama.
@@ -918,7 +918,7 @@ await engine.environmentManager.generateProcedural();
918
918
 
919
919
  ### engine.denoisingManager
920
920
 
921
- Denoiser strategy, ASVGF, OIDN, upscaler, and auto-exposure. Auto exposure meters the accumulated image on the GPU
921
+ Denoiser strategy, NRD, OIDN, upscaler, and auto-exposure. Auto exposure meters the accumulated image on the GPU
922
922
  and moves in stops; it follows a room level learned as the camera moves plus a damped share of each view, so a scene lit
923
923
  for its manual exposure stays near it while one lit far off is corrected in full. It eases while the image restarts
924
924
  every frame (a moving camera, playback) and lands within about a third of a second once the image builds up, so a
@@ -926,15 +926,13 @@ finished render shows its own exposure at any sample count. While it is on, `exp
926
926
 
927
927
  ```js
928
928
  // Strategy
929
- engine.denoisingManager.setStrategy('asvgf', 'medium') // 'none' | 'asvgf' | 'nrd' | 'edgeaware' | 'oidn'
929
+ engine.denoisingManager.setStrategy('nrd', 'medium') // DENOISER_STRATEGIES: 'none' | 'nrd' | 'oidn'
930
930
  engine.denoisingManager.denoiserStrategy // read back the active strategy (derived from stage state)
931
- engine.denoisingManager.setASVGFEnabled(true, 'medium')
932
- engine.denoisingManager.applyASVGFPreset('high') // 'low' | 'medium' | 'high'
931
+ engine.denoisingManager.applyNRDPreset('high') // 'low' | 'medium' | 'high'
933
932
  engine.denoisingManager.setAutoExposure(true)
934
933
 
935
934
  // Fine-grained parameters
936
- engine.denoisingManager.setASVGFParams({ temporalAlpha: 0.1, maxAccumFrames: 16 })
937
- engine.denoisingManager.setEdgeAwareParams({ phiLuminance: 4.0, atrousIterations: 5 })
935
+ engine.denoisingManager.setNRDParams({ maxAccumulatedFrameNum: 16, maxBlurRadius: 20 })
938
936
  engine.denoisingManager.setAutoExposureParams({
939
937
  strength: 0.3, // 0..1, how far it follows each view; 1 averages every view to middle grey
940
938
  metering: 'center', // 'average' | 'center' | 'spot' (at the auto-focus point)
@@ -1518,6 +1516,7 @@ engine.addEventListener(EngineEvents.RENDER_COMPLETE, (e) => {
1518
1516
  | `RENDER_RESET` | Accumulation buffer is reset |
1519
1517
  | `FRAME` | Fires once per `animate()` tick — hook external instrumentation (stats panels, telemetry) here |
1520
1518
  | `DENOISING_START` / `DENOISING_END` | Denoiser runs. `event.continuous` is `true` for a cadence denoise of the still-accumulating image, `false` for the one that ends a render |
1519
+ | `DENOISER_LOADING` | The denoiser fetches and builds a network (`event.loading` true, then false) — on first use and on a quality change. A denoise asked for meanwhile starts once it is ready |
1521
1520
  | `UPSCALING_START` / `UPSCALING_PROGRESS` / `UPSCALING_END` | AI upscaler runs |
1522
1521
  | `LOADING_UPDATE` / `LOADING_RESET` | Asset loading progress. A failed load ends with `failed: true` and the error as `status`; an archive that asks which parts to load ends with `LOADING_RESET` |
1523
1522
  | `STATS_UPDATE` | Performance stats updated |
@@ -1603,7 +1602,7 @@ import {
1603
1602
  AUTO_EXPOSURE_DEFAULTS,
1604
1603
  LOCAL_EXPOSURE_DEFAULTS,
1605
1604
  AUTO_FOCUS_DEFAULTS,
1606
- ASVGF_QUALITY_PRESETS,
1605
+ DENOISER_STRATEGIES,
1607
1606
  SKY_DEFAULTS,
1608
1607
  DEFAULT_SUN_PATH,
1609
1608
  DEFAULT_VIEW,
@@ -1753,7 +1752,7 @@ Two independent decisions, because they answer different questions — *what cle
1753
1752
  render works*, and *does the finished image get a proper pass*:
1754
1753
 
1755
1754
  ```js
1756
- engine.denoisingManager.setStrategy('oidn'); // 'none' | 'edgeaware' | 'asvgf' | 'nrd' | 'oidn'
1755
+ engine.denoisingManager.setStrategy('oidn'); // 'none' | 'nrd' | 'oidn'
1757
1756
  engine.denoisingManager.setOIDNEnabled(false); // a full OIDN pass on the finished image
1758
1757
  ```
1759
1758
 
@@ -1766,8 +1765,8 @@ switching the final pass on says nothing about the live view. All six combinatio
1766
1765
  |---|---|---|---|---|
1767
1766
  | `'none'` | `false` | raw | raw | raw |
1768
1767
  | `'none'` | `true` | raw | raw | OIDN |
1769
- | `'asvgf'` | `false` | ASVGF | ASVGF | ASVGF's last frame |
1770
- | `'asvgf'` | `true` | ASVGF | ASVGF | OIDN |
1768
+ | `'nrd'` | `false` | NRD | NRD, then raw once it hands over | NRD's last frame, or raw past the handover |
1769
+ | `'nrd'` | `true` | NRD | NRD, then raw once it hands over | OIDN |
1771
1770
  | `'oidn'` | `false` | OIDN, from the motion history | OIDN, refreshing | one last refresh |
1772
1771
  | `'oidn'` | `true` | OIDN, from the motion history | OIDN, refreshing | OIDN, full quality |
1773
1772
 
@@ -1779,9 +1778,10 @@ With OIDN on the live view and the final pass off, the render still closes with
1779
1778
  cadence's last tick lands short of the end, and the picture should match the render that finished. On
1780
1779
  a 150-sample render that gap measured **11 samples at 512²** and **1 at 1024²** — larger where the
1781
1780
  renderer is fast, because more samples land between refreshes. It uses whatever model the refreshes
1782
- were already on: no reload for an image the user never asked to be denoised at full quality.
1781
+ were already on: no reload for an image the user never asked to be denoised at full quality. A final render
1782
+ (`configureForMode( 'production' )`) has no live view to match, so with the final pass off it finishes undenoised.
1783
1783
 
1784
- In the app that is `Real-Time Denoiser` (None / EdgeAware / ASVGF / NRD / **OIDN (AI)**) and the
1784
+ In the app that is `Real-Time Denoiser` (None / NRD / **OIDN (AI)**, OIDN by default) and the
1785
1785
  `Final Denoise (OIDN)` switch. Deterministic mode pins the live refreshes off, since which frame a
1786
1786
  wall-clock cadence lands on is not reproducible.
1787
1787
 
@@ -1,5 +1,5 @@
1
- import { n as e } from "./BidirectionalIntegrator-CJay8tXK.js";
2
- import { A as t, T as n, at as r, n as i, r as a, v as o } from "./sceneCachePolicy--ta6moJu.js";
1
+ import { n as e } from "./BidirectionalIntegrator-BvjRpbTP.js";
2
+ import { A as t, T as n, at as r, n as i, r as a, v as o } from "./sceneCachePolicy-B9w3BnaP.js";
3
3
  import { n as s, r as c } from "./EngineIssues-CIZnXHsF.js";
4
4
  import { r as l } from "./shared-BGBcSxBQ.js";
5
5
  import { i as u, n as d, o as f, r as p } from "./identity-C1cLD1C0.js";