@plasius/gpu-renderer 0.1.12 → 0.1.14
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 +68 -0
- package/README.md +118 -3
- package/dist/index.cjs +3447 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3421 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
- package/src/index.d.ts +582 -0
- package/src/index.js +213 -0
- package/src/wavefront-compute.js +3460 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasius/gpu-renderer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "Framework-agnostic WebGPU renderer runtime for Plasius projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsup",
|
|
29
29
|
"demo": "python3 -m http.server --directory ..",
|
|
30
|
-
"typecheck": "node --check src/index.js",
|
|
30
|
+
"typecheck": "node --check src/index.js && node --check src/wavefront-compute.js",
|
|
31
31
|
"audit:eslint": "eslint . --max-warnings=0",
|
|
32
32
|
"audit:deps": "npm ls --all --omit=optional --omit=peer > /dev/null 2>&1 || true",
|
|
33
33
|
"audit:npm": "npm audit --audit-level=high --omit=dev",
|
|
@@ -49,7 +49,6 @@
|
|
|
49
49
|
"author": "Plasius LTD <development@plasius.co.uk>",
|
|
50
50
|
"license": "Apache-2.0",
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@plasius/gpu-shared": "^0.1.9",
|
|
53
52
|
"@plasius/gpu-xr": "^0.1.11"
|
|
54
53
|
},
|
|
55
54
|
"devDependencies": {
|
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,490 @@
|
|
|
1
1
|
export type RendererColor = string | [number, number, number, number?];
|
|
2
|
+
export type WavefrontSceneObjectKind = "sphere" | "box" | "aabb" | "bounds" | number;
|
|
3
|
+
export type WavefrontMaterialKind =
|
|
4
|
+
| "diffuse"
|
|
5
|
+
| "metal"
|
|
6
|
+
| "reflective"
|
|
7
|
+
| "dielectric"
|
|
8
|
+
| "refractive"
|
|
9
|
+
| "glass"
|
|
10
|
+
| "transparent"
|
|
11
|
+
| "transmission"
|
|
12
|
+
| "emissive"
|
|
13
|
+
| "light"
|
|
14
|
+
| number;
|
|
15
|
+
|
|
16
|
+
export interface WavefrontCameraOptions {
|
|
17
|
+
readonly position?: readonly [number, number, number] | readonly number[];
|
|
18
|
+
readonly target?: readonly [number, number, number] | readonly number[];
|
|
19
|
+
readonly up?: readonly [number, number, number] | readonly number[];
|
|
20
|
+
readonly fovYDegrees?: number;
|
|
21
|
+
readonly fov?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface WavefrontSceneObjectInput {
|
|
25
|
+
readonly id?: number;
|
|
26
|
+
readonly kind?: WavefrontSceneObjectKind;
|
|
27
|
+
readonly type?: WavefrontSceneObjectKind;
|
|
28
|
+
readonly materialKind?: WavefrontMaterialKind;
|
|
29
|
+
readonly flags?: number;
|
|
30
|
+
readonly center?: readonly [number, number, number] | readonly number[];
|
|
31
|
+
readonly position?: readonly [number, number, number] | readonly number[];
|
|
32
|
+
readonly radius?: number;
|
|
33
|
+
readonly halfExtent?: readonly [number, number, number] | readonly number[];
|
|
34
|
+
readonly halfExtents?: readonly [number, number, number] | readonly number[];
|
|
35
|
+
readonly extents?: readonly [number, number, number] | readonly number[];
|
|
36
|
+
readonly min?: readonly [number, number, number] | readonly number[];
|
|
37
|
+
readonly max?: readonly [number, number, number] | readonly number[];
|
|
38
|
+
readonly bounds?: {
|
|
39
|
+
readonly min?: readonly [number, number, number] | readonly number[];
|
|
40
|
+
readonly max?: readonly [number, number, number] | readonly number[];
|
|
41
|
+
};
|
|
42
|
+
readonly color?: RendererColor | readonly number[];
|
|
43
|
+
readonly baseColor?: RendererColor | readonly number[];
|
|
44
|
+
readonly albedo?: RendererColor | readonly number[];
|
|
45
|
+
readonly emission?: readonly [number, number, number, number?] | readonly number[];
|
|
46
|
+
readonly emissive?: readonly [number, number, number, number?] | readonly number[];
|
|
47
|
+
readonly roughness?: number;
|
|
48
|
+
readonly metallic?: number;
|
|
49
|
+
readonly opacity?: number;
|
|
50
|
+
readonly ior?: number;
|
|
51
|
+
readonly material?: {
|
|
52
|
+
readonly kind?: WavefrontMaterialKind;
|
|
53
|
+
readonly color?: RendererColor | readonly number[];
|
|
54
|
+
readonly baseColor?: RendererColor | readonly number[];
|
|
55
|
+
readonly emission?: readonly [number, number, number, number?] | readonly number[];
|
|
56
|
+
readonly emissive?: readonly [number, number, number, number?] | readonly number[];
|
|
57
|
+
readonly roughness?: number;
|
|
58
|
+
readonly metallic?: number;
|
|
59
|
+
readonly opacity?: number;
|
|
60
|
+
readonly ior?: number;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface WavefrontSceneObject {
|
|
65
|
+
readonly id: number;
|
|
66
|
+
readonly kind: number;
|
|
67
|
+
readonly materialKind: number;
|
|
68
|
+
readonly flags: number;
|
|
69
|
+
readonly center: readonly [number, number, number] | readonly number[];
|
|
70
|
+
readonly halfExtent: readonly [number, number, number] | readonly number[];
|
|
71
|
+
readonly color: readonly [number, number, number, number] | readonly number[];
|
|
72
|
+
readonly emission: readonly [number, number, number, number] | readonly number[];
|
|
73
|
+
readonly roughness: number;
|
|
74
|
+
readonly metallic: number;
|
|
75
|
+
readonly opacity: number;
|
|
76
|
+
readonly ior: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface WavefrontMeshInput {
|
|
80
|
+
readonly id?: number;
|
|
81
|
+
readonly positions: readonly number[] | Float32Array;
|
|
82
|
+
readonly indices?: readonly number[] | Uint16Array | Uint32Array;
|
|
83
|
+
readonly normals?: readonly number[] | Float32Array | null;
|
|
84
|
+
readonly uvs?: readonly number[] | Float32Array | null;
|
|
85
|
+
readonly texcoords?: readonly number[] | Float32Array | null;
|
|
86
|
+
readonly uv?: readonly number[] | Float32Array | null;
|
|
87
|
+
readonly materialKind?: WavefrontMaterialKind;
|
|
88
|
+
readonly flags?: number;
|
|
89
|
+
readonly materialRefId?: number;
|
|
90
|
+
readonly materialId?: number;
|
|
91
|
+
readonly mediumRefId?: number;
|
|
92
|
+
readonly mediumId?: number;
|
|
93
|
+
readonly color?: RendererColor | readonly number[];
|
|
94
|
+
readonly baseColor?: RendererColor | readonly number[];
|
|
95
|
+
readonly albedo?: RendererColor | readonly number[];
|
|
96
|
+
readonly emission?: readonly [number, number, number, number?] | readonly number[];
|
|
97
|
+
readonly emissive?: readonly [number, number, number, number?] | readonly number[];
|
|
98
|
+
readonly roughness?: number;
|
|
99
|
+
readonly metallic?: number;
|
|
100
|
+
readonly opacity?: number;
|
|
101
|
+
readonly ior?: number;
|
|
102
|
+
readonly material?: {
|
|
103
|
+
readonly kind?: WavefrontMaterialKind;
|
|
104
|
+
readonly color?: RendererColor | readonly number[];
|
|
105
|
+
readonly baseColor?: RendererColor | readonly number[];
|
|
106
|
+
readonly emission?: readonly [number, number, number, number?] | readonly number[];
|
|
107
|
+
readonly emissive?: readonly [number, number, number, number?] | readonly number[];
|
|
108
|
+
readonly roughness?: number;
|
|
109
|
+
readonly metallic?: number;
|
|
110
|
+
readonly opacity?: number;
|
|
111
|
+
readonly ior?: number;
|
|
112
|
+
readonly id?: number;
|
|
113
|
+
};
|
|
114
|
+
readonly medium?: {
|
|
115
|
+
readonly id?: number;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export interface WavefrontTriangleRecord {
|
|
120
|
+
readonly triangleId: number;
|
|
121
|
+
readonly meshId: number;
|
|
122
|
+
readonly materialKind: number;
|
|
123
|
+
readonly flags: number;
|
|
124
|
+
readonly materialRefId: number;
|
|
125
|
+
readonly mediumRefId: number;
|
|
126
|
+
readonly v0: readonly number[];
|
|
127
|
+
readonly v1: readonly number[];
|
|
128
|
+
readonly v2: readonly number[];
|
|
129
|
+
readonly n0: readonly number[];
|
|
130
|
+
readonly n1: readonly number[];
|
|
131
|
+
readonly n2: readonly number[];
|
|
132
|
+
readonly uv0: readonly number[];
|
|
133
|
+
readonly uv1: readonly number[];
|
|
134
|
+
readonly uv2: readonly number[];
|
|
135
|
+
readonly color: readonly number[];
|
|
136
|
+
readonly emission: readonly number[];
|
|
137
|
+
readonly material: readonly number[];
|
|
138
|
+
readonly bounds: Readonly<{ min: readonly number[]; max: readonly number[] }>;
|
|
139
|
+
readonly centroid: readonly number[];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface WavefrontBvhNodeRecord {
|
|
143
|
+
readonly bounds: Readonly<{ min: readonly number[]; max: readonly number[] }>;
|
|
144
|
+
readonly firstTriangle: number;
|
|
145
|
+
readonly triangleCount: number;
|
|
146
|
+
readonly leftChild: number;
|
|
147
|
+
readonly rightChild: number;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export interface WavefrontBvhBuildLevel {
|
|
151
|
+
readonly start: number;
|
|
152
|
+
readonly count: number;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface WavefrontBvhSortStage {
|
|
156
|
+
readonly compareDistance: number;
|
|
157
|
+
readonly sequenceSize: number;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface WavefrontMeshAcceleration {
|
|
161
|
+
readonly nodes: readonly WavefrontBvhNodeRecord[];
|
|
162
|
+
readonly triangles: readonly WavefrontTriangleRecord[];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type WavefrontAccelerationBuildMode = "gpu" | "cpu-debug";
|
|
166
|
+
|
|
167
|
+
export interface WavefrontGpuMeshSource {
|
|
168
|
+
readonly vertices: Readonly<{
|
|
169
|
+
readonly buffer: ArrayBuffer;
|
|
170
|
+
readonly count: number;
|
|
171
|
+
readonly recordBytes: number;
|
|
172
|
+
}>;
|
|
173
|
+
readonly indices: Readonly<{
|
|
174
|
+
readonly buffer: ArrayBuffer;
|
|
175
|
+
readonly count: number;
|
|
176
|
+
readonly recordBytes: 4;
|
|
177
|
+
}>;
|
|
178
|
+
readonly meshes: Readonly<{
|
|
179
|
+
readonly buffer: ArrayBuffer;
|
|
180
|
+
readonly records: readonly Readonly<{
|
|
181
|
+
readonly id: number;
|
|
182
|
+
readonly positions: readonly number[];
|
|
183
|
+
readonly indices: readonly number[];
|
|
184
|
+
readonly normals: readonly number[] | null;
|
|
185
|
+
readonly uvs: readonly number[] | null;
|
|
186
|
+
readonly materialKind: number;
|
|
187
|
+
readonly flags: number;
|
|
188
|
+
readonly materialRefId: number;
|
|
189
|
+
readonly mediumRefId: number;
|
|
190
|
+
readonly color: readonly number[];
|
|
191
|
+
readonly emission: readonly number[];
|
|
192
|
+
readonly roughness: number;
|
|
193
|
+
readonly metallic: number;
|
|
194
|
+
readonly opacity: number;
|
|
195
|
+
readonly ior: number;
|
|
196
|
+
}>[];
|
|
197
|
+
readonly count: number;
|
|
198
|
+
readonly recordBytes: number;
|
|
199
|
+
}>;
|
|
200
|
+
readonly triangleCount: number;
|
|
201
|
+
readonly bvhNodeCapacity: number;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export interface WavefrontEmissiveTriangleIndexSource {
|
|
205
|
+
readonly buffer: ArrayBuffer;
|
|
206
|
+
readonly indices: readonly number[];
|
|
207
|
+
readonly count: number;
|
|
208
|
+
readonly capacity: number;
|
|
209
|
+
readonly recordBytes: 4;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface WavefrontPathTracingComputeConfig {
|
|
213
|
+
readonly width: number;
|
|
214
|
+
readonly height: number;
|
|
215
|
+
readonly maxDepth: number;
|
|
216
|
+
readonly tileSize: number;
|
|
217
|
+
readonly samplesPerPixel: number;
|
|
218
|
+
readonly tilePixelCapacity: number;
|
|
219
|
+
readonly sceneObjects: readonly WavefrontSceneObject[];
|
|
220
|
+
readonly sceneObjectCount: number;
|
|
221
|
+
readonly sceneObjectCapacity: number;
|
|
222
|
+
readonly accelerationBuildMode: WavefrontAccelerationBuildMode;
|
|
223
|
+
readonly gpuAccelerationBuildRequired: boolean;
|
|
224
|
+
readonly gpuMeshSource: WavefrontGpuMeshSource;
|
|
225
|
+
readonly meshAcceleration: WavefrontMeshAcceleration;
|
|
226
|
+
readonly emissiveTriangleIndices: WavefrontEmissiveTriangleIndexSource;
|
|
227
|
+
readonly emissiveTriangleCount: number;
|
|
228
|
+
readonly emissiveTriangleCapacity: number;
|
|
229
|
+
readonly triangleCount: number;
|
|
230
|
+
readonly triangleCapacity: number;
|
|
231
|
+
readonly bvhNodeCount: number;
|
|
232
|
+
readonly bvhNodeCapacity: number;
|
|
233
|
+
readonly bvhLeafSortCapacity: number;
|
|
234
|
+
readonly bvhSortStages: readonly WavefrontBvhSortStage[];
|
|
235
|
+
readonly bvhBuildLevels: readonly WavefrontBvhBuildLevel[];
|
|
236
|
+
readonly camera: Readonly<{
|
|
237
|
+
readonly position: readonly number[];
|
|
238
|
+
readonly forward: readonly number[];
|
|
239
|
+
readonly right: readonly number[];
|
|
240
|
+
readonly up: readonly number[];
|
|
241
|
+
readonly fovYDegrees: number;
|
|
242
|
+
readonly aspect: number;
|
|
243
|
+
readonly tanHalfFovY: number;
|
|
244
|
+
}>;
|
|
245
|
+
readonly environmentColor: readonly [number, number, number, number] | readonly number[];
|
|
246
|
+
readonly ambientColor: readonly [number, number, number, number] | readonly number[];
|
|
247
|
+
readonly environmentLighting: WavefrontEnvironmentLightingConfig;
|
|
248
|
+
readonly displayQuality: boolean;
|
|
249
|
+
readonly requiresMeshBvhForDisplayQuality: true;
|
|
250
|
+
readonly denoise: boolean;
|
|
251
|
+
readonly frameIndex: number;
|
|
252
|
+
readonly memory: WavefrontPathTracingMemoryEstimate;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export interface WavefrontEnvironmentLightingInput {
|
|
256
|
+
readonly environmentColor?: readonly [number, number, number, number?] | readonly number[];
|
|
257
|
+
readonly ambientColor?: readonly [number, number, number, number?] | readonly number[];
|
|
258
|
+
readonly horizonColor?: readonly [number, number, number, number?] | readonly number[];
|
|
259
|
+
readonly zenithColor?: readonly [number, number, number, number?] | readonly number[];
|
|
260
|
+
readonly sunDirection?: readonly [number, number, number] | readonly number[];
|
|
261
|
+
readonly sunColor?: readonly [number, number, number, number?] | readonly number[];
|
|
262
|
+
readonly intensity?: number;
|
|
263
|
+
readonly mode?: number;
|
|
264
|
+
readonly exposure?: number;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface WavefrontEnvironmentLightingConfig {
|
|
268
|
+
readonly environmentColor: readonly [number, number, number, number] | readonly number[];
|
|
269
|
+
readonly ambientColor: readonly [number, number, number, number] | readonly number[];
|
|
270
|
+
readonly horizonColor: readonly [number, number, number, number] | readonly number[];
|
|
271
|
+
readonly zenithColor: readonly [number, number, number, number] | readonly number[];
|
|
272
|
+
readonly sunDirection: readonly [number, number, number] | readonly number[];
|
|
273
|
+
readonly sunColor: readonly [number, number, number, number] | readonly number[];
|
|
274
|
+
readonly intensity: number;
|
|
275
|
+
readonly mode: number;
|
|
276
|
+
readonly exposure: number;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export interface WavefrontPathTracingMemoryEstimate {
|
|
280
|
+
readonly queueBytes: number;
|
|
281
|
+
readonly queuePairBytes: number;
|
|
282
|
+
readonly hitBytes: number;
|
|
283
|
+
readonly accumulationBytes: number;
|
|
284
|
+
readonly sceneObjectBytes: number;
|
|
285
|
+
readonly triangleBytes: number;
|
|
286
|
+
readonly bvhNodeBytes: number;
|
|
287
|
+
readonly bvhLeafReferenceBytes: number;
|
|
288
|
+
readonly emissiveTriangleMetadataBytes: number;
|
|
289
|
+
readonly configBytes: number;
|
|
290
|
+
readonly counterBytes: number;
|
|
291
|
+
readonly totalHotBufferBytes: number;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export interface CreateWavefrontPathTracingComputeRendererOptions {
|
|
295
|
+
readonly canvas?: HTMLCanvasElement | string;
|
|
296
|
+
readonly navigator?: Navigator | { gpu?: GPU };
|
|
297
|
+
readonly document?: Document;
|
|
298
|
+
readonly powerPreference?: GPUPowerPreference;
|
|
299
|
+
readonly alpha?: boolean;
|
|
300
|
+
readonly format?: GPUTextureFormat;
|
|
301
|
+
readonly width?: number;
|
|
302
|
+
readonly height?: number;
|
|
303
|
+
readonly maxDepth?: number;
|
|
304
|
+
readonly tileSize?: number;
|
|
305
|
+
readonly samplesPerPixel?: number;
|
|
306
|
+
readonly tilePixelCapacity?: number;
|
|
307
|
+
readonly sceneObjectCapacity?: number;
|
|
308
|
+
readonly sceneObjects?: readonly WavefrontSceneObjectInput[];
|
|
309
|
+
readonly mesh?: WavefrontMeshInput;
|
|
310
|
+
readonly meshes?: readonly WavefrontMeshInput[];
|
|
311
|
+
readonly triangleCapacity?: number;
|
|
312
|
+
readonly bvhNodeCapacity?: number;
|
|
313
|
+
readonly bvhLeafSortCapacity?: number;
|
|
314
|
+
readonly emissiveTriangleCapacity?: number;
|
|
315
|
+
readonly accelerationBuildMode?: WavefrontAccelerationBuildMode;
|
|
316
|
+
readonly camera?: WavefrontCameraOptions;
|
|
317
|
+
readonly environmentColor?: readonly [number, number, number, number?] | readonly number[];
|
|
318
|
+
readonly ambientColor?: readonly [number, number, number, number?] | readonly number[];
|
|
319
|
+
readonly environmentLighting?: WavefrontEnvironmentLightingInput;
|
|
320
|
+
readonly displayQuality?: boolean;
|
|
321
|
+
readonly denoise?: boolean;
|
|
322
|
+
readonly frameIndex?: number;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface WavefrontPathTracingComputeRenderer {
|
|
326
|
+
readonly canvas: HTMLCanvasElement;
|
|
327
|
+
readonly context: GPUCanvasContext;
|
|
328
|
+
readonly device: GPUDevice;
|
|
329
|
+
readonly format: GPUTextureFormat | string;
|
|
330
|
+
readonly config: WavefrontPathTracingComputeConfig;
|
|
331
|
+
renderOnce(): Readonly<{
|
|
332
|
+
frame: number;
|
|
333
|
+
width: number;
|
|
334
|
+
height: number;
|
|
335
|
+
maxDepth: number;
|
|
336
|
+
tiles: number;
|
|
337
|
+
tileSize: number;
|
|
338
|
+
samplesPerPixel: number;
|
|
339
|
+
screenRays: number;
|
|
340
|
+
primaryRays: number;
|
|
341
|
+
sceneObjectCount: number;
|
|
342
|
+
triangleCount: number;
|
|
343
|
+
emissiveTriangleCount: number;
|
|
344
|
+
bvhNodeCount: number;
|
|
345
|
+
displayQuality: boolean;
|
|
346
|
+
accelerationBuildMode: WavefrontAccelerationBuildMode;
|
|
347
|
+
gpuAccelerationBuildRequired: boolean;
|
|
348
|
+
memory: WavefrontPathTracingMemoryEstimate;
|
|
349
|
+
}>;
|
|
350
|
+
readOutputProbe(options?: { x?: number; y?: number }): Promise<
|
|
351
|
+
Readonly<{
|
|
352
|
+
x: number;
|
|
353
|
+
y: number;
|
|
354
|
+
rgba: readonly number[];
|
|
355
|
+
luminance: number;
|
|
356
|
+
}>
|
|
357
|
+
>;
|
|
358
|
+
updateSceneObjects(sceneObjects: readonly WavefrontSceneObjectInput[]): WavefrontPathTracingComputeConfig;
|
|
359
|
+
getSnapshot(): Readonly<{
|
|
360
|
+
frame: number;
|
|
361
|
+
width: number;
|
|
362
|
+
height: number;
|
|
363
|
+
maxDepth: number;
|
|
364
|
+
tiles: number;
|
|
365
|
+
tileSize: number;
|
|
366
|
+
samplesPerPixel: number;
|
|
367
|
+
sceneObjectCount: number;
|
|
368
|
+
triangleCount: number;
|
|
369
|
+
emissiveTriangleCount: number;
|
|
370
|
+
bvhNodeCount: number;
|
|
371
|
+
displayQuality: boolean;
|
|
372
|
+
accelerationBuildMode: WavefrontAccelerationBuildMode;
|
|
373
|
+
gpuAccelerationBuildRequired: boolean;
|
|
374
|
+
memory: WavefrontPathTracingMemoryEstimate;
|
|
375
|
+
}>;
|
|
376
|
+
destroy(): void;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function normalizeWavefrontSceneObject(
|
|
380
|
+
input?: WavefrontSceneObjectInput,
|
|
381
|
+
index?: number
|
|
382
|
+
): WavefrontSceneObject;
|
|
383
|
+
export function createDefaultWavefrontSceneObjects(): readonly WavefrontSceneObject[];
|
|
384
|
+
export function estimateWavefrontPathTracingMemory(options?: {
|
|
385
|
+
tilePixelCapacity?: number;
|
|
386
|
+
sceneObjectCapacity?: number;
|
|
387
|
+
triangleCapacity?: number;
|
|
388
|
+
bvhNodeCapacity?: number;
|
|
389
|
+
bvhLeafSortCapacity?: number;
|
|
390
|
+
emissiveTriangleCapacity?: number;
|
|
391
|
+
}): WavefrontPathTracingMemoryEstimate;
|
|
392
|
+
export function normalizeWavefrontMesh(
|
|
393
|
+
input: WavefrontMeshInput,
|
|
394
|
+
meshIndex?: number
|
|
395
|
+
): Readonly<{
|
|
396
|
+
id: number;
|
|
397
|
+
positions: readonly number[];
|
|
398
|
+
indices: readonly number[];
|
|
399
|
+
normals: readonly number[] | null;
|
|
400
|
+
uvs: readonly number[] | null;
|
|
401
|
+
materialKind: number;
|
|
402
|
+
flags: number;
|
|
403
|
+
materialRefId: number;
|
|
404
|
+
mediumRefId: number;
|
|
405
|
+
color: readonly number[];
|
|
406
|
+
emission: readonly number[];
|
|
407
|
+
roughness: number;
|
|
408
|
+
metallic: number;
|
|
409
|
+
opacity: number;
|
|
410
|
+
ior: number;
|
|
411
|
+
}>;
|
|
412
|
+
export function createWavefrontMeshAcceleration(
|
|
413
|
+
meshes?: readonly WavefrontMeshInput[] | WavefrontMeshInput
|
|
414
|
+
): WavefrontMeshAcceleration;
|
|
415
|
+
export function createWavefrontGpuMeshSource(
|
|
416
|
+
meshes?: readonly WavefrontMeshInput[] | WavefrontMeshInput
|
|
417
|
+
): WavefrontGpuMeshSource;
|
|
418
|
+
export function createWavefrontEmissiveTriangleIndexSource(
|
|
419
|
+
meshes?: readonly WavefrontMeshInput[] | WavefrontMeshInput,
|
|
420
|
+
capacity?: number
|
|
421
|
+
): WavefrontEmissiveTriangleIndexSource;
|
|
422
|
+
export function createWavefrontBvhBuildLevels(
|
|
423
|
+
triangleCount: number
|
|
424
|
+
): readonly WavefrontBvhBuildLevel[];
|
|
425
|
+
export function createWavefrontBvhSortStages(
|
|
426
|
+
itemCount: number
|
|
427
|
+
): readonly WavefrontBvhSortStage[];
|
|
428
|
+
export function createWavefrontPathTracingComputeConfig(
|
|
429
|
+
options?: CreateWavefrontPathTracingComputeRendererOptions
|
|
430
|
+
): WavefrontPathTracingComputeConfig;
|
|
431
|
+
export function packWavefrontSceneObjects(
|
|
432
|
+
sceneObjects: readonly WavefrontSceneObjectInput[],
|
|
433
|
+
capacity?: number
|
|
434
|
+
): Readonly<{
|
|
435
|
+
buffer: ArrayBuffer;
|
|
436
|
+
objects: readonly WavefrontSceneObject[];
|
|
437
|
+
count: number;
|
|
438
|
+
capacity: number;
|
|
439
|
+
}>;
|
|
440
|
+
export function packWavefrontTriangles(
|
|
441
|
+
triangles: readonly WavefrontTriangleRecord[],
|
|
442
|
+
capacity?: number
|
|
443
|
+
): Readonly<{
|
|
444
|
+
buffer: ArrayBuffer;
|
|
445
|
+
triangles: readonly WavefrontTriangleRecord[];
|
|
446
|
+
count: number;
|
|
447
|
+
capacity: number;
|
|
448
|
+
}>;
|
|
449
|
+
export function packWavefrontBvhNodes(
|
|
450
|
+
nodes: readonly WavefrontBvhNodeRecord[],
|
|
451
|
+
capacity?: number
|
|
452
|
+
): Readonly<{
|
|
453
|
+
buffer: ArrayBuffer;
|
|
454
|
+
nodes: readonly WavefrontBvhNodeRecord[];
|
|
455
|
+
count: number;
|
|
456
|
+
capacity: number;
|
|
457
|
+
}>;
|
|
458
|
+
export function supportsWavefrontPathTracingCompute(options?: {
|
|
459
|
+
navigator?: Navigator | { gpu?: GPU };
|
|
460
|
+
}): boolean;
|
|
461
|
+
export function createWavefrontPathTracingComputeRenderer(
|
|
462
|
+
options?: CreateWavefrontPathTracingComputeRendererOptions
|
|
463
|
+
): Promise<WavefrontPathTracingComputeRenderer>;
|
|
464
|
+
|
|
465
|
+
export const wavefrontPathTracingComputeLimits: Readonly<{
|
|
466
|
+
workgroupSize: 64;
|
|
467
|
+
rayRecordBytes: 80;
|
|
468
|
+
hitRecordBytes: 192;
|
|
469
|
+
sceneObjectRecordBytes: 96;
|
|
470
|
+
meshVertexRecordBytes: 48;
|
|
471
|
+
meshRangeRecordBytes: 96;
|
|
472
|
+
triangleRecordBytes: 208;
|
|
473
|
+
bvhNodeRecordBytes: 48;
|
|
474
|
+
bvhLeafReferenceRecordBytes: 16;
|
|
475
|
+
accumulationRecordBytes: 16;
|
|
476
|
+
}>;
|
|
477
|
+
export const wavefrontSceneObjectKinds: Readonly<{
|
|
478
|
+
sphere: 1;
|
|
479
|
+
box: 2;
|
|
480
|
+
}>;
|
|
481
|
+
export const wavefrontMaterialKinds: Readonly<{
|
|
482
|
+
diffuse: 0;
|
|
483
|
+
metal: 1;
|
|
484
|
+
dielectric: 2;
|
|
485
|
+
transparent: 3;
|
|
486
|
+
emissive: 4;
|
|
487
|
+
}>;
|
|
2
488
|
|
|
3
489
|
export interface RendererFrameEvent {
|
|
4
490
|
frame: number;
|
|
@@ -151,6 +637,19 @@ export type RendererAccelerationStructureUpdateClass =
|
|
|
151
637
|
| "rigid-dynamic"
|
|
152
638
|
| "deforming"
|
|
153
639
|
| "proxy";
|
|
640
|
+
export type RendererWavefrontHitType =
|
|
641
|
+
| "surface"
|
|
642
|
+
| "emissive"
|
|
643
|
+
| "environment"
|
|
644
|
+
| "transparent"
|
|
645
|
+
| "miss";
|
|
646
|
+
export type RendererWavefrontPassKey =
|
|
647
|
+
| "generatePrimaryRays"
|
|
648
|
+
| "intersectActiveQueue"
|
|
649
|
+
| "resolveSurfaceRecords"
|
|
650
|
+
| "accumulateTerminalRadiance"
|
|
651
|
+
| "scatterContinuations"
|
|
652
|
+
| "compactAndSwapQueues";
|
|
154
653
|
|
|
155
654
|
export interface RendererInputBoundary {
|
|
156
655
|
readonly type: "stable-visual-snapshot";
|
|
@@ -288,9 +787,75 @@ export interface RayTracingRenderPlan {
|
|
|
288
787
|
}
|
|
289
788
|
)[];
|
|
290
789
|
readonly accelerationStructureUpdates: readonly RendererAccelerationStructureUpdatePolicy[];
|
|
790
|
+
readonly wavefront: RendererWavefrontPathTracingPlan;
|
|
291
791
|
readonly workerManifest: RendererWorkerManifest;
|
|
292
792
|
}
|
|
293
793
|
|
|
794
|
+
export interface RendererWavefrontFieldContract {
|
|
795
|
+
readonly name: string;
|
|
796
|
+
readonly type: string;
|
|
797
|
+
readonly description: string;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
export interface RendererWavefrontRecordContract {
|
|
801
|
+
readonly schemaVersion: typeof rendererWavefrontBufferSchemaVersion;
|
|
802
|
+
readonly recordName: string;
|
|
803
|
+
readonly fields: readonly RendererWavefrontFieldContract[];
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
export interface RendererWavefrontQueueDescriptor {
|
|
807
|
+
readonly name: "active" | "next";
|
|
808
|
+
readonly role: "current-bounce" | "next-bounce";
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
export interface RendererWavefrontBounceStep {
|
|
812
|
+
readonly bounce: number;
|
|
813
|
+
readonly readQueue: "active" | "next";
|
|
814
|
+
readonly writeQueue: "active" | "next";
|
|
815
|
+
readonly passOrder: readonly RendererWavefrontPassKey[];
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
export interface RendererWavefrontTerminationPolicy {
|
|
819
|
+
readonly terminalHitTypes: readonly RendererWavefrontHitType[];
|
|
820
|
+
readonly continuationHitTypes: readonly RendererWavefrontHitType[];
|
|
821
|
+
readonly emissive: Readonly<{
|
|
822
|
+
action: "accumulate-and-stop";
|
|
823
|
+
contributesRadiance: true;
|
|
824
|
+
}>;
|
|
825
|
+
readonly environment: Readonly<{
|
|
826
|
+
action: "accumulate-and-stop";
|
|
827
|
+
contributesRadiance: true;
|
|
828
|
+
}>;
|
|
829
|
+
readonly miss: Readonly<{
|
|
830
|
+
action: "accumulate-environment-or-dark-stop";
|
|
831
|
+
contributesRadiance: true;
|
|
832
|
+
}>;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
export interface RendererWavefrontPathTracingPlan {
|
|
836
|
+
readonly schemaVersion: typeof rendererWavefrontBufferSchemaVersion;
|
|
837
|
+
readonly owner: typeof rendererDebugOwner;
|
|
838
|
+
readonly maxDepth: number;
|
|
839
|
+
readonly queueCapacity: number;
|
|
840
|
+
readonly explicitLightSampling: boolean;
|
|
841
|
+
readonly accumulationResetEpoch: number;
|
|
842
|
+
readonly queueLayout: Readonly<{
|
|
843
|
+
strategy: typeof rendererWavefrontQueuePairStrategy;
|
|
844
|
+
compactAfterScatter: true;
|
|
845
|
+
queues: readonly RendererWavefrontQueueDescriptor[];
|
|
846
|
+
}>;
|
|
847
|
+
readonly bufferContracts: Readonly<{
|
|
848
|
+
ray: RendererWavefrontRecordContract;
|
|
849
|
+
hit: RendererWavefrontRecordContract;
|
|
850
|
+
surface: RendererWavefrontRecordContract;
|
|
851
|
+
materialReference: RendererWavefrontRecordContract;
|
|
852
|
+
mediumReference: RendererWavefrontRecordContract;
|
|
853
|
+
accumulation: RendererWavefrontRecordContract;
|
|
854
|
+
}>;
|
|
855
|
+
readonly bounceSchedule: readonly RendererWavefrontBounceStep[];
|
|
856
|
+
readonly terminationPolicy: RendererWavefrontTerminationPolicy;
|
|
857
|
+
}
|
|
858
|
+
|
|
294
859
|
export function getRendererWorkerProfile(
|
|
295
860
|
name?: RendererWorkerProfileName
|
|
296
861
|
): RendererWorkerProfile;
|
|
@@ -309,11 +874,28 @@ export function createRayTracingRenderPlan(options: {
|
|
|
309
874
|
readonly [key: string]: unknown;
|
|
310
875
|
}
|
|
311
876
|
)[];
|
|
877
|
+
wavefront?: {
|
|
878
|
+
maxDepth?: number;
|
|
879
|
+
queueCapacity?: number;
|
|
880
|
+
explicitLightSampling?: boolean;
|
|
881
|
+
accumulationResetEpoch?: number;
|
|
882
|
+
};
|
|
312
883
|
}): RayTracingRenderPlan;
|
|
313
884
|
|
|
885
|
+
export function createWavefrontPathTracingPlan(options?: {
|
|
886
|
+
maxDepth?: number;
|
|
887
|
+
queueCapacity?: number;
|
|
888
|
+
explicitLightSampling?: boolean;
|
|
889
|
+
accumulationResetEpoch?: number;
|
|
890
|
+
}): RendererWavefrontPathTracingPlan;
|
|
891
|
+
|
|
314
892
|
export const rendererRepresentationBands: readonly RendererRepresentationBand[];
|
|
315
893
|
export const rendererAccelerationStructureUpdateClasses: readonly RendererAccelerationStructureUpdateClass[];
|
|
316
894
|
export const rendererRayTracingStageOrder: readonly RendererRenderStage["key"][];
|
|
895
|
+
export const rendererWavefrontBufferSchemaVersion: 1;
|
|
896
|
+
export const rendererWavefrontQueuePairStrategy: "ping-pong-active-next";
|
|
897
|
+
export const rendererWavefrontHitTypes: readonly RendererWavefrontHitType[];
|
|
898
|
+
export const rendererWavefrontPassOrder: readonly RendererWavefrontPassKey[];
|
|
317
899
|
|
|
318
900
|
export const defaultRendererClearColor: readonly [number, number, number, number];
|
|
319
901
|
export const rendererDebugOwner: "renderer";
|