@plasius/gpu-renderer 0.1.15 → 0.2.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/CHANGELOG.md +29 -5
- package/README.md +25 -1
- package/dist/index.cjs +382 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +374 -16
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/index.d.ts +146 -26
- package/src/index.js +8 -0
- package/src/wavefront-compute.js +407 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasius/gpu-renderer",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Framework-agnostic WebGPU renderer runtime for Plasius projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"author": "Plasius LTD <development@plasius.co.uk>",
|
|
50
50
|
"license": "Apache-2.0",
|
|
51
51
|
"dependencies": {
|
|
52
|
+
"@plasius/gpu-shared": "^0.1.11",
|
|
52
53
|
"@plasius/gpu-xr": "^0.1.11"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
package/src/index.d.ts
CHANGED
|
@@ -162,6 +162,69 @@ export interface WavefrontMeshAcceleration {
|
|
|
162
162
|
readonly triangles: readonly WavefrontTriangleRecord[];
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
export interface WavefrontReferenceRay {
|
|
166
|
+
readonly rayId: number;
|
|
167
|
+
readonly parentRayId: number;
|
|
168
|
+
readonly sourcePixelId: number;
|
|
169
|
+
readonly sampleId: number;
|
|
170
|
+
readonly bounce: number;
|
|
171
|
+
readonly mediumRefId: number;
|
|
172
|
+
readonly flags: number;
|
|
173
|
+
readonly origin: readonly [number, number, number] | readonly number[];
|
|
174
|
+
readonly direction: readonly [number, number, number] | readonly number[];
|
|
175
|
+
readonly throughput: readonly [number, number, number, number] | readonly number[];
|
|
176
|
+
readonly pixelX: number;
|
|
177
|
+
readonly pixelY: number;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export interface WavefrontReferenceTile {
|
|
181
|
+
readonly x?: number;
|
|
182
|
+
readonly y?: number;
|
|
183
|
+
readonly width?: number;
|
|
184
|
+
readonly height?: number;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface CreateWavefrontReferenceRayOptions {
|
|
188
|
+
readonly tile?: WavefrontReferenceTile;
|
|
189
|
+
readonly pixelIndex?: number;
|
|
190
|
+
readonly sampleIndex?: number;
|
|
191
|
+
readonly frameIndex?: number;
|
|
192
|
+
readonly jitterScale?: number;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export interface WavefrontReferenceHit {
|
|
196
|
+
readonly hitType: "surface" | "environment";
|
|
197
|
+
readonly rayId: number;
|
|
198
|
+
readonly sourcePixelId: number;
|
|
199
|
+
readonly distance: number;
|
|
200
|
+
readonly entityId: number;
|
|
201
|
+
readonly instanceId: number;
|
|
202
|
+
readonly primitiveId: number;
|
|
203
|
+
readonly materialId: number;
|
|
204
|
+
readonly materialRefId: number;
|
|
205
|
+
readonly mediumRefId: number;
|
|
206
|
+
readonly barycentrics: readonly [number, number, number] | readonly number[];
|
|
207
|
+
readonly uv: readonly [number, number] | readonly number[];
|
|
208
|
+
readonly geometricNormal: readonly [number, number, number] | readonly number[];
|
|
209
|
+
readonly shadingNormal: readonly [number, number, number] | readonly number[];
|
|
210
|
+
readonly frontFace: boolean;
|
|
211
|
+
readonly triangleIndex: number;
|
|
212
|
+
readonly triangleId: number;
|
|
213
|
+
readonly position: readonly [number, number, number] | readonly number[];
|
|
214
|
+
readonly color: readonly number[];
|
|
215
|
+
readonly emission: readonly number[];
|
|
216
|
+
readonly material: readonly number[];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export interface IntersectWavefrontReferenceTriangleOptions {
|
|
220
|
+
readonly maxDistance?: number;
|
|
221
|
+
readonly triangleIndex?: number;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface TraceWavefrontReferenceTrianglesOptions {
|
|
225
|
+
readonly maxDistance?: number;
|
|
226
|
+
}
|
|
227
|
+
|
|
165
228
|
export type WavefrontAccelerationBuildMode = "gpu" | "cpu-debug";
|
|
166
229
|
|
|
167
230
|
export interface WavefrontGpuMeshSource {
|
|
@@ -246,6 +309,7 @@ export interface WavefrontEnvironmentPortalRecord {
|
|
|
246
309
|
}
|
|
247
310
|
|
|
248
311
|
export interface WavefrontPathTracingComputeConfig {
|
|
312
|
+
readonly mode: typeof rendererWavefrontComputeMode;
|
|
249
313
|
readonly width: number;
|
|
250
314
|
readonly height: number;
|
|
251
315
|
readonly maxDepth: number;
|
|
@@ -331,6 +395,7 @@ export interface WavefrontPathTracingMemoryEstimate {
|
|
|
331
395
|
readonly environmentPortalBytes: number;
|
|
332
396
|
readonly configBytes: number;
|
|
333
397
|
readonly counterBytes: number;
|
|
398
|
+
readonly indirectDispatchBytes: number;
|
|
334
399
|
readonly totalHotBufferBytes: number;
|
|
335
400
|
}
|
|
336
401
|
|
|
@@ -378,32 +443,12 @@ export interface WavefrontPathTracingComputeRenderer {
|
|
|
378
443
|
readonly device: GPUDevice;
|
|
379
444
|
readonly format: GPUTextureFormat | string;
|
|
380
445
|
readonly config: WavefrontPathTracingComputeConfig;
|
|
381
|
-
renderOnce():
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
tileSize: number;
|
|
388
|
-
samplesPerPixel: number;
|
|
389
|
-
screenRays: number;
|
|
390
|
-
primaryRays: number;
|
|
391
|
-
sceneObjectCount: number;
|
|
392
|
-
triangleCount: number;
|
|
393
|
-
emissiveTriangleCount: number;
|
|
394
|
-
environmentPortalCount: number;
|
|
395
|
-
environmentPortalMode: 0 | 1 | 2;
|
|
396
|
-
bvhNodeCount: number;
|
|
397
|
-
displayQuality: boolean;
|
|
398
|
-
accelerationBuildMode: WavefrontAccelerationBuildMode;
|
|
399
|
-
gpuAccelerationBuildRequired: boolean;
|
|
400
|
-
accelerationBuildSubmitted: boolean;
|
|
401
|
-
accelerationBuilt: boolean;
|
|
402
|
-
accelerationBuildCount: number;
|
|
403
|
-
commandSubmissions: number;
|
|
404
|
-
frameConfigSlots: number;
|
|
405
|
-
memory: WavefrontPathTracingMemoryEstimate;
|
|
406
|
-
}>;
|
|
446
|
+
renderOnce(): WavefrontPathTracingComputeFrameStats;
|
|
447
|
+
renderFrame(options?: {
|
|
448
|
+
readStats?: boolean;
|
|
449
|
+
readOutputProbe?: boolean;
|
|
450
|
+
probe?: { x?: number; y?: number };
|
|
451
|
+
}): Promise<WavefrontPathTracingComputeFrameStats>;
|
|
407
452
|
readOutputProbe(options?: { x?: number; y?: number }): Promise<
|
|
408
453
|
Readonly<{
|
|
409
454
|
x: number;
|
|
@@ -438,6 +483,50 @@ export interface WavefrontPathTracingComputeRenderer {
|
|
|
438
483
|
destroy(): void;
|
|
439
484
|
}
|
|
440
485
|
|
|
486
|
+
export interface WavefrontPathTracingComputeFrameStats {
|
|
487
|
+
readonly frame: number;
|
|
488
|
+
readonly width: number;
|
|
489
|
+
readonly height: number;
|
|
490
|
+
readonly maxDepth: number;
|
|
491
|
+
readonly tiles: number;
|
|
492
|
+
readonly tileSize: number;
|
|
493
|
+
readonly samplesPerPixel: number;
|
|
494
|
+
readonly screenRays: number;
|
|
495
|
+
readonly primaryRays: number;
|
|
496
|
+
readonly sceneObjectCount: number;
|
|
497
|
+
readonly triangleCount: number;
|
|
498
|
+
readonly emissiveTriangleCount: number;
|
|
499
|
+
readonly environmentPortalCount: number;
|
|
500
|
+
readonly environmentPortalMode: 0 | 1 | 2;
|
|
501
|
+
readonly bvhNodeCount: number;
|
|
502
|
+
readonly displayQuality: boolean;
|
|
503
|
+
readonly accelerationBuildMode: WavefrontAccelerationBuildMode;
|
|
504
|
+
readonly gpuAccelerationBuildRequired: boolean;
|
|
505
|
+
readonly accelerationBuildSubmitted: boolean;
|
|
506
|
+
readonly accelerationBuilt: boolean;
|
|
507
|
+
readonly accelerationBuildCount: number;
|
|
508
|
+
readonly commandSubmissions: number;
|
|
509
|
+
readonly frameConfigSlots: number;
|
|
510
|
+
readonly memory: WavefrontPathTracingMemoryEstimate;
|
|
511
|
+
readonly outputProbe?: Readonly<{
|
|
512
|
+
x: number;
|
|
513
|
+
y: number;
|
|
514
|
+
rgba: readonly number[];
|
|
515
|
+
luminance: number;
|
|
516
|
+
sampledPixels: number;
|
|
517
|
+
nonZeroSamples: number;
|
|
518
|
+
maxChannel: number;
|
|
519
|
+
}> | null;
|
|
520
|
+
readonly bounces?: readonly unknown[];
|
|
521
|
+
readonly termination?: Readonly<{
|
|
522
|
+
emissive: number;
|
|
523
|
+
environment: number;
|
|
524
|
+
ambientFallback: number;
|
|
525
|
+
maxDepth: number;
|
|
526
|
+
}>;
|
|
527
|
+
readonly queueOverflow?: number;
|
|
528
|
+
}
|
|
529
|
+
|
|
441
530
|
export function normalizeWavefrontSceneObject(
|
|
442
531
|
input?: WavefrontSceneObjectInput,
|
|
443
532
|
index?: number
|
|
@@ -490,6 +579,21 @@ export function createWavefrontBvhSortStages(
|
|
|
490
579
|
export function createWavefrontPathTracingComputeConfig(
|
|
491
580
|
options?: CreateWavefrontPathTracingComputeRendererOptions
|
|
492
581
|
): WavefrontPathTracingComputeConfig;
|
|
582
|
+
export function createWavefrontReferenceRay(
|
|
583
|
+
config: WavefrontPathTracingComputeConfig,
|
|
584
|
+
options?: CreateWavefrontReferenceRayOptions
|
|
585
|
+
): WavefrontReferenceRay;
|
|
586
|
+
export function intersectWavefrontReferenceTriangle(
|
|
587
|
+
ray: WavefrontReferenceRay,
|
|
588
|
+
triangle: WavefrontTriangleRecord,
|
|
589
|
+
options?: IntersectWavefrontReferenceTriangleOptions
|
|
590
|
+
): WavefrontReferenceHit | null;
|
|
591
|
+
export function traceWavefrontReferenceTriangles(
|
|
592
|
+
config: WavefrontPathTracingComputeConfig,
|
|
593
|
+
ray: WavefrontReferenceRay,
|
|
594
|
+
triangles: readonly WavefrontTriangleRecord[],
|
|
595
|
+
options?: TraceWavefrontReferenceTrianglesOptions
|
|
596
|
+
): WavefrontReferenceHit;
|
|
493
597
|
export function packWavefrontSceneObjects(
|
|
494
598
|
sceneObjects: readonly WavefrontSceneObjectInput[],
|
|
495
599
|
capacity?: number
|
|
@@ -523,6 +627,20 @@ export function supportsWavefrontPathTracingCompute(options?: {
|
|
|
523
627
|
export function createWavefrontPathTracingComputeRenderer(
|
|
524
628
|
options?: CreateWavefrontPathTracingComputeRendererOptions
|
|
525
629
|
): Promise<WavefrontPathTracingComputeRenderer>;
|
|
630
|
+
export function renderWavefrontPathTracingComputeFrame(
|
|
631
|
+
options?: CreateWavefrontPathTracingComputeRendererOptions & {
|
|
632
|
+
readStats?: boolean;
|
|
633
|
+
readOutputProbe?: boolean;
|
|
634
|
+
}
|
|
635
|
+
): Promise<WavefrontPathTracingComputeFrameStats>;
|
|
636
|
+
export function createWavefrontPathTracingComputeShaderSource(options?: {
|
|
637
|
+
workgroupSize?: number;
|
|
638
|
+
outputTextureFormat?: GPUTextureFormat | "rgba8unorm";
|
|
639
|
+
}): string;
|
|
640
|
+
|
|
641
|
+
export const rendererWavefrontComputeMode: "webgpu-compute";
|
|
642
|
+
export const rendererWavefrontComputeWorkgroupSize: 64;
|
|
643
|
+
export const rendererWavefrontComputeStatsStride: 8;
|
|
526
644
|
|
|
527
645
|
export const wavefrontPathTracingComputeLimits: Readonly<{
|
|
528
646
|
workgroupSize: 64;
|
|
@@ -538,6 +656,8 @@ export const wavefrontPathTracingComputeLimits: Readonly<{
|
|
|
538
656
|
emissiveTriangleMetadataRecordBytes: 48;
|
|
539
657
|
environmentPortalRecordBytes: 96;
|
|
540
658
|
accumulationRecordBytes: 16;
|
|
659
|
+
counterRecordBytes: 32;
|
|
660
|
+
indirectDispatchRecordBytes: 12;
|
|
541
661
|
}>;
|
|
542
662
|
export const wavefrontSceneObjectKinds: Readonly<{
|
|
543
663
|
sphere: 1;
|
package/src/index.js
CHANGED
|
@@ -9,13 +9,21 @@ export {
|
|
|
9
9
|
createWavefrontMeshAcceleration,
|
|
10
10
|
createWavefrontPathTracingComputeConfig,
|
|
11
11
|
createWavefrontPathTracingComputeRenderer,
|
|
12
|
+
createWavefrontPathTracingComputeShaderSource,
|
|
13
|
+
createWavefrontReferenceRay,
|
|
12
14
|
estimateWavefrontPathTracingMemory,
|
|
15
|
+
intersectWavefrontReferenceTriangle,
|
|
13
16
|
normalizeWavefrontMesh,
|
|
14
17
|
normalizeWavefrontSceneObject,
|
|
15
18
|
packWavefrontBvhNodes,
|
|
16
19
|
packWavefrontSceneObjects,
|
|
17
20
|
packWavefrontTriangles,
|
|
21
|
+
renderWavefrontPathTracingComputeFrame,
|
|
22
|
+
rendererWavefrontComputeMode,
|
|
23
|
+
rendererWavefrontComputeStatsStride,
|
|
24
|
+
rendererWavefrontComputeWorkgroupSize,
|
|
18
25
|
supportsWavefrontPathTracingCompute,
|
|
26
|
+
traceWavefrontReferenceTriangles,
|
|
19
27
|
wavefrontMaterialKinds,
|
|
20
28
|
wavefrontPathTracingComputeLimits,
|
|
21
29
|
wavefrontSceneObjectKinds,
|