@multiplekex/shallot 0.2.3 → 0.2.5
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 +1 -1
- package/src/extras/arrows/index.ts +3 -3
- package/src/extras/caustic.ts +37 -0
- package/src/extras/gradient/index.ts +63 -69
- package/src/extras/index.ts +3 -0
- package/src/extras/lines/index.ts +3 -3
- package/src/extras/skylab/index.ts +314 -0
- package/src/extras/text/font.ts +69 -14
- package/src/extras/text/index.ts +15 -7
- package/src/extras/text/sdf.ts +13 -2
- package/src/extras/water.ts +64 -0
- package/src/standard/defaults.ts +2 -0
- package/src/standard/index.ts +2 -0
- package/src/standard/raster/index.ts +517 -0
- package/src/standard/{render → raytracing}/bvh/blas.ts +3 -3
- package/src/standard/{render → raytracing}/bvh/tlas.ts +3 -0
- package/src/standard/{render → raytracing}/depth.ts +9 -9
- package/src/standard/raytracing/index.ts +380 -0
- package/src/standard/{render → raytracing}/instance.ts +3 -0
- package/src/standard/raytracing/shaders.ts +815 -0
- package/src/standard/{render → raytracing}/triangle.ts +1 -1
- package/src/standard/render/camera.ts +88 -80
- package/src/standard/render/index.ts +68 -208
- package/src/standard/render/indirect.ts +9 -10
- package/src/standard/render/mesh/index.ts +35 -166
- package/src/standard/render/overlay.ts +4 -4
- package/src/standard/render/pass.ts +1 -1
- package/src/standard/render/postprocess.ts +75 -50
- package/src/standard/render/scene.ts +28 -16
- package/src/standard/render/surface/compile.ts +6 -8
- package/src/standard/render/surface/noise.ts +15 -2
- package/src/standard/render/surface/shaders.ts +257 -0
- package/src/standard/render/surface/structs.ts +13 -6
- package/src/standard/render/forward/index.ts +0 -259
- package/src/standard/render/forward/raster.ts +0 -228
- package/src/standard/render/shaders.ts +0 -484
- package/src/standard/render/surface/wgsl.ts +0 -573
- /package/src/standard/{render → raytracing}/bvh/radix.ts +0 -0
- /package/src/standard/{render → raytracing}/bvh/structs.ts +0 -0
- /package/src/standard/{render → raytracing}/bvh/traverse.ts +0 -0
- /package/src/standard/{render → raytracing}/intersection.ts +0 -0
- /package/src/standard/{render → raytracing}/ray.ts +0 -0
|
@@ -242,7 +242,23 @@ export interface SunParams {
|
|
|
242
242
|
color: number;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
|
|
245
|
+
export function getClearColor(eid: number): { r: number; g: number; b: number } {
|
|
246
|
+
const packed = Camera.clearColor[eid];
|
|
247
|
+
return {
|
|
248
|
+
r: ((packed >> 16) & 0xff) / 255,
|
|
249
|
+
g: ((packed >> 8) & 0xff) / 255,
|
|
250
|
+
b: (packed & 0xff) / 255,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export function hasSkyComponent(
|
|
255
|
+
state: { hasComponent(eid: number, c: object): boolean },
|
|
256
|
+
eid: number
|
|
257
|
+
): boolean {
|
|
258
|
+
return state.hasComponent(eid, Sky);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const sceneBuffer = new ArrayBuffer(352);
|
|
246
262
|
const scene = new Float32Array(sceneBuffer);
|
|
247
263
|
const sceneU32 = new Uint32Array(sceneBuffer);
|
|
248
264
|
|
|
@@ -256,13 +272,7 @@ export function uploadCamera(
|
|
|
256
272
|
shadowSamples: number = 1,
|
|
257
273
|
reflectionDepth: number = 0,
|
|
258
274
|
refractionDepth: number = 0,
|
|
259
|
-
instanceCount: number = 0
|
|
260
|
-
haze?: HazeParams,
|
|
261
|
-
sky?: SkyParams,
|
|
262
|
-
moon?: MoonParams,
|
|
263
|
-
stars?: StarsParams,
|
|
264
|
-
clouds?: CloudsParams,
|
|
265
|
-
sun?: SunParams
|
|
275
|
+
instanceCount: number = 0
|
|
266
276
|
): void {
|
|
267
277
|
const aspect = width / height;
|
|
268
278
|
const proj =
|
|
@@ -273,114 +283,112 @@ export function uploadCamera(
|
|
|
273
283
|
const view = invert(world);
|
|
274
284
|
const viewProj = multiply(proj, view);
|
|
275
285
|
|
|
276
|
-
// viewProj (0-63)
|
|
277
286
|
scene.set(viewProj, 0);
|
|
278
|
-
// world (64-127)
|
|
279
287
|
scene.set(world, 16);
|
|
280
288
|
|
|
281
|
-
// clearColor (176-191) - note: 128-175 is light uniforms, written separately
|
|
282
289
|
const clearColorPacked = Camera.clearColor[eid];
|
|
283
290
|
scene[44] = ((clearColorPacked >> 16) & 0xff) / 255;
|
|
284
291
|
scene[45] = ((clearColorPacked >> 8) & 0xff) / 255;
|
|
285
292
|
scene[46] = (clearColorPacked & 0xff) / 255;
|
|
286
293
|
scene[47] = 1.0;
|
|
287
294
|
|
|
288
|
-
// cameraMode, cameraSize, viewport (192-207)
|
|
289
295
|
scene[48] = Camera.mode[eid];
|
|
290
296
|
scene[49] = Camera.size[eid];
|
|
291
297
|
scene[50] = width;
|
|
292
298
|
scene[51] = height;
|
|
293
299
|
|
|
294
|
-
// fov, near, far, shadowSoftness (208-223)
|
|
295
300
|
scene[52] = Camera.fov[eid];
|
|
296
301
|
scene[53] = Camera.near[eid];
|
|
297
302
|
scene[54] = Camera.far[eid];
|
|
298
303
|
scene[55] = shadowSoftness;
|
|
299
304
|
|
|
300
|
-
// shadowSamples, reflectionDepth, refractionDepth, instanceCount (224-239)
|
|
301
305
|
sceneU32[56] = shadowSamples;
|
|
302
306
|
sceneU32[57] = reflectionDepth;
|
|
303
307
|
sceneU32[58] = refractionDepth;
|
|
304
308
|
sceneU32[59] = instanceCount;
|
|
305
309
|
|
|
306
|
-
|
|
307
|
-
scene
|
|
308
|
-
|
|
309
|
-
scene
|
|
310
|
-
scene
|
|
310
|
+
const planes = extractFrustumPlanes(viewProj);
|
|
311
|
+
scene.set(planes, 64);
|
|
312
|
+
|
|
313
|
+
device.queue.writeBuffer(buffer, 0, scene, 0, 32);
|
|
314
|
+
device.queue.writeBuffer(buffer, 176, scene, 44, 44);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const skyArrayBuffer = new ArrayBuffer(176);
|
|
318
|
+
const skyF32 = new Float32Array(skyArrayBuffer);
|
|
319
|
+
|
|
320
|
+
export function uploadSky(
|
|
321
|
+
device: GPUDevice,
|
|
322
|
+
buffer: GPUBuffer,
|
|
323
|
+
haze?: HazeParams,
|
|
324
|
+
sky?: SkyParams,
|
|
325
|
+
moon?: MoonParams,
|
|
326
|
+
stars?: StarsParams,
|
|
327
|
+
clouds?: CloudsParams,
|
|
328
|
+
sun?: SunParams
|
|
329
|
+
): void {
|
|
330
|
+
skyF32[0] = haze?.density ?? 0;
|
|
331
|
+
skyF32[1] = 0;
|
|
332
|
+
skyF32[2] = 0;
|
|
333
|
+
skyF32[3] = 0;
|
|
311
334
|
|
|
312
|
-
// hazeColor (256-271)
|
|
313
335
|
const hazeColorPacked = haze?.color ?? 0x8090b0;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
336
|
+
skyF32[4] = ((hazeColorPacked >> 16) & 0xff) / 255;
|
|
337
|
+
skyF32[5] = ((hazeColorPacked >> 8) & 0xff) / 255;
|
|
338
|
+
skyF32[6] = (hazeColorPacked & 0xff) / 255;
|
|
339
|
+
skyF32[7] = 1.0;
|
|
318
340
|
|
|
319
|
-
// skyZenith (272-287)
|
|
320
341
|
const zenithPacked = sky?.zenith ?? 0;
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
342
|
+
skyF32[8] = ((zenithPacked >> 16) & 0xff) / 255;
|
|
343
|
+
skyF32[9] = ((zenithPacked >> 8) & 0xff) / 255;
|
|
344
|
+
skyF32[10] = (zenithPacked & 0xff) / 255;
|
|
345
|
+
skyF32[11] = sky ? 1.0 : 0.0;
|
|
325
346
|
|
|
326
|
-
// skyHorizon (288-303)
|
|
327
347
|
const horizonPacked = sky?.horizon ?? 0;
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
// frustumPlanes (304-399)
|
|
334
|
-
const planes = extractFrustumPlanes(viewProj);
|
|
335
|
-
scene.set(planes, 76);
|
|
348
|
+
skyF32[12] = ((horizonPacked >> 16) & 0xff) / 255;
|
|
349
|
+
skyF32[13] = ((horizonPacked >> 8) & 0xff) / 255;
|
|
350
|
+
skyF32[14] = (horizonPacked & 0xff) / 255;
|
|
351
|
+
skyF32[15] = 1.0;
|
|
336
352
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
scene[103] = 0.0;
|
|
353
|
+
skyF32[16] = moon?.phase ?? 0.5;
|
|
354
|
+
skyF32[17] = moon?.glow ?? 0.3;
|
|
355
|
+
skyF32[18] = moon ? 1.0 : 0.0;
|
|
356
|
+
skyF32[19] = 0.0;
|
|
342
357
|
|
|
343
|
-
// moonDirection (416-431)
|
|
344
358
|
const moonAzimuth = ((moon?.azimuth ?? 45) * Math.PI) / 180;
|
|
345
359
|
const moonElevation = ((moon?.elevation ?? 30) * Math.PI) / 180;
|
|
346
360
|
const moonCosEl = Math.cos(moonElevation);
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
scene[115] = clouds ? 1.0 : 0.0;
|
|
363
|
-
|
|
364
|
-
// cloudColor (464-479)
|
|
361
|
+
skyF32[20] = Math.sin(moonAzimuth) * moonCosEl;
|
|
362
|
+
skyF32[21] = Math.sin(moonElevation);
|
|
363
|
+
skyF32[22] = Math.cos(moonAzimuth) * moonCosEl;
|
|
364
|
+
skyF32[23] = 0.0;
|
|
365
|
+
|
|
366
|
+
skyF32[24] = stars?.intensity ?? 0.8;
|
|
367
|
+
skyF32[25] = stars?.amount ?? 0.5;
|
|
368
|
+
skyF32[26] = stars ? 1.0 : 0.0;
|
|
369
|
+
skyF32[27] = 0.0;
|
|
370
|
+
|
|
371
|
+
skyF32[28] = clouds?.coverage ?? 0;
|
|
372
|
+
skyF32[29] = clouds?.density ?? 0;
|
|
373
|
+
skyF32[30] = clouds?.height ?? 0;
|
|
374
|
+
skyF32[31] = clouds ? 1.0 : 0.0;
|
|
375
|
+
|
|
365
376
|
const cloudColorPacked = clouds?.color ?? 0xffffff;
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
// sunVisualColor (496-511)
|
|
377
|
+
skyF32[32] = ((cloudColorPacked >> 16) & 0xff) / 255;
|
|
378
|
+
skyF32[33] = ((cloudColorPacked >> 8) & 0xff) / 255;
|
|
379
|
+
skyF32[34] = (cloudColorPacked & 0xff) / 255;
|
|
380
|
+
skyF32[35] = 0.0;
|
|
381
|
+
|
|
382
|
+
skyF32[36] = sun?.size ?? 1.0;
|
|
383
|
+
skyF32[37] = sun?.glow ?? 0.5;
|
|
384
|
+
skyF32[38] = sun && sun.color !== 0 ? 1.0 : 0.0;
|
|
385
|
+
skyF32[39] = 0.0;
|
|
386
|
+
|
|
378
387
|
const sunColorPacked = sun?.color ?? 0xffffff;
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
388
|
+
skyF32[40] = ((sunColorPacked >> 16) & 0xff) / 255;
|
|
389
|
+
skyF32[41] = ((sunColorPacked >> 8) & 0xff) / 255;
|
|
390
|
+
skyF32[42] = (sunColorPacked & 0xff) / 255;
|
|
391
|
+
skyF32[43] = 0.0;
|
|
383
392
|
|
|
384
|
-
device.queue.writeBuffer(buffer, 0,
|
|
385
|
-
device.queue.writeBuffer(buffer, 176, scene, 44, 84);
|
|
393
|
+
device.queue.writeBuffer(buffer, 0, skyArrayBuffer);
|
|
386
394
|
}
|