@flighthq/mesh 0.3.0 → 0.3.1-next.1041.35b950c
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/meshGeometry.d.ts +1 -0
- package/dist/meshGeometry.d.ts.map +1 -1
- package/dist/meshGeometry.js +17 -8
- package/dist/meshGeometry.js.map +1 -1
- package/dist/meshGeometryAttributes.d.ts.map +1 -1
- package/dist/meshGeometryAttributes.js +47 -87
- package/dist/meshGeometryAttributes.js.map +1 -1
- package/dist/meshGeometryBuilders.d.ts.map +1 -1
- package/dist/meshGeometryBuilders.js +152 -134
- package/dist/meshGeometryBuilders.js.map +1 -1
- package/dist/meshGeometryCompute.d.ts +3 -2
- package/dist/meshGeometryCompute.d.ts.map +1 -1
- package/dist/meshGeometryCompute.js +283 -294
- package/dist/meshGeometryCompute.js.map +1 -1
- package/dist/meshGeometryIndex.js +4 -4
- package/dist/meshGeometryIndex.js.map +1 -1
- package/dist/meshGeometryLayout.d.ts.map +1 -1
- package/dist/meshGeometryLayout.js +2 -67
- package/dist/meshGeometryLayout.js.map +1 -1
- package/dist/meshGeometryOperations.d.ts.map +1 -1
- package/dist/meshGeometryOperations.js +93 -7
- package/dist/meshGeometryOperations.js.map +1 -1
- package/dist/meshGeometryTransforms.d.ts.map +1 -1
- package/dist/meshGeometryTransforms.js +90 -19
- package/dist/meshGeometryTransforms.js.map +1 -1
- package/dist/meshGeometryUvs.d.ts +0 -1
- package/dist/meshGeometryUvs.d.ts.map +1 -1
- package/dist/meshGeometryUvs.js +10 -18
- package/dist/meshGeometryUvs.js.map +1 -1
- package/dist/vertexFormat.d.ts +6 -0
- package/dist/vertexFormat.d.ts.map +1 -0
- package/dist/vertexFormat.js +61 -0
- package/dist/vertexFormat.js.map +1 -0
- package/package.json +4 -4
- package/src/meshGeometry.test.ts +23 -22
- package/src/meshGeometryAttributes.test.ts +37 -0
- package/src/meshGeometryBuilders.test.ts +333 -10
- package/src/meshGeometryCompute.test.ts +246 -95
- package/src/meshGeometryDeformationClone.test.ts +2 -0
- package/src/meshGeometryLayout.test.ts +1 -12
- package/src/meshGeometryOperations.test.ts +98 -0
- package/src/meshGeometryTransforms.test.ts +103 -1
- package/src/meshGeometryUvs.test.ts +1 -40
- package/src/vertexFormat.test.ts +38 -0
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { createAabb } from '@flighthq/geometry/contract';
|
|
2
2
|
import { getVertexAttributeFloatOffset } from './meshGeometryAttributes';
|
|
3
3
|
import { computeMeshGeometryBounds } from './meshGeometryCompute';
|
|
4
|
-
// Geometry transform operations: apply a Matrix4 to positions
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// Geometry transform operations: apply a Matrix4 to positions, the inverse-transpose to normals,
|
|
5
|
+
// and the plain upper 3x3 to tangent.xyz — a normal is a covector and a tangent is a true vector,
|
|
6
|
+
// so they follow different matrices and only coincide under rotation and uniform scale. A transform
|
|
7
|
+
// that mirrors (determinant < 0) also reverses triangle winding and negates tangent.w, because a
|
|
8
|
+
// baked transform leaves no determinant for a renderer to detect. All in-place operations bump
|
|
9
|
+
// geometry.version. Out-parameter variants are alias-safe (out === source is valid).
|
|
7
10
|
// Centers the geometry so that the cached AABB's center moves to the origin. If bounds have
|
|
8
11
|
// not been computed yet, they are computed first. Bumps geometry.version.
|
|
9
12
|
export function centerMeshGeometry(geometry) {
|
|
@@ -20,25 +23,33 @@ export function centerMeshGeometry(geometry) {
|
|
|
20
23
|
return;
|
|
21
24
|
translateMeshGeometry(geometry, -cx, -cy, -cz);
|
|
22
25
|
}
|
|
23
|
-
// Scales all vertex positions in-place by (sx, sy, sz). Normals
|
|
24
|
-
//
|
|
25
|
-
// re-normalized.
|
|
26
|
+
// Scales all vertex positions in-place by (sx, sy, sz). Normals are transformed by the
|
|
27
|
+
// inverse-transpose of the scale (1/sx, 1/sy, 1/sz) and tangents by the scale itself, both
|
|
28
|
+
// re-normalized. A negative-determinant scale mirrors the mesh, so triangle winding is reversed and
|
|
29
|
+
// tangent.w negated to keep front faces front-facing. Bumps geometry.version.
|
|
26
30
|
export function scaleMeshGeometry(geometry, sx, sy, sz) {
|
|
27
31
|
transformMeshGeometryPositions(geometry, geometry, sx, sy, sz, 0, 0, 0);
|
|
32
|
+
restoreMirroredWindingAndHandedness(geometry, sx * sy * sz);
|
|
28
33
|
}
|
|
29
34
|
// Applies a Matrix4 to the geometry's vertices in place. Positions are transformed as points
|
|
30
|
-
// (w=1); normals
|
|
31
|
-
// upper-left 3×3
|
|
32
|
-
// geometry.version. Alias-safe (this function
|
|
33
|
-
// always in-place, but positions are read before write
|
|
35
|
+
// (w=1); normals by the INVERSE-TRANSPOSE of the upper-left 3×3 and tangent.xyz by the PLAIN
|
|
36
|
+
// upper-left 3×3, both re-normalized — see transformMeshGeometryInto for why the two differ.
|
|
37
|
+
// Returns false when the matrix is singular. Bumps geometry.version. Alias-safe (this function
|
|
38
|
+
// does not need an alias form because it is always in-place, but positions are read before write
|
|
39
|
+
// in the core loop).
|
|
34
40
|
export function transformMeshGeometry(geometry, matrix) {
|
|
35
41
|
return transformMeshGeometryInto(geometry, geometry, matrix);
|
|
36
42
|
}
|
|
37
43
|
// Applies a Matrix4 to `source` geometry and writes the result into `out`. Positions are
|
|
38
|
-
// transformed as points (w=1)
|
|
39
|
-
//
|
|
40
|
-
// preserved.
|
|
41
|
-
//
|
|
44
|
+
// transformed as points (w=1). Normals follow the INVERSE-TRANSPOSE of the upper-left 3×3
|
|
45
|
+
// (ignoring translation); tangent.xyz follows the PLAIN upper-left 3×3. Both are re-normalized and
|
|
46
|
+
// tangent.w is preserved. The two matrices differ on purpose: a normal is a covector and a tangent
|
|
47
|
+
// is a true vector lying along the surface, so under non-uniform scale one inverse-transpose for
|
|
48
|
+
// both tilts the tangent out of perpendicular with its own normal. They coincide under rotation
|
|
49
|
+
// and uniform scale, which is why sharing one matrix looked correct for as long as it did — the
|
|
50
|
+
// body carries the same note at the tangent block, and a test pins the distinction.
|
|
51
|
+
// Returns false and leaves `out` unchanged when the matrix has no inverse (singular), because the
|
|
52
|
+
// correct normal transform is undefined. Alias-safe: out === source is valid.
|
|
42
53
|
export function transformMeshGeometryInto(out, source, matrix) {
|
|
43
54
|
// Compute inverse-transpose of the 3×3 upper-left for normals/tangents.
|
|
44
55
|
const invT = computeMatrix3x3InverseTranspose(matrix);
|
|
@@ -85,10 +96,15 @@ export function transformMeshGeometryInto(out, source, matrix) {
|
|
|
85
96
|
if (tanFloatOffset >= 0) {
|
|
86
97
|
const tb = vertBase + tanFloatOffset;
|
|
87
98
|
const tx = srcVerts[tb], ty = srcVerts[tb + 1], tz = srcVerts[tb + 2];
|
|
88
|
-
const tw = srcVerts[tb + 3]; //
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
const tw = srcVerts[tb + 3]; // handedness, a sign rather than a direction
|
|
100
|
+
// A tangent lies ALONG the surface, so it is a true vector and follows the plain upper 3x3,
|
|
101
|
+
// the same matrix a position follows. Only the normal is a covector needing the
|
|
102
|
+
// inverse-transpose. The two coincide under rotation and uniform scale, which is why sharing
|
|
103
|
+
// one matrix looked right; under non-uniform scale it tilts the tangent off the surface and
|
|
104
|
+
// out of perpendicular with its own normal. `skinTangents` draws the same distinction.
|
|
105
|
+
let ttx = m[0] * tx + m[4] * ty + m[8] * tz;
|
|
106
|
+
let tty = m[1] * tx + m[5] * ty + m[9] * tz;
|
|
107
|
+
let ttz = m[2] * tx + m[6] * ty + m[10] * tz;
|
|
92
108
|
const len = Math.sqrt(ttx * ttx + tty * tty + ttz * ttz);
|
|
93
109
|
if (len > 0) {
|
|
94
110
|
ttx /= len;
|
|
@@ -101,6 +117,7 @@ export function transformMeshGeometryInto(out, source, matrix) {
|
|
|
101
117
|
dstVerts[tb + 3] = tw;
|
|
102
118
|
}
|
|
103
119
|
}
|
|
120
|
+
restoreMirroredWindingAndHandedness(out, m[0] * (m[5] * m[10] - m[6] * m[9]) - m[4] * (m[1] * m[10] - m[2] * m[9]) + m[8] * (m[1] * m[6] - m[2] * m[5]));
|
|
104
121
|
out.version++;
|
|
105
122
|
// Recompute bounds if they were cached, since all positions have changed.
|
|
106
123
|
if (out.bounds) {
|
|
@@ -172,6 +189,58 @@ function computeMatrix3x3InverseTranspose(matrix) {
|
|
|
172
189
|
}
|
|
173
190
|
// Applies a pure-scale transform to positions. Normals/tangents are transformed by the
|
|
174
191
|
// inverse scale and re-normalized. Internal helper used by scaleMeshGeometry.
|
|
192
|
+
// Restores the counter-clockwise-front / outward-normal invariant after a transform that mirrors the
|
|
193
|
+
// geometry (determinant < 0). A reflection turns every triangle inside out and flips the handedness
|
|
194
|
+
// of every tangent frame, and a BAKED transform leaves no determinant behind for a renderer to notice
|
|
195
|
+
// — the mesh simply uploads inside-out under an identity model matrix. So the correction has to
|
|
196
|
+
// happen here, at the point the mirror is applied.
|
|
197
|
+
//
|
|
198
|
+
// Mirroring is a legitimate request, not an error, so this never rejects a negative determinant.
|
|
199
|
+
//
|
|
200
|
+
// `tangent.w` is handedness (B = w * cross(N, T)), so a reflection negates it. That part is
|
|
201
|
+
// topology-independent and always applied. The winding reversal is not: swapping two corners of a
|
|
202
|
+
// triple is only meaningful for a triangle list. A triangle STRIP shares each vertex between up to
|
|
203
|
+
// three triangles, so per-triple swaps do not describe it, and this repository has no established
|
|
204
|
+
// strip winding reversal to follow — the one in `scene3d-formats` (`reverseTriangleWinding`) steps by
|
|
205
|
+
// three and is list-only. Rather than invent one, strips are left unreversed and the gap is reported.
|
|
206
|
+
// A line or point stream has no winding to reverse at all.
|
|
207
|
+
function restoreMirroredWindingAndHandedness(geometry, determinant) {
|
|
208
|
+
if (determinant >= 0)
|
|
209
|
+
return;
|
|
210
|
+
const tanFloatOffset = getVertexAttributeFloatOffset(geometry.layout, 'tangent');
|
|
211
|
+
const floatsPerVertex = geometry.layout.stride / 4;
|
|
212
|
+
const vertices = geometry.vertices;
|
|
213
|
+
if (tanFloatOffset >= 0 && floatsPerVertex > 0) {
|
|
214
|
+
const vertexCount = Math.floor(vertices.length / floatsPerVertex);
|
|
215
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
216
|
+
const wIndex = i * floatsPerVertex + tanFloatOffset + 3;
|
|
217
|
+
vertices[wIndex] = -vertices[wIndex];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (geometry.topology !== 'triangle-list')
|
|
221
|
+
return;
|
|
222
|
+
const indices = geometry.indices;
|
|
223
|
+
if (indices !== null) {
|
|
224
|
+
for (let i = 0; i + 2 < indices.length; i += 3) {
|
|
225
|
+
const swap = indices[i + 1];
|
|
226
|
+
indices[i + 1] = indices[i + 2];
|
|
227
|
+
indices[i + 2] = swap;
|
|
228
|
+
}
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
// Non-indexed: the records themselves carry the order, so the second and third of each triple swap.
|
|
232
|
+
if (floatsPerVertex <= 0)
|
|
233
|
+
return;
|
|
234
|
+
const vertexCount = Math.floor(vertices.length / floatsPerVertex);
|
|
235
|
+
const scratch = new Float32Array(floatsPerVertex);
|
|
236
|
+
for (let triangle = 0; triangle + 2 < vertexCount; triangle += 3) {
|
|
237
|
+
const second = (triangle + 1) * floatsPerVertex;
|
|
238
|
+
const third = (triangle + 2) * floatsPerVertex;
|
|
239
|
+
scratch.set(vertices.subarray(second, second + floatsPerVertex));
|
|
240
|
+
vertices.copyWithin(second, third, third + floatsPerVertex);
|
|
241
|
+
vertices.set(scratch, third);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
175
244
|
function transformMeshGeometryPositions(out, source, sx, sy, sz, tx, ty, tz) {
|
|
176
245
|
const posFloatOffset = getVertexAttributeFloatOffset(source.layout, 'position');
|
|
177
246
|
const normFloatOffset = getVertexAttributeFloatOffset(source.layout, 'normal');
|
|
@@ -214,7 +283,9 @@ function transformMeshGeometryPositions(out, source, sx, sy, sz, tx, ty, tz) {
|
|
|
214
283
|
const tb = vertBase + tanFloatOffset;
|
|
215
284
|
const ttx = srcVerts[tb], tty = srcVerts[tb + 1], ttz = srcVerts[tb + 2];
|
|
216
285
|
const tw = srcVerts[tb + 3];
|
|
217
|
-
|
|
286
|
+
// Plain scale, not the inverse: a tangent lies along the surface and follows the same
|
|
287
|
+
// transform a position does. See the note on `transformMeshGeometryInto`.
|
|
288
|
+
let ntx = ttx * sx, nty = tty * sy, ntz = ttz * sz;
|
|
218
289
|
const len = Math.sqrt(ntx * ntx + nty * nty + ntz * ntz);
|
|
219
290
|
if (len > 0) {
|
|
220
291
|
ntx /= len;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshGeometryTransforms.js","sourceRoot":"","sources":["../src/meshGeometryTransforms.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"meshGeometryTransforms.js","sourceRoot":"","sources":["../src/meshGeometryTransforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { MeshGeometry } from '@flighthq/types/contract';
|
|
2
2
|
export declare function offsetMeshGeometryUvs(geometry: MeshGeometry, du: number, dv: number): void;
|
|
3
3
|
export declare function scaleMeshGeometryUvs(geometry: MeshGeometry, su: number, sv: number): void;
|
|
4
|
-
export declare function wrapMeshGeometryUvs(geometry: MeshGeometry): void;
|
|
5
4
|
//# sourceMappingURL=meshGeometryUvs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshGeometryUvs.d.ts","sourceRoot":"","sources":["../src/meshGeometryUvs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAW7D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAY1F;
|
|
1
|
+
{"version":3,"file":"meshGeometryUvs.d.ts","sourceRoot":"","sources":["../src/meshGeometryUvs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAW7D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAY1F;AAcD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAYzF"}
|
package/dist/meshGeometryUvs.js
CHANGED
|
@@ -22,6 +22,16 @@ export function offsetMeshGeometryUvs(geometry, du, dv) {
|
|
|
22
22
|
}
|
|
23
23
|
// Scales every uv0 coordinate by (su, sv) around the origin: u' = u * su, v' = v * sv. Useful
|
|
24
24
|
// for tiling — e.g. scaleMeshGeometryUvs(geo, 2, 2) tiles the texture 2× in each direction.
|
|
25
|
+
//
|
|
26
|
+
// ★ A NEGATIVE SCALE MIRRORS THE SAMPLING BUT NOT THE STORED TANGENT FRAME. Tangents are derived
|
|
27
|
+
// from the UV gradient, so mirroring u or v reverses the direction a tangent should point and the
|
|
28
|
+
// handedness that goes with it, while the tangent records already in the vertex stream keep their
|
|
29
|
+
// old values. Any normal-mapped material then reconstructs its bitangent from a frame that no
|
|
30
|
+
// longer matches the coordinates it samples, which reads as lighting flipped across the mirrored
|
|
31
|
+
// axis. The remedy is the caller's: run `computeMeshGeometryTangents` afterwards to re-derive the
|
|
32
|
+
// frame from the new coordinates. This operation deliberately does NOT do that for you — a UV edit
|
|
33
|
+
// that silently rewrote the tangent attribute would be exactly the hidden side effect this codebase
|
|
34
|
+
// rules out, and callers that only ever scale positively should not pay for a recompute.
|
|
25
35
|
export function scaleMeshGeometryUvs(geometry, su, sv) {
|
|
26
36
|
const floatOffset = getVertexAttributeFloatOffset(geometry.layout, 'uv0');
|
|
27
37
|
if (floatOffset < 0)
|
|
@@ -37,22 +47,4 @@ export function scaleMeshGeometryUvs(geometry, su, sv) {
|
|
|
37
47
|
if (vertexCount > 0)
|
|
38
48
|
geometry.version++;
|
|
39
49
|
}
|
|
40
|
-
// Wraps every uv0 coordinate into [0, 1) using the fractional-part operation: u' = u - floor(u).
|
|
41
|
-
// Useful after scale or offset operations that push coordinates outside the 0..1 atlas tile.
|
|
42
|
-
// Coordinates that are exactly on integer boundaries (e.g. u = 1.0) wrap to 0.0.
|
|
43
|
-
export function wrapMeshGeometryUvs(geometry) {
|
|
44
|
-
const floatOffset = getVertexAttributeFloatOffset(geometry.layout, 'uv0');
|
|
45
|
-
if (floatOffset < 0)
|
|
46
|
-
return;
|
|
47
|
-
const floatsPerVertex = geometry.layout.stride / 4;
|
|
48
|
-
const vertexCount = floatsPerVertex > 0 ? Math.floor(geometry.vertices.length / floatsPerVertex) : 0;
|
|
49
|
-
const verts = geometry.vertices;
|
|
50
|
-
for (let i = 0; i < vertexCount; i++) {
|
|
51
|
-
const base = i * floatsPerVertex + floatOffset;
|
|
52
|
-
verts[base] = verts[base] - Math.floor(verts[base]);
|
|
53
|
-
verts[base + 1] = verts[base + 1] - Math.floor(verts[base + 1]);
|
|
54
|
-
}
|
|
55
|
-
if (vertexCount > 0)
|
|
56
|
-
geometry.version++;
|
|
57
|
-
}
|
|
58
50
|
//# sourceMappingURL=meshGeometryUvs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshGeometryUvs.js","sourceRoot":"","sources":["../src/meshGeometryUvs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,gGAAgG;AAChG,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAE9F,+FAA+F;AAC/F,wCAAwC;AACxC,MAAM,UAAU,qBAAqB,CAAC,QAAsB,EAAE,EAAU,EAAE,EAAU;IAClF,MAAM,WAAW,GAAG,6BAA6B,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1E,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,GAAG,eAAe,GAAG,WAAW,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,WAAW,GAAG,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,8FAA8F;AAC9F,4FAA4F;AAC5F,
|
|
1
|
+
{"version":3,"file":"meshGeometryUvs.js","sourceRoot":"","sources":["../src/meshGeometryUvs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,gGAAgG;AAChG,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAE9F,+FAA+F;AAC/F,wCAAwC;AACxC,MAAM,UAAU,qBAAqB,CAAC,QAAsB,EAAE,EAAU,EAAE,EAAU;IAClF,MAAM,WAAW,GAAG,6BAA6B,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1E,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,GAAG,eAAe,GAAG,WAAW,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,WAAW,GAAG,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,8FAA8F;AAC9F,4FAA4F;AAC5F,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,kGAAkG;AAClG,8FAA8F;AAC9F,iGAAiG;AACjG,kGAAkG;AAClG,mGAAmG;AACnG,oGAAoG;AACpG,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,QAAsB,EAAE,EAAU,EAAE,EAAU;IACjF,MAAM,WAAW,GAAG,6BAA6B,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1E,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,GAAG,eAAe,GAAG,WAAW,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,WAAW,GAAG,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { VertexFormat } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getVertexFormatByteLength(format: VertexFormat): number;
|
|
3
|
+
export declare function getVertexFormatComponentCount(format: VertexFormat): number;
|
|
4
|
+
export declare function readVertexFormatComponent(view: Readonly<DataView>, byteOffset: number, format: VertexFormat, component: number): number;
|
|
5
|
+
export declare function writeVertexFormatComponent(view: DataView, byteOffset: number, format: VertexFormat, component: number, value: number): void;
|
|
6
|
+
//# sourceMappingURL=vertexFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertexFormat.d.ts","sourceRoot":"","sources":["../src/vertexFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CActE;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAY1E;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EACxB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,MAAM,CAaR;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,IAAI,CAiBN"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export function getVertexFormatByteLength(format) {
|
|
2
|
+
switch (format) {
|
|
3
|
+
case 'float32x2':
|
|
4
|
+
return 8;
|
|
5
|
+
case 'float32x3':
|
|
6
|
+
return 12;
|
|
7
|
+
case 'float32x4':
|
|
8
|
+
return 16;
|
|
9
|
+
case 'uint16x4':
|
|
10
|
+
return 8;
|
|
11
|
+
case 'uint8x4':
|
|
12
|
+
case 'unorm8x4':
|
|
13
|
+
return 4;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function getVertexFormatComponentCount(format) {
|
|
17
|
+
switch (format) {
|
|
18
|
+
case 'float32x2':
|
|
19
|
+
return 2;
|
|
20
|
+
case 'float32x3':
|
|
21
|
+
return 3;
|
|
22
|
+
case 'float32x4':
|
|
23
|
+
case 'uint16x4':
|
|
24
|
+
case 'uint8x4':
|
|
25
|
+
case 'unorm8x4':
|
|
26
|
+
return 4;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function readVertexFormatComponent(view, byteOffset, format, component) {
|
|
30
|
+
switch (format) {
|
|
31
|
+
case 'float32x2':
|
|
32
|
+
case 'float32x3':
|
|
33
|
+
case 'float32x4':
|
|
34
|
+
return view.getFloat32(byteOffset + component * 4, true);
|
|
35
|
+
case 'uint16x4':
|
|
36
|
+
return view.getUint16(byteOffset + component * 2, true);
|
|
37
|
+
case 'uint8x4':
|
|
38
|
+
return view.getUint8(byteOffset + component);
|
|
39
|
+
case 'unorm8x4':
|
|
40
|
+
return view.getUint8(byteOffset + component) / 255;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function writeVertexFormatComponent(view, byteOffset, format, component, value) {
|
|
44
|
+
switch (format) {
|
|
45
|
+
case 'float32x2':
|
|
46
|
+
case 'float32x3':
|
|
47
|
+
case 'float32x4':
|
|
48
|
+
view.setFloat32(byteOffset + component * 4, value, true);
|
|
49
|
+
return;
|
|
50
|
+
case 'uint16x4':
|
|
51
|
+
view.setUint16(byteOffset + component * 2, Math.round(Math.min(0xffff, Math.max(0, value))), true);
|
|
52
|
+
return;
|
|
53
|
+
case 'uint8x4':
|
|
54
|
+
view.setUint8(byteOffset + component, Math.round(Math.min(0xff, Math.max(0, value))));
|
|
55
|
+
return;
|
|
56
|
+
case 'unorm8x4':
|
|
57
|
+
view.setUint8(byteOffset + component, Math.round(Math.min(1, Math.max(0, value)) * 255));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=vertexFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertexFormat.js","sourceRoot":"","sources":["../src/vertexFormat.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,CAAC,CAAC;QACX,KAAK,WAAW;YACd,OAAO,EAAE,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,EAAE,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAoB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,CAAC,CAAC;QACX,KAAK,WAAW;YACd,OAAO,CAAC,CAAC;QACX,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAwB,EACxB,UAAkB,EAClB,MAAoB,EACpB,SAAiB;IAEjB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3D,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC/C,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAc,EACd,UAAkB,EAClB,MAAoB,EACpB,SAAiB,EACjB,KAAa;IAEb,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO;QACT,KAAK,UAAU;YACb,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACnG,OAAO;QACT,KAAK,SAAS;YACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,OAAO;QACT,KAAK,UAAU;YACb,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACzF,OAAO;IACX,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/mesh",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1-next.1041.35b950c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/entity": "0.3.
|
|
42
|
-
"@flighthq/geometry": "0.3.
|
|
43
|
-
"@flighthq/types": "0.3.
|
|
41
|
+
"@flighthq/entity": "0.3.1-next.1041.35b950c",
|
|
42
|
+
"@flighthq/geometry": "0.3.1-next.1041.35b950c",
|
|
43
|
+
"@flighthq/types": "0.3.1-next.1041.35b950c"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^5.3.0"
|
package/src/meshGeometry.test.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
10
|
cloneMeshGeometry,
|
|
11
|
+
cloneMeshGeometryMetadata,
|
|
11
12
|
createMeshGeometry,
|
|
12
13
|
destroyMeshGeometryGlData,
|
|
13
14
|
destroyMeshGeometryWgpuData,
|
|
@@ -21,20 +22,6 @@ import {
|
|
|
21
22
|
setMeshGeometrySkinBindPose,
|
|
22
23
|
} from './meshGeometry';
|
|
23
24
|
|
|
24
|
-
const CANONICAL_LAYOUT: VertexAttributeLayout = {
|
|
25
|
-
attributes: [
|
|
26
|
-
{ byteOffset: 0, format: 'float32x3', semantic: 'position' },
|
|
27
|
-
{ byteOffset: 12, format: 'float32x3', semantic: 'normal' },
|
|
28
|
-
{ byteOffset: 24, format: 'float32x4', semantic: 'tangent' },
|
|
29
|
-
{ byteOffset: 40, format: 'float32x2', semantic: 'uv0' },
|
|
30
|
-
],
|
|
31
|
-
stride: 48,
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
function makeVertices(count: number): Float32Array<ArrayBuffer> {
|
|
35
|
-
return new Float32Array(count * 12);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
25
|
describe('cloneMeshGeometry', () => {
|
|
39
26
|
it('deep-copies vertices and indices independently', () => {
|
|
40
27
|
const vertices = makeVertices(3);
|
|
@@ -68,16 +55,29 @@ describe('cloneMeshGeometry', () => {
|
|
|
68
55
|
expect(clone.bounds!.min.x).toBe(-1);
|
|
69
56
|
expect(clone.bounds!.max.z).toBe(1);
|
|
70
57
|
});
|
|
58
|
+
});
|
|
71
59
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
const CANONICAL_LAYOUT: VertexAttributeLayout = {
|
|
61
|
+
attributes: [
|
|
62
|
+
{ byteOffset: 0, format: 'float32x3', semantic: 'position' },
|
|
63
|
+
{ byteOffset: 12, format: 'float32x3', semantic: 'normal' },
|
|
64
|
+
{ byteOffset: 24, format: 'float32x4', semantic: 'tangent' },
|
|
65
|
+
{ byteOffset: 40, format: 'float32x2', semantic: 'uv0' },
|
|
66
|
+
],
|
|
67
|
+
stride: 48,
|
|
68
|
+
};
|
|
75
69
|
|
|
76
|
-
|
|
70
|
+
function makeVertices(count: number): Float32Array<ArrayBuffer> {
|
|
71
|
+
return new Float32Array(count * 12);
|
|
72
|
+
}
|
|
77
73
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
describe('cloneMeshGeometryMetadata', () => {
|
|
75
|
+
it('copies descriptors without copying the vertex stream', () => {
|
|
76
|
+
const source = createMeshGeometry({ layout: CANONICAL_LAYOUT, vertices: new Float32Array(12) });
|
|
77
|
+
const copy = cloneMeshGeometryMetadata(source);
|
|
78
|
+
expect(copy.vertices.length).toBe(0);
|
|
79
|
+
expect(copy.layout).toBe(source.layout);
|
|
80
|
+
expect(copy[EntityRuntimeKey]).not.toBe(source[EntityRuntimeKey]);
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
|
|
@@ -130,7 +130,6 @@ describe('createMeshGeometry', () => {
|
|
|
130
130
|
const runtime = geometry[EntityRuntimeKey] as MeshGeometryRuntime;
|
|
131
131
|
expect(runtime.webglData).toBeNull();
|
|
132
132
|
expect(runtime.webgpuData).toBeNull();
|
|
133
|
-
expect(runtime.tangentSmoothingSources).toBeNull();
|
|
134
133
|
});
|
|
135
134
|
});
|
|
136
135
|
|
|
@@ -250,6 +249,8 @@ describe('setMeshGeometrySkinBindPose', () => {
|
|
|
250
249
|
positions: new Float32Array(3),
|
|
251
250
|
skinnedNormals: new Float32Array(3),
|
|
252
251
|
skinnedPositions: new Float32Array(3),
|
|
252
|
+
skinnedTangents: new Float32Array(0),
|
|
253
|
+
tangents: new Float32Array(0),
|
|
253
254
|
weights: new Float32Array(4),
|
|
254
255
|
};
|
|
255
256
|
|
|
@@ -284,6 +284,43 @@ describe('getVertexAttributeFloatOffset', () => {
|
|
|
284
284
|
});
|
|
285
285
|
});
|
|
286
286
|
|
|
287
|
+
describe('mesh vertex accessor rejection family', () => {
|
|
288
|
+
it.each([
|
|
289
|
+
['color0', getMeshGeometryVertexColor0],
|
|
290
|
+
['joints0', getMeshGeometryVertexJoints0],
|
|
291
|
+
['weights0', getMeshGeometryVertexWeights0],
|
|
292
|
+
])('leaves four-component output untouched when %s is absent', (_semantic, read) => {
|
|
293
|
+
const out = { w: 7, x: 8, y: 9, z: 10 };
|
|
294
|
+
expect(read(out, makeOneVertex(), 0)).toBe(false);
|
|
295
|
+
expect(out).toEqual({ w: 7, x: 8, y: 9, z: 10 });
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
it.each([
|
|
299
|
+
['normal', getMeshGeometryVertexNormal],
|
|
300
|
+
['position', getMeshGeometryVertexPosition],
|
|
301
|
+
['tangent', getMeshGeometryVertexTangent],
|
|
302
|
+
])('leaves float3/4 output untouched when %s is absent', (_semantic, read) => {
|
|
303
|
+
const out = { w: 7, x: 8, y: 9, z: 10 };
|
|
304
|
+
expect(
|
|
305
|
+
read(out, createMeshGeometry({ layout: { attributes: [], stride: 0 }, vertices: new Float32Array(0) }), 0),
|
|
306
|
+
).toBe(false);
|
|
307
|
+
expect(out).toEqual({ w: 7, x: 8, y: 9, z: 10 });
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('rejects non-float formats, negative/past indices, and zero stride without touching output', () => {
|
|
311
|
+
const packed = createMeshGeometry({
|
|
312
|
+
layout: { attributes: [{ byteOffset: 0, format: 'uint8x4', semantic: 'position' }], stride: 4 },
|
|
313
|
+
vertices: new Float32Array(1),
|
|
314
|
+
});
|
|
315
|
+
const out = { x: 7, y: 8, z: 9 };
|
|
316
|
+
expect(getMeshGeometryVertexPosition(out, packed, 0)).toBe(false);
|
|
317
|
+
expect(out).toEqual({ x: 7, y: 8, z: 9 });
|
|
318
|
+
expect(getMeshGeometryVertexPosition(out, makeOneVertex(), -1)).toBe(false);
|
|
319
|
+
expect(getMeshGeometryVertexPosition(out, makeOneVertex(), 1)).toBe(false);
|
|
320
|
+
expect(out).toEqual({ x: 7, y: 8, z: 9 });
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
|
|
287
324
|
describe('setMeshGeometryVertexColor0', () => {
|
|
288
325
|
it('encodes and versions the declared color storage', () => {
|
|
289
326
|
const geometry = makePackedVertex();
|