@driftengine/core 4.10.0 → 4.11.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/CHANGELOG.json +71 -0
- package/README.md +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/render/backend/webgl2/renderer.d.ts +99 -2
- package/dist/render/backend/webgl2/renderer.js +361 -42
- package/dist/render/backend/webgpu/buffers.d.ts +5 -0
- package/dist/render/backend/webgpu/buffers.js +98 -48
- package/dist/render/backend/webgpu/clothKernels.d.ts +8 -0
- package/dist/render/backend/webgpu/clothKernels.js +76 -0
- package/dist/render/backend/webgpu/clothOps.d.ts +39 -0
- package/dist/render/backend/webgpu/clothOps.js +78 -0
- package/dist/render/backend/webgpu/clothSetLayout.d.ts +25 -0
- package/dist/render/backend/webgpu/clothSetLayout.js +84 -0
- package/dist/render/backend/webgpu/clothSetPack.d.ts +33 -0
- package/dist/render/backend/webgpu/clothSetPack.js +144 -0
- package/dist/render/backend/webgpu/drawCommand.d.ts +2 -0
- package/dist/render/backend/webgpu/drawCommand.js +1 -0
- package/dist/render/backend/webgpu/flatPass.d.ts +1 -1
- package/dist/render/backend/webgpu/flatPass.js +2 -1
- package/dist/render/backend/webgpu/gpuClothSet.d.ts +80 -0
- package/dist/render/backend/webgpu/gpuClothSet.js +462 -0
- package/dist/render/backend/webgpu/latePass.js +1 -0
- package/dist/render/backend/webgpu/motionPass.js +15 -6
- package/dist/render/backend/webgpu/pipelineCache.d.ts +22 -1
- package/dist/render/backend/webgpu/pipelineCache.js +39 -1
- package/dist/render/backend/webgpu/postPass.d.ts +1 -1
- package/dist/render/backend/webgpu/renderer.d.ts +48 -0
- package/dist/render/backend/webgpu/renderer.js +207 -27
- package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.d.ts +9 -2
- package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.js +121 -47
- package/dist/render/backend/webgpu/staticBundles.js +2 -1
- package/dist/render/backend/webgpu/vertexFormats.d.ts +22 -0
- package/dist/render/backend/webgpu/vertexFormats.js +97 -0
- package/dist/render/globalMediumPass.d.ts +2 -0
- package/dist/render/globalMediumPass.js +1 -0
- package/dist/render/indexWidth.d.ts +17 -0
- package/dist/render/indexWidth.js +23 -0
- package/dist/render/lightMatrix.d.ts +11 -0
- package/dist/render/lightMatrix.js +14 -0
- package/dist/render/mesh.d.ts +9 -0
- package/dist/render/mesh.js +38 -14
- package/dist/render/renderQuality.d.ts +30 -0
- package/dist/render/renderQuality.js +5 -0
- package/dist/render/rendererHarness.d.ts +7 -0
- package/dist/render/rendererHarness.js +12 -0
- package/dist/render/shader.d.ts +15 -0
- package/dist/render/shader.js +41 -0
- package/dist/render/shaders/flat/directionalShadow.js +84 -10
- package/dist/render/shaders/flat/glassTint.d.ts +1 -1
- package/dist/render/shaders/flat/glassTint.js +3 -0
- package/dist/render/shaders/flat/index.d.ts +15 -0
- package/dist/render/shaders/flat/index.js +15 -2
- package/dist/render/shaders/flat/layered.d.ts +19 -0
- package/dist/render/shaders/flat/layered.js +115 -0
- package/dist/render/shaders/flat/main.d.ts +1 -1
- package/dist/render/shaders/flat/main.js +43 -16
- package/dist/render/shaders/flat/mapReads.d.ts +10 -0
- package/dist/render/shaders/flat/mapReads.js +38 -0
- package/dist/render/shaders/flat/movingSun.d.ts +21 -0
- package/dist/render/shaders/flat/movingSun.js +46 -0
- package/dist/render/shaders/flat/normalMap.d.ts +6 -2
- package/dist/render/shaders/flat/normalMap.js +14 -3
- package/dist/render/shaders/flat/overlay.d.ts +3 -2
- package/dist/render/shaders/flat/overlay.js +41 -19
- package/dist/render/shaders/flat/preamble.js +23 -5
- package/dist/render/shaders/flat/worldUv.d.ts +22 -0
- package/dist/render/shaders/flat/worldUv.js +113 -0
- package/dist/render/shaders/generated/flat.wgsl.d.ts +768 -368
- package/dist/render/shaders/generated/flat.wgsl.js +791 -391
- package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +8 -3
- package/dist/render/shaders/generated/globalMedium.wgsl.js +8 -3
- package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +15 -10
- package/dist/render/shaders/generated/lightVolume.wgsl.js +16 -11
- package/dist/render/shaders/globalMedium.js +9 -1
- package/dist/render/shaders/lightVolume.js +9 -1
- package/dist/render/shaders/tangentFrame.d.ts +1 -1
- package/dist/render/shaders/tangentFrame.js +16 -3
- package/dist/render/skinnedClothRun.d.ts +28 -0
- package/dist/render/skinnedClothRun.js +103 -35
- package/dist/render/surfaceLayers.d.ts +39 -0
- package/dist/render/surfaceLayers.js +26 -0
- package/dist/render/surfaceOverlay.d.ts +16 -3
- package/dist/render/surfaceOverlay.js +11 -6
- package/dist/render/surfaceProjection.d.ts +34 -0
- package/dist/render/surfaceProjection.js +30 -0
- package/dist/render/surfaceTexture.d.ts +30 -0
- package/dist/render/vertexPacking.d.ts +48 -0
- package/dist/render/vertexPacking.js +68 -0
- package/package.json +6 -6
- package/src/index.ts +4 -2
- package/src/render/backend/webgl2/renderer.ts +408 -55
- package/src/render/backend/webgpu/buffers.ts +153 -54
- package/src/render/backend/webgpu/clothKernels.ts +86 -0
- package/src/render/backend/webgpu/clothOps.ts +86 -0
- package/src/render/backend/webgpu/clothSetLayout.ts +102 -0
- package/src/render/backend/webgpu/clothSetPack.ts +197 -0
- package/src/render/backend/webgpu/drawCommand.ts +3 -0
- package/src/render/backend/webgpu/flatPass.ts +26 -28
- package/src/render/backend/webgpu/gpuClothSet.ts +564 -0
- package/src/render/backend/webgpu/latePass.ts +1 -0
- package/src/render/backend/webgpu/motionPass.ts +18 -7
- package/src/render/backend/webgpu/pipelineCache.ts +46 -7
- package/src/render/backend/webgpu/renderer.ts +274 -48
- package/src/render/backend/webgpu/shaders/clothSolve.wgsl.ts +121 -47
- package/src/render/backend/webgpu/staticBundles.ts +2 -1
- package/src/render/backend/webgpu/vertexFormats.ts +113 -0
- package/src/render/globalMediumPass.ts +7 -0
- package/src/render/indexWidth.ts +27 -0
- package/src/render/lightMatrix.ts +15 -0
- package/src/render/mesh.ts +66 -14
- package/src/render/renderQuality.ts +38 -0
- package/src/render/rendererHarness.ts +15 -0
- package/src/render/shader.ts +59 -0
- package/src/render/shaders/flat/directionalShadow.ts +84 -10
- package/src/render/shaders/flat/glassTint.ts +7 -1
- package/src/render/shaders/flat/index.ts +30 -2
- package/src/render/shaders/flat/layered.ts +115 -0
- package/src/render/shaders/flat/main.ts +43 -16
- package/src/render/shaders/flat/mapReads.ts +38 -0
- package/src/render/shaders/flat/movingSun.ts +46 -0
- package/src/render/shaders/flat/normalMap.ts +14 -3
- package/src/render/shaders/flat/overlay.ts +41 -19
- package/src/render/shaders/flat/preamble.ts +23 -5
- package/src/render/shaders/flat/worldUv.ts +113 -0
- package/src/render/shaders/generated/flat.wgsl.ts +791 -391
- package/src/render/shaders/generated/globalMedium.wgsl.ts +8 -3
- package/src/render/shaders/generated/lightVolume.wgsl.ts +16 -11
- package/src/render/shaders/globalMedium.ts +9 -1
- package/src/render/shaders/lightVolume.ts +9 -1
- package/src/render/shaders/tangentFrame.ts +16 -3
- package/src/render/skinnedClothRun.ts +138 -38
- package/src/render/surfaceLayers.ts +57 -0
- package/src/render/surfaceOverlay.ts +24 -7
- package/src/render/surfaceProjection.ts +57 -0
- package/src/render/surfaceTexture.ts +30 -0
- package/src/render/vertexPacking.ts +109 -0
- package/dist/render/backend/webgpu/gpuSkinnedCloth.d.ts +0 -74
- package/dist/render/backend/webgpu/gpuSkinnedCloth.js +0 -452
- package/src/render/backend/webgpu/gpuSkinnedCloth.ts +0 -502
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A material blended from layers by a mask: `SurfaceMaterial.layers`, packed into `uLayers` by
|
|
3
|
+
* `surfaceLayers.ts`.
|
|
4
|
+
*
|
|
5
|
+
* **Layer `i` is layer `i` of the material's arrays**, each read at the mesh's coordinates times its
|
|
6
|
+
* own repeat; the mask is layer 0 of the map a shading model would read, at the mesh's coordinates.
|
|
7
|
+
* Each channel lays a layer over everything before it — red layer 1, green 2, blue 3, alpha 4 — so a
|
|
8
|
+
* layer's share is its channel times one less each later channel, and the base keeps what none of
|
|
9
|
+
* them took. Colour, roughness and occlusion are blended by those shares, and the normal map's
|
|
10
|
+
* tangent-space texels too, before the frame turns them into the world.
|
|
11
|
+
*
|
|
12
|
+
* **Every layer present is read, whatever its share.** A read whose level is implicit is legal only
|
|
13
|
+
* in uniform control flow (AGENTS.md 2026-08-07), so the loop is bounded by the layer count, a
|
|
14
|
+
* uniform, and never skips on a share, which is the pixel's own.
|
|
15
|
+
*
|
|
16
|
+
* **A lit switch, `LAYERED`**, off until a material first asks, declared last so every switch before
|
|
17
|
+
* it keeps its id. Compiled out, its two vectors are not declared and its calls are constants.
|
|
18
|
+
*/
|
|
19
|
+
export declare function layeredGlsl(on: boolean): string;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A material blended from layers by a mask: `SurfaceMaterial.layers`, packed into `uLayers` by
|
|
3
|
+
* `surfaceLayers.ts`.
|
|
4
|
+
*
|
|
5
|
+
* **Layer `i` is layer `i` of the material's arrays**, each read at the mesh's coordinates times its
|
|
6
|
+
* own repeat; the mask is layer 0 of the map a shading model would read, at the mesh's coordinates.
|
|
7
|
+
* Each channel lays a layer over everything before it — red layer 1, green 2, blue 3, alpha 4 — so a
|
|
8
|
+
* layer's share is its channel times one less each later channel, and the base keeps what none of
|
|
9
|
+
* them took. Colour, roughness and occlusion are blended by those shares, and the normal map's
|
|
10
|
+
* tangent-space texels too, before the frame turns them into the world.
|
|
11
|
+
*
|
|
12
|
+
* **Every layer present is read, whatever its share.** A read whose level is implicit is legal only
|
|
13
|
+
* in uniform control flow (AGENTS.md 2026-08-07), so the loop is bounded by the layer count, a
|
|
14
|
+
* uniform, and never skips on a share, which is the pixel's own.
|
|
15
|
+
*
|
|
16
|
+
* **A lit switch, `LAYERED`**, off until a material first asks, declared last so every switch before
|
|
17
|
+
* it keeps its id. Compiled out, its two vectors are not declared and its calls are constants.
|
|
18
|
+
*/
|
|
19
|
+
export function layeredGlsl(on) {
|
|
20
|
+
if (!on) {
|
|
21
|
+
return /* glsl */ `
|
|
22
|
+
const bool LAYERED = false; // wgsl:override
|
|
23
|
+
bool layered() { return false; }
|
|
24
|
+
void layeredBegin() {}
|
|
25
|
+
vec4 layeredAlbedo() { return vec4(1.0); }
|
|
26
|
+
vec3 layeredOrm() { return vec3(1.0); }
|
|
27
|
+
vec3 layeredTexel() { return vec3(0.0, 0.0, 1.0); }
|
|
28
|
+
bool layeredGlows() { return false; }
|
|
29
|
+
vec3 layeredEmissive() { return vec3(0.0); }
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
return /* glsl */ `
|
|
33
|
+
/* Whether this program blends a material's layers. Off but where one has asked: layered.ts. */
|
|
34
|
+
const bool LAYERED = true; // wgsl:override
|
|
35
|
+
/* The five repeats, base first (x y z w, then x), the count (y) and the glowing layer, or -1 (z). */
|
|
36
|
+
uniform vec4 uLayers[2]; // wgsl:material
|
|
37
|
+
|
|
38
|
+
/* The mask's channels that lay a layer, zero past the count: read once, in layeredBegin. */
|
|
39
|
+
vec4 lMask;
|
|
40
|
+
|
|
41
|
+
bool layered() {
|
|
42
|
+
return uLayers[1].y > 0.5;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* The mask, at the mesh's coordinates, where a model's map is. Under a branch on uniforms. */
|
|
46
|
+
void layeredBegin() {
|
|
47
|
+
vec4 m = texture(uModelMap, vec3(vUv.xy, 0.0));
|
|
48
|
+
float n = uLayers[1].y;
|
|
49
|
+
lMask = vec4(n > 1.5 ? m.r : 0.0, n > 2.5 ? m.g : 0.0, n > 3.5 ? m.b : 0.0, n > 4.5 ? m.a : 0.0);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Layer i's share of this point: its channel, less every later layer's. */
|
|
53
|
+
float layerShare(int i) {
|
|
54
|
+
float keep = 1.0;
|
|
55
|
+
for (int j = 3; j >= 0; j--) {
|
|
56
|
+
if (j + 1 == i) return lMask[j] * keep;
|
|
57
|
+
keep *= 1.0 - lMask[j];
|
|
58
|
+
}
|
|
59
|
+
return keep;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
float layerRepeat(int i) {
|
|
63
|
+
return i < 4 ? uLayers[0][i] : uLayers[1].x;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
vec3 layerAt(int i) {
|
|
67
|
+
return vec3(vUv.xy * layerRepeat(i), float(i));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Colour by the shares, and the base layer's coverage, which a cutout reads. */
|
|
71
|
+
vec4 layeredAlbedo() {
|
|
72
|
+
vec4 sum = vec4(0.0);
|
|
73
|
+
for (int i = 0; i < 5; i++) {
|
|
74
|
+
if (float(i) >= uLayers[1].y) break;
|
|
75
|
+
vec4 t = texture(uAlbedo, layerAt(i));
|
|
76
|
+
sum.rgb += t.rgb * layerShare(i);
|
|
77
|
+
if (i == 0) sum.a = t.a;
|
|
78
|
+
}
|
|
79
|
+
return sum;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
vec3 layeredOrm() {
|
|
83
|
+
vec3 sum = vec3(0.0);
|
|
84
|
+
for (int i = 0; i < 5; i++) {
|
|
85
|
+
if (float(i) >= uLayers[1].y) break;
|
|
86
|
+
sum += texture(uOrmMap, layerAt(i)).rgb * layerShare(i);
|
|
87
|
+
}
|
|
88
|
+
return sum;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* The tangent-space texels blended, each with its z rebuilt where a two-channel map stored none. */
|
|
92
|
+
vec3 layeredTexel() {
|
|
93
|
+
vec3 sum = vec3(0.0);
|
|
94
|
+
for (int i = 0; i < 5; i++) {
|
|
95
|
+
if (float(i) >= uLayers[1].y) break;
|
|
96
|
+
vec3 t = texture(uNormalMap, layerAt(i)).xyz * 2.0 - 1.0;
|
|
97
|
+
t.z = t.z > 0.0 ? t.z : sqrt(max(0.0, 1.0 - dot(t.xy, t.xy)));
|
|
98
|
+
sum += t * layerShare(i);
|
|
99
|
+
}
|
|
100
|
+
float len = length(sum);
|
|
101
|
+
return len > 1e-5 ? sum / len : vec3(0.0, 0.0, 1.0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Whether the emissive map belongs to one layer rather than to the whole surface. */
|
|
105
|
+
bool layeredGlows() {
|
|
106
|
+
return uLayers[1].z > -0.5;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* The emissive map at its layer's place, glowing by that layer's share. */
|
|
110
|
+
vec3 layeredEmissive() {
|
|
111
|
+
int glow = int(uLayers[1].z + 0.5);
|
|
112
|
+
return texture(uEmissiveMap, layerAt(glow)).rgb * layerShare(glow);
|
|
113
|
+
}
|
|
114
|
+
`;
|
|
115
|
+
}
|