rayzee 8.8.2 → 9.1.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 (104) hide show
  1. package/README.md +210 -20
  2. package/dist/{NeuralRetouch-CYOJ21Wn.js → NeuralRetouch-BRquqfmZ.js} +1 -1
  3. package/dist/{NeuralSuperRes-Dc6jRYke.js → NeuralSuperRes-CbNvQjCw.js} +5 -2
  4. package/dist/{ToneMapGPU-BVE852iN.js → ToneMapGPU-DpUZDMbQ.js} +2 -1
  5. package/dist/rayzee.es.js +10795 -5324
  6. package/dist/rayzee.umd.js +279 -268
  7. package/package.json +1 -1
  8. package/src/AssetConfig.js +4 -0
  9. package/src/EngineDefaults.js +60 -76
  10. package/src/EngineEvents.js +7 -0
  11. package/src/EngineIssues.js +6 -0
  12. package/src/Headless.js +3 -1
  13. package/src/Passes/AIUpscaler.js +2 -1
  14. package/src/Passes/OIDNDenoiser.js +3 -6
  15. package/src/Passes/OIDNTemporalHistory.js +25 -7
  16. package/src/PathTracerApp.js +313 -25
  17. package/src/Processor/ArchiveCache.js +120 -0
  18. package/src/Processor/ArchiveReader.js +179 -32
  19. package/src/Processor/AssetLoader.js +523 -76
  20. package/src/Processor/AtmosphereModel.js +465 -0
  21. package/src/Processor/BVHBuilder.js +4 -1
  22. package/src/Processor/BVHLeafFold.js +100 -0
  23. package/src/Processor/BVHRefitter.js +98 -214
  24. package/src/Processor/ChunkedRecords.js +189 -4
  25. package/src/Processor/EmissiveTriangleBuilder.js +8 -0
  26. package/src/Processor/GeometryExtractor.js +238 -40
  27. package/src/Processor/InstanceTable.js +55 -37
  28. package/src/Processor/PBRT/PBRTCurves.js +104 -27
  29. package/src/Processor/PBRT/PBRTParser.js +132 -22
  30. package/src/Processor/PBRT/PBRTSceneBuilder.js +210 -55
  31. package/src/Processor/PBRT/buffers.js +27 -0
  32. package/src/Processor/PBRT/index.js +55 -15
  33. package/src/Processor/PackedRayBuffer.js +10 -13
  34. package/src/Processor/ParallelBVHBuilder.js +36 -15
  35. package/src/Processor/PhysicalSky.js +308 -0
  36. package/src/Processor/QueueManager.js +1 -0
  37. package/src/Processor/SceneProcessor.js +1132 -181
  38. package/src/Processor/SplitBLAS.js +249 -0
  39. package/src/Processor/SunPosition.js +41 -0
  40. package/src/Processor/TextureCreator.js +21 -0
  41. package/src/Processor/Workers/AIUpscalerWorker.js +79 -52
  42. package/src/Processor/Workers/BVHWorker.js +17 -13
  43. package/src/Processor/ZipReader.js +207 -0
  44. package/src/RenderSettings.js +49 -8
  45. package/src/SceneState/SceneState.js +367 -0
  46. package/src/SceneState/portable.js +52 -0
  47. package/src/Stages/MotionVector.js +8 -42
  48. package/src/Stages/NRD.js +30 -21
  49. package/src/Stages/NormalDepth.js +12 -23
  50. package/src/Stages/PathTracer.js +114 -6
  51. package/src/Stages/PathTracerStage.js +251 -104
  52. package/src/Storage/BLASCache.js +190 -0
  53. package/src/Storage/CDFCache.js +77 -0
  54. package/src/Storage/DownloadCache.js +266 -0
  55. package/src/Storage/GeometrySpill.js +217 -0
  56. package/src/Storage/SceneGraphCodec.js +503 -0
  57. package/src/Storage/SpillStore.js +112 -0
  58. package/src/Storage/StorageManager.js +934 -0
  59. package/src/Storage/StorageOps.js +137 -0
  60. package/src/Storage/StorageWorker.js +37 -0
  61. package/src/Storage/events.js +29 -0
  62. package/src/Storage/identity.js +77 -0
  63. package/src/Storage/index.js +9 -0
  64. package/src/Storage/inlineTransport.js +24 -0
  65. package/src/Storage/locks.js +99 -0
  66. package/src/Storage/openStorage.js +87 -0
  67. package/src/Storage/sceneCachePolicy.js +12 -0
  68. package/src/Storage/shared.js +9 -0
  69. package/src/Storage/transport.js +62 -0
  70. package/src/TSL/Atmosphere.js +684 -0
  71. package/src/TSL/BVHTraversal.js +288 -239
  72. package/src/TSL/CameraRay.js +99 -14
  73. package/src/TSL/Common.js +11 -2
  74. package/src/TSL/DebugKernel.js +2 -2
  75. package/src/TSL/Displacement.js +6 -6
  76. package/src/TSL/EmissiveSampling.js +5 -5
  77. package/src/TSL/EnvironmentCDF.js +176 -0
  78. package/src/TSL/GenerateKernel.js +5 -5
  79. package/src/TSL/HitFacet.js +4 -4
  80. package/src/TSL/LightsDirect.js +8 -8
  81. package/src/TSL/LightsSampling.js +55 -37
  82. package/src/TSL/Random.js +1 -0
  83. package/src/TSL/ShadeKernel.js +75 -19
  84. package/src/TSL/Sun.js +40 -0
  85. package/src/TSL/TextureSampling.js +6 -7
  86. package/src/index.js +22 -0
  87. package/src/managers/CameraManager.js +412 -56
  88. package/src/managers/DenoisingManager.js +4 -3
  89. package/src/managers/EnvironmentManager.js +263 -33
  90. package/src/managers/GoboManager.js +19 -8
  91. package/src/managers/IESManager.js +3 -3
  92. package/src/managers/InteractionManager.js +30 -2
  93. package/src/managers/LightManager.js +98 -5
  94. package/src/managers/MaterialDataManager.js +22 -2
  95. package/src/managers/TransformManager.js +26 -0
  96. package/src/managers/UniformManager.js +11 -7
  97. package/src/managers/VideoRenderManager.js +38 -17
  98. package/src/managers/ViewCamera.js +77 -0
  99. package/src/managers/WalkControls.js +262 -0
  100. package/src/managers/helpers/OutlineHelper.js +22 -2
  101. package/src/managers/timeline/CameraTrack.js +235 -0
  102. package/src/managers/timeline/TimelineManager.js +146 -0
  103. package/src/version.js +3 -0
  104. package/src/Processor/ProceduralSky.js +0 -291
