rayzee 9.0.0 → 9.1.1
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/README.md +139 -8
- package/dist/{NeuralRetouch-CYOJ21Wn.js → NeuralRetouch-BRquqfmZ.js} +1 -1
- package/dist/{NeuralSuperRes-CQLCLpcC.js → NeuralSuperRes-CbNvQjCw.js} +3 -2
- package/dist/{ToneMapGPU-BVE852iN.js → ToneMapGPU-DpUZDMbQ.js} +2 -1
- package/dist/rayzee.es.js +10353 -5337
- package/dist/rayzee.umd.js +265 -265
- package/package.json +1 -1
- package/src/AssetConfig.js +4 -0
- package/src/EngineDefaults.js +38 -56
- package/src/EngineEvents.js +3 -0
- package/src/EngineIssues.js +6 -0
- package/src/Headless.js +3 -1
- package/src/Passes/AIUpscaler.js +2 -1
- package/src/Passes/OIDNDenoiser.js +3 -6
- package/src/PathTracerApp.js +290 -19
- package/src/Processor/ArchiveCache.js +120 -0
- package/src/Processor/ArchiveReader.js +179 -32
- package/src/Processor/AssetLoader.js +514 -76
- package/src/Processor/AtmosphereModel.js +465 -0
- package/src/Processor/BVHBuilder.js +4 -1
- package/src/Processor/BVHLeafFold.js +100 -0
- package/src/Processor/BVHRefitter.js +98 -214
- package/src/Processor/ChunkedRecords.js +189 -4
- package/src/Processor/EmissiveTriangleBuilder.js +8 -0
- package/src/Processor/GeometryExtractor.js +238 -40
- package/src/Processor/InstanceTable.js +55 -37
- package/src/Processor/KernelManager.js +4 -1
- package/src/Processor/PBRT/PBRTCurves.js +104 -27
- package/src/Processor/PBRT/PBRTParser.js +132 -22
- package/src/Processor/PBRT/PBRTSceneBuilder.js +192 -49
- package/src/Processor/PBRT/buffers.js +27 -0
- package/src/Processor/PBRT/index.js +55 -15
- package/src/Processor/PackedRayBuffer.js +10 -13
- package/src/Processor/ParallelBVHBuilder.js +36 -15
- package/src/Processor/PhysicalSky.js +308 -0
- package/src/Processor/QueueManager.js +1 -0
- package/src/Processor/SceneProcessor.js +1132 -181
- package/src/Processor/SplitBLAS.js +249 -0
- package/src/Processor/SunPosition.js +41 -0
- package/src/Processor/TextureCreator.js +21 -0
- package/src/Processor/Workers/AIUpscalerWorker.js +79 -52
- package/src/Processor/Workers/BVHWorker.js +17 -13
- package/src/Processor/ZipReader.js +207 -0
- package/src/RenderSettings.js +38 -0
- package/src/SceneState/SceneState.js +367 -0
- package/src/SceneState/portable.js +52 -0
- package/src/Stages/NormalDepth.js +7 -6
- package/src/Stages/PathTracer.js +108 -4
- package/src/Stages/PathTracerStage.js +251 -104
- package/src/Storage/BLASCache.js +190 -0
- package/src/Storage/CDFCache.js +77 -0
- package/src/Storage/DownloadCache.js +266 -0
- package/src/Storage/GeometrySpill.js +217 -0
- package/src/Storage/SceneGraphCodec.js +503 -0
- package/src/Storage/SpillStore.js +112 -0
- package/src/Storage/StorageManager.js +934 -0
- package/src/Storage/StorageOps.js +137 -0
- package/src/Storage/StorageWorker.js +37 -0
- package/src/Storage/events.js +29 -0
- package/src/Storage/identity.js +77 -0
- package/src/Storage/index.js +9 -0
- package/src/Storage/inlineTransport.js +24 -0
- package/src/Storage/locks.js +99 -0
- package/src/Storage/openStorage.js +87 -0
- package/src/Storage/sceneCachePolicy.js +12 -0
- package/src/Storage/shared.js +9 -0
- package/src/Storage/transport.js +62 -0
- package/src/TSL/Atmosphere.js +684 -0
- package/src/TSL/BVHTraversal.js +288 -239
- package/src/TSL/Common.js +11 -2
- package/src/TSL/Displacement.js +6 -6
- package/src/TSL/EmissiveSampling.js +5 -5
- package/src/TSL/EnvironmentCDF.js +176 -0
- package/src/TSL/GenerateKernel.js +3 -3
- package/src/TSL/HitFacet.js +4 -4
- package/src/TSL/LightsDirect.js +8 -8
- package/src/TSL/LightsSampling.js +55 -37
- package/src/TSL/Random.js +1 -0
- package/src/TSL/ShadeKernel.js +75 -19
- package/src/TSL/Sun.js +40 -0
- package/src/TSL/TextureSampling.js +6 -7
- package/src/index.js +18 -0
- package/src/managers/CameraManager.js +169 -1
- package/src/managers/EnvironmentManager.js +263 -33
- package/src/managers/GoboManager.js +19 -8
- package/src/managers/IESManager.js +3 -3
- package/src/managers/LightManager.js +98 -5
- package/src/managers/MaterialDataManager.js +22 -2
- package/src/managers/TransformManager.js +26 -0
- package/src/managers/UniformManager.js +5 -3
- package/src/managers/VideoRenderManager.js +3 -1
- package/src/managers/timeline/CameraTrack.js +22 -0
- package/src/managers/timeline/TimelineManager.js +14 -0
- package/src/version.js +3 -0
- 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
|
+
}
|