@plasius/gpu-renderer 0.1.14 → 0.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plasius/gpu-renderer",
3
- "version": "0.1.14",
3
+ "version": "0.2.0",
4
4
  "description": "Framework-agnostic WebGPU renderer runtime for Plasius projects.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
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 {
@@ -209,6 +272,42 @@ export interface WavefrontEmissiveTriangleIndexSource {
209
272
  readonly recordBytes: 4;
210
273
  }
211
274
 
275
+ export type WavefrontEnvironmentPortalMode =
276
+ | 0
277
+ | 1
278
+ | 2
279
+ | "disabled"
280
+ | "guide"
281
+ | "guide-and-gate"
282
+ | "gate";
283
+
284
+ export interface WavefrontEnvironmentPortalInput {
285
+ readonly kind?: "rectangle";
286
+ readonly shape?: "rectangle";
287
+ readonly position?: readonly [number, number, number] | readonly number[];
288
+ readonly center?: readonly [number, number, number] | readonly number[];
289
+ readonly normal?: readonly [number, number, number] | readonly number[];
290
+ readonly tangent?: readonly [number, number, number] | readonly number[];
291
+ readonly width?: number;
292
+ readonly height?: number;
293
+ readonly halfWidth?: number;
294
+ readonly halfHeight?: number;
295
+ readonly radianceScale?: number;
296
+ readonly intensity?: number;
297
+ readonly color?: readonly [number, number, number, number?] | readonly number[];
298
+ readonly twoSided?: boolean;
299
+ }
300
+
301
+ export interface WavefrontEnvironmentPortalRecord {
302
+ readonly kind: 1;
303
+ readonly flags: number;
304
+ readonly position: readonly [number, number, number, number] | readonly number[];
305
+ readonly normal: readonly [number, number, number, number] | readonly number[];
306
+ readonly tangent: readonly [number, number, number, number] | readonly number[];
307
+ readonly bitangent: readonly [number, number, number, number] | readonly number[];
308
+ readonly color: readonly [number, number, number, number] | readonly number[];
309
+ }
310
+
212
311
  export interface WavefrontPathTracingComputeConfig {
213
312
  readonly width: number;
214
313
  readonly height: number;
@@ -226,6 +325,10 @@ export interface WavefrontPathTracingComputeConfig {
226
325
  readonly emissiveTriangleIndices: WavefrontEmissiveTriangleIndexSource;
227
326
  readonly emissiveTriangleCount: number;
228
327
  readonly emissiveTriangleCapacity: number;
328
+ readonly environmentPortals: readonly WavefrontEnvironmentPortalRecord[];
329
+ readonly environmentPortalCount: number;
330
+ readonly environmentPortalCapacity: number;
331
+ readonly environmentPortalMode: 0 | 1 | 2;
229
332
  readonly triangleCount: number;
230
333
  readonly triangleCapacity: number;
231
334
  readonly bvhNodeCount: number;
@@ -262,6 +365,8 @@ export interface WavefrontEnvironmentLightingInput {
262
365
  readonly intensity?: number;
263
366
  readonly mode?: number;
264
367
  readonly exposure?: number;
368
+ readonly environmentPortals?: readonly WavefrontEnvironmentPortalInput[];
369
+ readonly environmentPortalMode?: WavefrontEnvironmentPortalMode;
265
370
  }
266
371
 
267
372
  export interface WavefrontEnvironmentLightingConfig {
@@ -286,6 +391,7 @@ export interface WavefrontPathTracingMemoryEstimate {
286
391
  readonly bvhNodeBytes: number;
287
392
  readonly bvhLeafReferenceBytes: number;
288
393
  readonly emissiveTriangleMetadataBytes: number;
394
+ readonly environmentPortalBytes: number;
289
395
  readonly configBytes: number;
290
396
  readonly counterBytes: number;
291
397
  readonly totalHotBufferBytes: number;
@@ -295,6 +401,8 @@ export interface CreateWavefrontPathTracingComputeRendererOptions {
295
401
  readonly canvas?: HTMLCanvasElement | string;
296
402
  readonly navigator?: Navigator | { gpu?: GPU };
297
403
  readonly document?: Document;
404
+ readonly deviceDescriptor?: GPUDeviceDescriptor;
405
+ readonly requiredLimits?: Partial<Record<string, number>>;
298
406
  readonly powerPreference?: GPUPowerPreference;
299
407
  readonly alpha?: boolean;
300
408
  readonly format?: GPUTextureFormat;
@@ -312,6 +420,11 @@ export interface CreateWavefrontPathTracingComputeRendererOptions {
312
420
  readonly bvhNodeCapacity?: number;
313
421
  readonly bvhLeafSortCapacity?: number;
314
422
  readonly emissiveTriangleCapacity?: number;
423
+ readonly environmentPortalCapacity?: number;
424
+ readonly environmentPortals?: readonly WavefrontEnvironmentPortalInput[];
425
+ readonly environmentLightPortals?: readonly WavefrontEnvironmentPortalInput[];
426
+ readonly environmentPortalMode?: WavefrontEnvironmentPortalMode;
427
+ readonly portalMode?: WavefrontEnvironmentPortalMode;
315
428
  readonly accelerationBuildMode?: WavefrontAccelerationBuildMode;
316
429
  readonly camera?: WavefrontCameraOptions;
317
430
  readonly environmentColor?: readonly [number, number, number, number?] | readonly number[];
@@ -341,10 +454,17 @@ export interface WavefrontPathTracingComputeRenderer {
341
454
  sceneObjectCount: number;
342
455
  triangleCount: number;
343
456
  emissiveTriangleCount: number;
457
+ environmentPortalCount: number;
458
+ environmentPortalMode: 0 | 1 | 2;
344
459
  bvhNodeCount: number;
345
460
  displayQuality: boolean;
346
461
  accelerationBuildMode: WavefrontAccelerationBuildMode;
347
462
  gpuAccelerationBuildRequired: boolean;
463
+ accelerationBuildSubmitted: boolean;
464
+ accelerationBuilt: boolean;
465
+ accelerationBuildCount: number;
466
+ commandSubmissions: number;
467
+ frameConfigSlots: number;
348
468
  memory: WavefrontPathTracingMemoryEstimate;
349
469
  }>;
350
470
  readOutputProbe(options?: { x?: number; y?: number }): Promise<
@@ -367,10 +487,15 @@ export interface WavefrontPathTracingComputeRenderer {
367
487
  sceneObjectCount: number;
368
488
  triangleCount: number;
369
489
  emissiveTriangleCount: number;
490
+ environmentPortalCount: number;
491
+ environmentPortalMode: 0 | 1 | 2;
370
492
  bvhNodeCount: number;
371
493
  displayQuality: boolean;
372
494
  accelerationBuildMode: WavefrontAccelerationBuildMode;
373
495
  gpuAccelerationBuildRequired: boolean;
496
+ accelerationBuilt: boolean;
497
+ accelerationBuildCount: number;
498
+ frameConfigSlots: number;
374
499
  memory: WavefrontPathTracingMemoryEstimate;
375
500
  }>;
376
501
  destroy(): void;
@@ -428,6 +553,21 @@ export function createWavefrontBvhSortStages(
428
553
  export function createWavefrontPathTracingComputeConfig(
429
554
  options?: CreateWavefrontPathTracingComputeRendererOptions
430
555
  ): WavefrontPathTracingComputeConfig;
556
+ export function createWavefrontReferenceRay(
557
+ config: WavefrontPathTracingComputeConfig,
558
+ options?: CreateWavefrontReferenceRayOptions
559
+ ): WavefrontReferenceRay;
560
+ export function intersectWavefrontReferenceTriangle(
561
+ ray: WavefrontReferenceRay,
562
+ triangle: WavefrontTriangleRecord,
563
+ options?: IntersectWavefrontReferenceTriangleOptions
564
+ ): WavefrontReferenceHit | null;
565
+ export function traceWavefrontReferenceTriangles(
566
+ config: WavefrontPathTracingComputeConfig,
567
+ ray: WavefrontReferenceRay,
568
+ triangles: readonly WavefrontTriangleRecord[],
569
+ options?: TraceWavefrontReferenceTrianglesOptions
570
+ ): WavefrontReferenceHit;
431
571
  export function packWavefrontSceneObjects(
432
572
  sceneObjects: readonly WavefrontSceneObjectInput[],
433
573
  capacity?: number
@@ -465,13 +605,16 @@ export function createWavefrontPathTracingComputeRenderer(
465
605
  export const wavefrontPathTracingComputeLimits: Readonly<{
466
606
  workgroupSize: 64;
467
607
  rayRecordBytes: 80;
468
- hitRecordBytes: 192;
608
+ hitRecordBytes: 208;
469
609
  sceneObjectRecordBytes: 96;
470
610
  meshVertexRecordBytes: 48;
471
611
  meshRangeRecordBytes: 96;
472
612
  triangleRecordBytes: 208;
473
613
  bvhNodeRecordBytes: 48;
474
614
  bvhLeafReferenceRecordBytes: 16;
615
+ emissiveTriangleIndexBytes: 4;
616
+ emissiveTriangleMetadataRecordBytes: 48;
617
+ environmentPortalRecordBytes: 96;
475
618
  accumulationRecordBytes: 16;
476
619
  }>;
477
620
  export const wavefrontSceneObjectKinds: Readonly<{
package/src/index.js CHANGED
@@ -9,13 +9,16 @@ export {
9
9
  createWavefrontMeshAcceleration,
10
10
  createWavefrontPathTracingComputeConfig,
11
11
  createWavefrontPathTracingComputeRenderer,
12
+ createWavefrontReferenceRay,
12
13
  estimateWavefrontPathTracingMemory,
14
+ intersectWavefrontReferenceTriangle,
13
15
  normalizeWavefrontMesh,
14
16
  normalizeWavefrontSceneObject,
15
17
  packWavefrontBvhNodes,
16
18
  packWavefrontSceneObjects,
17
19
  packWavefrontTriangles,
18
20
  supportsWavefrontPathTracingCompute,
21
+ traceWavefrontReferenceTriangles,
19
22
  wavefrontMaterialKinds,
20
23
  wavefrontPathTracingComputeLimits,
21
24
  wavefrontSceneObjectKinds,