@@ -0,0 +1,112 @@
1
+ import { ENGINE_AREAS } from './StorageManager.js';
2
+
3
+ const WRITE_PIECE_BYTES = 32 * 1024 * 1024;
4
+ const FILE = 'chunks.bin';
5
+
6
+ /**
7
+ * Where a spilled ChunkedRecords keeps its chunks: one scratch file, each chunk at a fixed offset.
8
+ * It lives in the `spill` cache area and means nothing once its page is gone, so a new page clears
9
+ * whatever no open page holds. Between writes the entry stays open, which is that hold.
10
+ */
11
+ export class SpillStore {
12
+
13
+ /**
14
+ * @param {import('./StorageManager.js').StorageManager} storage
15
+ * @param {string} key
16
+ * @param {number} chunkBytes - the byte stride of one full chunk
17
+ * @returns {Promise<?SpillStore>} null without storage, or with no room
18
+ */
19
+ static async create( storage, key, chunkBytes, { label = '', expectedBytes = 0 } = {} ) {
20
+
21
+ const area = storage?.area( ENGINE_AREAS.SPILL );
22
+ const writer = await area?.create( key, { label, expectedBytes, growable: [ FILE ] } );
23
+ return writer ? new SpillStore( area, key, chunkBytes, writer ) : null;
24
+
25
+ }
26
+
27
+ constructor( area, key, chunkBytes, writer ) {
28
+
29
+ this._area = area;
30
+ this._key = key;
31
+ this._chunkBytes = chunkBytes;
32
+ this._writer = writer;
33
+ this._entry = null;
34
+ this._file = null;
35
+
36
+ }
37
+
38
+ write( k, chunk ) {
39
+
40
+ return this.writeAt( k * this._chunkBytes, chunk );
41
+
42
+ }
43
+
44
+ /** Writes `data` at a byte offset — for records of varying size, such as one BLAS each. */
45
+ async writeAt( at, data ) {
46
+
47
+ if ( ! this._writer ) {
48
+
49
+ this._entry?.release();
50
+ this._entry = this._file = null;
51
+ this._writer = await this._area.edit( this._key );
52
+ if ( ! this._writer ) throw new Error( 'spill: its storage entry is gone' );
53
+
54
+ }
55
+
56
+ // In pieces: an unshared buffer is copied to reach the storage worker, and one copy of a
57
+ // big BLAS (600 MB for a 15M-triangle mesh) was the allocation that failed a 70M build.
58
+ const bytes = new Uint8Array( data.buffer, data.byteOffset, data.byteLength );
59
+ let off = 0;
60
+ do {
61
+
62
+ await this._writer.write( FILE, bytes.subarray( off, Math.min( bytes.length, off + WRITE_PIECE_BYTES ) ), { at: at + off } );
63
+ off += WRITE_PIECE_BYTES;
64
+
65
+ } while ( off < bytes.length );
66
+
67
+ }
68
+
69
+ /** Commits what was written and keeps the entry open, so no other page clears it. */
70
+ async flush() {
71
+
72
+ if ( this._writer ) {
73
+
74
+ await this._writer.commit();
75
+ this._writer = null;
76
+
77
+ }
78
+
79
+ if ( ! this._entry ) {
80
+
81
+ this._entry = await this._area.open( this._key, { wait: true } );
82
+ this._file = await this._entry?.file( FILE );
83
+ if ( ! this._file ) throw new Error( 'spill: its storage entry is gone' );
84
+
85
+ }
86
+
87
+ }
88
+
89
+ read( k, bytes ) {
90
+
91
+ return this.readAt( k * this._chunkBytes, bytes );
92
+
93
+ }
94
+
95
+ async readAt( at, bytes ) {
96
+
97
+ await this.flush();
98
+ return await this._file.slice( at, at + bytes ).arrayBuffer();
99
+
100
+ }
101
+
102
+ async dispose() {
103
+
104
+ if ( this._writer ) await this._writer.abort();
105
+ this._writer = null;
106
+ this._entry?.release();
107
+ this._entry = this._file = null;
108
+ await this._area.remove( this._key );
109
+
110
+ }
111
+
112
+ }