@forgeax/engine-geometry 0.1.27 → 0.1.29

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tangent.ts","../src/vertex-attribute-layout.ts","../src/box.ts","../src/assets/mesh-binary.ts","../src/cylinder.ts","../src/plane.ts","../src/sphere.ts","../src/assets/primitive-mesh.ts","../src/assets/mesh-decoder.ts","../src/capsule.ts","../src/cone.ts","../src/dim2.ts","../src/edges.ts","../src/mesh-builder.ts","../src/teapot.ts","../src/torus.ts"],"names":["AssetError","ASSET_ERROR_HINTS","err","ok","invalid","box3","indexArray","cross"],"mappings":"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I,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC9F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA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","file":"index.mjs","sourcesContent":["// @forgeax/engine-runtime - per-vertex tangent (vec4) helper (M4 / w20).\n//\n// Implements the path A formula (LearnOpenGL section 5.4 + glTF 2.0 vec4\n// shape) for procedural geometry: per-triangle UV-derivative tangent ->\n// face-area-weighted average -> Gram-Schmidt re-orthogonalisation against\n// the supplied per-vertex normal -> handedness sign(det(deltaUV)) packed\n// into the .w channel.\n//\n// Output shape: Float32Array (vertexCount * 4) where each vertex is\n// [tx, ty, tz, w] with `.w` in {+1, -1}. The .w sign is forward-compatible\n// with glTF 2.0 spec / MikkTSpace baker (`B = cross(N, T.xyz) * T.w`),\n// satisfying feat-20260518 risk R-4 mitigation (path A vec4 -> path B\n// shader consumption is a no-op switch).\n//\n// Plan-strategy anchors: section 2 D-2 (path A); D-7 (single-file helper to\n// avoid 30-line per-geometry re-implementation -- SSOT #1 + DRY #2).\n// Knowledge-base anchor: .forgeax-harness/knowledge-base/wiki/normal-mapping-and-tbn.md\n// section 2 (math skeleton) and section 2.2 (per-vertex average +\n// handedness). Risk anchor: R-4 (vec4 + .w forward compatibility).\n//\n// Pure function with shared Result/AssetError vocabulary and no mutable state\n// or side effects. Indices may be Uint16Array, Uint32Array, or\n// undefined (sequential 0..vertexCount-1 -- triangle list). Degenerate\n// triangles (zero area UV; det ~ 0) are skipped from the accumulation;\n// Inputs with no valid UV-derived triangle fail closed. Procedural pole/seam\n// vertices may have no local contribution while sharing valid neighboring\n// faces; they retain the established deterministic frame until the material\n// admission layer has mesh-level tangent context.\n\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\n\nconst EPSILON = 1e-8;\n\nfunction tangentInputError(field: string, value: number, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `valid tangent topology: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\nfunction preflightTangentInput(\n positions: Float32Array,\n normals: Float32Array,\n uvs: Float32Array,\n indices: Uint16Array | Uint32Array | undefined,\n): Result<number, AssetError> {\n if (positions.length % 3 !== 0) {\n return err(\n tangentInputError(\n 'positions',\n positions.length,\n 'positions.length must be divisible by the position stride of 3',\n ),\n );\n }\n const vertexCount = positions.length / 3;\n if (normals.length !== vertexCount * 3) {\n return err(\n tangentInputError(\n 'normals',\n normals.length,\n `normals.length must equal vertexCount * 3 (${vertexCount * 3})`,\n ),\n );\n }\n if (uvs.length !== vertexCount * 2) {\n return err(\n tangentInputError(\n 'uvs',\n uvs.length,\n `uvs.length must equal vertexCount * 2 (${vertexCount * 2})`,\n ),\n );\n }\n if (indices === undefined) {\n if (vertexCount % 3 !== 0) {\n return err(\n tangentInputError(\n 'positions',\n vertexCount,\n 'non-indexed vertexCount must be divisible by the triangle size of 3',\n ),\n );\n }\n return ok(vertexCount);\n }\n if (indices.length % 3 !== 0) {\n return err(\n tangentInputError(\n 'indices',\n indices.length,\n 'indices.length must be divisible by the triangle size of 3',\n ),\n );\n }\n for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n const index = indices[indexPosition];\n if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n return err(\n tangentInputError(\n 'indices',\n index ?? -1,\n `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n ),\n );\n }\n }\n return ok(vertexCount);\n}\n\n/**\n * Compute per-vertex tangent (vec4) for a procedural mesh using path A\n * (UV-derivative + face-area-weighted average + Gram-Schmidt + handedness).\n *\n * @param positions Float32Array, vertexCount * 3 (xyz interleaved).\n * @param normals Float32Array, vertexCount * 3 (xyz interleaved); must be\n * pre-normalised by the caller (procedural factories already produce\n * unit-length normals at vertex emit time).\n * @param uvs Float32Array, vertexCount * 2 (uv interleaved).\n * @param indices optional Uint16Array | Uint32Array triangle list; when\n * undefined, sequential triangulation 0,1,2,3,4,5,... is assumed.\n * @returns `Result<Float32Array, AssetError>` with a Float32Array of\n * vertexCount * 4 on success. `.xyz` is the tangent and `.w` is the\n * handedness sign in {+1, -1}; malformed topology returns the existing\n * `asset-parse-failed` AssetError before working or output buffers exist.\n *\n * @remarks\n * Path A formula (per triangle):\n * ```\n * dP1 = p2 - p1; dP2 = p3 - p1\n * dUV1 = uv2 - uv1; dUV2 = uv3 - uv1\n * det = dUV1.u * dUV2.v - dUV2.u * dUV1.v\n * T_face = (dUV2.v * dP1 - dUV1.v * dP2) / det\n * sign = det >= 0 ? +1 : -1\n * ```\n * Per-vertex aggregation: accumulate `T_face * faceArea` into the three\n * vertices of the triangle; accumulate `sign` (the dominant sign per\n * vertex wins). After accumulation: Gram-Schmidt against the supplied\n * normal `T' = normalize(T - dot(T, N) * N)`; repack as vec4 with the\n * dominant handedness sign.\n */\nexport function computeTangentVec4(\n positions: Float32Array,\n normals: Float32Array,\n uvs: Float32Array,\n indices?: Uint16Array | Uint32Array,\n): Result<Float32Array, AssetError> {\n const preflight = preflightTangentInput(positions, normals, uvs, indices);\n if (!preflight.ok) return preflight;\n const vertexCount = preflight.value;\n\n // Working buffers: per-vertex accumulated tangent + accumulated handedness\n // signed weight (sum of (face area * sign(det))). The dominant sign of\n // the running sum is the per-vertex .w handedness.\n const accumT = new Float32Array(vertexCount * 3);\n const accumSign = new Float32Array(vertexCount);\n let validTriangleCount = 0;\n\n const triangleCount = indices !== undefined ? indices.length / 3 : vertexCount / 3;\n\n for (let tri = 0; tri < triangleCount; tri++) {\n const i0 = indices !== undefined ? (indices[tri * 3] ?? 0) : tri * 3;\n const i1 = indices !== undefined ? (indices[tri * 3 + 1] ?? 0) : tri * 3 + 1;\n const i2 = indices !== undefined ? (indices[tri * 3 + 2] ?? 0) : tri * 3 + 2;\n\n const p0x = positions[i0 * 3] ?? 0;\n const p0y = positions[i0 * 3 + 1] ?? 0;\n const p0z = positions[i0 * 3 + 2] ?? 0;\n const p1x = positions[i1 * 3] ?? 0;\n const p1y = positions[i1 * 3 + 1] ?? 0;\n const p1z = positions[i1 * 3 + 2] ?? 0;\n const p2x = positions[i2 * 3] ?? 0;\n const p2y = positions[i2 * 3 + 1] ?? 0;\n const p2z = positions[i2 * 3 + 2] ?? 0;\n\n const u0 = uvs[i0 * 2] ?? 0;\n const v0 = uvs[i0 * 2 + 1] ?? 0;\n const u1 = uvs[i1 * 2] ?? 0;\n const v1 = uvs[i1 * 2 + 1] ?? 0;\n const u2 = uvs[i2 * 2] ?? 0;\n const v2 = uvs[i2 * 2 + 1] ?? 0;\n\n const dP1x = p1x - p0x;\n const dP1y = p1y - p0y;\n const dP1z = p1z - p0z;\n const dP2x = p2x - p0x;\n const dP2y = p2y - p0y;\n const dP2z = p2z - p0z;\n\n const dU1 = u1 - u0;\n const dV1 = v1 - v0;\n const dU2 = u2 - u0;\n const dV2 = v2 - v0;\n\n const det = dU1 * dV2 - dU2 * dV1;\n if (Math.abs(det) < EPSILON) {\n // degenerate UV (collinear / zero-area in UV space); skip\n continue;\n }\n const invDet = 1 / det;\n const tx = invDet * (dV2 * dP1x - dV1 * dP2x);\n const ty = invDet * (dV2 * dP1y - dV1 * dP2y);\n const tz = invDet * (dV2 * dP1z - dV1 * dP2z);\n\n // Face area (cross product magnitude / 2). Used as accumulation weight.\n const cx = dP1y * dP2z - dP1z * dP2y;\n const cy = dP1z * dP2x - dP1x * dP2z;\n const cz = dP1x * dP2y - dP1y * dP2x;\n const faceArea = 0.5 * Math.sqrt(cx * cx + cy * cy + cz * cz);\n if (faceArea < EPSILON) continue;\n validTriangleCount += 1;\n\n const signDet = det >= 0 ? 1 : -1;\n const signedWeight = faceArea * signDet;\n\n for (const vi of [i0, i1, i2]) {\n accumT[vi * 3] = (accumT[vi * 3] ?? 0) + tx * faceArea;\n accumT[vi * 3 + 1] = (accumT[vi * 3 + 1] ?? 0) + ty * faceArea;\n accumT[vi * 3 + 2] = (accumT[vi * 3 + 2] ?? 0) + tz * faceArea;\n accumSign[vi] = (accumSign[vi] ?? 0) + signedWeight;\n }\n }\n\n if (validTriangleCount === 0) {\n return err(\n tangentInputError(\n 'tangent',\n 0,\n 'material-tangent-required: no triangle has a valid UV-derived tangent',\n ),\n );\n }\n\n const out = new Float32Array(vertexCount * 4);\n for (let v = 0; v < vertexCount; v++) {\n let tx = accumT[v * 3] ?? 0;\n let ty = accumT[v * 3 + 1] ?? 0;\n let tz = accumT[v * 3 + 2] ?? 0;\n const nx = normals[v * 3] ?? 0;\n const ny = normals[v * 3 + 1] ?? 0;\n const nz = normals[v * 3 + 2] ?? 0;\n\n const tLen = Math.sqrt(tx * tx + ty * ty + tz * tz);\n if (tLen < EPSILON) {\n const ax = Math.abs(nx);\n const ay = Math.abs(ny);\n const az = Math.abs(nz);\n let rx = 1;\n let ry = 0;\n let rz = 0;\n if (ax > ay && ax > az) {\n rx = 0;\n ry = 1;\n } else if (ay > ax && ay > az) {\n rx = 0;\n rz = 1;\n }\n tx = ny * rz - nz * ry;\n ty = nz * rx - nx * rz;\n tz = nx * ry - ny * rx;\n const fallbackLength = Math.sqrt(tx * tx + ty * ty + tz * tz);\n if (fallbackLength < EPSILON) {\n return err(\n tangentInputError(\n 'tangent',\n v,\n 'material-tangent-required: supplied normal cannot define a tangent frame',\n ),\n );\n }\n tx /= fallbackLength;\n ty /= fallbackLength;\n tz /= fallbackLength;\n } else {\n tx /= tLen;\n ty /= tLen;\n tz /= tLen;\n }\n\n // Gram-Schmidt: T' = normalize(T - dot(T, N) * N)\n const dotTN = tx * nx + ty * ny + tz * nz;\n let gx = tx - dotTN * nx;\n let gy = ty - dotTN * ny;\n let gz = tz - dotTN * nz;\n const gLen = Math.sqrt(gx * gx + gy * gy + gz * gz);\n if (gLen < EPSILON) {\n const ax = Math.abs(nx);\n const ay = Math.abs(ny);\n const az = Math.abs(nz);\n let rx = 1;\n let ry = 0;\n let rz = 0;\n if (ax > ay && ax > az) {\n rx = 0;\n ry = 1;\n } else if (ay > ax && ay > az) {\n rx = 0;\n rz = 1;\n }\n gx = ny * rz - nz * ry;\n gy = nz * rx - nx * rz;\n gz = nx * ry - ny * rx;\n const fallbackLength = Math.sqrt(gx * gx + gy * gy + gz * gz);\n if (fallbackLength < EPSILON) {\n return err(\n tangentInputError(\n 'tangent',\n v,\n 'material-tangent-required: supplied normal cannot define a tangent frame',\n ),\n );\n }\n gx /= fallbackLength;\n gy /= fallbackLength;\n gz /= fallbackLength;\n } else {\n gx /= gLen;\n gy /= gLen;\n gz /= gLen;\n }\n\n const accSign = accumSign[v] ?? 0;\n const w = accSign >= 0 ? 1 : -1;\n\n out[v * 4] = gx;\n out[v * 4 + 1] = gy;\n out[v * 4 + 2] = gz;\n out[v * 4 + 3] = w;\n }\n\n return ok(out);\n}\n","// @forgeax/engine-runtime - Vertex attribute layout SSOT (14-key closed set\n// to GPUVertexBufferLayout derived function).\n//\n// deriveVertexBufferLayout(map, opts?) consumes a partial VertexAttributeMap and produces\n// a fixed-order array of GPUVertexBufferLayout entries — the single source of\n// truth for @location(N) assignment + GPUVertexFormat for every attribute the\n// engine pipeline can consume. Shader WGSL @location(N) declarations and\n// geometry factories are consumers of this SSOT; naga reflection deep-equal\n// tests (T-33 dawn-only) keep them in sync (AC-26 / plan-strategy D-7).\n//\n// Canonical interleaved order (plan-strategy F-1, must match bridge + import layers):\n// position / normal / uv / tangent / skinIndex / skinWeight / uv1..uv7 / color\n//\n// Key index (plan-strategy D-4 / D-7):\n// 0: position -> @location(0) float32x3\n// 1: normal -> @location(1) float32x3\n// 2: uv -> @location(2) float32x2 (set 0)\n// 3: tangent -> @location(3) float32x4\n// 4: skinIndex -> @location(4) uint16x4\n// 5: skinWeight -> @location(5) float32x4\n// 6: uv1 -> @location(6) float32x2 (set 1, fea-20260629 D-4)\n// 7: uv2 -> @location(7) float32x2 (set 2)\n// 8: uv3 -> @location(8) float32x2 (set 3)\n// 9: uv4 -> @location(9) float32x2 (set 4)\n// 10: uv5 -> @location(10) float32x2 (set 5)\n// 11: uv6 -> @location(11) float32x2 (set 6)\n// 12: uv7 -> @location(12) float32x2 (set 7)\n//\n// feat-20260523-skin-skeleton-animation M2 / T-22.\n// feat-20260629-multi-uv-set-support m3-w4: uv1..uv7 + clamp-to-last alias (D-1).\n\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n countUvSets,\n err,\n ok,\n type Result,\n type VertexAttributeMap,\n type VertexAttributePackDetail,\n type VertexAttributeStorage,\n} from '@forgeax/engine-types';\n\nconst ATTRIBUTE_FORMAT_MAP = {\n position: 'float32x3' as const,\n normal: 'float32x3' as const,\n uv: 'float32x2' as const,\n tangent: 'float32x4' as const,\n skinIndex: 'uint16x4' as const,\n skinWeight: 'float32x4' as const,\n uv1: 'float32x2' as const,\n uv2: 'float32x2' as const,\n uv3: 'float32x2' as const,\n uv4: 'float32x2' as const,\n uv5: 'float32x2' as const,\n uv6: 'float32x2' as const,\n uv7: 'float32x2' as const,\n color: 'float32x4' as const,\n} as const;\n\ntype AttributeKey = keyof typeof ATTRIBUTE_FORMAT_MAP;\n\nconst ATTRIBUTE_BYTE_STRIDE: Record<AttributeKey, number> = {\n position: 12,\n normal: 12,\n uv: 8,\n tangent: 16,\n skinIndex: 8,\n skinWeight: 16,\n uv1: 8,\n uv2: 8,\n uv3: 8,\n uv4: 8,\n uv5: 8,\n uv6: 8,\n uv7: 8,\n color: 16,\n};\n\nexport interface GpuVertexBufferLayoutEntry {\n readonly arrayStride: number;\n readonly attributes: ReadonlyArray<{\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: string;\n }>;\n readonly stepMode?: 'vertex' | 'instance' | undefined;\n}\n\nconst isAttributeKey = (key: string): key is AttributeKey => key in ATTRIBUTE_FORMAT_MAP;\n\nconst CANONICAL_KEYS: readonly AttributeKey[] =\n Object.keys(ATTRIBUTE_FORMAT_MAP).filter(isAttributeKey);\nconst UV_KEYS: readonly AttributeKey[] = CANONICAL_KEYS.filter(\n (key) => key === 'uv' || key.startsWith('uv'),\n);\n\ntype Entry = {\n readonly key: AttributeKey;\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: string;\n};\n\nfunction emitAliasEntries(\n entries: Entry[],\n fromIndex: number,\n toIndex: number,\n aliasOffset: number,\n currentStride: number,\n): number {\n for (let k = fromIndex; k < toIndex && k < UV_KEYS.length; k++) {\n // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n const uvKey = UV_KEYS[k]!;\n entries.push({\n key: uvKey,\n shaderLocation: CANONICAL_KEYS.indexOf(uvKey),\n offset: aliasOffset,\n format: ATTRIBUTE_FORMAT_MAP[uvKey],\n });\n }\n // When meshUvSetCount===0, allocate 8 bytes for the zero UV area.\n // Otherwise no stride increase (aliased to existing offset).\n return fromIndex === 0 ? currentStride + ATTRIBUTE_BYTE_STRIDE.uv : currentStride;\n}\n\n/**\n * Build a non-skin `VertexAttributeMap` carrying exactly `uvSetCount` UV sets\n * (set 0 = `uv`, then `uv1..uv{uvSetCount-1}`). `deriveVertexBufferLayout`\n * reads only key presence, so the zero-length typed-array values are sentinels.\n *\n * feat-20260629-multi-uv-set-support: the forward record stage owns only the\n * mesh's `uvSetCount` (a scalar threaded through MeshGpuHandles), not the\n * original `MeshAsset.attributes` map. It synthesizes the map here so the\n * material PSO's vertex layout includes the real @location(6+) attributes and\n * its stride matches the interleaved buffer (a mesh with 2 real UV sets has a\n * 56 B stride; a 48 B PSO layout against it puts every vertex after the first\n * off-screen). uvSetCount <= 1 yields the canonical 4-attribute single-UV map.\n */\nexport function buildMeshAttributeMapForUvSets(uvSetCount: number): VertexAttributeMap {\n const map: Record<string, Float32Array> = {\n position: new Float32Array(0),\n normal: new Float32Array(0),\n uv: new Float32Array(0),\n tangent: new Float32Array(0),\n };\n for (let set = 1; set < uvSetCount && set < UV_KEYS.length; set++) {\n // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n map[UV_KEYS[set]!] = new Float32Array(0);\n }\n return map as unknown as VertexAttributeMap;\n}\n\nexport function deriveVertexBufferLayout(\n map: VertexAttributeMap,\n opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n\n // Process present keys in canonical order; absent keys reserve no space.\n const entries: Entry[] = [];\n let offset = 0;\n\n for (const key of CANONICAL_KEYS) {\n if (map[key] === undefined) continue;\n entries.push({\n key,\n shaderLocation: CANONICAL_KEYS.indexOf(key),\n offset,\n format: ATTRIBUTE_FORMAT_MAP[key],\n });\n offset += ATTRIBUTE_BYTE_STRIDE[key];\n }\n\n const present = entries.length;\n\n // ── clamp-to-last alias (plan-strategy D-1) ──\n if (shaderUvSetCount > 0) {\n const meshUvSetCount = countUvSets(map);\n\n if (shaderUvSetCount > meshUvSetCount) {\n const lastUvIndex = meshUvSetCount - 1;\n const lastUvKey =\n lastUvIndex >= 0 && lastUvIndex < UV_KEYS.length ? UV_KEYS[lastUvIndex] : undefined;\n const aliasOffset = lastUvKey !== undefined ? CANONICAL_KEYS.indexOf(lastUvKey) : -1;\n\n const aliasByteOffset =\n aliasOffset >= 0\n ? (entries.find((e) => e.shaderLocation === aliasOffset)?.offset ?? 0)\n : offset;\n\n offset = emitAliasEntries(entries, meshUvSetCount, shaderUvSetCount, aliasByteOffset, offset);\n }\n }\n\n if (present === 0 && shaderUvSetCount === 0) return [];\n\n // Sort by shaderLocation for deterministic vertex buffer descriptor\n entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n\n return [\n {\n arrayStride: offset,\n attributes: entries.map(({ shaderLocation, offset: entryOffset, format }) => ({\n shaderLocation,\n offset: entryOffset,\n format,\n })),\n },\n ];\n}\n\n/** Build the GPU descriptor from an immutable projection, adding only shader UV aliases. */\nexport function deriveVertexBufferLayoutFromProjection(\n projection: VertexLayoutProjection,\n opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n const entries = projection.attributes.map(({ key, shaderLocation, offset, format }) => ({\n key,\n shaderLocation,\n offset,\n format,\n }));\n let arrayStride = projection.arrayStride;\n const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n if (shaderUvSetCount > 0) {\n const meshUvSetCount = entries.filter(\n (entry) => entry.key === 'uv' || entry.key.startsWith('uv'),\n ).length;\n if (shaderUvSetCount > meshUvSetCount) {\n const lastUv = entries\n .filter((entry) => entry.key === 'uv' || entry.key.startsWith('uv'))\n .at(-1);\n const aliasOffset = lastUv?.offset ?? arrayStride;\n for (\n let index = meshUvSetCount;\n index < shaderUvSetCount && index < UV_KEYS.length;\n index += 1\n ) {\n const key = UV_KEYS[index];\n if (key === undefined) continue;\n entries.push({\n key,\n shaderLocation: CANONICAL_KEYS.indexOf(key),\n offset: aliasOffset,\n format: ATTRIBUTE_FORMAT_MAP[key],\n });\n }\n if (meshUvSetCount === 0) arrayStride += ATTRIBUTE_BYTE_STRIDE.uv;\n }\n }\n entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n return projection.attributes.length === 0\n ? []\n : [\n {\n arrayStride,\n attributes: entries.map(({ shaderLocation, offset, format }) => ({\n shaderLocation,\n offset,\n format,\n })),\n },\n ];\n}\n\nexport interface VertexLayoutProjectionAttribute {\n readonly key: AttributeKey;\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: (typeof ATTRIBUTE_FORMAT_MAP)[AttributeKey];\n readonly byteLength: number;\n}\n\n/** Immutable geometry-owned projection consumed by packers and GPU consumers. */\nexport interface VertexLayoutProjection {\n readonly schemaVersion: 1;\n readonly attributes: readonly VertexLayoutProjectionAttribute[];\n readonly mask: number;\n readonly arrayStride: number;\n readonly digest: string;\n}\n\nfunction bytesForFormat(format: string): number {\n if (format === 'uint16x4' || format === 'float32x2') return 8;\n if (format === 'float32x3') return 12;\n return 16;\n}\n\nfunction storageOf(value: unknown): VertexAttributeStorage {\n if (value instanceof ArrayBuffer) return 'array-buffer';\n if (value instanceof Float32Array) return 'float32';\n if (value instanceof Uint16Array) return 'uint16';\n return 'other';\n}\n\nfunction elementView(\n value: VertexAttributeMap[AttributeKey],\n format: string,\n): Float32Array | Uint16Array | undefined {\n if (value instanceof Float32Array || value instanceof Uint16Array) return value;\n if (value instanceof ArrayBuffer) {\n return format === 'uint16x4' ? new Uint16Array(value) : new Float32Array(value);\n }\n return undefined;\n}\n\nfunction fnv1a(input: string): string {\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n return `vlp-v1-${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\n/** Derive the one canonical immutable layout projection for a vertex map. */\nexport function deriveVertexLayoutProjection(map: VertexAttributeMap): VertexLayoutProjection {\n const attributes: VertexLayoutProjectionAttribute[] = [];\n let offset = 0;\n let mask = 0;\n for (const key of CANONICAL_KEYS) {\n const value = map[key];\n if (value === undefined) continue;\n const format = ATTRIBUTE_FORMAT_MAP[key];\n const byteLength = bytesForFormat(format);\n attributes.push({\n key,\n shaderLocation: CANONICAL_KEYS.indexOf(key),\n offset,\n format,\n byteLength,\n });\n mask |= 1 << CANONICAL_KEYS.indexOf(key);\n offset += byteLength;\n }\n const digestInput = [\n '1',\n String(mask),\n String(offset),\n ...attributes.map(\n (entry) => `${entry.key},${entry.shaderLocation},${entry.offset},${entry.format}`,\n ),\n ].join('|');\n return Object.freeze({\n schemaVersion: 1,\n attributes: Object.freeze(attributes),\n mask,\n arrayStride: offset,\n digest: fnv1a(digestInput),\n });\n}\n\nexport interface PackedVertexAttributes {\n readonly projection: VertexLayoutProjection;\n readonly vertices: Float32Array;\n}\n\nexport class VertexAttributePackError extends AssetError {\n declare readonly detail: VertexAttributePackDetail;\n\n constructor(detail: VertexAttributePackDetail) {\n super({\n code: 'asset-invalid-value',\n expected: 'canonical vertex attributes with matching storage and cardinality',\n hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n detail,\n });\n }\n}\n\nexport interface VertexLayoutProjectionMaskError {\n readonly code: 'vertex-layout-mask-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: {\n readonly mask: number;\n readonly knownMask: number;\n readonly unknownMask: number;\n readonly reason: 'empty' | 'unknown-bits';\n };\n}\n\n/** Rebuild the canonical projection from a packed wire mask without a second schema. */\nexport function deriveVertexLayoutProjectionFromMask(\n mask: number,\n): Result<VertexLayoutProjection, VertexLayoutProjectionMaskError> {\n const knownMask = (1 << CANONICAL_KEYS.length) - 1;\n const unsignedMask = Number.isInteger(mask) && mask >= 0 ? mask >>> 0 : 0xffffffff;\n const unknownMask = unsignedMask & ~knownMask;\n if (mask === 0) {\n return err({\n code: 'vertex-layout-mask-invalid',\n expected: 'a non-empty canonical vertex attribute mask',\n hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n detail: { mask, knownMask, unknownMask, reason: 'empty' },\n });\n }\n if (!Number.isInteger(mask) || mask < 0 || unknownMask !== 0) {\n return err({\n code: 'vertex-layout-mask-invalid',\n expected: `a mask using only canonical bits 0..${CANONICAL_KEYS.length - 1}`,\n hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n detail: { mask, knownMask, unknownMask, reason: 'unknown-bits' },\n });\n }\n const map: Record<string, Float32Array | Uint16Array> = {};\n for (let index = 0; index < CANONICAL_KEYS.length; index += 1) {\n if ((mask & (1 << index)) === 0) continue;\n const key = CANONICAL_KEYS[index];\n if (key !== undefined)\n map[key] = key === 'skinIndex' ? new Uint16Array(0) : new Float32Array(0);\n }\n return ok(deriveVertexLayoutProjection(map as VertexAttributeMap));\n}\n\n/** Pack tightly-owned attributes into the projection's canonical interleaved bytes. */\nexport function packInterleavedVertexAttributes(\n map: VertexAttributeMap,\n vertexCount: number,\n): Result<PackedVertexAttributes, VertexAttributePackError> {\n const invalid = (detail: VertexAttributePackDetail): Result<never, VertexAttributePackError> =>\n err(new VertexAttributePackError(detail));\n if (!Number.isInteger(vertexCount) || vertexCount < 0) {\n return invalid({ field: 'vertexCount', reason: 'vertex-count-invalid', actual: vertexCount });\n }\n const projection = deriveVertexLayoutProjection(map);\n if (projection.attributes.length === 0) {\n return invalid({ field: 'attributes', reason: 'attributes-empty', actualCount: 0 });\n }\n const output = new ArrayBuffer(projection.arrayStride * vertexCount);\n const outputFloats = new Float32Array(output);\n const outputU16 = new Uint16Array(output);\n for (const entry of projection.attributes) {\n const sourceValue = map[entry.key];\n if (sourceValue === undefined) continue;\n const uint16 = entry.format === 'uint16x4';\n const components = entry.byteLength / (uint16 ? 2 : 4);\n const bytesPerComponent = uint16 ? 2 : 4;\n if (sourceValue instanceof ArrayBuffer && sourceValue.byteLength % bytesPerComponent !== 0) {\n return invalid({\n field: entry.key,\n reason: 'attribute-cardinality-mismatch',\n vertexCount,\n componentsPerVertex: components,\n expectedLength: vertexCount * components,\n actualLength: sourceValue.byteLength / bytesPerComponent,\n });\n }\n const source = elementView(sourceValue, entry.format);\n if (\n source === undefined ||\n (uint16\n ? storageOf(sourceValue) !== 'uint16' && storageOf(sourceValue) !== 'array-buffer'\n : storageOf(sourceValue) !== 'float32' && storageOf(sourceValue) !== 'array-buffer')\n ) {\n return invalid({\n field: entry.key,\n reason: 'attribute-storage-invalid',\n expectedStorage: uint16 ? 'uint16' : 'float32',\n actualStorage: storageOf(sourceValue),\n });\n }\n const expectedLength = vertexCount * components;\n if (source.length !== expectedLength) {\n return invalid({\n field: entry.key,\n reason: 'attribute-cardinality-mismatch',\n vertexCount,\n componentsPerVertex: components,\n expectedLength,\n actualLength: source.length,\n });\n }\n if (entry.key === 'color') {\n for (let elementIndex = 0; elementIndex < source.length; elementIndex += 1) {\n const component = source[elementIndex] as number;\n if (!Number.isFinite(component)) {\n return invalid({\n field: 'color',\n reason: 'attribute-non-finite',\n elementIndex,\n actual: Number.isNaN(component)\n ? 'nan'\n : component === Number.POSITIVE_INFINITY\n ? 'positive-infinity'\n : 'negative-infinity',\n });\n }\n }\n }\n for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n for (let component = 0; component < components; component += 1) {\n const sourceIndex = vertex * components + component;\n const byteOffset =\n vertex * projection.arrayStride + entry.offset + component * (uint16 ? 2 : 4);\n if (uint16) outputU16[byteOffset / 2] = Number(source[sourceIndex] ?? 0);\n else outputFloats[byteOffset / 4] = Number(source[sourceIndex] ?? 0);\n }\n }\n }\n return ok(Object.freeze({ projection, vertices: outputFloats }));\n}\n","// @forgeax/engine-runtime - Procedural Box geometry (M3 / w8).\n//\n// Mirrors Three.js r184 BoxGeometry signature: createBoxGeometry(width, height,\n// depth, widthSegments?, heightSegments?, depthSegments?) -> Result<MeshAsset, AssetError>.\n// Degenerate parameters (any dim <= 0 or segment < 1) fail-fast with\n// AssetError({ code: 'asset-parse-failed' }) — charter proposition 4 explicit\n// failure red line (requirements §9 geometry double-semantics for\n// 'asset-parse-failed').\n//\n// Attributes populated: position / normal / uv (Float32Array views of the\n// interleaved `vertices` buffer; 8 floats per vertex). This is the AC-15\n// narrowing anchor: each factory includes a\n// `for (const [key] of Object.entries(attrs))` loop that TypeScript infers as\n// the VertexAttributeMap key union (no `as` cast).\n//\n// Related: requirements §AC-06 / §AC-14 / §AC-15;\n// plan-strategy §M3 + D-P5 (6 procedural geometries lowercase keys);\n// plan-tasks.json w8 acceptanceCheck;\n// research Finding 4 (Three.js r184 BufferGeometry mental migration).\n\nimport { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n ok,\n type Result,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { computeTangentVec4 } from './tangent';\nimport { deriveVertexBufferLayout } from './vertex-attribute-layout';\n\n/**\n * Floats per vertex for the procedural-geometry interleaved buffer that the\n * factory bodies fill in (position(3) + normal(3) + uv(2)). The\n * `meshFromInterleaved` helper expands this into the runtime 12-float\n * (position + normal + uv + tangent) layout consumed by the standard\n * pipeline (feat-20260518 M4 D-10).\n */\nexport const FACTORY_FLOATS_PER_VERTEX = 8;\n\n/**\n * Floats per vertex emitted by the factories' final MeshAsset\n * `vertices` Float32Array buffer: position(3) + normal(3) + uv(2) +\n * tangent(4) = 12. Procedural meshes feed both the standard and unlit\n * pipelines (D-10); BUILTIN_CUBE / TRIANGLE keep their 6-floats inline\n * shape (D-2 lock).\n */\nexport const PROCEDURAL_FLOATS_PER_VERTEX = 12;\n\nfunction interleavedInputError(field: string, value: number, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `valid interleaved triangle topology: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\n/**\n * Build the VertexAttributeMap by binding `position` / `normal` / `uv`\n * Float32Array views over the interleaved `vertices` buffer.\n *\n * AC-15 narrowing anchor: the `for (const [key] of Object.entries(attrs))`\n * loop below sees `key` typed as `'position' | 'normal' | 'uv' | 'tangent' |\n * 'skinIndex' | 'skinWeight' | 'color'` (the VertexAttributeMap key closed\n * set) — no `as` cast anywhere. Any typo (e.g. `'POSITION'`) would be a\n * tsc strict compile-time error (requirements §AC-15 narrowing evidence).\n */\nfunction buildAttributes(vertices: Float32Array, vertexCount: number): VertexAttributeMap {\n const positions = new Float32Array(vertexCount * 3);\n const normals = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const tangents = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n const base = i * PROCEDURAL_FLOATS_PER_VERTEX;\n positions[i * 3 + 0] = vertices[base + 0] as number;\n positions[i * 3 + 1] = vertices[base + 1] as number;\n positions[i * 3 + 2] = vertices[base + 2] as number;\n normals[i * 3 + 0] = vertices[base + 3] as number;\n normals[i * 3 + 1] = vertices[base + 4] as number;\n normals[i * 3 + 2] = vertices[base + 5] as number;\n uvs[i * 2 + 0] = vertices[base + 6] as number;\n uvs[i * 2 + 1] = vertices[base + 7] as number;\n tangents[i * 4 + 0] = vertices[base + 8] as number;\n tangents[i * 4 + 1] = vertices[base + 9] as number;\n tangents[i * 4 + 2] = vertices[base + 10] as number;\n tangents[i * 4 + 3] = vertices[base + 11] as number;\n }\n const attrs: VertexAttributeMap = {\n position: positions,\n normal: normals,\n uv: uvs,\n tangent: tangents,\n };\n // AC-15 narrowing evidence: deriveVertexBufferLayout is the SSOT\n // for the VertexAttributeMap -> GPU vertex layout translation.\n // The call validates that attrs conforms to the closed key set.\n deriveVertexBufferLayout(attrs);\n return attrs;\n}\n\n/**\n * Shared helper: build MeshAsset POD from the factory-emitted 8-floats\n * interleaved buffer (position + normal + uv) plus index list. Computes\n * per-vertex tangent (vec4) via `computeTangentVec4` (M4 / D-2 path A) and\n * expands the buffer to the runtime 12-floats stride (position + normal +\n * uv + tangent). All six procedural factories funnel through this helper\n * so the tangent SSOT lives in `geometry/tangent.ts` (D-7).\n */\nexport function meshFromInterleaved(\n vertices: Float32Array,\n indices: Uint16Array | Uint32Array,\n): Result<MeshAsset, AssetError> {\n if (vertices.length % FACTORY_FLOATS_PER_VERTEX !== 0) {\n return err(\n interleavedInputError(\n 'vertices',\n vertices.length,\n `vertices.length must be divisible by the interleaved stride of ${FACTORY_FLOATS_PER_VERTEX}`,\n ),\n );\n }\n const vertexCount = vertices.length / FACTORY_FLOATS_PER_VERTEX;\n if (indices.length % 3 !== 0) {\n return err(\n interleavedInputError(\n 'indices',\n indices.length,\n 'indices.length must be divisible by the triangle size of 3',\n ),\n );\n }\n for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n const index = indices[indexPosition];\n if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n return err(\n interleavedInputError(\n 'indices',\n index ?? -1,\n `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n ),\n );\n }\n }\n // Slice positions / normals / uvs out of the 8-floats interleaved\n // buffer for the tangent computation. The helper requires them in\n // tight-packed Float32Array form per attribute.\n const positions = new Float32Array(vertexCount * 3);\n const normals = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n for (let i = 0; i < vertexCount; i++) {\n const base = i * FACTORY_FLOATS_PER_VERTEX;\n positions[i * 3 + 0] = vertices[base + 0] as number;\n positions[i * 3 + 1] = vertices[base + 1] as number;\n positions[i * 3 + 2] = vertices[base + 2] as number;\n normals[i * 3 + 0] = vertices[base + 3] as number;\n normals[i * 3 + 1] = vertices[base + 4] as number;\n normals[i * 3 + 2] = vertices[base + 5] as number;\n uvs[i * 2 + 0] = vertices[base + 6] as number;\n uvs[i * 2 + 1] = vertices[base + 7] as number;\n }\n const tangentResult = computeTangentVec4(positions, normals, uvs, indices);\n if (!tangentResult.ok) return tangentResult;\n const tangents = tangentResult.value;\n const expanded = new Float32Array(vertexCount * PROCEDURAL_FLOATS_PER_VERTEX);\n for (let i = 0; i < vertexCount; i++) {\n const dst = i * PROCEDURAL_FLOATS_PER_VERTEX;\n const src = i * FACTORY_FLOATS_PER_VERTEX;\n expanded[dst + 0] = vertices[src + 0] as number;\n expanded[dst + 1] = vertices[src + 1] as number;\n expanded[dst + 2] = vertices[src + 2] as number;\n expanded[dst + 3] = vertices[src + 3] as number;\n expanded[dst + 4] = vertices[src + 4] as number;\n expanded[dst + 5] = vertices[src + 5] as number;\n expanded[dst + 6] = vertices[src + 6] as number;\n expanded[dst + 7] = vertices[src + 7] as number;\n expanded[dst + 8] = tangents[i * 4] as number;\n expanded[dst + 9] = tangents[i * 4 + 1] as number;\n expanded[dst + 10] = tangents[i * 4 + 2] as number;\n expanded[dst + 11] = tangents[i * 4 + 3] as number;\n }\n return ok({\n kind: 'mesh',\n vertices: expanded,\n indices,\n attributes: buildAttributes(expanded, vertexCount),\n submeshes: [\n {\n indexOffset: 0,\n indexCount: indices.length,\n vertexCount,\n topology: 'triangle-list',\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n // Procedural meshes carry their own local-space AABB: after feat-20260614\n // (D-15) `allocSharedRef` stores the payload verbatim -- there is no\n // `withMeshAabb` pass like the old `register`/`catalog` path -- so the cull\n // + pick path can only read an AABB the POD already holds.\n aabb: box3.fromPositions(box3.create(), positions),\n });\n}\n\n/** Shared helper: AssetError for degenerate geometry parameters. */\nexport function degenerate(detail: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `all dimensions > 0; segments >= 1 (${detail})`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n });\n}\n\n/**\n * Build a procedural box geometry aligned with Three.js r184 BoxGeometry.\n *\n * @param width positive X-axis extent\n * @param height positive Y-axis extent\n * @param depth positive Z-axis extent\n * @param widthSegments >= 1 subdivisions along X\n * @param heightSegments >= 1 subdivisions along Y\n * @param depthSegments >= 1 subdivisions along Z\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createBoxGeometry(\n width: number,\n height: number,\n depth: number,\n widthSegments: number = 1,\n heightSegments: number = 1,\n depthSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (width <= 0 || height <= 0 || depth <= 0) {\n return err(degenerate(`width=${width}, height=${height}, depth=${depth}`));\n }\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n const ds = depthSegments | 0;\n if (ws < 1 || hs < 1 || ds < 1) {\n return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}, depthSegments=${ds}`));\n }\n\n type FaceSpec = {\n readonly uAxis: 0 | 1 | 2;\n readonly vAxis: 0 | 1 | 2;\n readonly wAxis: 0 | 1 | 2;\n readonly uSign: 1 | -1;\n readonly vSign: 1 | -1;\n readonly wSign: 1 | -1;\n readonly uSegs: number;\n readonly vSegs: number;\n readonly uSize: number;\n readonly vSize: number;\n readonly wSize: number;\n };\n\n const hw = width / 2;\n const hh = height / 2;\n const hd = depth / 2;\n\n const faces: readonly FaceSpec[] = [\n // +X face\n {\n uAxis: 2,\n vAxis: 1,\n wAxis: 0,\n uSign: -1,\n vSign: 1,\n wSign: 1,\n uSegs: ds,\n vSegs: hs,\n uSize: depth,\n vSize: height,\n wSize: width,\n },\n // -X face\n {\n uAxis: 2,\n vAxis: 1,\n wAxis: 0,\n uSign: 1,\n vSign: 1,\n wSign: -1,\n uSegs: ds,\n vSegs: hs,\n uSize: depth,\n vSize: height,\n wSize: width,\n },\n // +Y face\n {\n uAxis: 0,\n vAxis: 2,\n wAxis: 1,\n uSign: 1,\n vSign: 1,\n wSign: 1,\n uSegs: ws,\n vSegs: ds,\n uSize: width,\n vSize: depth,\n wSize: height,\n },\n // -Y face\n {\n uAxis: 0,\n vAxis: 2,\n wAxis: 1,\n uSign: 1,\n vSign: -1,\n wSign: -1,\n uSegs: ws,\n vSegs: ds,\n uSize: width,\n vSize: depth,\n wSize: height,\n },\n // +Z face\n {\n uAxis: 0,\n vAxis: 1,\n wAxis: 2,\n uSign: 1,\n vSign: 1,\n wSign: 1,\n uSegs: ws,\n vSegs: hs,\n uSize: width,\n vSize: height,\n wSize: depth,\n },\n // -Z face\n {\n uAxis: 0,\n vAxis: 1,\n wAxis: 2,\n uSign: -1,\n vSign: 1,\n wSign: -1,\n uSegs: ws,\n vSegs: hs,\n uSize: width,\n vSize: height,\n wSize: depth,\n },\n ];\n\n let vertexCount = 0;\n let indexCount = 0;\n for (const f of faces) {\n vertexCount += (f.uSegs + 1) * (f.vSegs + 1);\n indexCount += f.uSegs * f.vSegs * 6;\n }\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n let vIdx = 0;\n let iIdx = 0;\n\n const halves: readonly [number, number, number] = [hw, hh, hd];\n\n for (const f of faces) {\n const vStart = vIdx;\n const halfU = halves[f.uAxis] as number;\n const halfV = halves[f.vAxis] as number;\n const halfW = halves[f.wAxis] as number;\n for (let j = 0; j <= f.vSegs; j++) {\n for (let i = 0; i <= f.uSegs; i++) {\n const uCoord = ((i / f.uSegs) * f.uSize - f.uSize / 2) * f.uSign;\n const vCoord = ((j / f.vSegs) * f.vSize - f.vSize / 2) * f.vSign;\n const pos: [number, number, number] = [0, 0, 0];\n pos[f.uAxis] = (uCoord / f.uSize) * halfU * 2;\n pos[f.vAxis] = (vCoord / f.vSize) * halfV * 2;\n pos[f.wAxis] = halfW * f.wSign;\n const normal: [number, number, number] = [0, 0, 0];\n normal[f.wAxis] = f.wSign;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = pos[0];\n vertices[base + 1] = pos[1];\n vertices[base + 2] = pos[2];\n vertices[base + 3] = normal[0];\n vertices[base + 4] = normal[1];\n vertices[base + 5] = normal[2];\n vertices[base + 6] = i / f.uSegs;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = j / f.vSegs;\n vIdx++;\n }\n }\n // bug-20260519: per-face winding correction.\n //\n // The natural quad `(a, b, d) + (a, d, c)` (with a/b/c/d at quad corners\n // bottom-left / bottom-right / top-left / top-right of the (u, v) grid)\n // winds CCW around the direction `(uHat x vHat) * uSign * vSign`. We\n // want CCW around the outward normal `wSign * wHat`. The two agree iff\n // `(uHat x vHat) . wHat * uSign * vSign * wSign == +1`.\n // The first factor is the Levi-Civita symbol of (uAxis, vAxis, wAxis):\n // +1 for cyclic permutations of (0, 1, 2), -1 for anti-cyclic. The\n // 6-face spec at the top of this function lands as:\n // +X / -X: (Z, Y, X) anti-cyclic -> levi = -1\n // +Y / -Y: (X, Z, Y) anti-cyclic -> levi = -1\n // +Z / -Z: (X, Y, Z) cyclic -> levi = +1\n // Combined with the per-face signs the product comes out to +1 for\n // ±X, ±Z (no swap needed) and -1 for ±Y (swap). The swap branch is\n // the diagonally mirrored CCW pair `(a, d, b) + (a, c, d)`.\n const isCyclic = (f.vAxis - f.uAxis + 3) % 3 === 1 && (f.wAxis - f.vAxis + 3) % 3 === 1;\n const levi = isCyclic ? 1 : -1;\n const ccwOutward = levi * f.uSign * f.vSign * f.wSign > 0;\n for (let j = 0; j < f.vSegs; j++) {\n for (let i = 0; i < f.uSegs; i++) {\n const a = vStart + j * (f.uSegs + 1) + i;\n const b = vStart + j * (f.uSegs + 1) + i + 1;\n const c = vStart + (j + 1) * (f.uSegs + 1) + i;\n const d = vStart + (j + 1) * (f.uSegs + 1) + i + 1;\n if (ccwOutward) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = a;\n indices[iIdx++] = d;\n indices[iIdx++] = c;\n } else {\n indices[iIdx++] = a;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = a;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","import {\n decodeMeshBinHeader,\n MESH_BIN_HEADER_V4_BYTES,\n MESH_BIN_VERSION,\n type MeshBinHeaderV4,\n} from '@forgeax/engine-pack';\nimport type {\n AssetGuid,\n MeshAsset,\n MeshMaterialSlot,\n MorphTarget,\n Submesh,\n VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { PROCEDURAL_FLOATS_PER_VERTEX } from '../box';\nimport {\n deriveVertexLayoutProjection,\n deriveVertexLayoutProjectionFromMask,\n type VertexLayoutProjection,\n} from '../vertex-attribute-layout';\n\ninterface PackedMesh {\n readonly version: 4;\n readonly vertices: Float32Array;\n readonly attributes?: VertexAttributeMap;\n readonly indices?: Uint16Array | Uint32Array;\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: readonly {\n readonly slotName: string;\n readonly sourceKey?: string;\n readonly defaultMaterialRef?: number;\n /** Direct Pack JSON keeps the authoring GUID until the producer boundary. */\n readonly defaultMaterial?: string;\n }[];\n readonly aabb?: Float32Array;\n readonly skinIndex?: Uint16Array;\n readonly skinWeight?: Float32Array;\n readonly uvSetCount: number;\n readonly floatsPerVertex: number;\n readonly morphTargets?: readonly MorphTarget[];\n readonly morphWeights?: Float32Array;\n readonly projection?: VertexLayoutProjection;\n}\n\nfunction parseGuid(value: string): AssetGuid | undefined {\n const compact = value.replaceAll('-', '');\n if (!/^[0-9a-f]{32}$/i.test(compact)) return undefined;\n const bytes = new Uint8Array(16);\n for (let index = 0; index < bytes.length; index += 1) {\n const pair = compact.slice(index * 2, index * 2 + 2);\n const parsed = Number.parseInt(pair, 16);\n if (!Number.isInteger(parsed)) return undefined;\n bytes[index] = parsed;\n }\n return bytes as AssetGuid;\n}\n\nfunction floatArray(value: unknown): Float32Array | undefined {\n if (value instanceof Float32Array) return value;\n if (Array.isArray(value)) return new Float32Array(value as number[]);\n return undefined;\n}\n\nfunction indexArray(value: unknown): Uint16Array | Uint32Array | undefined {\n if (value instanceof Uint16Array || value instanceof Uint32Array) {\n return value.length === 0 ? undefined : value;\n }\n if (!Array.isArray(value)) return undefined;\n if (value.length === 0) return undefined;\n return value.some((entry) => entry > 0xffff)\n ? new Uint32Array(value as number[])\n : new Uint16Array(value as number[]);\n}\n\nfunction integerArray(value: unknown): Uint16Array | undefined {\n if (value instanceof Uint16Array) return value;\n if (Array.isArray(value)) return new Uint16Array(value as number[]);\n return undefined;\n}\n\nfunction morphTargets(value: unknown): readonly MorphTarget[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length === 0 || value.length > 8) return undefined;\n const targets: MorphTarget[] = [];\n for (const raw of value) {\n if (raw === null || typeof raw !== 'object') return undefined;\n const target: { position?: Float32Array; normal?: Float32Array; tangent?: Float32Array } = {};\n for (const [key, stream] of Object.entries(raw as Record<string, unknown>)) {\n if (key !== 'position' && key !== 'normal' && key !== 'tangent') return undefined;\n const typed = floatArray(stream);\n if (typed === undefined) return undefined;\n if (key === 'position') target.position = typed;\n else if (key === 'normal') target.normal = typed;\n else target.tangent = typed;\n }\n if (Object.keys(target).length === 0) return undefined;\n targets.push(target);\n }\n return targets;\n}\n\nfunction unpackMeshBinary(bytes: Uint8Array): PackedMesh | undefined {\n const headerResult = decodeMeshBinHeader(bytes);\n if (!headerResult.ok) return undefined;\n const header: MeshBinHeaderV4 = headerResult.value;\n const projectionResult = deriveVertexLayoutProjectionFromMask(header.mask);\n if (!projectionResult.ok) return undefined;\n const projection = projectionResult.value;\n if (\n projection.schemaVersion !== header.projectionVersion ||\n projection.arrayStride !== header.stride ||\n projection.digest !== header.digest\n ) {\n return undefined;\n }\n const payloadBytes = header.vertexBytes + header.indexBytes + header.jsonBytes;\n if (MESH_BIN_HEADER_V4_BYTES + payloadBytes !== bytes.byteLength) return undefined;\n\n let offset = MESH_BIN_HEADER_V4_BYTES;\n const vertexBytes = bytes.subarray(offset, offset + header.vertexBytes);\n const vertices = new Float32Array(vertexBytes.byteLength / 4);\n new Uint8Array(vertices.buffer).set(vertexBytes);\n offset += header.vertexBytes;\n let indices: Uint16Array | Uint32Array | undefined;\n if (header.indexCount > 0) {\n const indexBytes = bytes.subarray(offset, offset + header.indexBytes);\n if (header.indexWidth === 2) {\n indices = new Uint16Array(header.indexCount);\n new Uint8Array(indices.buffer).set(indexBytes);\n } else if (header.indexWidth === 4) {\n indices = new Uint32Array(header.indexCount);\n new Uint8Array(indices.buffer).set(indexBytes);\n } else {\n return undefined;\n }\n offset += header.indexBytes;\n }\n\n let metadata: {\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: PackedMesh['materialSlots'];\n readonly aabb?: readonly number[];\n readonly morphTargets?: readonly Record<string, readonly number[]>[];\n readonly morphWeights?: readonly number[];\n };\n try {\n metadata = JSON.parse(\n new TextDecoder().decode(bytes.subarray(offset, offset + header.jsonBytes)),\n ) as typeof metadata;\n } catch {\n return undefined;\n }\n if (\n metadata.submeshes === undefined ||\n metadata.submeshes.length === 0 ||\n metadata.materialSlots === undefined\n ) {\n return undefined;\n }\n const attributes: Record<string, Float32Array | Uint16Array> = {};\n const view = new DataView(vertices.buffer);\n for (const entry of projection.attributes) {\n const components = entry.byteLength / (entry.format === 'uint16x4' ? 2 : 4);\n const target =\n entry.format === 'uint16x4'\n ? new Uint16Array(header.vertexCount * components)\n : new Float32Array(header.vertexCount * components);\n for (let vertex = 0; vertex < header.vertexCount; vertex += 1) {\n for (let component = 0; component < components; component += 1) {\n const sourceOffset =\n vertex * header.stride + entry.offset + component * (entry.format === 'uint16x4' ? 2 : 4);\n if (sourceOffset + (entry.format === 'uint16x4' ? 2 : 4) > vertices.byteLength) {\n return undefined;\n }\n if (target instanceof Uint16Array) {\n target[vertex * components + component] = view.getUint16(sourceOffset, true);\n } else {\n const value = view.getFloat32(sourceOffset, true);\n if (!Number.isFinite(value)) return undefined;\n target[vertex * components + component] = value;\n }\n }\n }\n attributes[entry.key] = target;\n }\n const decodedMorphTargets = morphTargets(metadata.morphTargets);\n const morphWeightValues =\n metadata.morphWeights === undefined ? undefined : new Float32Array(metadata.morphWeights);\n if (\n decodedMorphTargets !== undefined &&\n morphWeightValues !== undefined &&\n decodedMorphTargets.length !== morphWeightValues.length\n ) {\n return undefined;\n }\n return {\n version: MESH_BIN_VERSION,\n vertices,\n attributes: attributes as VertexAttributeMap,\n projection,\n ...(indices === undefined ? {} : { indices }),\n submeshes: metadata.submeshes,\n materialSlots: metadata.materialSlots,\n ...(metadata.aabb === undefined ? {} : { aabb: new Float32Array(metadata.aabb) }),\n // MeshAsset.vertices remains a Float32Array, so translate the wire stride\n // (bytes) back to the legacy float-count input expected by meshFromParts.\n floatsPerVertex: header.stride / Float32Array.BYTES_PER_ELEMENT,\n uvSetCount: 1,\n ...(decodedMorphTargets === undefined ? {} : { morphTargets: decodedMorphTargets }),\n ...(morphWeightValues === undefined ? {} : { morphWeights: morphWeightValues }),\n };\n}\n\nfunction materialSlotsFor(\n raw: PackedMesh['materialSlots'],\n submeshes: readonly Submesh[],\n refs: readonly string[],\n): readonly MeshMaterialSlot[] {\n if (raw === undefined)\n return submeshes.map((_submesh, index) => ({ slotName: `LegacySlot_${index}` }));\n return raw.map((slot, index) => {\n const reference =\n slot.defaultMaterialRef === undefined ? slot.defaultMaterial : refs[slot.defaultMaterialRef];\n const defaultMaterial = reference === undefined ? undefined : parseGuid(reference);\n return {\n slotName:\n typeof slot.slotName === 'string' && slot.slotName.trim().length > 0\n ? slot.slotName\n : `LegacySlot_${index}`,\n ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n ...(defaultMaterial === undefined ? {} : { defaultMaterial }),\n };\n });\n}\n\nfunction submeshesFor(\n raw: readonly Record<string, unknown>[] | undefined,\n vertexCount: number,\n indexCount: number,\n): readonly Submesh[] {\n const values =\n raw === undefined || raw.length === 0\n ? [{ indexOffset: 0, indexCount, vertexCount, topology: 'triangle-list' }]\n : raw;\n return values.map((value, index) => ({\n indexOffset: typeof value.indexOffset === 'number' ? value.indexOffset : 0,\n indexCount: typeof value.indexCount === 'number' ? value.indexCount : indexCount,\n vertexCount: typeof value.vertexCount === 'number' ? value.vertexCount : vertexCount,\n topology:\n value.topology === 'line-list' ||\n value.topology === 'line-strip' ||\n value.topology === 'point-list' ||\n value.topology === 'triangle-strip'\n ? value.topology\n : 'triangle-list',\n materialSlot: typeof value.materialSlot === 'number' ? value.materialSlot : index,\n }));\n}\n\nfunction deriveAabb(vertices: Float32Array, stride: number): Float32Array | undefined {\n if (stride < 3 || vertices.length < 3 || vertices.length % stride !== 0) return undefined;\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let minZ = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n let maxZ = Number.NEGATIVE_INFINITY;\n for (let offset = 0; offset < vertices.length; offset += stride) {\n const x = vertices[offset];\n const y = vertices[offset + 1];\n const z = vertices[offset + 2];\n if (x === undefined || y === undefined || z === undefined) return undefined;\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n minZ = Math.min(minZ, z);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n maxZ = Math.max(maxZ, z);\n }\n return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ);\n}\n\nfunction meshFromParts(\n parts: {\n readonly vertices: unknown;\n readonly indices?: unknown;\n readonly attributes?: unknown;\n readonly aabb?: unknown;\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: PackedMesh['materialSlots'];\n readonly morphTargets?: unknown;\n readonly morphWeights?: unknown;\n readonly floatsPerVertex?: number;\n readonly uvSetCount?: number;\n },\n refs: readonly string[],\n): MeshAsset | undefined {\n const vertices = floatArray(parts.vertices);\n if (vertices === undefined || vertices.length === 0) return undefined;\n const indices = indexArray(parts.indices);\n const sourceAttributes =\n parts.attributes !== null && typeof parts.attributes === 'object'\n ? (parts.attributes as Record<string, unknown>)\n : {};\n const attributes: VertexAttributeMap = {};\n for (const key of [\n 'position',\n 'normal',\n 'uv',\n 'tangent',\n 'uv1',\n 'uv2',\n 'uv3',\n 'uv4',\n 'uv5',\n 'uv6',\n 'uv7',\n 'color',\n ] as const) {\n const value = floatArray(sourceAttributes[key]);\n if (value !== undefined) attributes[key] = value;\n }\n const skinIndex = integerArray(sourceAttributes.skinIndex);\n const skinWeight = floatArray(sourceAttributes.skinWeight);\n if (skinIndex !== undefined) attributes.skinIndex = skinIndex;\n if (skinWeight !== undefined) attributes.skinWeight = skinWeight;\n const stride = parts.floatsPerVertex ?? 0;\n const vertexCount = stride > 0 ? vertices.length / stride : vertices.length;\n const submeshes = submeshesFor(parts.submeshes, vertexCount, indices?.length ?? 0);\n const materialSlots = materialSlotsFor(parts.materialSlots, submeshes, refs);\n const aabb = floatArray(parts.aabb) ?? deriveAabb(vertices, stride);\n if (aabb === undefined) return undefined;\n const morph = morphTargets(parts.morphTargets);\n const weights = floatArray(parts.morphWeights);\n if (morph !== undefined && weights !== undefined && morph.length !== weights.length)\n return undefined;\n const uvSetCount = parts.uvSetCount ?? 1;\n if (stride > 0 && uvSetCount > 1) {\n const hasSkin = stride === 18 + (uvSetCount - 1) * 2;\n const firstOffset = hasSkin ? 18 : PROCEDURAL_FLOATS_PER_VERTEX;\n const extraUvKeys = ['uv1', 'uv2', 'uv3', 'uv4', 'uv5', 'uv6', 'uv7'] as const;\n for (let set = 1; set < uvSetCount; set += 1) {\n const key = extraUvKeys[set - 1];\n if (key === undefined) return undefined;\n const values = new Float32Array(vertexCount * 2);\n const sourceOffset = firstOffset + (set - 1) * 2;\n for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n const source = vertex * stride + sourceOffset;\n values[vertex * 2] = vertices[source] ?? 0;\n values[vertex * 2 + 1] = vertices[source + 1] ?? 0;\n }\n attributes[key] = values;\n }\n }\n return {\n kind: 'mesh',\n vertices,\n ...(indices === undefined ? {} : { indices }),\n attributes,\n aabb,\n submeshes,\n materialSlots,\n ...(morph === undefined ? {} : { morphTargets: morph }),\n ...(weights === undefined ? {} : { morphWeights: weights }),\n };\n}\n\nexport function decodeMeshBinary(\n bytes: Uint8Array,\n refs: readonly string[],\n): MeshAsset | undefined {\n const decoded = unpackMeshBinary(bytes);\n if (decoded === undefined) return undefined;\n return meshFromParts(\n {\n vertices: decoded.vertices,\n ...(decoded.attributes === undefined ? {} : { attributes: decoded.attributes }),\n ...(decoded.indices === undefined ? {} : { indices: decoded.indices }),\n ...(decoded.aabb === undefined ? {} : { aabb: decoded.aabb }),\n ...(decoded.submeshes === undefined ? {} : { submeshes: decoded.submeshes }),\n ...(decoded.materialSlots === undefined ? {} : { materialSlots: decoded.materialSlots }),\n ...(decoded.morphTargets === undefined ? {} : { morphTargets: decoded.morphTargets }),\n ...(decoded.morphWeights === undefined ? {} : { morphWeights: decoded.morphWeights }),\n ...(decoded.skinIndex === undefined && decoded.skinWeight === undefined\n ? {}\n : {\n attributes: {\n ...(decoded.skinIndex === undefined ? {} : { skinIndex: decoded.skinIndex }),\n ...(decoded.skinWeight === undefined ? {} : { skinWeight: decoded.skinWeight }),\n },\n }),\n floatsPerVertex: decoded.floatsPerVertex,\n uvSetCount: decoded.uvSetCount,\n },\n refs,\n );\n}\n\nexport function normalizeMeshPayload(\n payload: unknown,\n refs: readonly string[],\n): MeshAsset | undefined {\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n const source = payload as Record<string, unknown>;\n if (source.kind !== 'mesh') return undefined;\n const sourceAttributes =\n source.attributes !== null && typeof source.attributes === 'object'\n ? (source.attributes as VertexAttributeMap)\n : undefined;\n const projection =\n sourceAttributes === undefined ? undefined : deriveVertexLayoutProjection(sourceAttributes);\n const floatsPerVertex =\n projection === undefined || projection.attributes.length === 0\n ? PROCEDURAL_FLOATS_PER_VERTEX\n : projection.arrayStride / Float32Array.BYTES_PER_ELEMENT;\n return meshFromParts(\n {\n vertices: source.vertices,\n ...(source.indices === undefined ? {} : { indices: source.indices }),\n ...(source.attributes === undefined ? {} : { attributes: source.attributes }),\n ...(source.aabb === undefined ? {} : { aabb: source.aabb }),\n submeshes: Array.isArray(source.submeshes)\n ? (source.submeshes as Record<string, unknown>[])\n : [],\n ...(Array.isArray(source.materialSlots)\n ? { materialSlots: source.materialSlots as PackedMesh['materialSlots'] }\n : {}),\n ...(source.morphTargets === undefined ? {} : { morphTargets: source.morphTargets }),\n ...(source.morphWeights === undefined ? {} : { morphWeights: source.morphWeights }),\n floatsPerVertex,\n },\n refs,\n );\n}\n","// @forgeax/engine-runtime - Procedural Cylinder geometry (M3 / w8).\n//\n// Mirrors Three.js r184 CylinderGeometry: createCylinderGeometry(radiusTop,\n// radiusBottom, height, radialSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>.\n// Degenerate parameters (both radii <= 0, height <= 0, radialSegments < 3,\n// heightSegments < 1) fail-fast with AssetError('asset-parse-failed').\n// Note: one radius may be zero (degenerate end collapses to a cone tip),\n// but NOT both — a zero cylinder has no surface area.\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createCylinderGeometry(\n radiusTop: number,\n radiusBottom: number,\n height: number,\n radialSegments: number = 16,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (radiusTop < 0 || radiusBottom < 0 || height <= 0) {\n return err(\n degenerate(`radiusTop=${radiusTop}, radiusBottom=${radiusBottom}, height=${height}`),\n );\n }\n if (radiusTop === 0 && radiusBottom === 0) {\n return err(degenerate(`radiusTop=0 and radiusBottom=0; at least one must be > 0`));\n }\n const rs = radialSegments | 0;\n const hs = heightSegments | 0;\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n if (hs < 1) return err(degenerate(`heightSegments=${hs}; minimum 1`));\n\n const halfHeight = height / 2;\n // Side: (rs + 1) * (hs + 1) vertices\n const sideVertexCount = (rs + 1) * (hs + 1);\n // Caps: each cap has 1 center + (rs + 1) ring vertices if the radius is > 0\n const topCap = radiusTop > 0;\n const bottomCap = radiusBottom > 0;\n const topCount = topCap ? rs + 2 : 0;\n const bottomCount = bottomCap ? rs + 2 : 0;\n const vertexCount = sideVertexCount + topCount + bottomCount;\n\n const sideIndexCount = rs * hs * 6;\n const topIdxCount = topCap ? rs * 3 : 0;\n const bottomIdxCount = bottomCap ? rs * 3 : 0;\n const indexCount = sideIndexCount + topIdxCount + bottomIdxCount;\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n // --- side ---\n let vIdx = 0;\n const slope = (radiusBottom - radiusTop) / height;\n for (let iy = 0; iy <= hs; iy++) {\n const v = iy / hs;\n const y = halfHeight - v * height;\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const x = radius * sinT;\n const z = radius * cosT;\n const nx = sinT;\n const ny = slope;\n const nz = cosT;\n // normalize\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < rs; ix++) {\n const a = (rs + 1) * iy + ix;\n const b = (rs + 1) * (iy + 1) + ix;\n const c = (rs + 1) * (iy + 1) + ix + 1;\n const d = (rs + 1) * iy + ix + 1;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n // --- top cap ---\n if (topCap) {\n const centerIdx = vIdx;\n const cBase = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[cBase + 0] = 0;\n vertices[cBase + 1] = halfHeight;\n vertices[cBase + 2] = 0;\n vertices[cBase + 3] = 0;\n vertices[cBase + 4] = 1;\n vertices[cBase + 5] = 0;\n vertices[cBase + 6] = 0.5;\n vertices[cBase + 7] = 0.5;\n vIdx++;\n const ringStart = vIdx;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = radiusTop * sinT;\n vertices[base + 1] = halfHeight;\n vertices[base + 2] = radiusTop * cosT;\n vertices[base + 3] = 0;\n vertices[base + 4] = 1;\n vertices[base + 5] = 0;\n vertices[base + 6] = sinT * 0.5 + 0.5;\n vertices[base + 7] = cosT * 0.5 + 0.5;\n vIdx++;\n }\n for (let ix = 0; ix < rs; ix++) {\n indices[iIdx++] = centerIdx;\n indices[iIdx++] = ringStart + ix;\n indices[iIdx++] = ringStart + ix + 1;\n }\n }\n\n // --- bottom cap ---\n if (bottomCap) {\n const centerIdx = vIdx;\n const cBase = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[cBase + 0] = 0;\n vertices[cBase + 1] = -halfHeight;\n vertices[cBase + 2] = 0;\n vertices[cBase + 3] = 0;\n vertices[cBase + 4] = -1;\n vertices[cBase + 5] = 0;\n vertices[cBase + 6] = 0.5;\n vertices[cBase + 7] = 0.5;\n vIdx++;\n const ringStart = vIdx;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = radiusBottom * sinT;\n vertices[base + 1] = -halfHeight;\n vertices[base + 2] = radiusBottom * cosT;\n vertices[base + 3] = 0;\n vertices[base + 4] = -1;\n vertices[base + 5] = 0;\n vertices[base + 6] = sinT * 0.5 + 0.5;\n vertices[base + 7] = cosT * 0.5 + 0.5;\n vIdx++;\n }\n for (let ix = 0; ix < rs; ix++) {\n indices[iIdx++] = centerIdx;\n indices[iIdx++] = ringStart + ix + 1;\n indices[iIdx++] = ringStart + ix;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","// @forgeax/engine-runtime - Procedural Plane geometry (M3 / w8).\n//\n// Mirrors Three.js r184 PlaneGeometry: createPlaneGeometry(width, height,\n// widthSegments?, heightSegments?) -> Result<MeshAsset, AssetError>. The plane\n// lies on the XY plane with +Z normal (standard three.js orientation).\n// Degenerate parameters fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createPlaneGeometry(\n width: number,\n height: number,\n widthSegments: number = 1,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (width <= 0 || height <= 0) {\n return err(degenerate(`width=${width}, height=${height}`));\n }\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n if (ws < 1 || hs < 1) {\n return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}`));\n }\n\n const halfW = width / 2;\n const halfH = height / 2;\n const gridX1 = ws + 1;\n const gridY1 = hs + 1;\n const segW = width / ws;\n const segH = height / hs;\n\n const vertexCount = gridX1 * gridY1;\n const indexCount = ws * hs * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segH - halfH;\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segW - halfW;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = -y;\n vertices[base + 2] = 0;\n vertices[base + 3] = 0;\n vertices[base + 4] = 0;\n vertices[base + 5] = 1;\n vertices[base + 6] = ix / ws;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = iy / hs;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < ws; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","// @forgeax/engine-runtime - Procedural Sphere geometry (M3 / w8).\n//\n// Mirrors Three.js r184 SphereGeometry signature:\n// createSphereGeometry(radius, widthSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>. Degenerate parameters (radius <= 0, widthSegments\n// < 3, heightSegments < 2) fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createSphereGeometry(\n radius: number,\n widthSegments: number = 16,\n heightSegments: number = 12,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n if (ws < 3) return err(degenerate(`widthSegments=${ws}; minimum 3`));\n if (hs < 2) return err(degenerate(`heightSegments=${hs}; minimum 2`));\n\n const vertexCount = (ws + 1) * (hs + 1);\n const indexCount = ws * hs * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let iy = 0; iy <= hs; iy++) {\n const v = iy / hs;\n const phi = v * Math.PI;\n for (let ix = 0; ix <= ws; ix++) {\n const u = ix / ws;\n const theta = u * Math.PI * 2;\n const x = -radius * Math.cos(theta) * Math.sin(phi);\n const y = radius * Math.cos(phi);\n const z = radius * Math.sin(theta) * Math.sin(phi);\n const nx = x / radius;\n const ny = y / radius;\n const nz = z / radius;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx;\n vertices[base + 4] = ny;\n vertices[base + 5] = nz;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n const stride = ws + 1;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < ws; ix++) {\n const a = iy * stride + ix + 1;\n const b = iy * stride + ix;\n const c = (iy + 1) * stride + ix;\n const d = (iy + 1) * stride + ix + 1;\n if (iy !== 0) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n }\n if (iy !== hs - 1) {\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n\n // trim unused tail (pole rows contribute fewer triangles than the prealloc estimate)\n const trimmed = indices.slice(0, iIdx);\n return meshFromInterleaved(vertices, trimmed);\n}\n","import type { AssetError, MeshAsset, Result } from '@forgeax/engine-types';\nimport { createBoxGeometry, meshFromInterleaved } from '../box';\nimport { createCylinderGeometry } from '../cylinder';\nimport { createPlaneGeometry } from '../plane';\nimport { createSphereGeometry } from '../sphere';\n\nexport type PrimitiveMeshKind =\n | 'cube'\n | 'triangle'\n | 'quad'\n | 'sphere'\n | 'cylinder'\n | 'nine-slice-quad';\n\nconst PROCEDURAL_MESH_KINDS: Readonly<Record<string, PrimitiveMeshKind>> = {\n 'procedural-cube': 'cube',\n 'procedural-triangle': 'triangle',\n 'procedural-quad': 'quad',\n 'procedural-sphere': 'sphere',\n 'procedural-cylinder': 'cylinder',\n 'procedural-nine-slice-quad': 'nine-slice-quad',\n};\n\n/** Create one ordinary mesh payload for allocation or interning by an owning World. */\nexport function createPrimitiveMesh(kind: PrimitiveMeshKind): Result<MeshAsset, AssetError> {\n switch (kind) {\n case 'cube':\n return createBoxGeometry(1, 1, 1);\n case 'triangle':\n return meshFromInterleaved(\n new Float32Array([\n 0, 0.7, 0, 0, 0, 1, 0.5, 1, -0.7, -0.6, 0, 0, 0, 1, 0, 0, 0.7, -0.6, 0, 0, 0, 1, 1, 0,\n ]),\n new Uint16Array([0, 1, 2]),\n );\n case 'quad':\n return createPlaneGeometry(1, 1);\n case 'sphere':\n return createSphereGeometry(1, 16, 12);\n case 'cylinder':\n return createCylinderGeometry(0.5, 0.5, 1, 16, 1);\n case 'nine-slice-quad':\n return createPlaneGeometry(1, 1, 3, 3);\n }\n}\n\n/** Resolve the canonical Pack v2 procedural mesh descriptor without duplicating its alias table. */\nexport function createProceduralMesh(payload: unknown): Result<MeshAsset, AssetError> | undefined {\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n const geometry = (payload as { readonly geometry?: unknown }).geometry;\n if (typeof geometry !== 'string') return undefined;\n const kind = PROCEDURAL_MESH_KINDS[geometry];\n if (kind === undefined) return undefined;\n return createPrimitiveMesh(kind);\n}\n","import {\n type AssetDecoder,\n type AssetDecoderContribution,\n type AssetKind,\n type AssetLoadError,\n err,\n type MeshAsset,\n ok,\n type Result,\n} from '@forgeax/engine-types';\nimport { decodeMeshBinary, normalizeMeshPayload } from './mesh-binary';\nimport { createProceduralMesh } from './primitive-mesh';\n\nexport const meshAssetKind: AssetKind<MeshAsset, 'mesh'> = {\n kind: 'mesh',\n} as AssetKind<MeshAsset, 'mesh'>;\n\nfunction proceduralMesh(payload: unknown): Result<MeshAsset, AssetLoadError> | undefined {\n const result = createProceduralMesh(payload);\n if (result === undefined) return undefined;\n if (result.ok) return result;\n return err({\n code: 'asset-package-invalid',\n expected: result.error.expected,\n hint: 'recook the authored procedural mesh descriptor',\n detail: { guid: '', reason: 'procedural mesh creation failed' },\n });\n}\n\n/** Geometry validates mesh payload shape before any render owner consumes it. */\nexport const meshAssetDecoder: AssetDecoder<MeshAsset> = {\n async decode({ envelope, artifacts }): Promise<Result<MeshAsset, AssetLoadError>> {\n const payload = envelope.payload;\n const procedural = proceduralMesh(payload);\n if (procedural !== undefined) {\n if (!procedural.ok) {\n return err<AssetLoadError>({\n code: 'asset-package-invalid',\n expected: procedural.error.expected,\n hint: procedural.error.hint,\n detail: { guid: envelope.guid, reason: 'procedural mesh creation failed' },\n });\n }\n return procedural;\n }\n const body = envelope.artifacts.body;\n if (body !== undefined) {\n const bytes = await artifacts.read(body);\n if (!bytes.ok) return err<AssetLoadError>(bytes.error);\n const decoded = decodeMeshBinary(bytes.value, envelope.refs);\n if (decoded === undefined) {\n return err({\n code: 'asset-package-invalid',\n expected: 'a valid mesh-binary/4 body artifact with a local-space AABB',\n hint: 'recook the mesh binary and publish its validated geometry payload',\n detail: { guid: envelope.guid, reason: 'mesh binary decode failed' },\n });\n }\n return ok(decoded);\n }\n const normalized = normalizeMeshPayload(payload, envelope.refs);\n if (normalized !== undefined) return ok(normalized);\n if (\n payload.kind !== 'mesh' ||\n !(payload.vertices instanceof Float32Array) ||\n payload.vertices.length === 0 ||\n payload.aabb === undefined\n ) {\n return err({\n code: 'asset-package-invalid',\n expected: 'a mesh payload with vertices and a local-space AABB',\n hint: 'recook the mesh binary and publish its validated geometry payload',\n detail: { guid: envelope.guid, reason: 'mesh payload failed geometry validation' },\n });\n }\n return ok(payload);\n },\n};\n\nexport const meshAssetContribution: AssetDecoderContribution<MeshAsset, 'mesh'> = {\n kind: meshAssetKind,\n decoder: meshAssetDecoder,\n consumer: 'Geometry',\n};\n","// @forgeax/engine-runtime - Procedural Capsule geometry.\n//\n// A capsule is a cylinder mid-band of height `length` capped by two radius-\n// `radius` hemispheres, so the total height is `length + 2 * radius`. The\n// convention matches Bevy `Capsule3d::new(radius, height)` (its `height` is\n// the mid-section; the radius is added to each end) and Three.js r184\n// CapsuleGeometry(radius, length, capSegments, radialSegments).\n//\n// Generation mirrors sphere.ts's ring sweep rather than composing separate\n// cylinder + sphere meshes (no mesh-merge primitive exists): a single\n// top-to-bottom latitude sweep emits the top hemisphere (offset +halfLength),\n// the two equator rings that bound the cylinder band, and the bottom\n// hemisphere (offset -halfLength). Consecutive rings are stitched by the same\n// quad connector sphere.ts uses, so the vertical wall between the equator\n// rings is filled with no dedicated cylinder code. Per-vertex normals are\n// `normalize(pos - hemisphereCenter)` (radial on the caps, horizontal on the\n// wall) so the surface is seam-free by construction.\n//\n// Degenerate parameters (radius <= 0, length < 0, capSegments < 1,\n// radialSegments < 3) fail-fast with AssetError('asset-parse-failed'),\n// matching the 6 sibling factories.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\n/**\n * Build a procedural capsule geometry aligned with Bevy `Capsule3d` /\n * Three.js r184 CapsuleGeometry.\n *\n * @param radius hemisphere + cylinder radius (> 0)\n * @param length cylinder mid-section height (>= 0; total height = length + 2*radius)\n * @param capSegments latitude bands per hemisphere (>= 1); default 4\n * @param radialSegments longitudes around the axis (>= 3); default 8\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createCapsuleGeometry(\n radius: number,\n length: number,\n capSegments: number = 4,\n radialSegments: number = 8,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (length < 0) return err(degenerate(`length=${length}`));\n const cs = capSegments | 0;\n const rs = radialSegments | 0;\n if (cs < 1) return err(degenerate(`capSegments=${cs}; minimum 1`));\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n\n const halfLength = length / 2;\n // Latitude rows: cs+1 for the top hemisphere (0..pi/2) and cs+1 for the\n // bottom (pi/2..pi). The equator is shared: the top's last row and the\n // bottom's first row are BOTH at the equator radius but at y=+halfLength\n // and y=-halfLength respectively (they coincide only when length===0).\n // Total rows = 2*(cs+1); the middle quad band between the two equator rows\n // becomes the cylinder wall.\n const latRows = 2 * (cs + 1);\n const vertexCount = latRows * (rs + 1);\n const indexCount = (latRows - 1) * rs * 6;\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n // Emit rows top -> bottom. `row` in [0, latRows-1]. The first cs+1 rows are\n // the top hemisphere (phi 0..pi/2, center y=+halfLength); the last cs+1 rows\n // are the bottom hemisphere (phi pi/2..pi, center y=-halfLength).\n for (let row = 0; row < latRows; row++) {\n const topHemi = row <= cs;\n // Ring radius + y from hemisphere-local latitude so the caps are exact\n // hemispheres and the two equator rings sit at y=+-halfLength.\n let ringR: number;\n let y: number;\n let centerY: number;\n if (topHemi) {\n const t = row / cs; // 0 at north pole, 1 at equator\n const a = t * (Math.PI / 2);\n ringR = radius * Math.sin(a);\n centerY = halfLength;\n y = centerY + radius * Math.cos(a);\n } else {\n const t = (row - (cs + 1)) / cs; // 0 at equator (bottom), 1 at south pole\n const a = t * (Math.PI / 2);\n ringR = radius * Math.cos(a);\n centerY = -halfLength;\n y = centerY - radius * Math.sin(a);\n }\n // v texture coord: monotonic 0..1 top->bottom across all rows.\n const v = row / (latRows - 1);\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const x = ringR * sinT;\n const z = ringR * cosT;\n // Normal = normalize(pos - hemisphereCenter): radial on caps, horizontal\n // on the equatorial wall (cos component is 0 there).\n const nx = x;\n const ny = y - centerY;\n const nz = z;\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n const stride = rs + 1;\n for (let row = 0; row < latRows - 1; row++) {\n for (let ix = 0; ix < rs; ix++) {\n const a = row * stride + ix + 1;\n const b = row * stride + ix;\n const c = (row + 1) * stride + ix;\n const d = (row + 1) * stride + ix + 1;\n // Skip the collapsed triangles at the two poles (row 0 north, last row\n // south) exactly as sphere.ts does — a degenerate ring has zero-area\n // triangles on one side of each quad.\n const northPoleRow = row === 0;\n const southPoleRow = row === latRows - 2;\n if (!northPoleRow) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n }\n if (!southPoleRow) {\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n\n const trimmed = indices.slice(0, iIdx);\n return meshFromInterleaved(vertices, trimmed);\n}\n","// @forgeax/engine-runtime - Procedural Cone geometry (M3 / w8).\n//\n// Mirrors Three.js r184 ConeGeometry: createConeGeometry(radius, height,\n// radialSegments?, heightSegments?) -> Result<MeshAsset, AssetError>.\n// Cone is the cylinder-with-top-radius=0 degenerate, delegated directly.\n// Byte-identical output to createCylinderGeometry(0, radius, height, ...)\n// by contract (test in geometry.test.ts enforces the equivalence).\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate } from './box';\nimport { createCylinderGeometry } from './cylinder';\n\nexport function createConeGeometry(\n radius: number,\n height: number,\n radialSegments: number = 16,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (height <= 0) return err(degenerate(`height=${height}`));\n return createCylinderGeometry(0, radius, height, radialSegments, heightSegments);\n}\n","import { box2, box3, circle2 } from '@forgeax/engine-math';\nimport type { AssetError, MeshAsset, PrimitiveTopology } from '@forgeax/engine-types';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { degenerate, PROCEDURAL_FLOATS_PER_VERTEX } from './box';\n\nexport type Vec2 = readonly [number, number];\n\nexport type Shape2d =\n | { readonly kind: 'circle'; readonly radius: number; readonly resolution?: number }\n | {\n readonly kind: 'circular-sector';\n readonly radius: number;\n readonly angle: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'circular-segment';\n readonly radius: number;\n readonly angle: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'ellipse';\n readonly halfWidth: number;\n readonly halfHeight: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'annulus';\n readonly innerRadius: number;\n readonly outerRadius: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'capsule';\n readonly radius: number;\n readonly halfLength: number;\n readonly resolution?: number;\n }\n | { readonly kind: 'rhombus'; readonly halfWidth: number; readonly halfHeight: number }\n | { readonly kind: 'rectangle'; readonly width: number; readonly height: number }\n | { readonly kind: 'regular-polygon'; readonly radius: number; readonly sides: number }\n | { readonly kind: 'triangle'; readonly vertices: readonly [Vec2, Vec2, Vec2] }\n | { readonly kind: 'segment'; readonly vertices: readonly [Vec2, Vec2] }\n | { readonly kind: 'polyline'; readonly vertices: readonly Vec2[] };\n\nexport type Shape2dPose = {\n readonly translation?: Vec2;\n readonly rotation?: number;\n};\n\nexport type Shape2dMeshOptions = {\n readonly uv?: { readonly kind: 'circular-mask'; readonly angle: number };\n};\n\nexport type Shape2dBounds = {\n readonly aabb: box2.Box2;\n readonly circle: circle2.Circle2;\n};\n\ntype UvProjection = {\n readonly kind: 'circular-mask';\n readonly radius: number;\n readonly angle: number;\n};\n\nconst DEFAULT_RESOLUTION = 32;\n\nfunction invalid(detail: string): Result<never, AssetError> {\n return err(degenerate(detail));\n}\n\nfunction resolution(value: number | undefined): number | undefined {\n const resolved = value ?? DEFAULT_RESOLUTION;\n const integer = resolved | 0;\n return integer >= 3 && integer === resolved ? integer : undefined;\n}\n\nfunction finitePoint(point: Vec2): boolean {\n return Number.isFinite(point[0]) && Number.isFinite(point[1]);\n}\n\nfunction maskRadius(shape: Shape2d): number | undefined {\n switch (shape.kind) {\n case 'circle':\n case 'circular-sector':\n case 'circular-segment':\n return shape.radius;\n case 'ellipse':\n case 'annulus':\n case 'capsule':\n case 'rhombus':\n case 'rectangle':\n case 'regular-polygon':\n case 'triangle':\n case 'segment':\n case 'polyline':\n return undefined;\n }\n}\n\nfunction validateMeshOptions(\n shape: Shape2d,\n options: Shape2dMeshOptions | undefined,\n): Result<UvProjection | undefined, AssetError> {\n const uv = options?.uv;\n if (uv === undefined) return ok(undefined);\n const radius = maskRadius(shape);\n return radius !== undefined && radius > 0 && Number.isFinite(uv.angle)\n ? ok({ kind: 'circular-mask', radius, angle: uv.angle })\n : invalid(`circular-mask UV requires a circular shape and finite angle`);\n}\n\nfunction area(points: readonly Vec2[]): number {\n let value = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n if (!a || !b) continue;\n value += a[0] * b[1] - b[0] * a[1];\n }\n return value / 2;\n}\n\nfunction centroid(points: readonly Vec2[]): Vec2 {\n let x = 0;\n let y = 0;\n for (const point of points) {\n x += point[0];\n y += point[1];\n }\n const count = Math.max(1, points.length);\n return [x / count, y / count];\n}\n\nfunction counterClockwise(points: readonly Vec2[]): Vec2[] {\n return area(points) < 0 ? [...points].reverse() : [...points];\n}\n\nfunction circleBoundary(radius: number, count: number, start = -Math.PI / 2): Vec2[] {\n return Array.from({ length: count }, (_, i) => {\n const angle = start + (i / count) * Math.PI * 2;\n return [Math.cos(angle) * radius, Math.sin(angle) * radius] as const;\n });\n}\n\nfunction arcBoundary(radius: number, angle: number, count: number, start: number): Vec2[] {\n return Array.from({ length: count + 1 }, (_, i) => {\n const t = i / count;\n const current = start + angle * t;\n return [Math.cos(current) * radius, Math.sin(current) * radius] as const;\n });\n}\n\nfunction ellipseBoundary(halfWidth: number, halfHeight: number, count: number): Vec2[] {\n return Array.from({ length: count }, (_, i) => {\n const angle = -Math.PI / 2 + (i / count) * Math.PI * 2;\n return [Math.cos(angle) * halfWidth, Math.sin(angle) * halfHeight] as const;\n });\n}\n\nfunction capsuleBoundary(radius: number, halfLength: number, count: number): Vec2[] {\n const points: Vec2[] = [];\n for (let i = 0; i <= count; i++) {\n const angle = (i / count) * Math.PI;\n points.push([Math.cos(angle) * radius, halfLength + Math.sin(angle) * radius]);\n }\n for (let i = 0; i <= count; i++) {\n const angle = Math.PI + (i / count) * Math.PI;\n points.push([Math.cos(angle) * radius, -halfLength + Math.sin(angle) * radius]);\n }\n points.pop();\n points.shift();\n return points;\n}\n\nfunction buildMesh(\n points: readonly Vec2[],\n indices: readonly number[],\n topology: PrimitiveTopology,\n uvProjection?: UvProjection,\n): MeshAsset {\n const positions = new Float32Array(points.length * 3);\n const normals = new Float32Array(points.length * 3);\n const uvs = new Float32Array(points.length * 2);\n const tangents = new Float32Array(points.length * 4);\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const point of points) {\n minX = Math.min(minX, point[0]);\n minY = Math.min(minY, point[1]);\n maxX = Math.max(maxX, point[0]);\n maxY = Math.max(maxY, point[1]);\n }\n\n const width = Math.max(maxX - minX, 1);\n const height = Math.max(maxY - minY, 1);\n const vertices = new Float32Array(points.length * PROCEDURAL_FLOATS_PER_VERTEX);\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n if (!point) continue;\n const [x, y] = point;\n const positionOffset = i * 3;\n const uvOffset = i * 2;\n const tangentOffset = i * 4;\n const vertexOffset = i * PROCEDURAL_FLOATS_PER_VERTEX;\n positions[positionOffset] = x;\n positions[positionOffset + 1] = y;\n normals[positionOffset + 2] = 1;\n const cos = uvProjection === undefined ? 1 : Math.cos(uvProjection.angle);\n const sin = uvProjection === undefined ? 0 : Math.sin(uvProjection.angle);\n const projectedX = x * cos - y * sin;\n const projectedY = x * sin + y * cos;\n const u =\n uvProjection === undefined\n ? (x - minX) / width\n : 0.5 + projectedX / (2 * uvProjection.radius);\n const v =\n uvProjection === undefined\n ? (maxY - y) / height\n : 0.5 - projectedY / (2 * uvProjection.radius);\n uvs[uvOffset] = u;\n uvs[uvOffset + 1] = v;\n tangents[tangentOffset] = 1;\n tangents[tangentOffset + 3] = 1;\n vertices[vertexOffset] = x;\n vertices[vertexOffset + 1] = y;\n vertices[vertexOffset + 5] = 1;\n vertices[vertexOffset + 6] = u;\n vertices[vertexOffset + 7] = v;\n vertices[vertexOffset + 8] = 1;\n vertices[vertexOffset + 11] = 1;\n }\n\n return {\n kind: 'mesh',\n vertices,\n indices: new Uint32Array(indices),\n attributes: { position: positions, normal: normals, uv: uvs, tangent: tangents },\n submeshes: [\n {\n indexOffset: 0,\n indexCount: indices.length,\n vertexCount: points.length,\n topology,\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n aabb: box3.fromPositions(box3.create(), positions),\n };\n}\n\nfunction fill(points: readonly Vec2[], uvProjection?: UvProjection): MeshAsset {\n const boundary = counterClockwise(points);\n const center = centroid(boundary);\n const vertices = [center, ...boundary];\n const indices: number[] = [];\n for (let i = 0; i < boundary.length; i++) {\n const next = (i + 1) % boundary.length;\n indices.push(0, i + 1, next + 1);\n }\n return buildMesh(vertices, indices, 'triangle-list', uvProjection);\n}\n\nfunction ring(outer: readonly Vec2[], inner: readonly Vec2[]): MeshAsset {\n const outside = counterClockwise(outer);\n const inside = counterClockwise(inner);\n const count = Math.min(outside.length, inside.length);\n const vertices = [...outside.slice(0, count), ...inside.slice(0, count)];\n const indices: number[] = [];\n for (let i = 0; i < count; i++) {\n const next = (i + 1) % count;\n indices.push(i, next, count + i, next, count + next, count + i);\n }\n return buildMesh(vertices, indices, 'triangle-list');\n}\n\nfunction segment(points: readonly Vec2[]): MeshAsset {\n const indices: number[] = [];\n for (let i = 0; i + 1 < points.length; i += 1) indices.push(i, i + 1);\n return buildMesh(points, indices, 'line-list');\n}\n\nfunction shapeBoundary(shape: Shape2d, count: number): Vec2[] | undefined {\n switch (shape.kind) {\n case 'circle':\n return circleBoundary(shape.radius, count);\n case 'circular-sector':\n return [\n ...arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2),\n [0, 0],\n ];\n case 'circular-segment':\n return arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2);\n case 'ellipse':\n return ellipseBoundary(shape.halfWidth, shape.halfHeight, count);\n case 'capsule':\n return capsuleBoundary(shape.radius, shape.halfLength, Math.max(2, Math.floor(count / 2)));\n case 'rhombus':\n return [\n [0, shape.halfHeight],\n [shape.halfWidth, 0],\n [0, -shape.halfHeight],\n [-shape.halfWidth, 0],\n ];\n case 'rectangle':\n return [\n [-shape.width / 2, -shape.height / 2],\n [shape.width / 2, -shape.height / 2],\n [shape.width / 2, shape.height / 2],\n [-shape.width / 2, shape.height / 2],\n ];\n case 'regular-polygon':\n return Array.from({ length: shape.sides }, (_, i) => {\n const angle = -Math.PI / 2 + (i / shape.sides) * Math.PI * 2;\n return [Math.cos(angle) * shape.radius, Math.sin(angle) * shape.radius] as const;\n });\n case 'triangle':\n return [...shape.vertices];\n case 'annulus':\n case 'segment':\n case 'polyline':\n return undefined;\n }\n}\n\nfunction scaleAround(points: readonly Vec2[], factor: number): Vec2[] {\n const center = centroid(points);\n return points.map(([x, y]) => [\n center[0] + (x - center[0]) * factor,\n center[1] + (y - center[1]) * factor,\n ]);\n}\n\nfunction withResolution(\n value: number | undefined,\n valid: boolean,\n detail: string,\n): Result<number, AssetError> {\n const count = resolution(value);\n return valid && count !== undefined ? ok(count) : invalid(detail);\n}\n\nfunction validateCommon(shape: Shape2d): Result<number, AssetError> {\n switch (shape.kind) {\n case 'circle':\n return withResolution(\n shape.resolution,\n shape.radius > 0 && Number.isFinite(shape.radius),\n `circle radius=${shape.radius}, resolution=${shape.resolution}`,\n );\n case 'circular-sector':\n case 'circular-segment':\n return withResolution(\n shape.resolution,\n shape.radius > 0 &&\n shape.angle > 0 &&\n shape.angle <= Math.PI * 2 &&\n Number.isFinite(shape.radius) &&\n Number.isFinite(shape.angle),\n `${shape.kind} radius=${shape.radius}, angle=${shape.angle}, resolution=${shape.resolution}`,\n );\n case 'ellipse':\n return withResolution(\n shape.resolution,\n shape.halfWidth > 0 &&\n shape.halfHeight > 0 &&\n Number.isFinite(shape.halfWidth) &&\n Number.isFinite(shape.halfHeight),\n `ellipse halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}, resolution=${shape.resolution}`,\n );\n case 'annulus':\n return withResolution(\n shape.resolution,\n shape.innerRadius >= 0 &&\n shape.outerRadius > shape.innerRadius &&\n Number.isFinite(shape.innerRadius) &&\n Number.isFinite(shape.outerRadius),\n `annulus innerRadius=${shape.innerRadius}, outerRadius=${shape.outerRadius}, resolution=${shape.resolution}`,\n );\n case 'capsule':\n return withResolution(\n shape.resolution,\n shape.radius > 0 &&\n shape.halfLength >= 0 &&\n Number.isFinite(shape.radius) &&\n Number.isFinite(shape.halfLength),\n `capsule radius=${shape.radius}, halfLength=${shape.halfLength}, resolution=${shape.resolution}`,\n );\n case 'rhombus':\n return shape.halfWidth > 0 &&\n shape.halfHeight > 0 &&\n Number.isFinite(shape.halfWidth) &&\n Number.isFinite(shape.halfHeight)\n ? ok(0)\n : invalid(`rhombus halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}`);\n case 'rectangle':\n return shape.width > 0 &&\n shape.height > 0 &&\n Number.isFinite(shape.width) &&\n Number.isFinite(shape.height)\n ? ok(0)\n : invalid(`rectangle width=${shape.width}, height=${shape.height}`);\n case 'regular-polygon':\n return shape.radius > 0 &&\n Number.isFinite(shape.radius) &&\n Number.isInteger(shape.sides) &&\n shape.sides >= 3\n ? ok(0)\n : invalid(`regular-polygon radius=${shape.radius}, sides=${shape.sides}`);\n case 'triangle':\n return shape.vertices.every(finitePoint) && Math.abs(area(shape.vertices)) > 1e-7\n ? ok(0)\n : invalid('triangle vertices must be finite and non-collinear');\n case 'segment':\n return shape.vertices.every(finitePoint) &&\n (shape.vertices[0][0] !== shape.vertices[1][0] ||\n shape.vertices[0][1] !== shape.vertices[1][1])\n ? ok(0)\n : invalid('segment endpoints must be finite and distinct');\n case 'polyline':\n return shape.vertices.length >= 2 && shape.vertices.every(finitePoint)\n ? ok(0)\n : invalid('polyline needs at least two finite vertices');\n }\n}\n\nexport function create2dGeometry(\n shape: Shape2d,\n options?: Shape2dMeshOptions,\n): Result<MeshAsset, AssetError> {\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n const meshOptions = validateMeshOptions(shape, options);\n if (!meshOptions.ok) return meshOptions;\n if (shape.kind === 'segment' || shape.kind === 'polyline') return ok(segment(shape.vertices));\n if (shape.kind === 'annulus') {\n const outer = circleBoundary(shape.outerRadius, checked.value);\n const inner = circleBoundary(shape.innerRadius, checked.value);\n return ok(ring(outer, inner));\n }\n const points = shapeBoundary(shape, checked.value);\n if (!points) return invalid(`unsupported 2d shape kind=${shape.kind}`);\n return ok(fill(points, meshOptions.value));\n}\n\nfunction boundsPoints(shape: Shape2d, count: number): Vec2[] | undefined {\n if (shape.kind === 'annulus') return circleBoundary(shape.outerRadius, count);\n if (shape.kind === 'segment' || shape.kind === 'polyline') return [...shape.vertices];\n return shapeBoundary(shape, count);\n}\n\nexport function compute2dBounds(\n shape: Shape2d,\n pose: Shape2dPose = {},\n): Result<Shape2dBounds, AssetError> {\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n const translation = pose.translation ?? [0, 0];\n const rotation = pose.rotation ?? 0;\n if (!finitePoint(translation) || !Number.isFinite(rotation)) {\n return invalid('2d bounds pose must contain finite translation and rotation');\n }\n const points = boundsPoints(shape, checked.value);\n if (points === undefined || points.length === 0)\n return invalid(`unsupported 2d bounds kind=${shape.kind}`);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const transformed = points.map(\n ([x, y]) => [translation[0] + x * cos - y * sin, translation[1] + x * sin + y * cos] as const,\n );\n let radius = 0;\n for (const [x, y] of points) radius = Math.max(radius, Math.hypot(x, y));\n return ok({\n aabb: box2.fromPoints(box2.create(), transformed),\n circle: circle2.create(translation[0], translation[1], radius),\n });\n}\n\nexport function create2dRingGeometry(\n shape: Shape2d,\n thickness: number,\n resolutionOverride?: number,\n): Result<MeshAsset, AssetError> {\n if (!(thickness > 0) || !Number.isFinite(thickness))\n return invalid(`ring thickness=${thickness}`);\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n if (shape.kind === 'segment' || shape.kind === 'polyline' || shape.kind === 'annulus') {\n return invalid(`rings require a closed non-annulus shape, got ${shape.kind}`);\n }\n const count = resolutionOverride === undefined ? checked.value : resolution(resolutionOverride);\n if (count === undefined) return invalid(`ring resolution=${resolutionOverride}`);\n const outer = shapeBoundary(shape, count);\n if (!outer) return invalid(`unsupported ring shape kind=${shape.kind}`);\n const extent = Math.max(...outer.map(([x, y]) => Math.hypot(x, y)));\n const factor = (extent - thickness) / extent;\n if (!(factor > 1e-5))\n return invalid(`ring thickness=${thickness} exceeds shape extent=${extent}`);\n return ok(ring(outer, scaleAround(outer, factor)));\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n ok,\n type Result,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nconst WELD_EPSILON = 1e-4;\nconst DEFAULT_THRESHOLD_DEGREES = 1;\n\ntype Vec3 = readonly [number, number, number];\n\ninterface Endpoint {\n readonly value: Vec3;\n readonly exactKey: string;\n readonly weldKey: string;\n}\n\ninterface Triangle {\n readonly a: Endpoint;\n readonly b: Endpoint;\n readonly c: Endpoint;\n readonly normal: Vec3;\n}\n\ninterface PreparedMesh {\n readonly triangles: readonly Triangle[];\n}\n\ninterface WireEdge {\n readonly a: Endpoint;\n readonly b: Endpoint;\n}\n\ninterface SurfaceEdge {\n readonly aWeldKey: string;\n readonly bWeldKey: string;\n a: Endpoint;\n b: Endpoint;\n readonly normals: Vec3[];\n}\n\nfunction parseFailure(field: string, value: unknown, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `a valid triangle-list MeshAsset: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\nfunction f32Bits(value: number): number {\n const buffer = new ArrayBuffer(4);\n new Float32Array(buffer)[0] = value;\n return new Uint32Array(buffer)[0] as number;\n}\n\nfunction normalizedValue(value: number): number {\n return value === 0 ? 0 : value;\n}\n\nfunction exactKey(value: Vec3): string {\n return value\n .map((component) => f32Bits(normalizedValue(component)).toString(16).padStart(8, '0'))\n .join(':');\n}\n\nfunction weldComponent(value: number): string {\n const scaled = normalizedValue(value) / WELD_EPSILON;\n return String(Math.round(scaled));\n}\n\nfunction weldKey(value: Vec3): string {\n return value.map(weldComponent).join(':');\n}\n\nfunction endpoint(position: Vec3): Endpoint {\n const value: Vec3 = [\n normalizedValue(position[0]),\n normalizedValue(position[1]),\n normalizedValue(position[2]),\n ];\n return { value, exactKey: exactKey(value), weldKey: weldKey(value) };\n}\n\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareEndpoint(left: Endpoint, right: Endpoint): number {\n return compareText(left.exactKey, right.exactKey);\n}\n\nfunction compareWireEdge(left: WireEdge, right: WireEdge): number {\n return compareEndpoint(left.a, right.a) || compareEndpoint(left.b, right.b);\n}\n\nfunction compareSurfaceEdge(left: SurfaceEdge, right: SurfaceEdge): number {\n return compareText(left.aWeldKey, right.aWeldKey) || compareText(left.bWeldKey, right.bWeldKey);\n}\n\nfunction readPosition(raw: Float32Array | ArrayBuffer): Float32Array {\n return raw instanceof Float32Array ? raw : new Float32Array(raw);\n}\n\nfunction validatePosition(source: MeshAsset): Result<Float32Array, AssetError> {\n if (source === null || typeof source !== 'object' || source.kind !== 'mesh') {\n return err(parseFailure('kind', source?.kind, 'kind must be mesh'));\n }\n const attributes = source.attributes;\n const raw = attributes?.position;\n if (raw === undefined) {\n return err(parseFailure('attributes.position', undefined, 'position is required'));\n }\n if (raw instanceof ArrayBuffer) {\n if (raw.byteLength % 4 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n raw.byteLength,\n 'ArrayBuffer byte length must align to f32',\n ),\n );\n }\n } else if (!(raw instanceof Float32Array)) {\n return err(\n parseFailure(\n 'attributes.position',\n raw === null ? null : typeof raw,\n 'position storage must be Float32Array or ArrayBuffer',\n ),\n );\n }\n const position = readPosition(raw);\n if (position.length % 3 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n position.length,\n 'position length must be divisible by 3',\n ),\n );\n }\n for (let index = 0; index < position.length; index += 1) {\n const value = position[index] as number;\n if (!Number.isFinite(value)) {\n return err(parseFailure('attributes.position', value, `position[${index}] must be finite`));\n }\n }\n return ok(position);\n}\n\nfunction validateThreshold(threshold: number): Result<number, AssetError> {\n if (!Number.isFinite(threshold) || threshold < 0 || threshold > 180) {\n return err(\n parseFailure('thresholdAngleDegrees', threshold, 'threshold must be finite and in [0, 180]'),\n );\n }\n return ok(threshold);\n}\n\nfunction validateSubmeshShape(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n if (!Array.isArray(source.submeshes) || source.submeshes.length === 0) {\n return err(parseFailure('submeshes', source.submeshes, 'at least one submesh is required'));\n }\n const indexed = source.indices !== undefined;\n if (!indexed && source.submeshes.length !== 1) {\n return err(\n parseFailure('submeshes', source.submeshes.length, 'non-indexed meshes require one submesh'),\n );\n }\n if (!indexed && positionCount % 3 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n positionCount,\n 'non-indexed positions require triangle cardinality',\n ),\n );\n }\n for (let index = 0; index < source.submeshes.length; index += 1) {\n const submesh = source.submeshes[index];\n if (submesh === undefined || submesh === null || submesh.topology !== 'triangle-list') {\n return err(\n parseFailure(\n `submeshes[${index}].topology`,\n submesh?.topology,\n 'topology must be triangle-list',\n ),\n );\n }\n if (!Number.isInteger(submesh.indexOffset) || submesh.indexOffset < 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexOffset`,\n submesh.indexOffset,\n 'index offset must be a non-negative integer',\n ),\n );\n }\n if (!Number.isInteger(submesh.indexCount) || submesh.indexCount < 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'index count must be a non-negative integer',\n ),\n );\n }\n if (\n !Number.isInteger(submesh.vertexCount) ||\n submesh.vertexCount < 0 ||\n submesh.vertexCount > positionCount\n ) {\n return err(\n parseFailure(\n `submeshes[${index}].vertexCount`,\n submesh.vertexCount,\n 'vertex count must be an integer within position count',\n ),\n );\n }\n if (submesh.indexCount % 3 !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'index count must be divisible by 3',\n ),\n );\n }\n if (!indexed && submesh.indexOffset !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexOffset`,\n submesh.indexOffset,\n 'non-indexed submesh index offset must be zero',\n ),\n );\n }\n if (!indexed && submesh.indexCount !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'non-indexed submesh index count must be zero',\n ),\n );\n }\n if (!indexed && submesh.vertexCount !== positionCount) {\n return err(\n parseFailure(\n `submeshes[${index}].vertexCount`,\n submesh.vertexCount,\n 'non-indexed submesh must span all positions',\n ),\n );\n }\n }\n return ok(undefined);\n}\n\nfunction validateIndices(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n const indices = source.indices;\n if (indices === undefined) return ok(undefined);\n if (!(indices instanceof Uint16Array) && !(indices instanceof Uint32Array)) {\n return err(\n parseFailure('indices', indices, 'indices storage must be Uint16Array or Uint32Array'),\n );\n }\n for (let index = 0; index < source.submeshes.length; index += 1) {\n const submesh = source.submeshes[index];\n if (submesh === undefined) continue;\n if (submesh.indexOffset + submesh.indexCount > indices.length) {\n return err(\n parseFailure(`submeshes[${index}]`, submesh, 'submesh index range exceeds indices length'),\n );\n }\n for (\n let offset = submesh.indexOffset;\n offset < submesh.indexOffset + submesh.indexCount;\n offset += 1\n ) {\n const value = indices[offset] as number;\n if (!Number.isInteger(value) || value < 0 || value >= positionCount) {\n return err(\n parseFailure(`indices[${offset}]`, value, 'index must address a position vertex'),\n );\n }\n }\n }\n return ok(undefined);\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction subtract(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction triangleNormal(a: Vec3, b: Vec3, c: Vec3): Vec3 | undefined {\n const normal = cross(subtract(b, a), subtract(c, a));\n const length = Math.hypot(normal[0], normal[1], normal[2]);\n if (!Number.isFinite(length) || length === 0) return undefined;\n return [normal[0] / length, normal[1] / length, normal[2] / length];\n}\n\nfunction positionAt(position: Float32Array, index: number): Vec3 {\n const base = index * 3;\n return [position[base] as number, position[base + 1] as number, position[base + 2] as number];\n}\n\nfunction makeTriangle(\n position: Float32Array,\n indices: readonly [number, number, number],\n): Triangle | undefined {\n const a = endpoint(positionAt(position, indices[0]));\n const b = endpoint(positionAt(position, indices[1]));\n const c = endpoint(positionAt(position, indices[2]));\n const normal = triangleNormal(a.value, b.value, c.value);\n return normal === undefined ? undefined : { a, b, c, normal };\n}\n\nfunction collectTriangles(source: MeshAsset, position: Float32Array): Triangle[] {\n const triangles: Triangle[] = [];\n for (const submesh of source.submeshes) {\n if (source.indices === undefined) {\n for (let offset = 0; offset < submesh.vertexCount; offset += 3) {\n const triangle = makeTriangle(position, [offset, offset + 1, offset + 2]);\n if (triangle !== undefined) triangles.push(triangle);\n }\n continue;\n }\n for (\n let offset = submesh.indexOffset;\n offset < submesh.indexOffset + submesh.indexCount;\n offset += 3\n ) {\n const a = source.indices[offset] as number;\n const b = source.indices[offset + 1] as number;\n const c = source.indices[offset + 2] as number;\n const triangle = makeTriangle(position, [a, b, c]);\n if (triangle !== undefined) triangles.push(triangle);\n }\n }\n return triangles;\n}\n\nfunction prepare(source: MeshAsset, threshold?: number): Result<PreparedMesh, AssetError> {\n const positionResult = validatePosition(source);\n if (!positionResult.ok) return positionResult;\n if (threshold !== undefined) {\n const thresholdResult = validateThreshold(threshold);\n if (!thresholdResult.ok) return thresholdResult;\n }\n const submeshResult = validateSubmeshShape(source, positionResult.value.length / 3);\n if (!submeshResult.ok) return submeshResult;\n const indexResult = validateIndices(source, positionResult.value.length / 3);\n if (!indexResult.ok) return indexResult;\n return ok({ triangles: collectTriangles(source, positionResult.value) });\n}\n\nfunction addWireEdge(edges: Map<string, WireEdge>, left: Endpoint, right: Endpoint): void {\n if (left.exactKey === right.exactKey) return;\n const [a, b] = compareEndpoint(left, right) < 0 ? [left, right] : [right, left];\n const key = `${a.exactKey}|${b.exactKey}`;\n if (!edges.has(key)) edges.set(key, { a, b });\n}\n\nfunction collectWireEdges(triangles: readonly Triangle[]): WireEdge[] {\n const edges = new Map<string, WireEdge>();\n for (const triangle of triangles) {\n addWireEdge(edges, triangle.a, triangle.b);\n addWireEdge(edges, triangle.b, triangle.c);\n addWireEdge(edges, triangle.c, triangle.a);\n }\n return Array.from(edges.values()).sort(compareWireEdge);\n}\n\nfunction updateRepresentative(current: Endpoint, candidate: Endpoint): Endpoint {\n return compareEndpoint(candidate, current) < 0 ? candidate : current;\n}\n\nfunction addSurfaceEdge(\n edges: Map<string, SurfaceEdge>,\n left: Endpoint,\n right: Endpoint,\n normal: Vec3,\n): void {\n if (left.weldKey === right.weldKey) return;\n const leftFirst = compareText(left.weldKey, right.weldKey) < 0;\n const a = leftFirst ? left : right;\n const b = leftFirst ? right : left;\n const key = `${a.weldKey}|${b.weldKey}`;\n const current = edges.get(key);\n if (current === undefined) {\n edges.set(key, {\n aWeldKey: a.weldKey,\n bWeldKey: b.weldKey,\n a,\n b,\n normals: [normal],\n });\n return;\n }\n current.a = updateRepresentative(current.a, a);\n current.b = updateRepresentative(current.b, b);\n current.normals.push(normal);\n}\n\nfunction collectSurfaceEdges(triangles: readonly Triangle[]): SurfaceEdge[] {\n const edges = new Map<string, SurfaceEdge>();\n for (const triangle of triangles) {\n addSurfaceEdge(edges, triangle.a, triangle.b, triangle.normal);\n addSurfaceEdge(edges, triangle.b, triangle.c, triangle.normal);\n addSurfaceEdge(edges, triangle.c, triangle.a, triangle.normal);\n }\n return Array.from(edges.values()).sort(compareSurfaceEdge);\n}\n\nfunction keepSurfaceEdge(edge: SurfaceEdge, thresholdDegrees: number): boolean {\n if (edge.normals.length !== 2) return true;\n const first = edge.normals[0];\n const second = edge.normals[1];\n if (first === undefined || second === undefined) return true;\n const dot = Math.min(\n 1,\n Math.max(-1, first[0] * second[0] + first[1] * second[1] + first[2] * second[2]),\n );\n return dot <= Math.cos((thresholdDegrees * Math.PI) / 180);\n}\n\nfunction lineMesh(edges: readonly WireEdge[]): Result<MeshAsset, AssetError> {\n const positions = new Float32Array(edges.length * 6);\n for (let edgeIndex = 0; edgeIndex < edges.length; edgeIndex += 1) {\n const edge = edges[edgeIndex] as WireEdge;\n positions.set(edge.a.value, edgeIndex * 6);\n positions.set(edge.b.value, edgeIndex * 6 + 3);\n }\n const vertexCount = positions.length / 3;\n const attributes: VertexAttributeMap = {\n position: positions,\n normal: new Float32Array(vertexCount * 3),\n uv: new Float32Array(vertexCount * 2),\n tangent: new Float32Array(vertexCount * 4),\n };\n const packed = packInterleavedVertexAttributes(attributes, vertexCount);\n if (!packed.ok) return err(packed.error);\n return ok({\n kind: 'mesh',\n vertices: packed.value.vertices,\n attributes,\n submeshes: [\n {\n indexOffset: 0,\n indexCount: 0,\n vertexCount,\n topology: 'line-list',\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n aabb: box3.fromPositions(box3.create(), positions),\n });\n}\n\n/** Convert every unique exact triangle edge into a sorted non-indexed line carrier. */\nexport function createWireframeGeometry(source: MeshAsset): Result<MeshAsset, AssetError> {\n const prepared = prepare(source);\n if (!prepared.ok) return prepared;\n return lineMesh(collectWireEdges(prepared.value.triangles));\n}\n\n/** Convert boundary, non-manifold, and threshold-surviving surface edges into a line carrier. */\nexport function createEdgesGeometry(\n source: MeshAsset,\n thresholdAngleDegrees: number = DEFAULT_THRESHOLD_DEGREES,\n): Result<MeshAsset, AssetError> {\n const prepared = prepare(source, thresholdAngleDegrees);\n if (!prepared.ok) return prepared;\n const edges = collectSurfaceEdges(prepared.value.triangles).filter((edge) =>\n keepSurfaceEdge(edge, thresholdAngleDegrees),\n );\n return lineMesh(edges.map(({ a, b }) => ({ a, b })));\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n type MeshMaterialSlot,\n ok,\n type PrimitiveTopology,\n type Result,\n type Submesh,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nconst ATTRIBUTE_KEYS = [\n 'position',\n 'normal',\n 'uv',\n 'tangent',\n 'skinIndex',\n 'skinWeight',\n 'uv1',\n 'uv2',\n 'uv3',\n 'uv4',\n 'uv5',\n 'uv6',\n 'uv7',\n 'color',\n] as const satisfies readonly (keyof VertexAttributeMap)[];\n\ntype AttributeKey = (typeof ATTRIBUTE_KEYS)[number];\ntype AttributeSource = NonNullable<VertexAttributeMap[AttributeKey]>;\ntype AttributeView = Float32Array | Uint16Array;\n\nconst ATTRIBUTE_COMPONENTS: Readonly<Record<AttributeKey, number>> = {\n position: 3,\n normal: 3,\n uv: 2,\n tangent: 4,\n skinIndex: 4,\n skinWeight: 4,\n uv1: 2,\n uv2: 2,\n uv3: 2,\n uv4: 2,\n uv5: 2,\n uv6: 2,\n uv7: 2,\n color: 4,\n};\n\nconst TOPOLOGIES: readonly PrimitiveTopology[] = [\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n];\n\n/** Input shape for one independently drawn submesh. */\nexport type MeshBuilderSubmesh = Partial<Submesh> & {\n readonly topology?: PrimitiveTopology;\n};\n\n/** All authoring facts accepted by {@link createMeshBuilder}. */\nexport interface MeshBuilderOptions {\n readonly attributes?: VertexAttributeMap;\n readonly indices?: ArrayLike<number>;\n readonly submeshes?: readonly MeshBuilderSubmesh[];\n readonly materialSlots?: readonly MeshMaterialSlot[];\n}\n\nexport interface MeshBuilder {\n /** Append one equally-cardinal attribute batch to the accumulated source. */\n appendVertices(attributes: VertexAttributeMap): Result<void, AssetError>;\n /** Append raw index values; width is derived during build. */\n appendIndices(indices: ArrayLike<number>): Result<void, AssetError>;\n /** Add a draw range; omitted ranges are completed from the final source. */\n addSubmesh(submesh: MeshBuilderSubmesh): Result<void, AssetError>;\n /** Derive one immutable MeshAsset from the accumulated source. */\n build(): Result<MeshAsset, AssetError>;\n}\n\nfunction failure(field: string, value: unknown, reason: string): Result<never, AssetError> {\n return err(\n new AssetError({\n code: 'asset-invalid-value',\n expected: `valid MeshBuilder ${field}: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n detail: { field, value, reason },\n }),\n );\n}\n\nfunction sourceView(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n if (key === 'skinIndex') {\n if (value instanceof Uint16Array) return value;\n if (value instanceof ArrayBuffer && value.byteLength % Uint16Array.BYTES_PER_ELEMENT === 0) {\n return new Uint16Array(value);\n }\n return undefined;\n }\n if (value instanceof Float32Array) return value;\n if (value instanceof ArrayBuffer && value.byteLength % Float32Array.BYTES_PER_ELEMENT === 0) {\n return new Float32Array(value);\n }\n return undefined;\n}\n\nfunction cloneAttribute(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n const view = sourceView(key, value);\n if (view === undefined) return undefined;\n return view.slice();\n}\n\nfunction attributeKeys(attributes: VertexAttributeMap): AttributeKey[] {\n return ATTRIBUTE_KEYS.filter((key) => attributes[key] !== undefined);\n}\n\nfunction appendArray(target: AttributeView, source: AttributeView): AttributeView {\n if (target instanceof Uint16Array && source instanceof Uint16Array) {\n const output = new Uint16Array(target.length + source.length);\n output.set(target, 0);\n output.set(source, target.length);\n return output;\n }\n if (target instanceof Float32Array && source instanceof Float32Array) {\n const output = new Float32Array(target.length + source.length);\n output.set(target, 0);\n output.set(source, target.length);\n return output;\n }\n // The caller groups batches by canonical key, so this branch only protects\n // against an internally inconsistent future storage change.\n return target;\n}\n\nfunction copySlots(slots: readonly MeshMaterialSlot[] | undefined): MeshMaterialSlot[] {\n return (slots ?? [{ slotName: 'Default' }]).map((slot) => ({\n slotName: slot.slotName,\n ...(slot.sourceKey === undefined ? {} : { sourceKey: slot.sourceKey }),\n ...(slot.defaultMaterial === undefined ? {} : { defaultMaterial: slot.defaultMaterial }),\n }));\n}\n\nfunction validateAttributeBatch(\n attributes: VertexAttributeMap,\n): Result<{ readonly keys: readonly AttributeKey[]; readonly vertexCount: number }, AssetError> {\n const keys = attributeKeys(attributes);\n if (keys.length === 0)\n return failure('attributes', [], 'at least one canonical attribute is required');\n const position = attributes.position;\n if (position === undefined)\n return failure('attributes.position', undefined, 'position is required');\n const positionView = sourceView('position', position);\n if (positionView === undefined) {\n return failure(\n 'attributes.position',\n typeof position,\n 'position must use Float32Array or ArrayBuffer',\n );\n }\n if (positionView.length === 0 || positionView.length % 3 !== 0) {\n return failure(\n 'attributes.position',\n positionView.length,\n 'position cardinality must be a non-zero multiple of 3',\n );\n }\n const vertexCount = positionView.length / 3;\n for (const key of keys) {\n const value = attributes[key];\n if (value === undefined) continue;\n const view = sourceView(key, value);\n if (view === undefined) {\n return failure(\n key,\n typeof value,\n key === 'skinIndex' ? 'storage must be Uint16Array' : 'storage must be Float32Array',\n );\n }\n const expectedLength = vertexCount * ATTRIBUTE_COMPONENTS[key];\n if (view.length !== expectedLength) {\n return failure(key, view.length, `cardinality must be ${expectedLength}`);\n }\n for (let elementIndex = 0; elementIndex < view.length; elementIndex += 1) {\n const valueAt = view[elementIndex];\n if (valueAt === undefined || !Number.isFinite(valueAt)) {\n return failure(key, valueAt, `${key}[${elementIndex}] must be finite`);\n }\n if (key === 'skinIndex' && (!Number.isInteger(valueAt) || valueAt < 0 || valueAt > 0xffff)) {\n return failure(key, valueAt, `${key}[${elementIndex}] must be an integer in [0, 65535]`);\n }\n }\n }\n return ok({ keys, vertexCount });\n}\n\nfunction validateSlots(slots: readonly MeshMaterialSlot[]): Result<void, AssetError> {\n if (slots.length === 0)\n return failure('materialSlots', slots.length, 'at least one material slot is required');\n const names = new Set<string>();\n for (let index = 0; index < slots.length; index += 1) {\n const slot = slots[index];\n const name = slot?.slotName.trim() ?? '';\n if (name.length === 0 || names.has(name)) {\n return failure(`materialSlots[${index}].slotName`, name, 'must be non-empty and unique');\n }\n names.add(name);\n }\n return ok(undefined);\n}\n\nfunction completedSubmeshes(\n requested: readonly MeshBuilderSubmesh[],\n vertexCount: number,\n indexCount: number,\n materialSlotCount: number,\n): Result<readonly Submesh[], AssetError> {\n const source =\n requested.length === 0\n ? [\n {\n indexOffset: 0,\n indexCount,\n vertexCount,\n topology: 'triangle-list' as const,\n materialSlot: 0,\n },\n ]\n : requested;\n const output: Submesh[] = [];\n for (let index = 0; index < source.length; index += 1) {\n const candidate = source[index];\n if (candidate === undefined)\n return failure(`submeshes[${index}]`, undefined, 'entry is required');\n const indexOffset = candidate.indexOffset ?? 0;\n const submeshIndexCount = candidate.indexCount ?? (indexCount > 0 ? indexCount : 0);\n const submeshVertexCount = candidate.vertexCount ?? vertexCount;\n const topology = candidate.topology ?? 'triangle-list';\n const materialSlot = candidate.materialSlot ?? index;\n if (!TOPOLOGIES.includes(topology)) {\n return failure(\n `submeshes[${index}].topology`,\n topology,\n 'must be a WebGPU primitive topology',\n );\n }\n if (\n !Number.isInteger(indexOffset) ||\n indexOffset < 0 ||\n !Number.isInteger(submeshIndexCount) ||\n submeshIndexCount < 0 ||\n !Number.isInteger(submeshVertexCount) ||\n submeshVertexCount < 0 ||\n submeshVertexCount > vertexCount ||\n !Number.isInteger(materialSlot) ||\n materialSlot < 0 ||\n materialSlot >= materialSlotCount\n ) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'range and material slot are invalid',\n );\n }\n if (indexCount === 0 && (indexOffset !== 0 || submeshIndexCount !== 0)) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'non-indexed meshes use indexOffset=0 and indexCount=0',\n );\n }\n if (indexCount > 0 && indexOffset + submeshIndexCount > indexCount) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'index range exceeds the accumulated index buffer',\n );\n }\n if (indexCount === 0 && (topology === 'line-strip' || topology === 'triangle-strip')) {\n return failure(\n `submeshes[${index}].topology`,\n topology,\n 'strip topology requires an index buffer',\n );\n }\n output.push({\n indexOffset,\n indexCount: submeshIndexCount,\n vertexCount: submeshVertexCount,\n topology,\n materialSlot,\n });\n }\n return ok(Object.freeze(output));\n}\n\n/**\n * Create a geometry-owned builder. All derived facts are computed once in\n * `build()` from the accumulated canonical attribute source.\n */\nexport function createMeshBuilder(options: MeshBuilderOptions = {}): MeshBuilder {\n const attributes: Partial<Record<AttributeKey, AttributeView>> = {};\n const indices: number[] = [];\n const submeshes: MeshBuilderSubmesh[] = [];\n const materialSlots = copySlots(options.materialSlots);\n\n const appendVertices = (batch: VertexAttributeMap): Result<void, AssetError> => {\n const checked = validateAttributeBatch(batch);\n if (!checked.ok) return checked;\n const incomingKeys = checked.value.keys;\n const existingKeys = ATTRIBUTE_KEYS.filter((key) => attributes[key] !== undefined);\n if (existingKeys.length > 0 && existingKeys.join('|') !== incomingKeys.join('|')) {\n return failure(\n 'attributes',\n incomingKeys.join(','),\n 'every appended batch must carry the same canonical keys',\n );\n }\n for (const key of incomingKeys) {\n const value = batch[key];\n if (value === undefined) continue;\n const cloned = cloneAttribute(key, value);\n if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n const previous = attributes[key];\n attributes[key] = previous === undefined ? cloned : appendArray(previous, cloned);\n }\n return ok(undefined);\n };\n\n const appendIndices = (batch: ArrayLike<number>): Result<void, AssetError> => {\n for (let index = 0; index < batch.length; index += 1) {\n const value = Number(batch[index]);\n if (!Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n return failure('indices', value, `indices[${index}] must be an integer in [0, 2^32-1]`);\n }\n indices.push(value);\n }\n return ok(undefined);\n };\n\n const addSubmesh = (submesh: MeshBuilderSubmesh): Result<void, AssetError> => {\n if (submesh === null || typeof submesh !== 'object') {\n return failure('submeshes', submesh, 'entry must be an object');\n }\n submeshes.push({ ...submesh });\n return ok(undefined);\n };\n\n const build = (): Result<MeshAsset, AssetError> => {\n const source = attributes as VertexAttributeMap;\n const checked = validateAttributeBatch(source);\n if (!checked.ok) return checked;\n const slotCheck = validateSlots(materialSlots);\n if (!slotCheck.ok) return slotCheck;\n const vertexCount = checked.value.vertexCount;\n const position = source.position;\n if (position === undefined)\n return failure('attributes.position', undefined, 'position is required');\n const positionView = sourceView('position', position);\n if (!(positionView instanceof Float32Array)) {\n return failure('attributes.position', typeof position, 'position storage is invalid');\n }\n\n let maxIndex = 0;\n for (const value of indices) maxIndex = Math.max(maxIndex, value);\n const indexArray =\n indices.length === 0\n ? undefined\n : maxIndex <= 0xffff\n ? new Uint16Array(indices)\n : new Uint32Array(indices);\n if (indexArray !== undefined) {\n for (let index = 0; index < indexArray.length; index += 1) {\n const value = indexArray[index];\n if (value === undefined || value >= vertexCount) {\n return failure(\n 'indices',\n value ?? -1,\n `indices[${index}] must be less than vertexCount (${vertexCount})`,\n );\n }\n }\n }\n\n const packed = packInterleavedVertexAttributes(source, vertexCount);\n if (!packed.ok) return packed;\n const ranges = completedSubmeshes(\n submeshes,\n vertexCount,\n indexArray?.length ?? 0,\n materialSlots.length,\n );\n if (!ranges.ok) return ranges;\n const aabb = box3.fromPositions(box3.create(), positionView);\n const copiedAttributes: VertexAttributeMap = {};\n for (const key of checked.value.keys) {\n const value = source[key];\n if (value === undefined) continue;\n const cloned = cloneAttribute(key, value);\n if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n if (key === 'skinIndex') {\n if (!(cloned instanceof Uint16Array)) {\n return failure(key, typeof value, 'skinIndex storage must be Uint16Array');\n }\n copiedAttributes.skinIndex = cloned;\n } else {\n if (!(cloned instanceof Float32Array)) {\n return failure(key, typeof value, `${key} storage must be Float32Array`);\n }\n copiedAttributes[key] = cloned;\n }\n }\n const mesh: MeshAsset = {\n kind: 'mesh',\n vertices: packed.value.vertices.slice(),\n ...(indexArray === undefined ? {} : { indices: indexArray.slice() }),\n attributes: copiedAttributes,\n aabb: Float32Array.from(aabb),\n submeshes: ranges.value,\n materialSlots: Object.freeze(materialSlots.map((slot) => ({ ...slot }))),\n };\n return ok(Object.freeze(mesh));\n };\n\n if (options.attributes !== undefined) {\n const result = appendVertices(options.attributes);\n if (!result.ok) {\n // Keep construction side-effect free; the structured error is surfaced\n // by build() because the builder itself intentionally has no throw path.\n const constructionError = result.error;\n return {\n appendVertices,\n appendIndices,\n addSubmesh,\n build: () => err(constructionError),\n };\n }\n }\n if (options.indices !== undefined) {\n const result = appendIndices(options.indices);\n if (!result.ok) {\n const constructionError = result.error;\n return {\n appendVertices,\n appendIndices,\n addSubmesh,\n build: () => err(constructionError),\n };\n }\n }\n for (const submesh of options.submeshes ?? []) submeshes.push({ ...submesh });\n return { appendVertices, appendIndices, addSubmesh, build };\n}\n","// Exact Utah teapot patch tessellation ported from Three.js TeapotGeometry.\n// Source: three.js ad005397bbd15b0a9fcd5159c782eba56e1cba2a, examples/jsm/geometries/TeapotGeometry.js\n// Three.js is MIT licensed; this file preserves the upstream attribution.\n\nimport type { MeshAsset } from '@forgeax/engine-types';\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\nimport { FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nconst PATCHES = new Uint16Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3, 16, 17, 18, 7, 19, 20, 21, 11, 22, 23,\n 24, 15, 25, 26, 27, 18, 28, 29, 30, 21, 31, 32, 33, 24, 34, 35, 36, 27, 37, 38, 39, 30, 40, 41, 0,\n 33, 42, 43, 4, 36, 44, 45, 8, 39, 46, 47, 12, 12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57, 58, 59, 15, 25, 26, 27, 51, 60, 61, 62, 55, 63, 64, 65, 59, 66, 67, 68, 27, 37, 38, 39, 62,\n 69, 70, 71, 65, 72, 73, 74, 68, 75, 76, 77, 39, 46, 47, 12, 71, 78, 79, 48, 74, 80, 81, 52, 77,\n 82, 83, 56, 56, 57, 58, 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 59, 66, 67, 68, 87,\n 96, 97, 98, 91, 99, 100, 101, 95, 102, 103, 104, 68, 75, 76, 77, 98, 105, 106, 107, 101, 108, 109,\n 110, 104, 111, 112, 113, 77, 82, 83, 56, 107, 114, 115, 84, 110, 116, 117, 88, 113, 118, 119, 92,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 123, 136, 137,\n 120, 127, 138, 139, 124, 131, 140, 141, 128, 135, 142, 143, 132, 132, 133, 134, 135, 144, 145,\n 146, 147, 148, 149, 150, 151, 68, 152, 153, 154, 135, 142, 143, 132, 147, 155, 156, 144, 151, 157,\n 158, 148, 154, 159, 160, 68, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,\n 175, 176, 164, 177, 178, 161, 168, 179, 180, 165, 172, 181, 182, 169, 176, 183, 184, 173, 173,\n 174, 175, 176, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 176, 183, 184, 173,\n 188, 197, 198, 185, 192, 199, 200, 189, 196, 201, 202, 193, 203, 203, 203, 203, 204, 205, 206,\n 207, 208, 208, 208, 208, 209, 210, 211, 212, 203, 203, 203, 203, 207, 213, 214, 215, 208, 208,\n 208, 208, 212, 216, 217, 218, 203, 203, 203, 203, 215, 219, 220, 221, 208, 208, 208, 208, 218,\n 222, 223, 224, 203, 203, 203, 203, 221, 225, 226, 204, 208, 208, 208, 208, 224, 227, 228, 209,\n 209, 210, 211, 212, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 212, 216, 217,\n 218, 232, 241, 242, 243, 236, 244, 245, 246, 240, 247, 248, 249, 218, 222, 223, 224, 243, 250,\n 251, 252, 246, 253, 254, 255, 249, 256, 257, 258, 224, 227, 228, 209, 252, 259, 260, 229, 255,\n 261, 262, 233, 258, 263, 264, 237, 265, 265, 265, 265, 266, 267, 268, 269, 270, 271, 272, 273, 92,\n 119, 118, 113, 265, 265, 265, 265, 269, 274, 275, 276, 273, 277, 278, 279, 113, 112, 111, 104,\n 265, 265, 265, 265, 276, 280, 281, 282, 279, 283, 284, 285, 104, 103, 102, 95, 265, 265, 265, 265,\n 282, 286, 287, 266, 285, 288, 289, 270, 95, 94, 93, 92,\n]);\nconst CONTROL_POINTS = new Float32Array([\n 1.4, 0, 2.4, 1.4, -0.784, 2.4, 0.784, -1.4, 2.4, 0, -1.4, 2.4, 1.3375, 0, 2.53125, 1.3375, -0.749,\n 2.53125, 0.749, -1.3375, 2.53125, 0, -1.3375, 2.53125, 1.4375, 0, 2.53125, 1.4375, -0.805,\n 2.53125, 0.805, -1.4375, 2.53125, 0, -1.4375, 2.53125, 1.5, 0, 2.4, 1.5, -0.84, 2.4, 0.84, -1.5,\n 2.4, 0, -1.5, 2.4, -0.784, -1.4, 2.4, -1.4, -0.784, 2.4, -1.4, 0, 2.4, -0.749, -1.3375, 2.53125,\n -1.3375, -0.749, 2.53125, -1.3375, 0, 2.53125, -0.805, -1.4375, 2.53125, -1.4375, -0.805, 2.53125,\n -1.4375, 0, 2.53125, -0.84, -1.5, 2.4, -1.5, -0.84, 2.4, -1.5, 0, 2.4, -1.4, 0.784, 2.4, -0.784,\n 1.4, 2.4, 0, 1.4, 2.4, -1.3375, 0.749, 2.53125, -0.749, 1.3375, 2.53125, 0, 1.3375, 2.53125,\n -1.4375, 0.805, 2.53125, -0.805, 1.4375, 2.53125, 0, 1.4375, 2.53125, -1.5, 0.84, 2.4, -0.84, 1.5,\n 2.4, 0, 1.5, 2.4, 0.784, 1.4, 2.4, 1.4, 0.784, 2.4, 0.749, 1.3375, 2.53125, 1.3375, 0.749,\n 2.53125, 0.805, 1.4375, 2.53125, 1.4375, 0.805, 2.53125, 0.84, 1.5, 2.4, 1.5, 0.84, 2.4, 1.75, 0,\n 1.875, 1.75, -0.98, 1.875, 0.98, -1.75, 1.875, 0, -1.75, 1.875, 2, 0, 1.35, 2, -1.12, 1.35, 1.12,\n -2, 1.35, 0, -2, 1.35, 2, 0, 0.9, 2, -1.12, 0.9, 1.12, -2, 0.9, 0, -2, 0.9, -0.98, -1.75, 1.875,\n -1.75, -0.98, 1.875, -1.75, 0, 1.875, -1.12, -2, 1.35, -2, -1.12, 1.35, -2, 0, 1.35, -1.12, -2,\n 0.9, -2, -1.12, 0.9, -2, 0, 0.9, -1.75, 0.98, 1.875, -0.98, 1.75, 1.875, 0, 1.75, 1.875, -2, 1.12,\n 1.35, -1.12, 2, 1.35, 0, 2, 1.35, -2, 1.12, 0.9, -1.12, 2, 0.9, 0, 2, 0.9, 0.98, 1.75, 1.875,\n 1.75, 0.98, 1.875, 1.12, 2, 1.35, 2, 1.12, 1.35, 1.12, 2, 0.9, 2, 1.12, 0.9, 2, 0, 0.45, 2, -1.12,\n 0.45, 1.12, -2, 0.45, 0, -2, 0.45, 1.5, 0, 0.225, 1.5, -0.84, 0.225, 0.84, -1.5, 0.225, 0, -1.5,\n 0.225, 1.5, 0, 0.15, 1.5, -0.84, 0.15, 0.84, -1.5, 0.15, 0, -1.5, 0.15, -1.12, -2, 0.45, -2,\n -1.12, 0.45, -2, 0, 0.45, -0.84, -1.5, 0.225, -1.5, -0.84, 0.225, -1.5, 0, 0.225, -0.84, -1.5,\n 0.15, -1.5, -0.84, 0.15, -1.5, 0, 0.15, -2, 1.12, 0.45, -1.12, 2, 0.45, 0, 2, 0.45, -1.5, 0.84,\n 0.225, -0.84, 1.5, 0.225, 0, 1.5, 0.225, -1.5, 0.84, 0.15, -0.84, 1.5, 0.15, 0, 1.5, 0.15, 1.12,\n 2, 0.45, 2, 1.12, 0.45, 0.84, 1.5, 0.225, 1.5, 0.84, 0.225, 0.84, 1.5, 0.15, 1.5, 0.84, 0.15,\n -1.6, 0, 2.025, -1.6, -0.3, 2.025, -1.5, -0.3, 2.25, -1.5, 0, 2.25, -2.3, 0, 2.025, -2.3, -0.3,\n 2.025, -2.5, -0.3, 2.25, -2.5, 0, 2.25, -2.7, 0, 2.025, -2.7, -0.3, 2.025, -3, -0.3, 2.25, -3, 0,\n 2.25, -2.7, 0, 1.8, -2.7, -0.3, 1.8, -3, -0.3, 1.8, -3, 0, 1.8, -1.5, 0.3, 2.25, -1.6, 0.3, 2.025,\n -2.5, 0.3, 2.25, -2.3, 0.3, 2.025, -3, 0.3, 2.25, -2.7, 0.3, 2.025, -3, 0.3, 1.8, -2.7, 0.3, 1.8,\n -2.7, 0, 1.575, -2.7, -0.3, 1.575, -3, -0.3, 1.35, -3, 0, 1.35, -2.5, 0, 1.125, -2.5, -0.3, 1.125,\n -2.65, -0.3, 0.9375, -2.65, 0, 0.9375, -2, -0.3, 0.9, -1.9, -0.3, 0.6, -1.9, 0, 0.6, -3, 0.3,\n 1.35, -2.7, 0.3, 1.575, -2.65, 0.3, 0.9375, -2.5, 0.3, 1.125, -1.9, 0.3, 0.6, -2, 0.3, 0.9, 1.7,\n 0, 1.425, 1.7, -0.66, 1.425, 1.7, -0.66, 0.6, 1.7, 0, 0.6, 2.6, 0, 1.425, 2.6, -0.66, 1.425, 3.1,\n -0.66, 0.825, 3.1, 0, 0.825, 2.3, 0, 2.1, 2.3, -0.25, 2.1, 2.4, -0.25, 2.025, 2.4, 0, 2.025, 2.7,\n 0, 2.4, 2.7, -0.25, 2.4, 3.3, -0.25, 2.4, 3.3, 0, 2.4, 1.7, 0.66, 0.6, 1.7, 0.66, 1.425, 3.1,\n 0.66, 0.825, 2.6, 0.66, 1.425, 2.4, 0.25, 2.025, 2.3, 0.25, 2.1, 3.3, 0.25, 2.4, 2.7, 0.25, 2.4,\n 2.8, 0, 2.475, 2.8, -0.25, 2.475, 3.525, -0.25, 2.49375, 3.525, 0, 2.49375, 2.9, 0, 2.475, 2.9,\n -0.15, 2.475, 3.45, -0.15, 2.5125, 3.45, 0, 2.5125, 2.8, 0, 2.4, 2.8, -0.15, 2.4, 3.2, -0.15, 2.4,\n 3.2, 0, 2.4, 3.525, 0.25, 2.49375, 2.8, 0.25, 2.475, 3.45, 0.15, 2.5125, 2.9, 0.15, 2.475, 3.2,\n 0.15, 2.4, 2.8, 0.15, 2.4, 0, 0, 3.15, 0.8, 0, 3.15, 0.8, -0.45, 3.15, 0.45, -0.8, 3.15, 0, -0.8,\n 3.15, 0, 0, 2.85, 0.2, 0, 2.7, 0.2, -0.112, 2.7, 0.112, -0.2, 2.7, 0, -0.2, 2.7, -0.45, -0.8,\n 3.15, -0.8, -0.45, 3.15, -0.8, 0, 3.15, -0.112, -0.2, 2.7, -0.2, -0.112, 2.7, -0.2, 0, 2.7, -0.8,\n 0.45, 3.15, -0.45, 0.8, 3.15, 0, 0.8, 3.15, -0.2, 0.112, 2.7, -0.112, 0.2, 2.7, 0, 0.2, 2.7, 0.45,\n 0.8, 3.15, 0.8, 0.45, 3.15, 0.112, 0.2, 2.7, 0.2, 0.112, 2.7, 0.4, 0, 2.55, 0.4, -0.224, 2.55,\n 0.224, -0.4, 2.55, 0, -0.4, 2.55, 1.3, 0, 2.55, 1.3, -0.728, 2.55, 0.728, -1.3, 2.55, 0, -1.3,\n 2.55, 1.3, 0, 2.4, 1.3, -0.728, 2.4, 0.728, -1.3, 2.4, 0, -1.3, 2.4, -0.224, -0.4, 2.55, -0.4,\n -0.224, 2.55, -0.4, 0, 2.55, -0.728, -1.3, 2.55, -1.3, -0.728, 2.55, -1.3, 0, 2.55, -0.728, -1.3,\n 2.4, -1.3, -0.728, 2.4, -1.3, 0, 2.4, -0.4, 0.224, 2.55, -0.224, 0.4, 2.55, 0, 0.4, 2.55, -1.3,\n 0.728, 2.55, -0.728, 1.3, 2.55, 0, 1.3, 2.55, -1.3, 0.728, 2.4, -0.728, 1.3, 2.4, 0, 1.3, 2.4,\n 0.224, 0.4, 2.55, 0.4, 0.224, 2.55, 0.728, 1.3, 2.55, 1.3, 0.728, 2.55, 0.728, 1.3, 2.4, 1.3,\n 0.728, 2.4, 0, 0, 0, 1.425, 0, 0, 1.425, 0.798, 0, 0.798, 1.425, 0, 0, 1.425, 0, 1.5, 0, 0.075,\n 1.5, 0.84, 0.075, 0.84, 1.5, 0.075, 0, 1.5, 0.075, -0.798, 1.425, 0, -1.425, 0.798, 0, -1.425, 0,\n 0, -0.84, 1.5, 0.075, -1.5, 0.84, 0.075, -1.5, 0, 0.075, -1.425, -0.798, 0, -0.798, -1.425, 0, 0,\n -1.425, 0, -1.5, -0.84, 0.075, -0.84, -1.5, 0.075, 0, -1.5, 0.075, 0.798, -1.425, 0, 1.425,\n -0.798, 0, 0.84, -1.5, 0.075, 1.5, -0.84, 0.075,\n]);\n\nexport interface TeapotProvenance {\n readonly source: 'three.js';\n readonly commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a';\n readonly path: 'examples/jsm/geometries/TeapotGeometry.js';\n readonly license: 'MIT';\n}\n\nexport type TeapotMeshAsset = MeshAsset & { readonly provenance: TeapotProvenance };\n\nfunction basis(value: number): [number, number, number, number] {\n const inverse = 1 - value;\n return [\n inverse * inverse * inverse,\n 3 * value * inverse * inverse,\n 3 * value * value * inverse,\n value * value * value,\n ];\n}\n\nfunction derivativeBasis(value: number): [number, number, number, number] {\n const inverse = 1 - value;\n return [\n -3 * inverse * inverse,\n 3 * inverse * inverse - 6 * value * inverse,\n 6 * value * inverse - 3 * value * value,\n 3 * value * value,\n ];\n}\n\nfunction evaluatePatch(\n surface: number,\n s: number,\n t: number,\n fitLid: boolean,\n blinn: boolean,\n): {\n point: [number, number, number];\n ds: [number, number, number];\n dt: [number, number, number];\n} {\n const sb = basis(s);\n const tb = basis(t);\n const dsb = derivativeBasis(s);\n const dtb = derivativeBasis(t);\n const point: [number, number, number] = [0, 0, 0];\n const ds: [number, number, number] = [0, 0, 0];\n const dt: [number, number, number] = [0, 0, 0];\n for (let row = 0; row < 4; row++) {\n for (let column = 0; column < 4; column++) {\n const control = PATCHES[surface * 16 + row * 4 + column] ?? 0;\n const source = control * 3;\n for (let axis = 0; axis < 3; axis++) {\n const lidScale = fitLid && surface >= 20 && surface < 28 && axis !== 2 ? 1.077 : 1;\n let value = (CONTROL_POINTS[source + axis] ?? 0) * lidScale;\n if (!blinn && axis === 2) value *= 1.3;\n const pointWeight = value * (sb[row] ?? 0) * (tb[column] ?? 0);\n const dsWeight = value * (dsb[row] ?? 0) * (tb[column] ?? 0);\n const dtWeight = value * (sb[row] ?? 0) * (dtb[column] ?? 0);\n point[axis] = (point[axis] ?? 0) + pointWeight;\n ds[axis] = (ds[axis] ?? 0) + dsWeight;\n dt[axis] = (dt[axis] ?? 0) + dtWeight;\n }\n }\n }\n return { point, ds, dt };\n}\n\nfunction cross(\n a: readonly [number, number, number],\n b: readonly [number, number, number],\n): [number, number, number] {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction normalize(value: [number, number, number]): [number, number, number] {\n const length = Math.hypot(value[0], value[1], value[2]);\n return length > 0 ? [value[0] / length, value[1] / length, value[2] / length] : [0, 1, 0];\n}\n\n/** Build an exact Three.js TeapotGeometry-compatible Utah teapot mesh. */\nexport function createTeapotGeometry(\n size = 0.8,\n segments = 18,\n bottom = true,\n lid = true,\n body = true,\n fitLid = true,\n blinn = true,\n): Result<TeapotMeshAsset, AssetError> {\n if (!Number.isFinite(size) || size <= 0 || !Number.isFinite(segments) || segments < 2) {\n return err(\n new AssetError({\n code: 'asset-parse-failed',\n expected: 'finite positive size and segments >= 2',\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field: 'parameters', value: size, reason: `segments=${segments}` },\n }),\n );\n }\n const steps = Math.max(2, Math.floor(segments));\n const maxHeight = 3.15 * (blinn ? 1 : 1.3);\n const maxHeight2 = maxHeight / 2;\n const trueSize = size / maxHeight2;\n const firstSurface = body ? 0 : 20;\n const lastSurface = bottom ? 32 : 28;\n const activeSurfaces: number[] = [];\n for (let surface = firstSurface; surface < lastSurface; surface++) {\n if (lid || surface < 20 || surface >= 28) activeSurfaces.push(surface);\n }\n const vertices = new Float32Array(\n activeSurfaces.length * (steps + 1) * (steps + 1) * FACTORY_FLOATS_PER_VERTEX,\n );\n const indices: number[] = [];\n const stride = steps + 1;\n let vertex = 0;\n const positions: Array<[number, number, number]> = [];\n for (const surface of activeSurfaces) {\n const surfaceStart = vertex;\n for (let sStep = 0; sStep <= steps; sStep++) {\n const s = sStep / steps;\n for (let tStep = 0; tStep <= steps; tStep++) {\n const t = tStep / steps;\n const evaluated = evaluatePatch(surface, s, t, fitLid, blinn);\n const normalRaw = cross(evaluated.dt, evaluated.ds);\n const normal =\n evaluated.point[0] === 0 && evaluated.point[1] === 0\n ? ([0, evaluated.point[2] > maxHeight2 ? 1 : -1, 0] as [number, number, number])\n : normalize([normalRaw[0], normalRaw[2], -normalRaw[1]]);\n const position: [number, number, number] = [\n Math.fround(trueSize * evaluated.point[0]),\n Math.fround(trueSize * (evaluated.point[2] - maxHeight2)),\n Math.fround(-trueSize * evaluated.point[1]),\n ];\n const base = vertex * FACTORY_FLOATS_PER_VERTEX;\n vertices[base] = position[0];\n vertices[base + 1] = position[1];\n vertices[base + 2] = position[2];\n vertices[base + 3] = normal[0];\n vertices[base + 4] = normal[1];\n vertices[base + 5] = normal[2];\n vertices[base + 6] = 1 - t;\n vertices[base + 7] = 1 - s;\n positions.push(position);\n vertex++;\n }\n }\n for (let sStep = 0; sStep < steps; sStep++) {\n for (let tStep = 0; tStep < steps; tStep++) {\n const v1 = surfaceStart + sStep * stride + tStep;\n const v2 = v1 + 1;\n const v3 = v2 + stride;\n const v4 = v1 + stride;\n const same = (a: number, b: number) =>\n positions[a]?.[0] === positions[b]?.[0] &&\n positions[a]?.[1] === positions[b]?.[1] &&\n positions[a]?.[2] === positions[b]?.[2];\n if (!same(v1, v2) && !same(v1, v3) && !same(v2, v3)) indices.push(v1, v2, v3);\n if (!same(v1, v3) && !same(v1, v4) && !same(v3, v4)) indices.push(v1, v3, v4);\n }\n }\n }\n const mesh = meshFromInterleaved(vertices, new Uint32Array(indices));\n if (!mesh.ok) return mesh;\n return ok({\n ...mesh.value,\n provenance: {\n source: 'three.js',\n commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a',\n path: 'examples/jsm/geometries/TeapotGeometry.js',\n license: 'MIT',\n },\n });\n}\n","// @forgeax/engine-runtime - Procedural Torus geometry (M3 / w8).\n//\n// Mirrors Three.js r184 TorusGeometry: createTorusGeometry(radius, tube,\n// radialSegments?, tubularSegments?) -> Result<MeshAsset, AssetError>.\n// `radius` is the distance from the torus center to the tube center (ring\n// radius); `tube` is the cross-section (tube) radius. Degenerate parameters\n// fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createTorusGeometry(\n radius: number,\n tube: number,\n radialSegments: number = 8,\n tubularSegments: number = 24,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (tube <= 0) return err(degenerate(`tube=${tube}`));\n const rs = radialSegments | 0;\n const ts = tubularSegments | 0;\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n if (ts < 3) return err(degenerate(`tubularSegments=${ts}; minimum 3`));\n\n const vertexCount = (rs + 1) * (ts + 1);\n const indexCount = rs * ts * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let j = 0; j <= rs; j++) {\n const v = (j / rs) * Math.PI * 2;\n const cosV = Math.cos(v);\n const sinV = Math.sin(v);\n for (let i = 0; i <= ts; i++) {\n const u = (i / ts) * Math.PI * 2;\n const cosU = Math.cos(u);\n const sinU = Math.sin(u);\n const x = (radius + tube * cosV) * cosU;\n const y = (radius + tube * cosV) * sinU;\n const z = tube * sinV;\n // normal = normalize(position - center_of_tube_at_u)\n const centerX = radius * cosU;\n const centerY = radius * sinU;\n const nx = x - centerX;\n const ny = y - centerY;\n const nz = z;\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = i / ts;\n vertices[base + 7] = j / rs;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let j = 1; j <= rs; j++) {\n for (let i = 1; i <= ts; i++) {\n const a = (ts + 1) * j + i - 1;\n const b = (ts + 1) * (j - 1) + i - 1;\n const c = (ts + 1) * (j - 1) + i;\n const d = (ts + 1) * j + i;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n"]}
1
+ {"version":3,"sources":["../src/tangent.ts","../src/vertex-attribute-layout.ts","../src/box.ts","../src/assets/mesh-binary.ts","../src/cylinder.ts","../src/plane.ts","../src/sphere.ts","../src/assets/primitive-mesh.ts","../src/assets/mesh-decoder.ts","../src/capsule.ts","../src/cone.ts","../src/dim2.ts","../src/edges.ts","../src/mesh-builder.ts","../src/teapot.ts","../src/torus.ts"],"names":["AssetError","ASSET_ERROR_HINTS","err","ok","invalid","box3","indexArray","cross"],"mappings":"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AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAChG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC9F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAC/F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI;AACtD,CAAC,CAAA;AACD,IAAM,cAAA,GAAiB,IAAI,YAAA,CAAa;AAAA,EACtC,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,MAAA;AAAA,EAC3F,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,MAAA;AAAA,EACnF,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAC3F,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EACxF,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,OAAA;AAAA,EAC1F,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,MAAA;AAAA,EACzF,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,OAAA;AAAA,EACpF,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,KAAA;AAAA,EACpF,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAC/F,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAC1F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,EAAA;AAAA,EAC5F,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,IAAA;AAAA,EAC7F,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EACvF,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAC5F,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,IAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,EAAA;AAAA,EACzF,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EACzF,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAC1F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAC3F,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EACxF,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAC1F,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,CAAA;AAAA,EAC/F,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAC5F,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAC7F,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAC5F,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,EAAA;AAAA,EAAI,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EACzF,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC5F,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAC7F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAC7F,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EACzF,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAC5F,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,OAAA;AAAA,EAAS,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAC3F,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAC5F,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EACxF,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAC5F,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,IAAA;AAAA,EAC7F,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,IAAA;AAAA,EACzF,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EACzF,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EACzF,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,IAAA;AAAA,EAC5F,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAC1F,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EACzF,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,KAAA;AAAA,EACzF,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,CAAA;AAAA,EAC/F,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,CAAA;AAAA,EAC/F,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,KAAA;AAAA,EACrF,MAAA;AAAA,EAAQ,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO;AAC5C,CAAC,CAAA;AAWD,SAAS,MAAM,KAAA,EAAiD;AAC9D,EAAA,MAAM,UAAU,CAAA,GAAI,KAAA;AACpB,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,GAAU,OAAA;AAAA,IACpB,CAAA,GAAI,QAAQ,OAAA,GAAU,OAAA;AAAA,IACtB,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAAA,IACpB,QAAQ,KAAA,GAAQ;AAAA,GAClB;AACF;AAEA,SAAS,gBAAgB,KAAA,EAAiD;AACxE,EAAA,MAAM,UAAU,CAAA,GAAI,KAAA;AACpB,EAAA,OAAO;AAAA,IACL,KAAK,OAAA,GAAU,OAAA;AAAA,IACf,CAAA,GAAI,OAAA,GAAU,OAAA,GAAU,CAAA,GAAI,KAAA,GAAQ,OAAA;AAAA,IACpC,CAAA,GAAI,KAAA,GAAQ,OAAA,GAAU,CAAA,GAAI,KAAA,GAAQ,KAAA;AAAA,IAClC,IAAI,KAAA,GAAQ;AAAA,GACd;AACF;AAEA,SAAS,aAAA,CACP,OAAA,EACA,CAAA,EACA,CAAA,EACA,QACA,KAAA,EAKA;AACA,EAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,EAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,EAAA,MAAM,GAAA,GAAM,gBAAgB,CAAC,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,gBAAgB,CAAC,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAkC,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAA+B,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC7C,EAAA,MAAM,EAAA,GAA+B,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC7C,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,CAAA,EAAG,GAAA,EAAA,EAAO;AAChC,IAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,CAAA,EAAG,MAAA,EAAA,EAAU;AACzC,MAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,GAAU,KAAK,GAAA,GAAM,CAAA,GAAI,MAAM,CAAA,IAAK,CAAA;AAC5D,MAAA,MAAM,SAAS,OAAA,GAAU,CAAA;AACzB,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,CAAA,EAAG,IAAA,EAAA,EAAQ;AACnC,QAAA,MAAM,QAAA,GAAW,UAAU,OAAA,IAAW,EAAA,IAAM,UAAU,EAAA,IAAM,IAAA,KAAS,IAAI,KAAA,GAAQ,CAAA;AACjF,QAAA,IAAI,KAAA,GAAA,CAAS,cAAA,CAAe,MAAA,GAAS,IAAI,KAAK,CAAA,IAAK,QAAA;AACnD,QAAA,IAAI,CAAC,KAAA,IAAS,IAAA,KAAS,CAAA,EAAG,KAAA,IAAS,GAAA;AACnC,QAAA,MAAM,WAAA,GAAc,SAAS,EAAA,CAAG,GAAG,KAAK,CAAA,CAAA,IAAM,EAAA,CAAG,MAAM,CAAA,IAAK,CAAA,CAAA;AAC5D,QAAA,MAAM,QAAA,GAAW,SAAS,GAAA,CAAI,GAAG,KAAK,CAAA,CAAA,IAAM,EAAA,CAAG,MAAM,CAAA,IAAK,CAAA,CAAA;AAC1D,QAAA,MAAM,QAAA,GAAW,SAAS,EAAA,CAAG,GAAG,KAAK,CAAA,CAAA,IAAM,GAAA,CAAI,MAAM,CAAA,IAAK,CAAA,CAAA;AAC1D,QAAA,KAAA,CAAM,IAAI,CAAA,GAAA,CAAK,KAAA,CAAM,IAAI,KAAK,CAAA,IAAK,WAAA;AACnC,QAAA,EAAA,CAAG,IAAI,CAAA,GAAA,CAAK,EAAA,CAAG,IAAI,KAAK,CAAA,IAAK,QAAA;AAC7B,QAAA,EAAA,CAAG,IAAI,CAAA,GAAA,CAAK,EAAA,CAAG,IAAI,KAAK,CAAA,IAAK,QAAA;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,EAAA,EAAG;AACzB;AAEA,SAASK,MAAAA,CACP,GACA,CAAA,EAC0B;AAC1B,EAAA,OAAO,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AACzF;AAEA,SAAS,UAAU,KAAA,EAA2D;AAC5E,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AACtD,EAAA,OAAO,SAAS,CAAA,GAAI,CAAC,MAAM,CAAC,CAAA,GAAI,QAAQ,KAAA,CAAM,CAAC,IAAI,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,MAAM,IAAI,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAC1F;AAGO,SAAS,oBAAA,CACd,IAAA,GAAO,GAAA,EACP,QAAA,GAAW,IACX,MAAA,GAAS,IAAA,EACT,GAAA,GAAM,IAAA,EACN,IAAA,GAAO,IAAA,EACP,MAAA,GAAS,IAAA,EACT,QAAQ,IAAA,EAC6B;AACrC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AACrF,IAAA,OAAOL,GAAAA;AAAA,MACL,IAAIF,UAAAA,CAAW;AAAA,QACb,IAAA,EAAM,oBAAA;AAAA,QACN,QAAA,EAAU,wCAAA;AAAA,QACV,IAAA,EAAMC,kBAAkB,oBAAoB,CAAA;AAAA,QAC5C,MAAA,EAAQ,EAAE,KAAA,EAAO,YAAA,EAAc,OAAO,IAAA,EAAM,MAAA,EAAQ,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA;AAAG,OAC5E;AAAA,KACH;AAAA,EACF;AACA,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,IAAA,IAAQ,KAAA,GAAQ,CAAA,GAAI,GAAA,CAAA;AACtC,EAAA,MAAM,aAAa,SAAA,GAAY,CAAA;AAC/B,EAAA,MAAM,WAAW,IAAA,GAAO,UAAA;AACxB,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,GAAI,EAAA;AAChC,EAAA,MAAM,WAAA,GAAc,SAAS,EAAA,GAAK,EAAA;AAClC,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,KAAA,IAAS,OAAA,GAAU,YAAA,EAAc,OAAA,GAAU,WAAA,EAAa,OAAA,EAAA,EAAW;AACjE,IAAA,IAAI,OAAO,OAAA,GAAU,EAAA,IAAM,WAAW,EAAA,EAAI,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,EACvE;AACA,EAAA,MAAM,WAAW,IAAI,YAAA;AAAA,IACnB,cAAA,CAAe,MAAA,IAAU,KAAA,GAAQ,CAAA,CAAA,IAAM,QAAQ,CAAA,CAAA,GAAK;AAAA,GACtD;AACA,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,SAAS,KAAA,GAAQ,CAAA;AACvB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,MAAM,YAA6C,EAAC;AACpD,EAAA,KAAA,MAAW,WAAW,cAAA,EAAgB;AACpC,IAAA,MAAM,YAAA,GAAe,MAAA;AACrB,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,KAAA,EAAO,KAAA,EAAA,EAAS;AAC3C,MAAA,MAAM,IAAI,KAAA,GAAQ,KAAA;AAClB,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,KAAA,EAAO,KAAA,EAAA,EAAS;AAC3C,QAAA,MAAM,IAAI,KAAA,GAAQ,KAAA;AAClB,QAAA,MAAM,YAAY,aAAA,CAAc,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,QAAQ,KAAK,CAAA;AAC5D,QAAA,MAAM,SAAA,GAAYM,MAAAA,CAAM,SAAA,CAAU,EAAA,EAAI,UAAU,EAAE,CAAA;AAClD,QAAA,MAAM,MAAA,GACJ,SAAA,CAAU,KAAA,CAAM,CAAC,MAAM,CAAA,IAAK,SAAA,CAAU,KAAA,CAAM,CAAC,MAAM,CAAA,GAC9C,CAAC,CAAA,EAAG,SAAA,CAAU,MAAM,CAAC,CAAA,GAAI,UAAA,GAAa,CAAA,GAAI,EAAA,EAAI,CAAC,CAAA,GAChD,SAAA,CAAU,CAAC,SAAA,CAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,EAAG,CAAC,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAC3D,QAAA,MAAM,QAAA,GAAqC;AAAA,UACzC,KAAK,MAAA,CAAO,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,UACzC,KAAK,MAAA,CAAO,QAAA,IAAY,UAAU,KAAA,CAAM,CAAC,IAAI,UAAA,CAAW,CAAA;AAAA,UACxD,KAAK,MAAA,CAAO,CAAC,WAAW,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC;AAAA,SAC5C;AACA,QAAA,MAAM,OAAO,MAAA,GAAS,yBAAA;AACtB,QAAA,QAAA,CAAS,IAAI,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AAC3B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AAC/B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AAC/B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC7B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC7B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC7B,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AACzB,QAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AACzB,QAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,KAAA,EAAA,EAAS;AAC1C,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,KAAA,EAAA,EAAS;AAC1C,QAAA,MAAM,EAAA,GAAK,YAAA,GAAe,KAAA,GAAQ,MAAA,GAAS,KAAA;AAC3C,QAAA,MAAM,KAAK,EAAA,GAAK,CAAA;AAChB,QAAA,MAAM,KAAK,EAAA,GAAK,MAAA;AAChB,QAAA,MAAM,KAAK,EAAA,GAAK,MAAA;AAChB,QAAA,MAAM,IAAA,GAAO,CAAC,CAAA,EAAW,CAAA,KACvB,UAAU,CAAC,CAAA,GAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,GAAI,CAAC,KACtC,SAAA,CAAU,CAAC,CAAA,GAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,GAAI,CAAC,CAAA,IACtC,SAAA,CAAU,CAAC,CAAA,GAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,IAAI,CAAC,CAAA;AACxC,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,EAAE,CAAA,IAAK,CAAC,KAAK,EAAA,EAAI,EAAE,KAAK,CAAC,IAAA,CAAK,IAAI,EAAE,CAAA,UAAW,IAAA,CAAK,EAAA,EAAI,IAAI,EAAE,CAAA;AAC5E,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,EAAE,CAAA,IAAK,CAAC,KAAK,EAAA,EAAI,EAAE,KAAK,CAAC,IAAA,CAAK,IAAI,EAAE,CAAA,UAAW,IAAA,CAAK,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,OAAO,mBAAA,CAAoB,QAAA,EAAU,IAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AACnE,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,IAAA;AACrB,EAAA,OAAOJ,EAAAA,CAAG;AAAA,IACR,GAAG,IAAA,CAAK,KAAA;AAAA,IACR,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ,0CAAA;AAAA,MACR,IAAA,EAAM,2CAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX,GACD,CAAA;AACH;ACvPO,SAAS,oBACd,MAAA,EACA,IAAA,EACA,cAAA,GAAyB,CAAA,EACzB,kBAA0B,EAAA,EACK;AAC/B,EAAA,IAAI,MAAA,IAAU,GAAG,OAAOD,GAAAA,CAAI,WAAW,CAAA,OAAA,EAAU,MAAM,EAAE,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,IAAQ,GAAG,OAAOA,GAAAA,CAAI,WAAW,CAAA,KAAA,EAAQ,IAAI,EAAE,CAAC,CAAA;AACpD,EAAA,MAAM,KAAK,cAAA,GAAiB,CAAA;AAC5B,EAAA,MAAM,KAAK,eAAA,GAAkB,CAAA;AAC7B,EAAA,IAAI,EAAA,GAAK,GAAG,OAAOA,GAAAA,CAAI,WAAW,CAAA,eAAA,EAAkB,EAAE,aAAa,CAAC,CAAA;AACpE,EAAA,IAAI,EAAA,GAAK,GAAG,OAAOA,GAAAA,CAAI,WAAW,CAAA,gBAAA,EAAmB,EAAE,aAAa,CAAC,CAAA;AAErE,EAAA,MAAM,WAAA,GAAA,CAAe,EAAA,GAAK,CAAA,KAAM,EAAA,GAAK,CAAA,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,KAAK,EAAA,GAAK,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,IAAI,YAAA,CAAa,WAAA,GAAc,yBAAyB,CAAA;AACzE,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,UAAU,CAAA;AAE1C,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5B,IAAA,MAAM,CAAA,GAAK,CAAA,GAAI,EAAA,GAAM,IAAA,CAAK,EAAA,GAAK,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACvB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACvB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5B,MAAA,MAAM,CAAA,GAAK,CAAA,GAAI,EAAA,GAAM,IAAA,CAAK,EAAA,GAAK,CAAA;AAC/B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACvB,MAAA,MAAM,CAAA,GAAA,CAAK,MAAA,GAAS,IAAA,GAAO,IAAA,IAAQ,IAAA;AACnC,MAAA,MAAM,CAAA,GAAA,CAAK,MAAA,GAAS,IAAA,GAAO,IAAA,IAAQ,IAAA;AACnC,MAAA,MAAM,IAAI,IAAA,GAAO,IAAA;AAEjB,MAAA,MAAM,UAAU,MAAA,GAAS,IAAA;AACzB,MAAA,MAAM,UAAU,MAAA,GAAS,IAAA;AACzB,MAAA,MAAM,KAAK,CAAA,GAAI,OAAA;AACf,MAAA,MAAM,KAAK,CAAA,GAAI,OAAA;AACf,MAAA,MAAM,EAAA,GAAK,CAAA;AACX,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAE,CAAA,IAAK,CAAA;AACvD,MAAA,MAAM,OAAO,IAAA,GAAO,yBAAA;AACpB,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;AACrB,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;AACrB,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;AACrB,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA,GAAK,IAAA;AAC1B,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA,GAAK,IAAA;AAC1B,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA,GAAK,IAAA;AAC1B,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA,GAAI,EAAA;AACzB,MAAA,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA,GAAI,EAAA;AACzB,MAAA,IAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5B,MAAA,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,CAAA;AAC7B,MAAA,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,CAAA,KAAM,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AACnC,MAAA,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,CAAA,KAAM,CAAA,GAAI,CAAA,CAAA,GAAK,CAAA;AAC/B,MAAA,MAAM,CAAA,GAAA,CAAK,EAAA,GAAK,CAAA,IAAK,CAAA,GAAI,CAAA;AACzB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO,mBAAA,CAAoB,UAAU,OAAO,CAAA;AAC9C","file":"index.mjs","sourcesContent":["// @forgeax/engine-runtime - per-vertex tangent (vec4) helper (M4 / w20).\n//\n// Implements the path A formula (LearnOpenGL section 5.4 + glTF 2.0 vec4\n// shape) for procedural geometry: per-triangle UV-derivative tangent ->\n// face-area-weighted average -> Gram-Schmidt re-orthogonalisation against\n// the supplied per-vertex normal -> handedness sign(det(deltaUV)) packed\n// into the .w channel.\n//\n// Output shape: Float32Array (vertexCount * 4) where each vertex is\n// [tx, ty, tz, w] with `.w` in {+1, -1}. The .w sign is forward-compatible\n// with glTF 2.0 spec / MikkTSpace baker (`B = cross(N, T.xyz) * T.w`),\n// satisfying feat-20260518 risk R-4 mitigation (path A vec4 -> path B\n// shader consumption is a no-op switch).\n//\n// Plan-strategy anchors: section 2 D-2 (path A); D-7 (single-file helper to\n// avoid 30-line per-geometry re-implementation -- SSOT #1 + DRY #2).\n// Knowledge-base anchor: .forgeax-harness/knowledge-base/wiki/normal-mapping-and-tbn.md\n// section 2 (math skeleton) and section 2.2 (per-vertex average +\n// handedness). Risk anchor: R-4 (vec4 + .w forward compatibility).\n//\n// Pure function with shared Result/AssetError vocabulary and no mutable state\n// or side effects. Indices may be Uint16Array, Uint32Array, or\n// undefined (sequential 0..vertexCount-1 -- triangle list). Degenerate\n// triangles (zero area UV; det ~ 0) are skipped from the accumulation;\n// Inputs with no valid UV-derived triangle fail closed. Procedural pole/seam\n// vertices may have no local contribution while sharing valid neighboring\n// faces; they retain the established deterministic frame until the material\n// admission layer has mesh-level tangent context.\n\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\n\nconst EPSILON = 1e-8;\n\nfunction tangentInputError(field: string, value: number, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `valid tangent topology: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\nfunction preflightTangentInput(\n positions: Float32Array,\n normals: Float32Array,\n uvs: Float32Array,\n indices: Uint16Array | Uint32Array | undefined,\n): Result<number, AssetError> {\n if (positions.length % 3 !== 0) {\n return err(\n tangentInputError(\n 'positions',\n positions.length,\n 'positions.length must be divisible by the position stride of 3',\n ),\n );\n }\n const vertexCount = positions.length / 3;\n if (normals.length !== vertexCount * 3) {\n return err(\n tangentInputError(\n 'normals',\n normals.length,\n `normals.length must equal vertexCount * 3 (${vertexCount * 3})`,\n ),\n );\n }\n if (uvs.length !== vertexCount * 2) {\n return err(\n tangentInputError(\n 'uvs',\n uvs.length,\n `uvs.length must equal vertexCount * 2 (${vertexCount * 2})`,\n ),\n );\n }\n if (indices === undefined) {\n if (vertexCount % 3 !== 0) {\n return err(\n tangentInputError(\n 'positions',\n vertexCount,\n 'non-indexed vertexCount must be divisible by the triangle size of 3',\n ),\n );\n }\n return ok(vertexCount);\n }\n if (indices.length % 3 !== 0) {\n return err(\n tangentInputError(\n 'indices',\n indices.length,\n 'indices.length must be divisible by the triangle size of 3',\n ),\n );\n }\n for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n const index = indices[indexPosition];\n if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n return err(\n tangentInputError(\n 'indices',\n index ?? -1,\n `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n ),\n );\n }\n }\n return ok(vertexCount);\n}\n\n/**\n * Compute per-vertex tangent (vec4) for a procedural mesh using path A\n * (UV-derivative + face-area-weighted average + Gram-Schmidt + handedness).\n *\n * @param positions Float32Array, vertexCount * 3 (xyz interleaved).\n * @param normals Float32Array, vertexCount * 3 (xyz interleaved); must be\n * pre-normalised by the caller (procedural factories already produce\n * unit-length normals at vertex emit time).\n * @param uvs Float32Array, vertexCount * 2 (uv interleaved).\n * @param indices optional Uint16Array | Uint32Array triangle list; when\n * undefined, sequential triangulation 0,1,2,3,4,5,... is assumed.\n * @returns `Result<Float32Array, AssetError>` with a Float32Array of\n * vertexCount * 4 on success. `.xyz` is the tangent and `.w` is the\n * handedness sign in {+1, -1}; malformed topology returns the existing\n * `asset-parse-failed` AssetError before working or output buffers exist.\n *\n * @remarks\n * Path A formula (per triangle):\n * ```\n * dP1 = p2 - p1; dP2 = p3 - p1\n * dUV1 = uv2 - uv1; dUV2 = uv3 - uv1\n * det = dUV1.u * dUV2.v - dUV2.u * dUV1.v\n * T_face = (dUV2.v * dP1 - dUV1.v * dP2) / det\n * sign = det >= 0 ? +1 : -1\n * ```\n * Per-vertex aggregation: accumulate `T_face * faceArea` into the three\n * vertices of the triangle; accumulate `sign` (the dominant sign per\n * vertex wins). After accumulation: Gram-Schmidt against the supplied\n * normal `T' = normalize(T - dot(T, N) * N)`; repack as vec4 with the\n * dominant handedness sign.\n */\nexport function computeTangentVec4(\n positions: Float32Array,\n normals: Float32Array,\n uvs: Float32Array,\n indices?: Uint16Array | Uint32Array,\n): Result<Float32Array, AssetError> {\n const preflight = preflightTangentInput(positions, normals, uvs, indices);\n if (!preflight.ok) return preflight;\n const vertexCount = preflight.value;\n\n // Working buffers: per-vertex accumulated tangent + accumulated handedness\n // signed weight (sum of (face area * sign(det))). The dominant sign of\n // the running sum is the per-vertex .w handedness.\n const accumT = new Float32Array(vertexCount * 3);\n const accumSign = new Float32Array(vertexCount);\n let validTriangleCount = 0;\n\n const triangleCount = indices !== undefined ? indices.length / 3 : vertexCount / 3;\n\n for (let tri = 0; tri < triangleCount; tri++) {\n const i0 = indices !== undefined ? (indices[tri * 3] ?? 0) : tri * 3;\n const i1 = indices !== undefined ? (indices[tri * 3 + 1] ?? 0) : tri * 3 + 1;\n const i2 = indices !== undefined ? (indices[tri * 3 + 2] ?? 0) : tri * 3 + 2;\n\n const p0x = positions[i0 * 3] ?? 0;\n const p0y = positions[i0 * 3 + 1] ?? 0;\n const p0z = positions[i0 * 3 + 2] ?? 0;\n const p1x = positions[i1 * 3] ?? 0;\n const p1y = positions[i1 * 3 + 1] ?? 0;\n const p1z = positions[i1 * 3 + 2] ?? 0;\n const p2x = positions[i2 * 3] ?? 0;\n const p2y = positions[i2 * 3 + 1] ?? 0;\n const p2z = positions[i2 * 3 + 2] ?? 0;\n\n const u0 = uvs[i0 * 2] ?? 0;\n const v0 = uvs[i0 * 2 + 1] ?? 0;\n const u1 = uvs[i1 * 2] ?? 0;\n const v1 = uvs[i1 * 2 + 1] ?? 0;\n const u2 = uvs[i2 * 2] ?? 0;\n const v2 = uvs[i2 * 2 + 1] ?? 0;\n\n const dP1x = p1x - p0x;\n const dP1y = p1y - p0y;\n const dP1z = p1z - p0z;\n const dP2x = p2x - p0x;\n const dP2y = p2y - p0y;\n const dP2z = p2z - p0z;\n\n const dU1 = u1 - u0;\n const dV1 = v1 - v0;\n const dU2 = u2 - u0;\n const dV2 = v2 - v0;\n\n const det = dU1 * dV2 - dU2 * dV1;\n if (Math.abs(det) < EPSILON) {\n // degenerate UV (collinear / zero-area in UV space); skip\n continue;\n }\n const invDet = 1 / det;\n const tx = invDet * (dV2 * dP1x - dV1 * dP2x);\n const ty = invDet * (dV2 * dP1y - dV1 * dP2y);\n const tz = invDet * (dV2 * dP1z - dV1 * dP2z);\n\n // Face area (cross product magnitude / 2). Used as accumulation weight.\n const cx = dP1y * dP2z - dP1z * dP2y;\n const cy = dP1z * dP2x - dP1x * dP2z;\n const cz = dP1x * dP2y - dP1y * dP2x;\n const faceArea = 0.5 * Math.sqrt(cx * cx + cy * cy + cz * cz);\n if (faceArea < EPSILON) continue;\n validTriangleCount += 1;\n\n const signDet = det >= 0 ? 1 : -1;\n const signedWeight = faceArea * signDet;\n\n for (const vi of [i0, i1, i2]) {\n accumT[vi * 3] = (accumT[vi * 3] ?? 0) + tx * faceArea;\n accumT[vi * 3 + 1] = (accumT[vi * 3 + 1] ?? 0) + ty * faceArea;\n accumT[vi * 3 + 2] = (accumT[vi * 3 + 2] ?? 0) + tz * faceArea;\n accumSign[vi] = (accumSign[vi] ?? 0) + signedWeight;\n }\n }\n\n if (validTriangleCount === 0) {\n return err(\n tangentInputError(\n 'tangent',\n 0,\n 'material-tangent-required: no triangle has a valid UV-derived tangent',\n ),\n );\n }\n\n const out = new Float32Array(vertexCount * 4);\n for (let v = 0; v < vertexCount; v++) {\n let tx = accumT[v * 3] ?? 0;\n let ty = accumT[v * 3 + 1] ?? 0;\n let tz = accumT[v * 3 + 2] ?? 0;\n const nx = normals[v * 3] ?? 0;\n const ny = normals[v * 3 + 1] ?? 0;\n const nz = normals[v * 3 + 2] ?? 0;\n\n const tLen = Math.sqrt(tx * tx + ty * ty + tz * tz);\n if (tLen < EPSILON) {\n const ax = Math.abs(nx);\n const ay = Math.abs(ny);\n const az = Math.abs(nz);\n let rx = 1;\n let ry = 0;\n let rz = 0;\n if (ax > ay && ax > az) {\n rx = 0;\n ry = 1;\n } else if (ay > ax && ay > az) {\n rx = 0;\n rz = 1;\n }\n tx = ny * rz - nz * ry;\n ty = nz * rx - nx * rz;\n tz = nx * ry - ny * rx;\n const fallbackLength = Math.sqrt(tx * tx + ty * ty + tz * tz);\n if (fallbackLength < EPSILON) {\n return err(\n tangentInputError(\n 'tangent',\n v,\n 'material-tangent-required: supplied normal cannot define a tangent frame',\n ),\n );\n }\n tx /= fallbackLength;\n ty /= fallbackLength;\n tz /= fallbackLength;\n } else {\n tx /= tLen;\n ty /= tLen;\n tz /= tLen;\n }\n\n // Gram-Schmidt: T' = normalize(T - dot(T, N) * N)\n const dotTN = tx * nx + ty * ny + tz * nz;\n let gx = tx - dotTN * nx;\n let gy = ty - dotTN * ny;\n let gz = tz - dotTN * nz;\n const gLen = Math.sqrt(gx * gx + gy * gy + gz * gz);\n if (gLen < EPSILON) {\n const ax = Math.abs(nx);\n const ay = Math.abs(ny);\n const az = Math.abs(nz);\n let rx = 1;\n let ry = 0;\n let rz = 0;\n if (ax > ay && ax > az) {\n rx = 0;\n ry = 1;\n } else if (ay > ax && ay > az) {\n rx = 0;\n rz = 1;\n }\n gx = ny * rz - nz * ry;\n gy = nz * rx - nx * rz;\n gz = nx * ry - ny * rx;\n const fallbackLength = Math.sqrt(gx * gx + gy * gy + gz * gz);\n if (fallbackLength < EPSILON) {\n return err(\n tangentInputError(\n 'tangent',\n v,\n 'material-tangent-required: supplied normal cannot define a tangent frame',\n ),\n );\n }\n gx /= fallbackLength;\n gy /= fallbackLength;\n gz /= fallbackLength;\n } else {\n gx /= gLen;\n gy /= gLen;\n gz /= gLen;\n }\n\n const accSign = accumSign[v] ?? 0;\n const w = accSign >= 0 ? 1 : -1;\n\n out[v * 4] = gx;\n out[v * 4 + 1] = gy;\n out[v * 4 + 2] = gz;\n out[v * 4 + 3] = w;\n }\n\n return ok(out);\n}\n","// @forgeax/engine-runtime - Vertex attribute layout SSOT (14-key closed set\n// to GPUVertexBufferLayout derived function).\n//\n// deriveVertexBufferLayout(map, opts?) consumes a partial VertexAttributeMap and produces\n// a fixed-order array of GPUVertexBufferLayout entries — the single source of\n// truth for @location(N) assignment + GPUVertexFormat for every attribute the\n// engine pipeline can consume. Shader WGSL @location(N) declarations and\n// geometry factories are consumers of this SSOT; naga reflection deep-equal\n// tests (T-33 dawn-only) keep them in sync (AC-26 / plan-strategy D-7).\n//\n// Canonical interleaved order (plan-strategy F-1, must match bridge + import layers):\n// position / normal / uv / tangent / skinIndex / skinWeight / uv1..uv7 / color\n//\n// Key index (plan-strategy D-4 / D-7):\n// 0: position -> @location(0) float32x3\n// 1: normal -> @location(1) float32x3\n// 2: uv -> @location(2) float32x2 (set 0)\n// 3: tangent -> @location(3) float32x4\n// 4: skinIndex -> @location(4) uint16x4\n// 5: skinWeight -> @location(5) float32x4\n// 6: uv1 -> @location(6) float32x2 (set 1, fea-20260629 D-4)\n// 7: uv2 -> @location(7) float32x2 (set 2)\n// 8: uv3 -> @location(8) float32x2 (set 3)\n// 9: uv4 -> @location(9) float32x2 (set 4)\n// 10: uv5 -> @location(10) float32x2 (set 5)\n// 11: uv6 -> @location(11) float32x2 (set 6)\n// 12: uv7 -> @location(12) float32x2 (set 7)\n//\n// feat-20260523-skin-skeleton-animation M2 / T-22.\n// feat-20260629-multi-uv-set-support m3-w4: uv1..uv7 + clamp-to-last alias (D-1).\n\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n ok,\n type Result,\n type VertexAttributeMap,\n type VertexAttributePackDetail,\n type VertexAttributeStorage,\n} from '@forgeax/engine-types';\n\nconst ATTRIBUTE_FORMAT_MAP = {\n position: 'float32x3' as const,\n normal: 'float32x3' as const,\n uv: 'float32x2' as const,\n tangent: 'float32x4' as const,\n skinIndex: 'uint16x4' as const,\n skinWeight: 'float32x4' as const,\n uv1: 'float32x2' as const,\n uv2: 'float32x2' as const,\n uv3: 'float32x2' as const,\n uv4: 'float32x2' as const,\n uv5: 'float32x2' as const,\n uv6: 'float32x2' as const,\n uv7: 'float32x2' as const,\n color: 'float32x4' as const,\n} as const;\n\ntype AttributeKey = keyof typeof ATTRIBUTE_FORMAT_MAP;\n\nconst ATTRIBUTE_BYTE_STRIDE: Record<AttributeKey, number> = {\n position: 12,\n normal: 12,\n uv: 8,\n tangent: 16,\n skinIndex: 8,\n skinWeight: 16,\n uv1: 8,\n uv2: 8,\n uv3: 8,\n uv4: 8,\n uv5: 8,\n uv6: 8,\n uv7: 8,\n color: 16,\n};\n\nexport interface GpuVertexBufferLayoutEntry {\n readonly arrayStride: number;\n readonly attributes: ReadonlyArray<{\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: string;\n }>;\n readonly stepMode?: 'vertex' | 'instance' | undefined;\n}\n\nconst isAttributeKey = (key: string): key is AttributeKey => key in ATTRIBUTE_FORMAT_MAP;\n\nconst CANONICAL_KEYS: readonly AttributeKey[] =\n Object.keys(ATTRIBUTE_FORMAT_MAP).filter(isAttributeKey);\nconst UV_KEYS: readonly AttributeKey[] = CANONICAL_KEYS.filter(\n (key) => key === 'uv' || key.startsWith('uv'),\n);\n\n// Empty typed-array values are presence sentinels for layout derivation. Keep\n// the common mesh maps here so renderers, recovery, and points/lines cannot\n// grow a second copy of the canonical attribute vocabulary.\nconst EMPTY_FLOAT32 = new Float32Array(0);\nconst EMPTY_UINT16 = new Uint16Array(0);\n\n/** Canonical position/normal/uv/tangent map for ordinary interleaved meshes. */\nexport const DEFAULT_VERTEX_ATTRIBUTE_MAP: VertexAttributeMap = Object.freeze({\n position: EMPTY_FLOAT32,\n normal: EMPTY_FLOAT32,\n uv: EMPTY_FLOAT32,\n tangent: EMPTY_FLOAT32,\n});\n\n/** Canonical six-attribute map for skinned interleaved meshes. */\nexport const SKIN_VERTEX_ATTRIBUTE_MAP: VertexAttributeMap = Object.freeze({\n ...DEFAULT_VERTEX_ATTRIBUTE_MAP,\n skinIndex: EMPTY_UINT16,\n skinWeight: EMPTY_FLOAT32,\n});\n\ntype Entry = {\n readonly key: AttributeKey;\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: string;\n};\n\nfunction emitAliasEntries(entries: Entry[], toIndex: number, currentStride: number): number {\n const lastUv = entries.filter((entry) => UV_KEYS.includes(entry.key)).at(-1);\n const aliasOffset = lastUv?.offset ?? currentStride;\n for (let k = 0; k < toIndex && k < UV_KEYS.length; k++) {\n // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n const uvKey = UV_KEYS[k]!;\n if (entries.some((entry) => entry.key === uvKey)) continue;\n entries.push({\n key: uvKey,\n shaderLocation: CANONICAL_KEYS.indexOf(uvKey),\n offset: aliasOffset,\n format: ATTRIBUTE_FORMAT_MAP[uvKey],\n });\n }\n // When meshUvSetCount===0, allocate 8 bytes for the zero UV area.\n // Otherwise no stride increase (aliased to existing offset).\n return lastUv === undefined ? currentStride + ATTRIBUTE_BYTE_STRIDE.uv : currentStride;\n}\n\n/**\n * Build a non-skin `VertexAttributeMap` carrying exactly `uvSetCount` UV sets\n * (set 0 = `uv`, then `uv1..uv{uvSetCount-1}`). `deriveVertexBufferLayout`\n * reads only key presence, so the zero-length typed-array values are sentinels.\n *\n * feat-20260629-multi-uv-set-support: the forward record stage owns only the\n * mesh's `uvSetCount` (a scalar threaded through MeshGpuHandles), not the\n * original `MeshAsset.attributes` map. It synthesizes the map here so the\n * material PSO's vertex layout includes the real @location(6+) attributes and\n * its stride matches the interleaved buffer (a mesh with 2 real UV sets has a\n * 56 B stride; a 48 B PSO layout against it puts every vertex after the first\n * off-screen). uvSetCount <= 1 yields the canonical 4-attribute single-UV map.\n */\nexport function buildMeshAttributeMapForUvSets(uvSetCount: number): VertexAttributeMap {\n const map = { ...DEFAULT_VERTEX_ATTRIBUTE_MAP } as unknown as Record<string, Float32Array>;\n for (let set = 1; set < uvSetCount && set < UV_KEYS.length; set++) {\n // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n map[UV_KEYS[set]!] = new Float32Array(0);\n }\n return map as unknown as VertexAttributeMap;\n}\n\nexport function deriveVertexBufferLayout(\n map: VertexAttributeMap,\n opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n\n // Process present keys in canonical order; absent keys reserve no space.\n const entries: Entry[] = [];\n let offset = 0;\n\n for (const key of CANONICAL_KEYS) {\n if (map[key] === undefined) continue;\n entries.push({\n key,\n shaderLocation: CANONICAL_KEYS.indexOf(key),\n offset,\n format: ATTRIBUTE_FORMAT_MAP[key],\n });\n offset += ATTRIBUTE_BYTE_STRIDE[key];\n }\n\n const present = entries.length;\n\n // ── clamp-to-last alias (plan-strategy D-1) ──\n if (shaderUvSetCount > 0) {\n offset = emitAliasEntries(entries, shaderUvSetCount, offset);\n }\n\n if (present === 0 && shaderUvSetCount === 0) return [];\n\n // Sort by shaderLocation for deterministic vertex buffer descriptor\n entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n\n return [\n {\n arrayStride: offset,\n attributes: entries.map(({ shaderLocation, offset: entryOffset, format }) => ({\n shaderLocation,\n offset: entryOffset,\n format,\n })),\n },\n ];\n}\n\n/** Build the GPU descriptor from an immutable projection, adding only shader UV aliases. */\nexport function deriveVertexBufferLayoutFromProjection(\n projection: VertexLayoutProjection,\n opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n const entries = projection.attributes.map(({ key, shaderLocation, offset, format }) => ({\n key,\n shaderLocation,\n offset,\n format,\n }));\n let arrayStride = projection.arrayStride;\n const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n if (shaderUvSetCount > 0) {\n arrayStride = emitAliasEntries(entries, shaderUvSetCount, arrayStride);\n }\n entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n return projection.attributes.length === 0\n ? []\n : [\n {\n arrayStride,\n attributes: entries.map(({ shaderLocation, offset, format }) => ({\n shaderLocation,\n offset,\n format,\n })),\n },\n ];\n}\n\nexport interface VertexLayoutProjectionAttribute {\n readonly key: AttributeKey;\n readonly shaderLocation: number;\n readonly offset: number;\n readonly format: (typeof ATTRIBUTE_FORMAT_MAP)[AttributeKey];\n readonly byteLength: number;\n}\n\n/** Immutable geometry-owned projection consumed by packers and GPU consumers. */\nexport interface VertexLayoutProjection {\n readonly schemaVersion: 1;\n readonly attributes: readonly VertexLayoutProjectionAttribute[];\n readonly mask: number;\n readonly arrayStride: number;\n readonly digest: string;\n}\n\n/**\n * Derive a vertex count from the geometry-owned projection.\n *\n * Every upload, morph write, and draw range must use this same byte-level\n * calculation. Returning `undefined` keeps malformed payloads out of GPU\n * resource construction instead of silently truncating a fractional count.\n */\nexport function deriveVertexCount(\n vertices: { readonly byteLength: number },\n projection: VertexLayoutProjection,\n): number | undefined {\n const stride = projection.arrayStride;\n const byteLength = vertices.byteLength;\n if (\n !Number.isSafeInteger(stride) ||\n stride <= 0 ||\n !Number.isSafeInteger(byteLength) ||\n byteLength < 0 ||\n byteLength % stride !== 0\n ) {\n return undefined;\n }\n const count = byteLength / stride;\n return Number.isSafeInteger(count) ? count : undefined;\n}\n\nfunction bytesForFormat(format: string): number {\n if (format === 'uint16x4' || format === 'float32x2') return 8;\n if (format === 'float32x3') return 12;\n return 16;\n}\n\nfunction storageOf(value: unknown): VertexAttributeStorage {\n if (value instanceof ArrayBuffer) return 'array-buffer';\n if (value instanceof Float32Array) return 'float32';\n if (value instanceof Uint16Array) return 'uint16';\n return 'other';\n}\n\nfunction elementView(\n value: VertexAttributeMap[AttributeKey],\n format: string,\n): Float32Array | Uint16Array | undefined {\n if (value instanceof Float32Array || value instanceof Uint16Array) return value;\n if (value instanceof ArrayBuffer) {\n return format === 'uint16x4' ? new Uint16Array(value) : new Float32Array(value);\n }\n return undefined;\n}\n\nfunction fnv1a(input: string): string {\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n return `vlp-v1-${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\n/** Derive the one canonical immutable layout projection for a vertex map. */\nexport function deriveVertexLayoutProjection(map: VertexAttributeMap): VertexLayoutProjection {\n const attributes: VertexLayoutProjectionAttribute[] = [];\n let offset = 0;\n let mask = 0;\n for (const key of CANONICAL_KEYS) {\n const value = map[key];\n if (value === undefined) continue;\n const format = ATTRIBUTE_FORMAT_MAP[key];\n const byteLength = bytesForFormat(format);\n attributes.push({\n key,\n shaderLocation: CANONICAL_KEYS.indexOf(key),\n offset,\n format,\n byteLength,\n });\n mask |= 1 << CANONICAL_KEYS.indexOf(key);\n offset += byteLength;\n }\n const digestInput = [\n '1',\n String(mask),\n String(offset),\n ...attributes.map(\n (entry) => `${entry.key},${entry.shaderLocation},${entry.offset},${entry.format}`,\n ),\n ].join('|');\n return Object.freeze({\n schemaVersion: 1,\n attributes: Object.freeze(attributes),\n mask,\n arrayStride: offset,\n digest: fnv1a(digestInput),\n });\n}\n\nexport interface PackedVertexAttributes {\n readonly projection: VertexLayoutProjection;\n readonly vertices: Float32Array;\n}\n\nexport class VertexAttributePackError extends AssetError {\n declare readonly detail: VertexAttributePackDetail;\n\n constructor(detail: VertexAttributePackDetail) {\n super({\n code: 'asset-invalid-value',\n expected: 'canonical vertex attributes with matching storage and cardinality',\n hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n detail,\n });\n }\n}\n\nexport interface VertexLayoutProjectionMaskError {\n readonly code: 'vertex-layout-mask-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: {\n readonly mask: number;\n readonly knownMask: number;\n readonly unknownMask: number;\n readonly reason: 'empty' | 'unknown-bits';\n };\n}\n\n/** Rebuild the canonical projection from a packed wire mask without a second schema. */\nexport function deriveVertexLayoutProjectionFromMask(\n mask: number,\n): Result<VertexLayoutProjection, VertexLayoutProjectionMaskError> {\n const knownMask = (1 << CANONICAL_KEYS.length) - 1;\n const unsignedMask = Number.isInteger(mask) && mask >= 0 ? mask >>> 0 : 0xffffffff;\n const unknownMask = unsignedMask & ~knownMask;\n if (mask === 0) {\n return err({\n code: 'vertex-layout-mask-invalid',\n expected: 'a non-empty canonical vertex attribute mask',\n hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n detail: { mask, knownMask, unknownMask, reason: 'empty' },\n });\n }\n if (!Number.isInteger(mask) || mask < 0 || unknownMask !== 0) {\n return err({\n code: 'vertex-layout-mask-invalid',\n expected: `a mask using only canonical bits 0..${CANONICAL_KEYS.length - 1}`,\n hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n detail: { mask, knownMask, unknownMask, reason: 'unknown-bits' },\n });\n }\n const map: Record<string, Float32Array | Uint16Array> = {};\n for (let index = 0; index < CANONICAL_KEYS.length; index += 1) {\n if ((mask & (1 << index)) === 0) continue;\n const key = CANONICAL_KEYS[index];\n if (key !== undefined)\n map[key] = key === 'skinIndex' ? new Uint16Array(0) : new Float32Array(0);\n }\n return ok(deriveVertexLayoutProjection(map as VertexAttributeMap));\n}\n\n/** Pack tightly-owned attributes into the projection's canonical interleaved bytes. */\nexport function packInterleavedVertexAttributes(\n map: VertexAttributeMap,\n vertexCount: number,\n): Result<PackedVertexAttributes, VertexAttributePackError> {\n const invalid = (detail: VertexAttributePackDetail): Result<never, VertexAttributePackError> =>\n err(new VertexAttributePackError(detail));\n if (!Number.isInteger(vertexCount) || vertexCount < 0) {\n return invalid({ field: 'vertexCount', reason: 'vertex-count-invalid', actual: vertexCount });\n }\n const projection = deriveVertexLayoutProjection(map);\n if (projection.attributes.length === 0) {\n return invalid({ field: 'attributes', reason: 'attributes-empty', actualCount: 0 });\n }\n const output = new ArrayBuffer(projection.arrayStride * vertexCount);\n const outputFloats = new Float32Array(output);\n const outputU16 = new Uint16Array(output);\n for (const entry of projection.attributes) {\n const sourceValue = map[entry.key];\n if (sourceValue === undefined) continue;\n const uint16 = entry.format === 'uint16x4';\n const components = entry.byteLength / (uint16 ? 2 : 4);\n const bytesPerComponent = uint16 ? 2 : 4;\n if (sourceValue instanceof ArrayBuffer && sourceValue.byteLength % bytesPerComponent !== 0) {\n return invalid({\n field: entry.key,\n reason: 'attribute-cardinality-mismatch',\n vertexCount,\n componentsPerVertex: components,\n expectedLength: vertexCount * components,\n actualLength: sourceValue.byteLength / bytesPerComponent,\n });\n }\n const source = elementView(sourceValue, entry.format);\n if (\n source === undefined ||\n (uint16\n ? storageOf(sourceValue) !== 'uint16' && storageOf(sourceValue) !== 'array-buffer'\n : storageOf(sourceValue) !== 'float32' && storageOf(sourceValue) !== 'array-buffer')\n ) {\n return invalid({\n field: entry.key,\n reason: 'attribute-storage-invalid',\n expectedStorage: uint16 ? 'uint16' : 'float32',\n actualStorage: storageOf(sourceValue),\n });\n }\n const expectedLength = vertexCount * components;\n if (source.length !== expectedLength) {\n return invalid({\n field: entry.key,\n reason: 'attribute-cardinality-mismatch',\n vertexCount,\n componentsPerVertex: components,\n expectedLength,\n actualLength: source.length,\n });\n }\n if (entry.key === 'color') {\n for (let elementIndex = 0; elementIndex < source.length; elementIndex += 1) {\n const component = source[elementIndex] as number;\n if (!Number.isFinite(component)) {\n return invalid({\n field: 'color',\n reason: 'attribute-non-finite',\n elementIndex,\n actual: Number.isNaN(component)\n ? 'nan'\n : component === Number.POSITIVE_INFINITY\n ? 'positive-infinity'\n : 'negative-infinity',\n });\n }\n }\n }\n for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n for (let component = 0; component < components; component += 1) {\n const sourceIndex = vertex * components + component;\n const byteOffset =\n vertex * projection.arrayStride + entry.offset + component * (uint16 ? 2 : 4);\n if (uint16) outputU16[byteOffset / 2] = Number(source[sourceIndex] ?? 0);\n else outputFloats[byteOffset / 4] = Number(source[sourceIndex] ?? 0);\n }\n }\n }\n return ok(Object.freeze({ projection, vertices: outputFloats }));\n}\n","// @forgeax/engine-runtime - Procedural Box geometry (M3 / w8).\n//\n// Mirrors Three.js r184 BoxGeometry signature: createBoxGeometry(width, height,\n// depth, widthSegments?, heightSegments?, depthSegments?) -> Result<MeshAsset, AssetError>.\n// Degenerate parameters (any dim <= 0 or segment < 1) fail-fast with\n// AssetError({ code: 'asset-parse-failed' }) — charter proposition 4 explicit\n// failure red line (requirements §9 geometry double-semantics for\n// 'asset-parse-failed').\n//\n// Attributes populated: position / normal / uv (Float32Array views of the\n// interleaved `vertices` buffer; 8 floats per vertex). This is the AC-15\n// narrowing anchor: each factory includes a\n// `for (const [key] of Object.entries(attrs))` loop that TypeScript infers as\n// the VertexAttributeMap key union (no `as` cast).\n//\n// Related: requirements §AC-06 / §AC-14 / §AC-15;\n// plan-strategy §M3 + D-P5 (6 procedural geometries lowercase keys);\n// plan-tasks.json w8 acceptanceCheck;\n// research Finding 4 (Three.js r184 BufferGeometry mental migration).\n\nimport { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n ok,\n type Result,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { computeTangentVec4 } from './tangent';\nimport { deriveVertexBufferLayout } from './vertex-attribute-layout';\n\n/**\n * Floats per vertex for the procedural-geometry interleaved buffer that the\n * factory bodies fill in (position(3) + normal(3) + uv(2)). The\n * `meshFromInterleaved` helper expands this into the runtime 12-float\n * (position + normal + uv + tangent) layout consumed by the standard\n * pipeline (feat-20260518 M4 D-10).\n */\nexport const FACTORY_FLOATS_PER_VERTEX = 8;\n\n/**\n * Floats per vertex emitted by the factories' final MeshAsset\n * `vertices` Float32Array buffer: position(3) + normal(3) + uv(2) +\n * tangent(4) = 12. Procedural meshes feed both the standard and unlit\n * pipelines (D-10); BUILTIN_CUBE / TRIANGLE keep their 6-floats inline\n * shape (D-2 lock).\n */\nexport const PROCEDURAL_FLOATS_PER_VERTEX = 12;\n\nfunction interleavedInputError(field: string, value: number, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `valid interleaved triangle topology: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\n/**\n * Build the VertexAttributeMap by binding `position` / `normal` / `uv`\n * Float32Array views over the interleaved `vertices` buffer.\n *\n * AC-15 narrowing anchor: the `for (const [key] of Object.entries(attrs))`\n * loop below sees `key` typed as `'position' | 'normal' | 'uv' | 'tangent' |\n * 'skinIndex' | 'skinWeight' | 'color'` (the VertexAttributeMap key closed\n * set) — no `as` cast anywhere. Any typo (e.g. `'POSITION'`) would be a\n * tsc strict compile-time error (requirements §AC-15 narrowing evidence).\n */\nfunction buildAttributes(vertices: Float32Array, vertexCount: number): VertexAttributeMap {\n const positions = new Float32Array(vertexCount * 3);\n const normals = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const tangents = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n const base = i * PROCEDURAL_FLOATS_PER_VERTEX;\n positions[i * 3 + 0] = vertices[base + 0] as number;\n positions[i * 3 + 1] = vertices[base + 1] as number;\n positions[i * 3 + 2] = vertices[base + 2] as number;\n normals[i * 3 + 0] = vertices[base + 3] as number;\n normals[i * 3 + 1] = vertices[base + 4] as number;\n normals[i * 3 + 2] = vertices[base + 5] as number;\n uvs[i * 2 + 0] = vertices[base + 6] as number;\n uvs[i * 2 + 1] = vertices[base + 7] as number;\n tangents[i * 4 + 0] = vertices[base + 8] as number;\n tangents[i * 4 + 1] = vertices[base + 9] as number;\n tangents[i * 4 + 2] = vertices[base + 10] as number;\n tangents[i * 4 + 3] = vertices[base + 11] as number;\n }\n const attrs: VertexAttributeMap = {\n position: positions,\n normal: normals,\n uv: uvs,\n tangent: tangents,\n };\n // AC-15 narrowing evidence: deriveVertexBufferLayout is the SSOT\n // for the VertexAttributeMap -> GPU vertex layout translation.\n // The call validates that attrs conforms to the closed key set.\n deriveVertexBufferLayout(attrs);\n return attrs;\n}\n\n/**\n * Shared helper: build MeshAsset POD from the factory-emitted 8-floats\n * interleaved buffer (position + normal + uv) plus index list. Computes\n * per-vertex tangent (vec4) via `computeTangentVec4` (M4 / D-2 path A) and\n * expands the buffer to the runtime 12-floats stride (position + normal +\n * uv + tangent). All six procedural factories funnel through this helper\n * so the tangent SSOT lives in `geometry/tangent.ts` (D-7).\n */\nexport function meshFromInterleaved(\n vertices: Float32Array,\n indices: Uint16Array | Uint32Array,\n): Result<MeshAsset, AssetError> {\n if (vertices.length % FACTORY_FLOATS_PER_VERTEX !== 0) {\n return err(\n interleavedInputError(\n 'vertices',\n vertices.length,\n `vertices.length must be divisible by the interleaved stride of ${FACTORY_FLOATS_PER_VERTEX}`,\n ),\n );\n }\n const vertexCount = vertices.length / FACTORY_FLOATS_PER_VERTEX;\n if (indices.length % 3 !== 0) {\n return err(\n interleavedInputError(\n 'indices',\n indices.length,\n 'indices.length must be divisible by the triangle size of 3',\n ),\n );\n }\n for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n const index = indices[indexPosition];\n if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n return err(\n interleavedInputError(\n 'indices',\n index ?? -1,\n `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n ),\n );\n }\n }\n // Slice positions / normals / uvs out of the 8-floats interleaved\n // buffer for the tangent computation. The helper requires them in\n // tight-packed Float32Array form per attribute.\n const positions = new Float32Array(vertexCount * 3);\n const normals = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n for (let i = 0; i < vertexCount; i++) {\n const base = i * FACTORY_FLOATS_PER_VERTEX;\n positions[i * 3 + 0] = vertices[base + 0] as number;\n positions[i * 3 + 1] = vertices[base + 1] as number;\n positions[i * 3 + 2] = vertices[base + 2] as number;\n normals[i * 3 + 0] = vertices[base + 3] as number;\n normals[i * 3 + 1] = vertices[base + 4] as number;\n normals[i * 3 + 2] = vertices[base + 5] as number;\n uvs[i * 2 + 0] = vertices[base + 6] as number;\n uvs[i * 2 + 1] = vertices[base + 7] as number;\n }\n const tangentResult = computeTangentVec4(positions, normals, uvs, indices);\n if (!tangentResult.ok) return tangentResult;\n const tangents = tangentResult.value;\n const expanded = new Float32Array(vertexCount * PROCEDURAL_FLOATS_PER_VERTEX);\n for (let i = 0; i < vertexCount; i++) {\n const dst = i * PROCEDURAL_FLOATS_PER_VERTEX;\n const src = i * FACTORY_FLOATS_PER_VERTEX;\n expanded[dst + 0] = vertices[src + 0] as number;\n expanded[dst + 1] = vertices[src + 1] as number;\n expanded[dst + 2] = vertices[src + 2] as number;\n expanded[dst + 3] = vertices[src + 3] as number;\n expanded[dst + 4] = vertices[src + 4] as number;\n expanded[dst + 5] = vertices[src + 5] as number;\n expanded[dst + 6] = vertices[src + 6] as number;\n expanded[dst + 7] = vertices[src + 7] as number;\n expanded[dst + 8] = tangents[i * 4] as number;\n expanded[dst + 9] = tangents[i * 4 + 1] as number;\n expanded[dst + 10] = tangents[i * 4 + 2] as number;\n expanded[dst + 11] = tangents[i * 4 + 3] as number;\n }\n return ok({\n kind: 'mesh',\n vertices: expanded,\n indices,\n attributes: buildAttributes(expanded, vertexCount),\n submeshes: [\n {\n indexOffset: 0,\n indexCount: indices.length,\n vertexCount,\n topology: 'triangle-list',\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n // Procedural meshes carry their own local-space AABB: after feat-20260614\n // (D-15) `allocSharedRef` stores the payload verbatim -- there is no\n // `withMeshAabb` pass like the old `register`/`catalog` path -- so the cull\n // + pick path can only read an AABB the POD already holds.\n aabb: box3.fromPositions(box3.create(), positions),\n });\n}\n\n/** Shared helper: AssetError for degenerate geometry parameters. */\nexport function degenerate(detail: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `all dimensions > 0; segments >= 1 (${detail})`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n });\n}\n\n/**\n * Build a procedural box geometry aligned with Three.js r184 BoxGeometry.\n *\n * @param width positive X-axis extent\n * @param height positive Y-axis extent\n * @param depth positive Z-axis extent\n * @param widthSegments >= 1 subdivisions along X\n * @param heightSegments >= 1 subdivisions along Y\n * @param depthSegments >= 1 subdivisions along Z\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createBoxGeometry(\n width: number,\n height: number,\n depth: number,\n widthSegments: number = 1,\n heightSegments: number = 1,\n depthSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (width <= 0 || height <= 0 || depth <= 0) {\n return err(degenerate(`width=${width}, height=${height}, depth=${depth}`));\n }\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n const ds = depthSegments | 0;\n if (ws < 1 || hs < 1 || ds < 1) {\n return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}, depthSegments=${ds}`));\n }\n\n type FaceSpec = {\n readonly uAxis: 0 | 1 | 2;\n readonly vAxis: 0 | 1 | 2;\n readonly wAxis: 0 | 1 | 2;\n readonly uSign: 1 | -1;\n readonly vSign: 1 | -1;\n readonly wSign: 1 | -1;\n readonly uSegs: number;\n readonly vSegs: number;\n readonly uSize: number;\n readonly vSize: number;\n readonly wSize: number;\n };\n\n const hw = width / 2;\n const hh = height / 2;\n const hd = depth / 2;\n\n const faces: readonly FaceSpec[] = [\n // +X face\n {\n uAxis: 2,\n vAxis: 1,\n wAxis: 0,\n uSign: -1,\n vSign: 1,\n wSign: 1,\n uSegs: ds,\n vSegs: hs,\n uSize: depth,\n vSize: height,\n wSize: width,\n },\n // -X face\n {\n uAxis: 2,\n vAxis: 1,\n wAxis: 0,\n uSign: 1,\n vSign: 1,\n wSign: -1,\n uSegs: ds,\n vSegs: hs,\n uSize: depth,\n vSize: height,\n wSize: width,\n },\n // +Y face\n {\n uAxis: 0,\n vAxis: 2,\n wAxis: 1,\n uSign: 1,\n vSign: 1,\n wSign: 1,\n uSegs: ws,\n vSegs: ds,\n uSize: width,\n vSize: depth,\n wSize: height,\n },\n // -Y face\n {\n uAxis: 0,\n vAxis: 2,\n wAxis: 1,\n uSign: 1,\n vSign: -1,\n wSign: -1,\n uSegs: ws,\n vSegs: ds,\n uSize: width,\n vSize: depth,\n wSize: height,\n },\n // +Z face\n {\n uAxis: 0,\n vAxis: 1,\n wAxis: 2,\n uSign: 1,\n vSign: 1,\n wSign: 1,\n uSegs: ws,\n vSegs: hs,\n uSize: width,\n vSize: height,\n wSize: depth,\n },\n // -Z face\n {\n uAxis: 0,\n vAxis: 1,\n wAxis: 2,\n uSign: -1,\n vSign: 1,\n wSign: -1,\n uSegs: ws,\n vSegs: hs,\n uSize: width,\n vSize: height,\n wSize: depth,\n },\n ];\n\n let vertexCount = 0;\n let indexCount = 0;\n for (const f of faces) {\n vertexCount += (f.uSegs + 1) * (f.vSegs + 1);\n indexCount += f.uSegs * f.vSegs * 6;\n }\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n let vIdx = 0;\n let iIdx = 0;\n\n const halves: readonly [number, number, number] = [hw, hh, hd];\n\n for (const f of faces) {\n const vStart = vIdx;\n const halfU = halves[f.uAxis] as number;\n const halfV = halves[f.vAxis] as number;\n const halfW = halves[f.wAxis] as number;\n for (let j = 0; j <= f.vSegs; j++) {\n for (let i = 0; i <= f.uSegs; i++) {\n const uCoord = ((i / f.uSegs) * f.uSize - f.uSize / 2) * f.uSign;\n const vCoord = ((j / f.vSegs) * f.vSize - f.vSize / 2) * f.vSign;\n const pos: [number, number, number] = [0, 0, 0];\n pos[f.uAxis] = (uCoord / f.uSize) * halfU * 2;\n pos[f.vAxis] = (vCoord / f.vSize) * halfV * 2;\n pos[f.wAxis] = halfW * f.wSign;\n const normal: [number, number, number] = [0, 0, 0];\n normal[f.wAxis] = f.wSign;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = pos[0];\n vertices[base + 1] = pos[1];\n vertices[base + 2] = pos[2];\n vertices[base + 3] = normal[0];\n vertices[base + 4] = normal[1];\n vertices[base + 5] = normal[2];\n vertices[base + 6] = i / f.uSegs;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = j / f.vSegs;\n vIdx++;\n }\n }\n // bug-20260519: per-face winding correction.\n //\n // The natural quad `(a, b, d) + (a, d, c)` (with a/b/c/d at quad corners\n // bottom-left / bottom-right / top-left / top-right of the (u, v) grid)\n // winds CCW around the direction `(uHat x vHat) * uSign * vSign`. We\n // want CCW around the outward normal `wSign * wHat`. The two agree iff\n // `(uHat x vHat) . wHat * uSign * vSign * wSign == +1`.\n // The first factor is the Levi-Civita symbol of (uAxis, vAxis, wAxis):\n // +1 for cyclic permutations of (0, 1, 2), -1 for anti-cyclic. The\n // 6-face spec at the top of this function lands as:\n // +X / -X: (Z, Y, X) anti-cyclic -> levi = -1\n // +Y / -Y: (X, Z, Y) anti-cyclic -> levi = -1\n // +Z / -Z: (X, Y, Z) cyclic -> levi = +1\n // Combined with the per-face signs the product comes out to +1 for\n // ±X, ±Z (no swap needed) and -1 for ±Y (swap). The swap branch is\n // the diagonally mirrored CCW pair `(a, d, b) + (a, c, d)`.\n const isCyclic = (f.vAxis - f.uAxis + 3) % 3 === 1 && (f.wAxis - f.vAxis + 3) % 3 === 1;\n const levi = isCyclic ? 1 : -1;\n const ccwOutward = levi * f.uSign * f.vSign * f.wSign > 0;\n for (let j = 0; j < f.vSegs; j++) {\n for (let i = 0; i < f.uSegs; i++) {\n const a = vStart + j * (f.uSegs + 1) + i;\n const b = vStart + j * (f.uSegs + 1) + i + 1;\n const c = vStart + (j + 1) * (f.uSegs + 1) + i;\n const d = vStart + (j + 1) * (f.uSegs + 1) + i + 1;\n if (ccwOutward) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = a;\n indices[iIdx++] = d;\n indices[iIdx++] = c;\n } else {\n indices[iIdx++] = a;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = a;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","import {\n decodeMeshBinHeader,\n MESH_BIN_HEADER_V4_BYTES,\n MESH_BIN_VERSION,\n type MeshBinHeaderV4,\n} from '@forgeax/engine-pack';\nimport type {\n AssetGuid,\n MeshAsset,\n MeshMaterialSlot,\n MorphTarget,\n Submesh,\n VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { PROCEDURAL_FLOATS_PER_VERTEX } from '../box';\nimport {\n deriveVertexLayoutProjection,\n deriveVertexLayoutProjectionFromMask,\n type VertexLayoutProjection,\n} from '../vertex-attribute-layout';\n\ninterface PackedMesh {\n readonly version: 4;\n readonly vertices: Float32Array;\n readonly attributes?: VertexAttributeMap;\n readonly indices?: Uint16Array | Uint32Array;\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: readonly {\n readonly slotName: string;\n readonly sourceKey?: string;\n readonly defaultMaterialRef?: number;\n /** Direct Pack JSON keeps the authoring GUID until the producer boundary. */\n readonly defaultMaterial?: string;\n }[];\n readonly aabb?: Float32Array;\n readonly skinIndex?: Uint16Array;\n readonly skinWeight?: Float32Array;\n readonly uvSetCount: number;\n readonly floatsPerVertex: number;\n readonly morphTargets?: readonly MorphTarget[];\n readonly morphWeights?: Float32Array;\n readonly projection?: VertexLayoutProjection;\n}\n\nfunction parseGuid(value: string): AssetGuid | undefined {\n const compact = value.replaceAll('-', '');\n if (!/^[0-9a-f]{32}$/i.test(compact)) return undefined;\n const bytes = new Uint8Array(16);\n for (let index = 0; index < bytes.length; index += 1) {\n const pair = compact.slice(index * 2, index * 2 + 2);\n const parsed = Number.parseInt(pair, 16);\n if (!Number.isInteger(parsed)) return undefined;\n bytes[index] = parsed;\n }\n return bytes as AssetGuid;\n}\n\nfunction floatArray(value: unknown): Float32Array | undefined {\n if (value instanceof Float32Array) return value;\n if (Array.isArray(value)) return new Float32Array(value as number[]);\n return undefined;\n}\n\nfunction indexArray(value: unknown): Uint16Array | Uint32Array | undefined {\n if (value instanceof Uint16Array || value instanceof Uint32Array) {\n return value.length === 0 ? undefined : value;\n }\n if (!Array.isArray(value)) return undefined;\n if (value.length === 0) return undefined;\n return value.some((entry) => entry > 0xffff)\n ? new Uint32Array(value as number[])\n : new Uint16Array(value as number[]);\n}\n\nfunction integerArray(value: unknown): Uint16Array | undefined {\n if (value instanceof Uint16Array) return value;\n if (Array.isArray(value)) return new Uint16Array(value as number[]);\n return undefined;\n}\n\nfunction morphTargets(value: unknown): readonly MorphTarget[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length === 0 || value.length > 8) return undefined;\n const targets: MorphTarget[] = [];\n for (const raw of value) {\n if (raw === null || typeof raw !== 'object') return undefined;\n const target: { position?: Float32Array; normal?: Float32Array; tangent?: Float32Array } = {};\n for (const [key, stream] of Object.entries(raw as Record<string, unknown>)) {\n if (key !== 'position' && key !== 'normal' && key !== 'tangent') return undefined;\n const typed = floatArray(stream);\n if (typed === undefined) return undefined;\n if (key === 'position') target.position = typed;\n else if (key === 'normal') target.normal = typed;\n else target.tangent = typed;\n }\n if (Object.keys(target).length === 0) return undefined;\n targets.push(target);\n }\n return targets;\n}\n\nfunction unpackMeshBinary(bytes: Uint8Array): PackedMesh | undefined {\n const headerResult = decodeMeshBinHeader(bytes);\n if (!headerResult.ok) return undefined;\n const header: MeshBinHeaderV4 = headerResult.value;\n const projectionResult = deriveVertexLayoutProjectionFromMask(header.mask);\n if (!projectionResult.ok) return undefined;\n const projection = projectionResult.value;\n if (\n projection.schemaVersion !== header.projectionVersion ||\n projection.arrayStride !== header.stride ||\n projection.digest !== header.digest\n ) {\n return undefined;\n }\n const payloadBytes = header.vertexBytes + header.indexBytes + header.jsonBytes;\n if (MESH_BIN_HEADER_V4_BYTES + payloadBytes !== bytes.byteLength) return undefined;\n\n let offset = MESH_BIN_HEADER_V4_BYTES;\n const vertexBytes = bytes.subarray(offset, offset + header.vertexBytes);\n const vertices = new Float32Array(vertexBytes.byteLength / 4);\n new Uint8Array(vertices.buffer).set(vertexBytes);\n offset += header.vertexBytes;\n let indices: Uint16Array | Uint32Array | undefined;\n if (header.indexCount > 0) {\n const indexBytes = bytes.subarray(offset, offset + header.indexBytes);\n if (header.indexWidth === 2) {\n indices = new Uint16Array(header.indexCount);\n new Uint8Array(indices.buffer).set(indexBytes);\n } else if (header.indexWidth === 4) {\n indices = new Uint32Array(header.indexCount);\n new Uint8Array(indices.buffer).set(indexBytes);\n } else {\n return undefined;\n }\n offset += header.indexBytes;\n }\n\n let metadata: {\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: PackedMesh['materialSlots'];\n readonly aabb?: readonly number[];\n readonly morphTargets?: readonly Record<string, readonly number[]>[];\n readonly morphWeights?: readonly number[];\n };\n try {\n metadata = JSON.parse(\n new TextDecoder().decode(bytes.subarray(offset, offset + header.jsonBytes)),\n ) as typeof metadata;\n } catch {\n return undefined;\n }\n if (\n metadata.submeshes === undefined ||\n metadata.submeshes.length === 0 ||\n metadata.materialSlots === undefined\n ) {\n return undefined;\n }\n const attributes: Record<string, Float32Array | Uint16Array> = {};\n const view = new DataView(vertices.buffer);\n for (const entry of projection.attributes) {\n const components = entry.byteLength / (entry.format === 'uint16x4' ? 2 : 4);\n const target =\n entry.format === 'uint16x4'\n ? new Uint16Array(header.vertexCount * components)\n : new Float32Array(header.vertexCount * components);\n for (let vertex = 0; vertex < header.vertexCount; vertex += 1) {\n for (let component = 0; component < components; component += 1) {\n const sourceOffset =\n vertex * header.stride + entry.offset + component * (entry.format === 'uint16x4' ? 2 : 4);\n if (sourceOffset + (entry.format === 'uint16x4' ? 2 : 4) > vertices.byteLength) {\n return undefined;\n }\n if (target instanceof Uint16Array) {\n target[vertex * components + component] = view.getUint16(sourceOffset, true);\n } else {\n const value = view.getFloat32(sourceOffset, true);\n if (!Number.isFinite(value)) return undefined;\n target[vertex * components + component] = value;\n }\n }\n }\n attributes[entry.key] = target;\n }\n const decodedMorphTargets = morphTargets(metadata.morphTargets);\n const morphWeightValues =\n metadata.morphWeights === undefined ? undefined : new Float32Array(metadata.morphWeights);\n if (\n decodedMorphTargets !== undefined &&\n morphWeightValues !== undefined &&\n decodedMorphTargets.length !== morphWeightValues.length\n ) {\n return undefined;\n }\n return {\n version: MESH_BIN_VERSION,\n vertices,\n attributes: attributes as VertexAttributeMap,\n projection,\n ...(indices === undefined ? {} : { indices }),\n submeshes: metadata.submeshes,\n materialSlots: metadata.materialSlots,\n ...(metadata.aabb === undefined ? {} : { aabb: new Float32Array(metadata.aabb) }),\n // MeshAsset.vertices remains a Float32Array, so translate the wire stride\n // (bytes) back to the legacy float-count input expected by meshFromParts.\n floatsPerVertex: header.stride / Float32Array.BYTES_PER_ELEMENT,\n uvSetCount: 1,\n ...(decodedMorphTargets === undefined ? {} : { morphTargets: decodedMorphTargets }),\n ...(morphWeightValues === undefined ? {} : { morphWeights: morphWeightValues }),\n };\n}\n\nfunction materialSlotsFor(\n raw: PackedMesh['materialSlots'],\n submeshes: readonly Submesh[],\n refs: readonly string[],\n): readonly MeshMaterialSlot[] {\n if (raw === undefined)\n return submeshes.map((_submesh, index) => ({ slotName: `LegacySlot_${index}` }));\n return raw.map((slot, index) => {\n const reference =\n slot.defaultMaterialRef === undefined ? slot.defaultMaterial : refs[slot.defaultMaterialRef];\n const defaultMaterial = reference === undefined ? undefined : parseGuid(reference);\n return {\n slotName:\n typeof slot.slotName === 'string' && slot.slotName.trim().length > 0\n ? slot.slotName\n : `LegacySlot_${index}`,\n ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n ...(defaultMaterial === undefined ? {} : { defaultMaterial }),\n };\n });\n}\n\nfunction submeshesFor(\n raw: readonly Record<string, unknown>[] | undefined,\n vertexCount: number,\n indexCount: number,\n): readonly Submesh[] {\n const values =\n raw === undefined || raw.length === 0\n ? [{ indexOffset: 0, indexCount, vertexCount, topology: 'triangle-list' }]\n : raw;\n return values.map((value, index) => ({\n indexOffset: typeof value.indexOffset === 'number' ? value.indexOffset : 0,\n indexCount: typeof value.indexCount === 'number' ? value.indexCount : indexCount,\n vertexCount: typeof value.vertexCount === 'number' ? value.vertexCount : vertexCount,\n topology:\n value.topology === 'line-list' ||\n value.topology === 'line-strip' ||\n value.topology === 'point-list' ||\n value.topology === 'triangle-strip'\n ? value.topology\n : 'triangle-list',\n materialSlot: typeof value.materialSlot === 'number' ? value.materialSlot : index,\n }));\n}\n\nfunction deriveAabb(vertices: Float32Array, stride: number): Float32Array | undefined {\n if (stride < 3 || vertices.length < 3 || vertices.length % stride !== 0) return undefined;\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let minZ = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n let maxZ = Number.NEGATIVE_INFINITY;\n for (let offset = 0; offset < vertices.length; offset += stride) {\n const x = vertices[offset];\n const y = vertices[offset + 1];\n const z = vertices[offset + 2];\n if (x === undefined || y === undefined || z === undefined) return undefined;\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n minZ = Math.min(minZ, z);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n maxZ = Math.max(maxZ, z);\n }\n return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ);\n}\n\nfunction meshFromParts(\n parts: {\n readonly vertices: unknown;\n readonly indices?: unknown;\n readonly attributes?: unknown;\n readonly aabb?: unknown;\n readonly submeshes?: readonly Record<string, unknown>[];\n readonly materialSlots?: PackedMesh['materialSlots'];\n readonly morphTargets?: unknown;\n readonly morphWeights?: unknown;\n readonly floatsPerVertex?: number;\n readonly uvSetCount?: number;\n },\n refs: readonly string[],\n): MeshAsset | undefined {\n const vertices = floatArray(parts.vertices);\n if (vertices === undefined || vertices.length === 0) return undefined;\n const indices = indexArray(parts.indices);\n const sourceAttributes =\n parts.attributes !== null && typeof parts.attributes === 'object'\n ? (parts.attributes as Record<string, unknown>)\n : {};\n const attributes: VertexAttributeMap = {};\n for (const key of [\n 'position',\n 'normal',\n 'uv',\n 'tangent',\n 'uv1',\n 'uv2',\n 'uv3',\n 'uv4',\n 'uv5',\n 'uv6',\n 'uv7',\n 'color',\n ] as const) {\n const value = floatArray(sourceAttributes[key]);\n if (value !== undefined) attributes[key] = value;\n }\n const skinIndex = integerArray(sourceAttributes.skinIndex);\n const skinWeight = floatArray(sourceAttributes.skinWeight);\n if (skinIndex !== undefined) attributes.skinIndex = skinIndex;\n if (skinWeight !== undefined) attributes.skinWeight = skinWeight;\n const stride = parts.floatsPerVertex ?? 0;\n const vertexCount = stride > 0 ? vertices.length / stride : vertices.length;\n const submeshes = submeshesFor(parts.submeshes, vertexCount, indices?.length ?? 0);\n const materialSlots = materialSlotsFor(parts.materialSlots, submeshes, refs);\n const aabb = floatArray(parts.aabb) ?? deriveAabb(vertices, stride);\n if (aabb === undefined) return undefined;\n const morph = morphTargets(parts.morphTargets);\n const weights = floatArray(parts.morphWeights);\n if (morph !== undefined && weights !== undefined && morph.length !== weights.length)\n return undefined;\n const uvSetCount = parts.uvSetCount ?? 1;\n if (stride > 0 && uvSetCount > 1) {\n const hasSkin = stride === 18 + (uvSetCount - 1) * 2;\n const firstOffset = hasSkin ? 18 : PROCEDURAL_FLOATS_PER_VERTEX;\n const extraUvKeys = ['uv1', 'uv2', 'uv3', 'uv4', 'uv5', 'uv6', 'uv7'] as const;\n for (let set = 1; set < uvSetCount; set += 1) {\n const key = extraUvKeys[set - 1];\n if (key === undefined) return undefined;\n const values = new Float32Array(vertexCount * 2);\n const sourceOffset = firstOffset + (set - 1) * 2;\n for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n const source = vertex * stride + sourceOffset;\n values[vertex * 2] = vertices[source] ?? 0;\n values[vertex * 2 + 1] = vertices[source + 1] ?? 0;\n }\n attributes[key] = values;\n }\n }\n return {\n kind: 'mesh',\n vertices,\n ...(indices === undefined ? {} : { indices }),\n attributes,\n aabb,\n submeshes,\n materialSlots,\n ...(morph === undefined ? {} : { morphTargets: morph }),\n ...(weights === undefined ? {} : { morphWeights: weights }),\n };\n}\n\nexport function decodeMeshBinary(\n bytes: Uint8Array,\n refs: readonly string[],\n): MeshAsset | undefined {\n const decoded = unpackMeshBinary(bytes);\n if (decoded === undefined) return undefined;\n return meshFromParts(\n {\n vertices: decoded.vertices,\n ...(decoded.attributes === undefined ? {} : { attributes: decoded.attributes }),\n ...(decoded.indices === undefined ? {} : { indices: decoded.indices }),\n ...(decoded.aabb === undefined ? {} : { aabb: decoded.aabb }),\n ...(decoded.submeshes === undefined ? {} : { submeshes: decoded.submeshes }),\n ...(decoded.materialSlots === undefined ? {} : { materialSlots: decoded.materialSlots }),\n ...(decoded.morphTargets === undefined ? {} : { morphTargets: decoded.morphTargets }),\n ...(decoded.morphWeights === undefined ? {} : { morphWeights: decoded.morphWeights }),\n ...(decoded.skinIndex === undefined && decoded.skinWeight === undefined\n ? {}\n : {\n attributes: {\n ...(decoded.skinIndex === undefined ? {} : { skinIndex: decoded.skinIndex }),\n ...(decoded.skinWeight === undefined ? {} : { skinWeight: decoded.skinWeight }),\n },\n }),\n floatsPerVertex: decoded.floatsPerVertex,\n uvSetCount: decoded.uvSetCount,\n },\n refs,\n );\n}\n\nexport function normalizeMeshPayload(\n payload: unknown,\n refs: readonly string[],\n): MeshAsset | undefined {\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n const source = payload as Record<string, unknown>;\n if (source.kind !== 'mesh') return undefined;\n const sourceAttributes =\n source.attributes !== null && typeof source.attributes === 'object'\n ? (source.attributes as VertexAttributeMap)\n : undefined;\n const projection =\n sourceAttributes === undefined ? undefined : deriveVertexLayoutProjection(sourceAttributes);\n const floatsPerVertex =\n projection === undefined || projection.attributes.length === 0\n ? PROCEDURAL_FLOATS_PER_VERTEX\n : projection.arrayStride / Float32Array.BYTES_PER_ELEMENT;\n return meshFromParts(\n {\n vertices: source.vertices,\n ...(source.indices === undefined ? {} : { indices: source.indices }),\n ...(source.attributes === undefined ? {} : { attributes: source.attributes }),\n ...(source.aabb === undefined ? {} : { aabb: source.aabb }),\n submeshes: Array.isArray(source.submeshes)\n ? (source.submeshes as Record<string, unknown>[])\n : [],\n ...(Array.isArray(source.materialSlots)\n ? { materialSlots: source.materialSlots as PackedMesh['materialSlots'] }\n : {}),\n ...(source.morphTargets === undefined ? {} : { morphTargets: source.morphTargets }),\n ...(source.morphWeights === undefined ? {} : { morphWeights: source.morphWeights }),\n floatsPerVertex,\n },\n refs,\n );\n}\n","// @forgeax/engine-runtime - Procedural Cylinder geometry (M3 / w8).\n//\n// Mirrors Three.js r184 CylinderGeometry: createCylinderGeometry(radiusTop,\n// radiusBottom, height, radialSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>.\n// Degenerate parameters (both radii <= 0, height <= 0, radialSegments < 3,\n// heightSegments < 1) fail-fast with AssetError('asset-parse-failed').\n// Note: one radius may be zero (degenerate end collapses to a cone tip),\n// but NOT both — a zero cylinder has no surface area.\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createCylinderGeometry(\n radiusTop: number,\n radiusBottom: number,\n height: number,\n radialSegments: number = 16,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (radiusTop < 0 || radiusBottom < 0 || height <= 0) {\n return err(\n degenerate(`radiusTop=${radiusTop}, radiusBottom=${radiusBottom}, height=${height}`),\n );\n }\n if (radiusTop === 0 && radiusBottom === 0) {\n return err(degenerate(`radiusTop=0 and radiusBottom=0; at least one must be > 0`));\n }\n const rs = radialSegments | 0;\n const hs = heightSegments | 0;\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n if (hs < 1) return err(degenerate(`heightSegments=${hs}; minimum 1`));\n\n const halfHeight = height / 2;\n // Side: (rs + 1) * (hs + 1) vertices\n const sideVertexCount = (rs + 1) * (hs + 1);\n // Caps: each cap has 1 center + (rs + 1) ring vertices if the radius is > 0\n const topCap = radiusTop > 0;\n const bottomCap = radiusBottom > 0;\n const topCount = topCap ? rs + 2 : 0;\n const bottomCount = bottomCap ? rs + 2 : 0;\n const vertexCount = sideVertexCount + topCount + bottomCount;\n\n const sideIndexCount = rs * hs * 6;\n const topIdxCount = topCap ? rs * 3 : 0;\n const bottomIdxCount = bottomCap ? rs * 3 : 0;\n const indexCount = sideIndexCount + topIdxCount + bottomIdxCount;\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n // --- side ---\n let vIdx = 0;\n const slope = (radiusBottom - radiusTop) / height;\n for (let iy = 0; iy <= hs; iy++) {\n const v = iy / hs;\n const y = halfHeight - v * height;\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const x = radius * sinT;\n const z = radius * cosT;\n const nx = sinT;\n const ny = slope;\n const nz = cosT;\n // normalize\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < rs; ix++) {\n const a = (rs + 1) * iy + ix;\n const b = (rs + 1) * (iy + 1) + ix;\n const c = (rs + 1) * (iy + 1) + ix + 1;\n const d = (rs + 1) * iy + ix + 1;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n // --- top cap ---\n if (topCap) {\n const centerIdx = vIdx;\n const cBase = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[cBase + 0] = 0;\n vertices[cBase + 1] = halfHeight;\n vertices[cBase + 2] = 0;\n vertices[cBase + 3] = 0;\n vertices[cBase + 4] = 1;\n vertices[cBase + 5] = 0;\n vertices[cBase + 6] = 0.5;\n vertices[cBase + 7] = 0.5;\n vIdx++;\n const ringStart = vIdx;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = radiusTop * sinT;\n vertices[base + 1] = halfHeight;\n vertices[base + 2] = radiusTop * cosT;\n vertices[base + 3] = 0;\n vertices[base + 4] = 1;\n vertices[base + 5] = 0;\n vertices[base + 6] = sinT * 0.5 + 0.5;\n vertices[base + 7] = cosT * 0.5 + 0.5;\n vIdx++;\n }\n for (let ix = 0; ix < rs; ix++) {\n indices[iIdx++] = centerIdx;\n indices[iIdx++] = ringStart + ix;\n indices[iIdx++] = ringStart + ix + 1;\n }\n }\n\n // --- bottom cap ---\n if (bottomCap) {\n const centerIdx = vIdx;\n const cBase = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[cBase + 0] = 0;\n vertices[cBase + 1] = -halfHeight;\n vertices[cBase + 2] = 0;\n vertices[cBase + 3] = 0;\n vertices[cBase + 4] = -1;\n vertices[cBase + 5] = 0;\n vertices[cBase + 6] = 0.5;\n vertices[cBase + 7] = 0.5;\n vIdx++;\n const ringStart = vIdx;\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = radiusBottom * sinT;\n vertices[base + 1] = -halfHeight;\n vertices[base + 2] = radiusBottom * cosT;\n vertices[base + 3] = 0;\n vertices[base + 4] = -1;\n vertices[base + 5] = 0;\n vertices[base + 6] = sinT * 0.5 + 0.5;\n vertices[base + 7] = cosT * 0.5 + 0.5;\n vIdx++;\n }\n for (let ix = 0; ix < rs; ix++) {\n indices[iIdx++] = centerIdx;\n indices[iIdx++] = ringStart + ix + 1;\n indices[iIdx++] = ringStart + ix;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","// @forgeax/engine-runtime - Procedural Plane geometry (M3 / w8).\n//\n// Mirrors Three.js r184 PlaneGeometry: createPlaneGeometry(width, height,\n// widthSegments?, heightSegments?) -> Result<MeshAsset, AssetError>. The plane\n// lies on the XY plane with +Z normal (standard three.js orientation).\n// Degenerate parameters fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createPlaneGeometry(\n width: number,\n height: number,\n widthSegments: number = 1,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (width <= 0 || height <= 0) {\n return err(degenerate(`width=${width}, height=${height}`));\n }\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n if (ws < 1 || hs < 1) {\n return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}`));\n }\n\n const halfW = width / 2;\n const halfH = height / 2;\n const gridX1 = ws + 1;\n const gridY1 = hs + 1;\n const segW = width / ws;\n const segH = height / hs;\n\n const vertexCount = gridX1 * gridY1;\n const indexCount = ws * hs * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segH - halfH;\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segW - halfW;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = -y;\n vertices[base + 2] = 0;\n vertices[base + 3] = 0;\n vertices[base + 4] = 0;\n vertices[base + 5] = 1;\n vertices[base + 6] = ix / ws;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = iy / hs;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < ws; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n","// @forgeax/engine-runtime - Procedural Sphere geometry (M3 / w8).\n//\n// Mirrors Three.js r184 SphereGeometry signature:\n// createSphereGeometry(radius, widthSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>. Degenerate parameters (radius <= 0, widthSegments\n// < 3, heightSegments < 2) fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createSphereGeometry(\n radius: number,\n widthSegments: number = 16,\n heightSegments: number = 12,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n const ws = widthSegments | 0;\n const hs = heightSegments | 0;\n if (ws < 3) return err(degenerate(`widthSegments=${ws}; minimum 3`));\n if (hs < 2) return err(degenerate(`heightSegments=${hs}; minimum 2`));\n\n const vertexCount = (ws + 1) * (hs + 1);\n const indexCount = ws * hs * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let iy = 0; iy <= hs; iy++) {\n const v = iy / hs;\n const phi = v * Math.PI;\n for (let ix = 0; ix <= ws; ix++) {\n const u = ix / ws;\n const theta = u * Math.PI * 2;\n const x = -radius * Math.cos(theta) * Math.sin(phi);\n const y = radius * Math.cos(phi);\n const z = radius * Math.sin(theta) * Math.sin(phi);\n const nx = x / radius;\n const ny = y / radius;\n const nz = z / radius;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx;\n vertices[base + 4] = ny;\n vertices[base + 5] = nz;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n const stride = ws + 1;\n for (let iy = 0; iy < hs; iy++) {\n for (let ix = 0; ix < ws; ix++) {\n const a = iy * stride + ix + 1;\n const b = iy * stride + ix;\n const c = (iy + 1) * stride + ix;\n const d = (iy + 1) * stride + ix + 1;\n if (iy !== 0) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n }\n if (iy !== hs - 1) {\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n\n // trim unused tail (pole rows contribute fewer triangles than the prealloc estimate)\n const trimmed = indices.slice(0, iIdx);\n return meshFromInterleaved(vertices, trimmed);\n}\n","import type { AssetError, MeshAsset, Result } from '@forgeax/engine-types';\nimport { createBoxGeometry, meshFromInterleaved } from '../box';\nimport { createCylinderGeometry } from '../cylinder';\nimport { createPlaneGeometry } from '../plane';\nimport { createSphereGeometry } from '../sphere';\n\nexport type PrimitiveMeshKind =\n | 'cube'\n | 'triangle'\n | 'quad'\n | 'sphere'\n | 'cylinder'\n | 'nine-slice-quad';\n\nconst PROCEDURAL_MESH_KINDS: Readonly<Record<string, PrimitiveMeshKind>> = {\n 'procedural-cube': 'cube',\n 'procedural-triangle': 'triangle',\n 'procedural-quad': 'quad',\n 'procedural-sphere': 'sphere',\n 'procedural-cylinder': 'cylinder',\n 'procedural-nine-slice-quad': 'nine-slice-quad',\n};\n\n/** Create one ordinary mesh payload for allocation or interning by an owning World. */\nexport function createPrimitiveMesh(kind: PrimitiveMeshKind): Result<MeshAsset, AssetError> {\n switch (kind) {\n case 'cube':\n return createBoxGeometry(1, 1, 1);\n case 'triangle':\n return meshFromInterleaved(\n new Float32Array([\n 0, 0.7, 0, 0, 0, 1, 0.5, 1, -0.7, -0.6, 0, 0, 0, 1, 0, 0, 0.7, -0.6, 0, 0, 0, 1, 1, 0,\n ]),\n new Uint16Array([0, 1, 2]),\n );\n case 'quad':\n return createPlaneGeometry(1, 1);\n case 'sphere':\n return createSphereGeometry(1, 16, 12);\n case 'cylinder':\n return createCylinderGeometry(0.5, 0.5, 1, 16, 1);\n case 'nine-slice-quad':\n return createPlaneGeometry(1, 1, 3, 3);\n }\n}\n\n/** Resolve the canonical Pack v2 procedural mesh descriptor without duplicating its alias table. */\nexport function createProceduralMesh(payload: unknown): Result<MeshAsset, AssetError> | undefined {\n if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n const geometry = (payload as { readonly geometry?: unknown }).geometry;\n if (typeof geometry !== 'string') return undefined;\n const kind = PROCEDURAL_MESH_KINDS[geometry];\n if (kind === undefined) return undefined;\n return createPrimitiveMesh(kind);\n}\n","import {\n type AssetDecoder,\n type AssetDecoderContribution,\n type AssetKind,\n type AssetLoadError,\n err,\n type MeshAsset,\n ok,\n type Result,\n} from '@forgeax/engine-types';\nimport { decodeMeshBinary, normalizeMeshPayload } from './mesh-binary';\nimport { createProceduralMesh } from './primitive-mesh';\n\nexport const meshAssetKind: AssetKind<MeshAsset, 'mesh'> = {\n kind: 'mesh',\n} as AssetKind<MeshAsset, 'mesh'>;\n\nfunction proceduralMesh(payload: unknown): Result<MeshAsset, AssetLoadError> | undefined {\n const result = createProceduralMesh(payload);\n if (result === undefined) return undefined;\n if (result.ok) return result;\n return err({\n code: 'asset-package-invalid',\n expected: result.error.expected,\n hint: 'recook the authored procedural mesh descriptor',\n detail: { guid: '', reason: 'procedural mesh creation failed' },\n });\n}\n\n/** Geometry validates mesh payload shape before any render owner consumes it. */\nexport const meshAssetDecoder: AssetDecoder<MeshAsset> = {\n async decode({ envelope, artifacts }): Promise<Result<MeshAsset, AssetLoadError>> {\n const payload = envelope.payload;\n const procedural = proceduralMesh(payload);\n if (procedural !== undefined) {\n if (!procedural.ok) {\n return err<AssetLoadError>({\n code: 'asset-package-invalid',\n expected: procedural.error.expected,\n hint: procedural.error.hint,\n detail: { guid: envelope.guid, reason: 'procedural mesh creation failed' },\n });\n }\n return procedural;\n }\n const body = envelope.artifacts.body;\n if (body !== undefined) {\n const bytes = await artifacts.read(body);\n if (!bytes.ok) return err<AssetLoadError>(bytes.error);\n const decoded = decodeMeshBinary(bytes.value, envelope.refs);\n if (decoded === undefined) {\n return err({\n code: 'asset-package-invalid',\n expected: 'a valid mesh-binary/4 body artifact with a local-space AABB',\n hint: 'recook the mesh binary and publish its validated geometry payload',\n detail: { guid: envelope.guid, reason: 'mesh binary decode failed' },\n });\n }\n return ok(decoded);\n }\n const normalized = normalizeMeshPayload(payload, envelope.refs);\n if (normalized !== undefined) return ok(normalized);\n if (\n payload.kind !== 'mesh' ||\n !(payload.vertices instanceof Float32Array) ||\n payload.vertices.length === 0 ||\n payload.aabb === undefined\n ) {\n return err({\n code: 'asset-package-invalid',\n expected: 'a mesh payload with vertices and a local-space AABB',\n hint: 'recook the mesh binary and publish its validated geometry payload',\n detail: { guid: envelope.guid, reason: 'mesh payload failed geometry validation' },\n });\n }\n return ok(payload);\n },\n};\n\nexport const meshAssetContribution: AssetDecoderContribution<MeshAsset, 'mesh'> = {\n kind: meshAssetKind,\n decoder: meshAssetDecoder,\n consumer: 'Geometry',\n};\n","// @forgeax/engine-runtime - Procedural Capsule geometry.\n//\n// A capsule is a cylinder mid-band of height `length` capped by two radius-\n// `radius` hemispheres, so the total height is `length + 2 * radius`. The\n// convention matches Bevy `Capsule3d::new(radius, height)` (its `height` is\n// the mid-section; the radius is added to each end) and Three.js r184\n// CapsuleGeometry(radius, length, capSegments, radialSegments).\n//\n// Generation mirrors sphere.ts's ring sweep rather than composing separate\n// cylinder + sphere meshes (no mesh-merge primitive exists): a single\n// top-to-bottom latitude sweep emits the top hemisphere (offset +halfLength),\n// the two equator rings that bound the cylinder band, and the bottom\n// hemisphere (offset -halfLength). Consecutive rings are stitched by the same\n// quad connector sphere.ts uses, so the vertical wall between the equator\n// rings is filled with no dedicated cylinder code. Per-vertex normals are\n// `normalize(pos - hemisphereCenter)` (radial on the caps, horizontal on the\n// wall) so the surface is seam-free by construction.\n//\n// Degenerate parameters (radius <= 0, length < 0, capSegments < 1,\n// radialSegments < 3) fail-fast with AssetError('asset-parse-failed'),\n// matching the 6 sibling factories.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\n/**\n * Build a procedural capsule geometry aligned with Bevy `Capsule3d` /\n * Three.js r184 CapsuleGeometry.\n *\n * @param radius hemisphere + cylinder radius (> 0)\n * @param length cylinder mid-section height (>= 0; total height = length + 2*radius)\n * @param capSegments latitude bands per hemisphere (>= 1); default 4\n * @param radialSegments longitudes around the axis (>= 3); default 8\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createCapsuleGeometry(\n radius: number,\n length: number,\n capSegments: number = 4,\n radialSegments: number = 8,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (length < 0) return err(degenerate(`length=${length}`));\n const cs = capSegments | 0;\n const rs = radialSegments | 0;\n if (cs < 1) return err(degenerate(`capSegments=${cs}; minimum 1`));\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n\n const halfLength = length / 2;\n // Latitude rows: cs+1 for the top hemisphere (0..pi/2) and cs+1 for the\n // bottom (pi/2..pi). The equator is shared: the top's last row and the\n // bottom's first row are BOTH at the equator radius but at y=+halfLength\n // and y=-halfLength respectively (they coincide only when length===0).\n // Total rows = 2*(cs+1); the middle quad band between the two equator rows\n // becomes the cylinder wall.\n const latRows = 2 * (cs + 1);\n const vertexCount = latRows * (rs + 1);\n const indexCount = (latRows - 1) * rs * 6;\n\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n // Emit rows top -> bottom. `row` in [0, latRows-1]. The first cs+1 rows are\n // the top hemisphere (phi 0..pi/2, center y=+halfLength); the last cs+1 rows\n // are the bottom hemisphere (phi pi/2..pi, center y=-halfLength).\n for (let row = 0; row < latRows; row++) {\n const topHemi = row <= cs;\n // Ring radius + y from hemisphere-local latitude so the caps are exact\n // hemispheres and the two equator rings sit at y=+-halfLength.\n let ringR: number;\n let y: number;\n let centerY: number;\n if (topHemi) {\n const t = row / cs; // 0 at north pole, 1 at equator\n const a = t * (Math.PI / 2);\n ringR = radius * Math.sin(a);\n centerY = halfLength;\n y = centerY + radius * Math.cos(a);\n } else {\n const t = (row - (cs + 1)) / cs; // 0 at equator (bottom), 1 at south pole\n const a = t * (Math.PI / 2);\n ringR = radius * Math.cos(a);\n centerY = -halfLength;\n y = centerY - radius * Math.sin(a);\n }\n // v texture coord: monotonic 0..1 top->bottom across all rows.\n const v = row / (latRows - 1);\n for (let ix = 0; ix <= rs; ix++) {\n const u = ix / rs;\n const theta = u * Math.PI * 2;\n const sinT = Math.sin(theta);\n const cosT = Math.cos(theta);\n const x = ringR * sinT;\n const z = ringR * cosT;\n // Normal = normalize(pos - hemisphereCenter): radial on caps, horizontal\n // on the equatorial wall (cos component is 0 there).\n const nx = x;\n const ny = y - centerY;\n const nz = z;\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = u;\n // UV.v uses the WebGPU top-left convention (V=0 = image top).\n vertices[base + 7] = v;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n const stride = rs + 1;\n for (let row = 0; row < latRows - 1; row++) {\n for (let ix = 0; ix < rs; ix++) {\n const a = row * stride + ix + 1;\n const b = row * stride + ix;\n const c = (row + 1) * stride + ix;\n const d = (row + 1) * stride + ix + 1;\n // Skip the collapsed triangles at the two poles (row 0 north, last row\n // south) exactly as sphere.ts does — a degenerate ring has zero-area\n // triangles on one side of each quad.\n const northPoleRow = row === 0;\n const southPoleRow = row === latRows - 2;\n if (!northPoleRow) {\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n }\n if (!southPoleRow) {\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n }\n\n const trimmed = indices.slice(0, iIdx);\n return meshFromInterleaved(vertices, trimmed);\n}\n","// @forgeax/engine-runtime - Procedural Cone geometry (M3 / w8).\n//\n// Mirrors Three.js r184 ConeGeometry: createConeGeometry(radius, height,\n// radialSegments?, heightSegments?) -> Result<MeshAsset, AssetError>.\n// Cone is the cylinder-with-top-radius=0 degenerate, delegated directly.\n// Byte-identical output to createCylinderGeometry(0, radius, height, ...)\n// by contract (test in geometry.test.ts enforces the equivalence).\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate } from './box';\nimport { createCylinderGeometry } from './cylinder';\n\nexport function createConeGeometry(\n radius: number,\n height: number,\n radialSegments: number = 16,\n heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (height <= 0) return err(degenerate(`height=${height}`));\n return createCylinderGeometry(0, radius, height, radialSegments, heightSegments);\n}\n","import { box2, box3, circle2 } from '@forgeax/engine-math';\nimport type { AssetError, MeshAsset, PrimitiveTopology } from '@forgeax/engine-types';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { degenerate, PROCEDURAL_FLOATS_PER_VERTEX } from './box';\n\nexport type Vec2 = readonly [number, number];\n\nexport type Shape2d =\n | { readonly kind: 'circle'; readonly radius: number; readonly resolution?: number }\n | {\n readonly kind: 'circular-sector';\n readonly radius: number;\n readonly angle: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'circular-segment';\n readonly radius: number;\n readonly angle: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'ellipse';\n readonly halfWidth: number;\n readonly halfHeight: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'annulus';\n readonly innerRadius: number;\n readonly outerRadius: number;\n readonly resolution?: number;\n }\n | {\n readonly kind: 'capsule';\n readonly radius: number;\n readonly halfLength: number;\n readonly resolution?: number;\n }\n | { readonly kind: 'rhombus'; readonly halfWidth: number; readonly halfHeight: number }\n | { readonly kind: 'rectangle'; readonly width: number; readonly height: number }\n | { readonly kind: 'regular-polygon'; readonly radius: number; readonly sides: number }\n | { readonly kind: 'triangle'; readonly vertices: readonly [Vec2, Vec2, Vec2] }\n | { readonly kind: 'segment'; readonly vertices: readonly [Vec2, Vec2] }\n | { readonly kind: 'polyline'; readonly vertices: readonly Vec2[] };\n\nexport type Shape2dPose = {\n readonly translation?: Vec2;\n readonly rotation?: number;\n};\n\nexport type Shape2dMeshOptions = {\n readonly uv?: { readonly kind: 'circular-mask'; readonly angle: number };\n};\n\nexport type Shape2dBounds = {\n readonly aabb: box2.Box2;\n readonly circle: circle2.Circle2;\n};\n\ntype UvProjection = {\n readonly kind: 'circular-mask';\n readonly radius: number;\n readonly angle: number;\n};\n\nconst DEFAULT_RESOLUTION = 32;\n\nfunction invalid(detail: string): Result<never, AssetError> {\n return err(degenerate(detail));\n}\n\nfunction resolution(value: number | undefined): number | undefined {\n const resolved = value ?? DEFAULT_RESOLUTION;\n const integer = resolved | 0;\n return integer >= 3 && integer === resolved ? integer : undefined;\n}\n\nfunction finitePoint(point: Vec2): boolean {\n return Number.isFinite(point[0]) && Number.isFinite(point[1]);\n}\n\nfunction maskRadius(shape: Shape2d): number | undefined {\n switch (shape.kind) {\n case 'circle':\n case 'circular-sector':\n case 'circular-segment':\n return shape.radius;\n case 'ellipse':\n case 'annulus':\n case 'capsule':\n case 'rhombus':\n case 'rectangle':\n case 'regular-polygon':\n case 'triangle':\n case 'segment':\n case 'polyline':\n return undefined;\n }\n}\n\nfunction validateMeshOptions(\n shape: Shape2d,\n options: Shape2dMeshOptions | undefined,\n): Result<UvProjection | undefined, AssetError> {\n const uv = options?.uv;\n if (uv === undefined) return ok(undefined);\n const radius = maskRadius(shape);\n return radius !== undefined && radius > 0 && Number.isFinite(uv.angle)\n ? ok({ kind: 'circular-mask', radius, angle: uv.angle })\n : invalid(`circular-mask UV requires a circular shape and finite angle`);\n}\n\nfunction area(points: readonly Vec2[]): number {\n let value = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n if (!a || !b) continue;\n value += a[0] * b[1] - b[0] * a[1];\n }\n return value / 2;\n}\n\nfunction centroid(points: readonly Vec2[]): Vec2 {\n let x = 0;\n let y = 0;\n for (const point of points) {\n x += point[0];\n y += point[1];\n }\n const count = Math.max(1, points.length);\n return [x / count, y / count];\n}\n\nfunction counterClockwise(points: readonly Vec2[]): Vec2[] {\n return area(points) < 0 ? [...points].reverse() : [...points];\n}\n\nfunction circleBoundary(radius: number, count: number, start = -Math.PI / 2): Vec2[] {\n return Array.from({ length: count }, (_, i) => {\n const angle = start + (i / count) * Math.PI * 2;\n return [Math.cos(angle) * radius, Math.sin(angle) * radius] as const;\n });\n}\n\nfunction arcBoundary(radius: number, angle: number, count: number, start: number): Vec2[] {\n return Array.from({ length: count + 1 }, (_, i) => {\n const t = i / count;\n const current = start + angle * t;\n return [Math.cos(current) * radius, Math.sin(current) * radius] as const;\n });\n}\n\nfunction ellipseBoundary(halfWidth: number, halfHeight: number, count: number): Vec2[] {\n return Array.from({ length: count }, (_, i) => {\n const angle = -Math.PI / 2 + (i / count) * Math.PI * 2;\n return [Math.cos(angle) * halfWidth, Math.sin(angle) * halfHeight] as const;\n });\n}\n\nfunction capsuleBoundary(radius: number, halfLength: number, count: number): Vec2[] {\n const points: Vec2[] = [];\n for (let i = 0; i <= count; i++) {\n const angle = (i / count) * Math.PI;\n points.push([Math.cos(angle) * radius, halfLength + Math.sin(angle) * radius]);\n }\n for (let i = 0; i <= count; i++) {\n const angle = Math.PI + (i / count) * Math.PI;\n points.push([Math.cos(angle) * radius, -halfLength + Math.sin(angle) * radius]);\n }\n points.pop();\n points.shift();\n return points;\n}\n\nfunction buildMesh(\n points: readonly Vec2[],\n indices: readonly number[],\n topology: PrimitiveTopology,\n uvProjection?: UvProjection,\n): MeshAsset {\n const positions = new Float32Array(points.length * 3);\n const normals = new Float32Array(points.length * 3);\n const uvs = new Float32Array(points.length * 2);\n const tangents = new Float32Array(points.length * 4);\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const point of points) {\n minX = Math.min(minX, point[0]);\n minY = Math.min(minY, point[1]);\n maxX = Math.max(maxX, point[0]);\n maxY = Math.max(maxY, point[1]);\n }\n\n const width = Math.max(maxX - minX, 1);\n const height = Math.max(maxY - minY, 1);\n const vertices = new Float32Array(points.length * PROCEDURAL_FLOATS_PER_VERTEX);\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n if (!point) continue;\n const [x, y] = point;\n const positionOffset = i * 3;\n const uvOffset = i * 2;\n const tangentOffset = i * 4;\n const vertexOffset = i * PROCEDURAL_FLOATS_PER_VERTEX;\n positions[positionOffset] = x;\n positions[positionOffset + 1] = y;\n normals[positionOffset + 2] = 1;\n const cos = uvProjection === undefined ? 1 : Math.cos(uvProjection.angle);\n const sin = uvProjection === undefined ? 0 : Math.sin(uvProjection.angle);\n const projectedX = x * cos - y * sin;\n const projectedY = x * sin + y * cos;\n const u =\n uvProjection === undefined\n ? (x - minX) / width\n : 0.5 + projectedX / (2 * uvProjection.radius);\n const v =\n uvProjection === undefined\n ? (maxY - y) / height\n : 0.5 - projectedY / (2 * uvProjection.radius);\n uvs[uvOffset] = u;\n uvs[uvOffset + 1] = v;\n tangents[tangentOffset] = 1;\n tangents[tangentOffset + 3] = 1;\n vertices[vertexOffset] = x;\n vertices[vertexOffset + 1] = y;\n vertices[vertexOffset + 5] = 1;\n vertices[vertexOffset + 6] = u;\n vertices[vertexOffset + 7] = v;\n vertices[vertexOffset + 8] = 1;\n vertices[vertexOffset + 11] = 1;\n }\n\n return {\n kind: 'mesh',\n vertices,\n indices: new Uint32Array(indices),\n attributes: { position: positions, normal: normals, uv: uvs, tangent: tangents },\n submeshes: [\n {\n indexOffset: 0,\n indexCount: indices.length,\n vertexCount: points.length,\n topology,\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n aabb: box3.fromPositions(box3.create(), positions),\n };\n}\n\nfunction fill(points: readonly Vec2[], uvProjection?: UvProjection): MeshAsset {\n const boundary = counterClockwise(points);\n const center = centroid(boundary);\n const vertices = [center, ...boundary];\n const indices: number[] = [];\n for (let i = 0; i < boundary.length; i++) {\n const next = (i + 1) % boundary.length;\n indices.push(0, i + 1, next + 1);\n }\n return buildMesh(vertices, indices, 'triangle-list', uvProjection);\n}\n\nfunction ring(outer: readonly Vec2[], inner: readonly Vec2[]): MeshAsset {\n const outside = counterClockwise(outer);\n const inside = counterClockwise(inner);\n const count = Math.min(outside.length, inside.length);\n const vertices = [...outside.slice(0, count), ...inside.slice(0, count)];\n const indices: number[] = [];\n for (let i = 0; i < count; i++) {\n const next = (i + 1) % count;\n indices.push(i, next, count + i, next, count + next, count + i);\n }\n return buildMesh(vertices, indices, 'triangle-list');\n}\n\nfunction segment(points: readonly Vec2[]): MeshAsset {\n const indices: number[] = [];\n for (let i = 0; i + 1 < points.length; i += 1) indices.push(i, i + 1);\n return buildMesh(points, indices, 'line-list');\n}\n\nfunction shapeBoundary(shape: Shape2d, count: number): Vec2[] | undefined {\n switch (shape.kind) {\n case 'circle':\n return circleBoundary(shape.radius, count);\n case 'circular-sector':\n return [\n ...arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2),\n [0, 0],\n ];\n case 'circular-segment':\n return arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2);\n case 'ellipse':\n return ellipseBoundary(shape.halfWidth, shape.halfHeight, count);\n case 'capsule':\n return capsuleBoundary(shape.radius, shape.halfLength, Math.max(2, Math.floor(count / 2)));\n case 'rhombus':\n return [\n [0, shape.halfHeight],\n [shape.halfWidth, 0],\n [0, -shape.halfHeight],\n [-shape.halfWidth, 0],\n ];\n case 'rectangle':\n return [\n [-shape.width / 2, -shape.height / 2],\n [shape.width / 2, -shape.height / 2],\n [shape.width / 2, shape.height / 2],\n [-shape.width / 2, shape.height / 2],\n ];\n case 'regular-polygon':\n return Array.from({ length: shape.sides }, (_, i) => {\n const angle = -Math.PI / 2 + (i / shape.sides) * Math.PI * 2;\n return [Math.cos(angle) * shape.radius, Math.sin(angle) * shape.radius] as const;\n });\n case 'triangle':\n return [...shape.vertices];\n case 'annulus':\n case 'segment':\n case 'polyline':\n return undefined;\n }\n}\n\nfunction scaleAround(points: readonly Vec2[], factor: number): Vec2[] {\n const center = centroid(points);\n return points.map(([x, y]) => [\n center[0] + (x - center[0]) * factor,\n center[1] + (y - center[1]) * factor,\n ]);\n}\n\nfunction withResolution(\n value: number | undefined,\n valid: boolean,\n detail: string,\n): Result<number, AssetError> {\n const count = resolution(value);\n return valid && count !== undefined ? ok(count) : invalid(detail);\n}\n\nfunction validateCommon(shape: Shape2d): Result<number, AssetError> {\n switch (shape.kind) {\n case 'circle':\n return withResolution(\n shape.resolution,\n shape.radius > 0 && Number.isFinite(shape.radius),\n `circle radius=${shape.radius}, resolution=${shape.resolution}`,\n );\n case 'circular-sector':\n case 'circular-segment':\n return withResolution(\n shape.resolution,\n shape.radius > 0 &&\n shape.angle > 0 &&\n shape.angle <= Math.PI * 2 &&\n Number.isFinite(shape.radius) &&\n Number.isFinite(shape.angle),\n `${shape.kind} radius=${shape.radius}, angle=${shape.angle}, resolution=${shape.resolution}`,\n );\n case 'ellipse':\n return withResolution(\n shape.resolution,\n shape.halfWidth > 0 &&\n shape.halfHeight > 0 &&\n Number.isFinite(shape.halfWidth) &&\n Number.isFinite(shape.halfHeight),\n `ellipse halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}, resolution=${shape.resolution}`,\n );\n case 'annulus':\n return withResolution(\n shape.resolution,\n shape.innerRadius >= 0 &&\n shape.outerRadius > shape.innerRadius &&\n Number.isFinite(shape.innerRadius) &&\n Number.isFinite(shape.outerRadius),\n `annulus innerRadius=${shape.innerRadius}, outerRadius=${shape.outerRadius}, resolution=${shape.resolution}`,\n );\n case 'capsule':\n return withResolution(\n shape.resolution,\n shape.radius > 0 &&\n shape.halfLength >= 0 &&\n Number.isFinite(shape.radius) &&\n Number.isFinite(shape.halfLength),\n `capsule radius=${shape.radius}, halfLength=${shape.halfLength}, resolution=${shape.resolution}`,\n );\n case 'rhombus':\n return shape.halfWidth > 0 &&\n shape.halfHeight > 0 &&\n Number.isFinite(shape.halfWidth) &&\n Number.isFinite(shape.halfHeight)\n ? ok(0)\n : invalid(`rhombus halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}`);\n case 'rectangle':\n return shape.width > 0 &&\n shape.height > 0 &&\n Number.isFinite(shape.width) &&\n Number.isFinite(shape.height)\n ? ok(0)\n : invalid(`rectangle width=${shape.width}, height=${shape.height}`);\n case 'regular-polygon':\n return shape.radius > 0 &&\n Number.isFinite(shape.radius) &&\n Number.isInteger(shape.sides) &&\n shape.sides >= 3\n ? ok(0)\n : invalid(`regular-polygon radius=${shape.radius}, sides=${shape.sides}`);\n case 'triangle':\n return shape.vertices.every(finitePoint) && Math.abs(area(shape.vertices)) > 1e-7\n ? ok(0)\n : invalid('triangle vertices must be finite and non-collinear');\n case 'segment':\n return shape.vertices.every(finitePoint) &&\n (shape.vertices[0][0] !== shape.vertices[1][0] ||\n shape.vertices[0][1] !== shape.vertices[1][1])\n ? ok(0)\n : invalid('segment endpoints must be finite and distinct');\n case 'polyline':\n return shape.vertices.length >= 2 && shape.vertices.every(finitePoint)\n ? ok(0)\n : invalid('polyline needs at least two finite vertices');\n }\n}\n\nexport function create2dGeometry(\n shape: Shape2d,\n options?: Shape2dMeshOptions,\n): Result<MeshAsset, AssetError> {\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n const meshOptions = validateMeshOptions(shape, options);\n if (!meshOptions.ok) return meshOptions;\n if (shape.kind === 'segment' || shape.kind === 'polyline') return ok(segment(shape.vertices));\n if (shape.kind === 'annulus') {\n const outer = circleBoundary(shape.outerRadius, checked.value);\n const inner = circleBoundary(shape.innerRadius, checked.value);\n return ok(ring(outer, inner));\n }\n const points = shapeBoundary(shape, checked.value);\n if (!points) return invalid(`unsupported 2d shape kind=${shape.kind}`);\n return ok(fill(points, meshOptions.value));\n}\n\nfunction boundsPoints(shape: Shape2d, count: number): Vec2[] | undefined {\n if (shape.kind === 'annulus') return circleBoundary(shape.outerRadius, count);\n if (shape.kind === 'segment' || shape.kind === 'polyline') return [...shape.vertices];\n return shapeBoundary(shape, count);\n}\n\nexport function compute2dBounds(\n shape: Shape2d,\n pose: Shape2dPose = {},\n): Result<Shape2dBounds, AssetError> {\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n const translation = pose.translation ?? [0, 0];\n const rotation = pose.rotation ?? 0;\n if (!finitePoint(translation) || !Number.isFinite(rotation)) {\n return invalid('2d bounds pose must contain finite translation and rotation');\n }\n const points = boundsPoints(shape, checked.value);\n if (points === undefined || points.length === 0)\n return invalid(`unsupported 2d bounds kind=${shape.kind}`);\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const transformed = points.map(\n ([x, y]) => [translation[0] + x * cos - y * sin, translation[1] + x * sin + y * cos] as const,\n );\n let radius = 0;\n for (const [x, y] of points) radius = Math.max(radius, Math.hypot(x, y));\n return ok({\n aabb: box2.fromPoints(box2.create(), transformed),\n circle: circle2.create(translation[0], translation[1], radius),\n });\n}\n\nexport function create2dRingGeometry(\n shape: Shape2d,\n thickness: number,\n resolutionOverride?: number,\n): Result<MeshAsset, AssetError> {\n if (!(thickness > 0) || !Number.isFinite(thickness))\n return invalid(`ring thickness=${thickness}`);\n const checked = validateCommon(shape);\n if (!checked.ok) return checked;\n if (shape.kind === 'segment' || shape.kind === 'polyline' || shape.kind === 'annulus') {\n return invalid(`rings require a closed non-annulus shape, got ${shape.kind}`);\n }\n const count = resolutionOverride === undefined ? checked.value : resolution(resolutionOverride);\n if (count === undefined) return invalid(`ring resolution=${resolutionOverride}`);\n const outer = shapeBoundary(shape, count);\n if (!outer) return invalid(`unsupported ring shape kind=${shape.kind}`);\n const extent = Math.max(...outer.map(([x, y]) => Math.hypot(x, y)));\n const factor = (extent - thickness) / extent;\n if (!(factor > 1e-5))\n return invalid(`ring thickness=${thickness} exceeds shape extent=${extent}`);\n return ok(ring(outer, scaleAround(outer, factor)));\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n ok,\n type Result,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nconst WELD_EPSILON = 1e-4;\nconst DEFAULT_THRESHOLD_DEGREES = 1;\n\ntype Vec3 = readonly [number, number, number];\n\ninterface Endpoint {\n readonly value: Vec3;\n readonly exactKey: string;\n readonly weldKey: string;\n}\n\ninterface Triangle {\n readonly a: Endpoint;\n readonly b: Endpoint;\n readonly c: Endpoint;\n readonly normal: Vec3;\n}\n\ninterface PreparedMesh {\n readonly triangles: readonly Triangle[];\n}\n\ninterface WireEdge {\n readonly a: Endpoint;\n readonly b: Endpoint;\n}\n\ninterface SurfaceEdge {\n readonly aWeldKey: string;\n readonly bWeldKey: string;\n a: Endpoint;\n b: Endpoint;\n readonly normals: Vec3[];\n}\n\nfunction parseFailure(field: string, value: unknown, reason: string): AssetError {\n return new AssetError({\n code: 'asset-parse-failed',\n expected: `a valid triangle-list MeshAsset: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field, value, reason },\n });\n}\n\nfunction f32Bits(value: number): number {\n const buffer = new ArrayBuffer(4);\n new Float32Array(buffer)[0] = value;\n return new Uint32Array(buffer)[0] as number;\n}\n\nfunction normalizedValue(value: number): number {\n return value === 0 ? 0 : value;\n}\n\nfunction exactKey(value: Vec3): string {\n return value\n .map((component) => f32Bits(normalizedValue(component)).toString(16).padStart(8, '0'))\n .join(':');\n}\n\nfunction weldComponent(value: number): string {\n const scaled = normalizedValue(value) / WELD_EPSILON;\n return String(Math.round(scaled));\n}\n\nfunction weldKey(value: Vec3): string {\n return value.map(weldComponent).join(':');\n}\n\nfunction endpoint(position: Vec3): Endpoint {\n const value: Vec3 = [\n normalizedValue(position[0]),\n normalizedValue(position[1]),\n normalizedValue(position[2]),\n ];\n return { value, exactKey: exactKey(value), weldKey: weldKey(value) };\n}\n\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareEndpoint(left: Endpoint, right: Endpoint): number {\n return compareText(left.exactKey, right.exactKey);\n}\n\nfunction compareWireEdge(left: WireEdge, right: WireEdge): number {\n return compareEndpoint(left.a, right.a) || compareEndpoint(left.b, right.b);\n}\n\nfunction compareSurfaceEdge(left: SurfaceEdge, right: SurfaceEdge): number {\n return compareText(left.aWeldKey, right.aWeldKey) || compareText(left.bWeldKey, right.bWeldKey);\n}\n\nfunction readPosition(raw: Float32Array | ArrayBuffer): Float32Array {\n return raw instanceof Float32Array ? raw : new Float32Array(raw);\n}\n\nfunction validatePosition(source: MeshAsset): Result<Float32Array, AssetError> {\n if (source === null || typeof source !== 'object' || source.kind !== 'mesh') {\n return err(parseFailure('kind', source?.kind, 'kind must be mesh'));\n }\n const attributes = source.attributes;\n const raw = attributes?.position;\n if (raw === undefined) {\n return err(parseFailure('attributes.position', undefined, 'position is required'));\n }\n if (raw instanceof ArrayBuffer) {\n if (raw.byteLength % 4 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n raw.byteLength,\n 'ArrayBuffer byte length must align to f32',\n ),\n );\n }\n } else if (!(raw instanceof Float32Array)) {\n return err(\n parseFailure(\n 'attributes.position',\n raw === null ? null : typeof raw,\n 'position storage must be Float32Array or ArrayBuffer',\n ),\n );\n }\n const position = readPosition(raw);\n if (position.length % 3 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n position.length,\n 'position length must be divisible by 3',\n ),\n );\n }\n for (let index = 0; index < position.length; index += 1) {\n const value = position[index] as number;\n if (!Number.isFinite(value)) {\n return err(parseFailure('attributes.position', value, `position[${index}] must be finite`));\n }\n }\n return ok(position);\n}\n\nfunction validateThreshold(threshold: number): Result<number, AssetError> {\n if (!Number.isFinite(threshold) || threshold < 0 || threshold > 180) {\n return err(\n parseFailure('thresholdAngleDegrees', threshold, 'threshold must be finite and in [0, 180]'),\n );\n }\n return ok(threshold);\n}\n\nfunction validateSubmeshShape(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n if (!Array.isArray(source.submeshes) || source.submeshes.length === 0) {\n return err(parseFailure('submeshes', source.submeshes, 'at least one submesh is required'));\n }\n const indexed = source.indices !== undefined;\n if (!indexed && source.submeshes.length !== 1) {\n return err(\n parseFailure('submeshes', source.submeshes.length, 'non-indexed meshes require one submesh'),\n );\n }\n if (!indexed && positionCount % 3 !== 0) {\n return err(\n parseFailure(\n 'attributes.position',\n positionCount,\n 'non-indexed positions require triangle cardinality',\n ),\n );\n }\n for (let index = 0; index < source.submeshes.length; index += 1) {\n const submesh = source.submeshes[index];\n if (submesh === undefined || submesh === null || submesh.topology !== 'triangle-list') {\n return err(\n parseFailure(\n `submeshes[${index}].topology`,\n submesh?.topology,\n 'topology must be triangle-list',\n ),\n );\n }\n if (!Number.isInteger(submesh.indexOffset) || submesh.indexOffset < 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexOffset`,\n submesh.indexOffset,\n 'index offset must be a non-negative integer',\n ),\n );\n }\n if (!Number.isInteger(submesh.indexCount) || submesh.indexCount < 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'index count must be a non-negative integer',\n ),\n );\n }\n if (\n !Number.isInteger(submesh.vertexCount) ||\n submesh.vertexCount < 0 ||\n submesh.vertexCount > positionCount\n ) {\n return err(\n parseFailure(\n `submeshes[${index}].vertexCount`,\n submesh.vertexCount,\n 'vertex count must be an integer within position count',\n ),\n );\n }\n if (submesh.indexCount % 3 !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'index count must be divisible by 3',\n ),\n );\n }\n if (!indexed && submesh.indexOffset !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexOffset`,\n submesh.indexOffset,\n 'non-indexed submesh index offset must be zero',\n ),\n );\n }\n if (!indexed && submesh.indexCount !== 0) {\n return err(\n parseFailure(\n `submeshes[${index}].indexCount`,\n submesh.indexCount,\n 'non-indexed submesh index count must be zero',\n ),\n );\n }\n if (!indexed && submesh.vertexCount !== positionCount) {\n return err(\n parseFailure(\n `submeshes[${index}].vertexCount`,\n submesh.vertexCount,\n 'non-indexed submesh must span all positions',\n ),\n );\n }\n }\n return ok(undefined);\n}\n\nfunction validateIndices(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n const indices = source.indices;\n if (indices === undefined) return ok(undefined);\n if (!(indices instanceof Uint16Array) && !(indices instanceof Uint32Array)) {\n return err(\n parseFailure('indices', indices, 'indices storage must be Uint16Array or Uint32Array'),\n );\n }\n for (let index = 0; index < source.submeshes.length; index += 1) {\n const submesh = source.submeshes[index];\n if (submesh === undefined) continue;\n if (submesh.indexOffset + submesh.indexCount > indices.length) {\n return err(\n parseFailure(`submeshes[${index}]`, submesh, 'submesh index range exceeds indices length'),\n );\n }\n for (\n let offset = submesh.indexOffset;\n offset < submesh.indexOffset + submesh.indexCount;\n offset += 1\n ) {\n const value = indices[offset] as number;\n if (!Number.isInteger(value) || value < 0 || value >= positionCount) {\n return err(\n parseFailure(`indices[${offset}]`, value, 'index must address a position vertex'),\n );\n }\n }\n }\n return ok(undefined);\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction subtract(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction triangleNormal(a: Vec3, b: Vec3, c: Vec3): Vec3 | undefined {\n const normal = cross(subtract(b, a), subtract(c, a));\n const length = Math.hypot(normal[0], normal[1], normal[2]);\n if (!Number.isFinite(length) || length === 0) return undefined;\n return [normal[0] / length, normal[1] / length, normal[2] / length];\n}\n\nfunction positionAt(position: Float32Array, index: number): Vec3 {\n const base = index * 3;\n return [position[base] as number, position[base + 1] as number, position[base + 2] as number];\n}\n\nfunction makeTriangle(\n position: Float32Array,\n indices: readonly [number, number, number],\n): Triangle | undefined {\n const a = endpoint(positionAt(position, indices[0]));\n const b = endpoint(positionAt(position, indices[1]));\n const c = endpoint(positionAt(position, indices[2]));\n const normal = triangleNormal(a.value, b.value, c.value);\n return normal === undefined ? undefined : { a, b, c, normal };\n}\n\nfunction collectTriangles(source: MeshAsset, position: Float32Array): Triangle[] {\n const triangles: Triangle[] = [];\n for (const submesh of source.submeshes) {\n if (source.indices === undefined) {\n for (let offset = 0; offset < submesh.vertexCount; offset += 3) {\n const triangle = makeTriangle(position, [offset, offset + 1, offset + 2]);\n if (triangle !== undefined) triangles.push(triangle);\n }\n continue;\n }\n for (\n let offset = submesh.indexOffset;\n offset < submesh.indexOffset + submesh.indexCount;\n offset += 3\n ) {\n const a = source.indices[offset] as number;\n const b = source.indices[offset + 1] as number;\n const c = source.indices[offset + 2] as number;\n const triangle = makeTriangle(position, [a, b, c]);\n if (triangle !== undefined) triangles.push(triangle);\n }\n }\n return triangles;\n}\n\nfunction prepare(source: MeshAsset, threshold?: number): Result<PreparedMesh, AssetError> {\n const positionResult = validatePosition(source);\n if (!positionResult.ok) return positionResult;\n if (threshold !== undefined) {\n const thresholdResult = validateThreshold(threshold);\n if (!thresholdResult.ok) return thresholdResult;\n }\n const submeshResult = validateSubmeshShape(source, positionResult.value.length / 3);\n if (!submeshResult.ok) return submeshResult;\n const indexResult = validateIndices(source, positionResult.value.length / 3);\n if (!indexResult.ok) return indexResult;\n return ok({ triangles: collectTriangles(source, positionResult.value) });\n}\n\nfunction addWireEdge(edges: Map<string, WireEdge>, left: Endpoint, right: Endpoint): void {\n if (left.exactKey === right.exactKey) return;\n const [a, b] = compareEndpoint(left, right) < 0 ? [left, right] : [right, left];\n const key = `${a.exactKey}|${b.exactKey}`;\n if (!edges.has(key)) edges.set(key, { a, b });\n}\n\nfunction collectWireEdges(triangles: readonly Triangle[]): WireEdge[] {\n const edges = new Map<string, WireEdge>();\n for (const triangle of triangles) {\n addWireEdge(edges, triangle.a, triangle.b);\n addWireEdge(edges, triangle.b, triangle.c);\n addWireEdge(edges, triangle.c, triangle.a);\n }\n return Array.from(edges.values()).sort(compareWireEdge);\n}\n\nfunction updateRepresentative(current: Endpoint, candidate: Endpoint): Endpoint {\n return compareEndpoint(candidate, current) < 0 ? candidate : current;\n}\n\nfunction addSurfaceEdge(\n edges: Map<string, SurfaceEdge>,\n left: Endpoint,\n right: Endpoint,\n normal: Vec3,\n): void {\n if (left.weldKey === right.weldKey) return;\n const leftFirst = compareText(left.weldKey, right.weldKey) < 0;\n const a = leftFirst ? left : right;\n const b = leftFirst ? right : left;\n const key = `${a.weldKey}|${b.weldKey}`;\n const current = edges.get(key);\n if (current === undefined) {\n edges.set(key, {\n aWeldKey: a.weldKey,\n bWeldKey: b.weldKey,\n a,\n b,\n normals: [normal],\n });\n return;\n }\n current.a = updateRepresentative(current.a, a);\n current.b = updateRepresentative(current.b, b);\n current.normals.push(normal);\n}\n\nfunction collectSurfaceEdges(triangles: readonly Triangle[]): SurfaceEdge[] {\n const edges = new Map<string, SurfaceEdge>();\n for (const triangle of triangles) {\n addSurfaceEdge(edges, triangle.a, triangle.b, triangle.normal);\n addSurfaceEdge(edges, triangle.b, triangle.c, triangle.normal);\n addSurfaceEdge(edges, triangle.c, triangle.a, triangle.normal);\n }\n return Array.from(edges.values()).sort(compareSurfaceEdge);\n}\n\nfunction keepSurfaceEdge(edge: SurfaceEdge, thresholdDegrees: number): boolean {\n if (edge.normals.length !== 2) return true;\n const first = edge.normals[0];\n const second = edge.normals[1];\n if (first === undefined || second === undefined) return true;\n const dot = Math.min(\n 1,\n Math.max(-1, first[0] * second[0] + first[1] * second[1] + first[2] * second[2]),\n );\n return dot <= Math.cos((thresholdDegrees * Math.PI) / 180);\n}\n\nfunction lineMesh(edges: readonly WireEdge[]): Result<MeshAsset, AssetError> {\n const positions = new Float32Array(edges.length * 6);\n for (let edgeIndex = 0; edgeIndex < edges.length; edgeIndex += 1) {\n const edge = edges[edgeIndex] as WireEdge;\n positions.set(edge.a.value, edgeIndex * 6);\n positions.set(edge.b.value, edgeIndex * 6 + 3);\n }\n const vertexCount = positions.length / 3;\n const attributes: VertexAttributeMap = {\n position: positions,\n normal: new Float32Array(vertexCount * 3),\n uv: new Float32Array(vertexCount * 2),\n tangent: new Float32Array(vertexCount * 4),\n };\n const packed = packInterleavedVertexAttributes(attributes, vertexCount);\n if (!packed.ok) return err(packed.error);\n return ok({\n kind: 'mesh',\n vertices: packed.value.vertices,\n attributes,\n submeshes: [\n {\n indexOffset: 0,\n indexCount: 0,\n vertexCount,\n topology: 'line-list',\n materialSlot: 0,\n },\n ],\n materialSlots: [{ slotName: 'Default' }],\n aabb: box3.fromPositions(box3.create(), positions),\n });\n}\n\n/** Convert every unique exact triangle edge into a sorted non-indexed line carrier. */\nexport function createWireframeGeometry(source: MeshAsset): Result<MeshAsset, AssetError> {\n const prepared = prepare(source);\n if (!prepared.ok) return prepared;\n return lineMesh(collectWireEdges(prepared.value.triangles));\n}\n\n/** Convert boundary, non-manifold, and threshold-surviving surface edges into a line carrier. */\nexport function createEdgesGeometry(\n source: MeshAsset,\n thresholdAngleDegrees: number = DEFAULT_THRESHOLD_DEGREES,\n): Result<MeshAsset, AssetError> {\n const prepared = prepare(source, thresholdAngleDegrees);\n if (!prepared.ok) return prepared;\n const edges = collectSurfaceEdges(prepared.value.triangles).filter((edge) =>\n keepSurfaceEdge(edge, thresholdAngleDegrees),\n );\n return lineMesh(edges.map(({ a, b }) => ({ a, b })));\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n ASSET_ERROR_HINTS,\n AssetError,\n err,\n type MeshAsset,\n type MeshMaterialSlot,\n ok,\n type PrimitiveTopology,\n type Result,\n type Submesh,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nconst ATTRIBUTE_KEYS = [\n 'position',\n 'normal',\n 'uv',\n 'tangent',\n 'skinIndex',\n 'skinWeight',\n 'uv1',\n 'uv2',\n 'uv3',\n 'uv4',\n 'uv5',\n 'uv6',\n 'uv7',\n 'color',\n] as const satisfies readonly (keyof VertexAttributeMap)[];\n\ntype AttributeKey = (typeof ATTRIBUTE_KEYS)[number];\ntype AttributeSource = NonNullable<VertexAttributeMap[AttributeKey]>;\ntype AttributeView = Float32Array | Uint16Array;\n\nconst ATTRIBUTE_COMPONENTS: Readonly<Record<AttributeKey, number>> = {\n position: 3,\n normal: 3,\n uv: 2,\n tangent: 4,\n skinIndex: 4,\n skinWeight: 4,\n uv1: 2,\n uv2: 2,\n uv3: 2,\n uv4: 2,\n uv5: 2,\n uv6: 2,\n uv7: 2,\n color: 4,\n};\n\nconst TOPOLOGIES: readonly PrimitiveTopology[] = [\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n];\n\n/** Input shape for one independently drawn submesh. */\nexport type MeshBuilderSubmesh = Partial<Submesh> & {\n readonly topology?: PrimitiveTopology;\n};\n\n/** All authoring facts accepted by {@link createMeshBuilder}. */\nexport interface MeshBuilderOptions {\n readonly attributes?: VertexAttributeMap;\n readonly indices?: ArrayLike<number>;\n readonly submeshes?: readonly MeshBuilderSubmesh[];\n readonly materialSlots?: readonly MeshMaterialSlot[];\n}\n\nexport interface MeshBuilder {\n /** Append one equally-cardinal attribute batch to the accumulated source. */\n appendVertices(attributes: VertexAttributeMap): Result<void, AssetError>;\n /** Append raw index values; width is derived during build. */\n appendIndices(indices: ArrayLike<number>): Result<void, AssetError>;\n /** Add a draw range; omitted ranges are completed from the final source. */\n addSubmesh(submesh: MeshBuilderSubmesh): Result<void, AssetError>;\n /** Derive one immutable MeshAsset from the accumulated source. */\n build(): Result<MeshAsset, AssetError>;\n}\n\nfunction failure(field: string, value: unknown, reason: string): Result<never, AssetError> {\n return err(\n new AssetError({\n code: 'asset-invalid-value',\n expected: `valid MeshBuilder ${field}: ${reason}`,\n hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n detail: { field, value, reason },\n }),\n );\n}\n\nfunction sourceView(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n if (key === 'skinIndex') {\n if (value instanceof Uint16Array) return value;\n if (value instanceof ArrayBuffer && value.byteLength % Uint16Array.BYTES_PER_ELEMENT === 0) {\n return new Uint16Array(value);\n }\n return undefined;\n }\n if (value instanceof Float32Array) return value;\n if (value instanceof ArrayBuffer && value.byteLength % Float32Array.BYTES_PER_ELEMENT === 0) {\n return new Float32Array(value);\n }\n return undefined;\n}\n\nfunction cloneAttribute(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n const view = sourceView(key, value);\n if (view === undefined) return undefined;\n return view.slice();\n}\n\nfunction attributeKeys(attributes: VertexAttributeMap): AttributeKey[] {\n return ATTRIBUTE_KEYS.filter((key) => attributes[key] !== undefined);\n}\n\nfunction appendArray(target: AttributeView, source: AttributeView): AttributeView {\n if (target instanceof Uint16Array && source instanceof Uint16Array) {\n const output = new Uint16Array(target.length + source.length);\n output.set(target, 0);\n output.set(source, target.length);\n return output;\n }\n if (target instanceof Float32Array && source instanceof Float32Array) {\n const output = new Float32Array(target.length + source.length);\n output.set(target, 0);\n output.set(source, target.length);\n return output;\n }\n // The caller groups batches by canonical key, so this branch only protects\n // against an internally inconsistent future storage change.\n return target;\n}\n\nfunction copySlots(slots: readonly MeshMaterialSlot[] | undefined): MeshMaterialSlot[] {\n return (slots ?? [{ slotName: 'Default' }]).map((slot) => ({\n slotName: slot.slotName,\n ...(slot.sourceKey === undefined ? {} : { sourceKey: slot.sourceKey }),\n ...(slot.defaultMaterial === undefined ? {} : { defaultMaterial: slot.defaultMaterial }),\n }));\n}\n\nfunction validateAttributeBatch(\n attributes: VertexAttributeMap,\n): Result<{ readonly keys: readonly AttributeKey[]; readonly vertexCount: number }, AssetError> {\n const keys = attributeKeys(attributes);\n if (keys.length === 0)\n return failure('attributes', [], 'at least one canonical attribute is required');\n const position = attributes.position;\n if (position === undefined)\n return failure('attributes.position', undefined, 'position is required');\n const positionView = sourceView('position', position);\n if (positionView === undefined) {\n return failure(\n 'attributes.position',\n typeof position,\n 'position must use Float32Array or ArrayBuffer',\n );\n }\n if (positionView.length === 0 || positionView.length % 3 !== 0) {\n return failure(\n 'attributes.position',\n positionView.length,\n 'position cardinality must be a non-zero multiple of 3',\n );\n }\n const vertexCount = positionView.length / 3;\n for (const key of keys) {\n const value = attributes[key];\n if (value === undefined) continue;\n const view = sourceView(key, value);\n if (view === undefined) {\n return failure(\n key,\n typeof value,\n key === 'skinIndex' ? 'storage must be Uint16Array' : 'storage must be Float32Array',\n );\n }\n const expectedLength = vertexCount * ATTRIBUTE_COMPONENTS[key];\n if (view.length !== expectedLength) {\n return failure(key, view.length, `cardinality must be ${expectedLength}`);\n }\n for (let elementIndex = 0; elementIndex < view.length; elementIndex += 1) {\n const valueAt = view[elementIndex];\n if (valueAt === undefined || !Number.isFinite(valueAt)) {\n return failure(key, valueAt, `${key}[${elementIndex}] must be finite`);\n }\n if (key === 'skinIndex' && (!Number.isInteger(valueAt) || valueAt < 0 || valueAt > 0xffff)) {\n return failure(key, valueAt, `${key}[${elementIndex}] must be an integer in [0, 65535]`);\n }\n }\n }\n return ok({ keys, vertexCount });\n}\n\nfunction validateSlots(slots: readonly MeshMaterialSlot[]): Result<void, AssetError> {\n if (slots.length === 0)\n return failure('materialSlots', slots.length, 'at least one material slot is required');\n const names = new Set<string>();\n for (let index = 0; index < slots.length; index += 1) {\n const slot = slots[index];\n const name = slot?.slotName.trim() ?? '';\n if (name.length === 0 || names.has(name)) {\n return failure(`materialSlots[${index}].slotName`, name, 'must be non-empty and unique');\n }\n names.add(name);\n }\n return ok(undefined);\n}\n\nfunction completedSubmeshes(\n requested: readonly MeshBuilderSubmesh[],\n vertexCount: number,\n indexCount: number,\n materialSlotCount: number,\n): Result<readonly Submesh[], AssetError> {\n const source =\n requested.length === 0\n ? [\n {\n indexOffset: 0,\n indexCount,\n vertexCount,\n topology: 'triangle-list' as const,\n materialSlot: 0,\n },\n ]\n : requested;\n const output: Submesh[] = [];\n for (let index = 0; index < source.length; index += 1) {\n const candidate = source[index];\n if (candidate === undefined)\n return failure(`submeshes[${index}]`, undefined, 'entry is required');\n const indexOffset = candidate.indexOffset ?? 0;\n const submeshIndexCount = candidate.indexCount ?? (indexCount > 0 ? indexCount : 0);\n const submeshVertexCount = candidate.vertexCount ?? vertexCount;\n const topology = candidate.topology ?? 'triangle-list';\n const materialSlot = candidate.materialSlot ?? index;\n if (!TOPOLOGIES.includes(topology)) {\n return failure(\n `submeshes[${index}].topology`,\n topology,\n 'must be a WebGPU primitive topology',\n );\n }\n if (\n !Number.isInteger(indexOffset) ||\n indexOffset < 0 ||\n !Number.isInteger(submeshIndexCount) ||\n submeshIndexCount < 0 ||\n !Number.isInteger(submeshVertexCount) ||\n submeshVertexCount < 0 ||\n submeshVertexCount > vertexCount ||\n !Number.isInteger(materialSlot) ||\n materialSlot < 0 ||\n materialSlot >= materialSlotCount\n ) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'range and material slot are invalid',\n );\n }\n if (indexCount === 0 && (indexOffset !== 0 || submeshIndexCount !== 0)) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'non-indexed meshes use indexOffset=0 and indexCount=0',\n );\n }\n if (indexCount > 0 && indexOffset + submeshIndexCount > indexCount) {\n return failure(\n `submeshes[${index}]`,\n JSON.stringify(candidate),\n 'index range exceeds the accumulated index buffer',\n );\n }\n if (indexCount === 0 && (topology === 'line-strip' || topology === 'triangle-strip')) {\n return failure(\n `submeshes[${index}].topology`,\n topology,\n 'strip topology requires an index buffer',\n );\n }\n output.push({\n indexOffset,\n indexCount: submeshIndexCount,\n vertexCount: submeshVertexCount,\n topology,\n materialSlot,\n });\n }\n return ok(Object.freeze(output));\n}\n\n/**\n * Create a geometry-owned builder. All derived facts are computed once in\n * `build()` from the accumulated canonical attribute source.\n */\nexport function createMeshBuilder(options: MeshBuilderOptions = {}): MeshBuilder {\n const attributes: Partial<Record<AttributeKey, AttributeView>> = {};\n const indices: number[] = [];\n const submeshes: MeshBuilderSubmesh[] = [];\n const materialSlots = copySlots(options.materialSlots);\n\n const appendVertices = (batch: VertexAttributeMap): Result<void, AssetError> => {\n const checked = validateAttributeBatch(batch);\n if (!checked.ok) return checked;\n const incomingKeys = checked.value.keys;\n const existingKeys = ATTRIBUTE_KEYS.filter((key) => attributes[key] !== undefined);\n if (existingKeys.length > 0 && existingKeys.join('|') !== incomingKeys.join('|')) {\n return failure(\n 'attributes',\n incomingKeys.join(','),\n 'every appended batch must carry the same canonical keys',\n );\n }\n for (const key of incomingKeys) {\n const value = batch[key];\n if (value === undefined) continue;\n const cloned = cloneAttribute(key, value);\n if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n const previous = attributes[key];\n attributes[key] = previous === undefined ? cloned : appendArray(previous, cloned);\n }\n return ok(undefined);\n };\n\n const appendIndices = (batch: ArrayLike<number>): Result<void, AssetError> => {\n for (let index = 0; index < batch.length; index += 1) {\n const value = Number(batch[index]);\n if (!Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n return failure('indices', value, `indices[${index}] must be an integer in [0, 2^32-1]`);\n }\n indices.push(value);\n }\n return ok(undefined);\n };\n\n const addSubmesh = (submesh: MeshBuilderSubmesh): Result<void, AssetError> => {\n if (submesh === null || typeof submesh !== 'object') {\n return failure('submeshes', submesh, 'entry must be an object');\n }\n submeshes.push({ ...submesh });\n return ok(undefined);\n };\n\n const build = (): Result<MeshAsset, AssetError> => {\n const source = attributes as VertexAttributeMap;\n const checked = validateAttributeBatch(source);\n if (!checked.ok) return checked;\n const slotCheck = validateSlots(materialSlots);\n if (!slotCheck.ok) return slotCheck;\n const vertexCount = checked.value.vertexCount;\n const position = source.position;\n if (position === undefined)\n return failure('attributes.position', undefined, 'position is required');\n const positionView = sourceView('position', position);\n if (!(positionView instanceof Float32Array)) {\n return failure('attributes.position', typeof position, 'position storage is invalid');\n }\n\n let maxIndex = 0;\n for (const value of indices) maxIndex = Math.max(maxIndex, value);\n const indexArray =\n indices.length === 0\n ? undefined\n : maxIndex <= 0xffff\n ? new Uint16Array(indices)\n : new Uint32Array(indices);\n if (indexArray !== undefined) {\n for (let index = 0; index < indexArray.length; index += 1) {\n const value = indexArray[index];\n if (value === undefined || value >= vertexCount) {\n return failure(\n 'indices',\n value ?? -1,\n `indices[${index}] must be less than vertexCount (${vertexCount})`,\n );\n }\n }\n }\n\n const packed = packInterleavedVertexAttributes(source, vertexCount);\n if (!packed.ok) return packed;\n const ranges = completedSubmeshes(\n submeshes,\n vertexCount,\n indexArray?.length ?? 0,\n materialSlots.length,\n );\n if (!ranges.ok) return ranges;\n const aabb = box3.fromPositions(box3.create(), positionView);\n const copiedAttributes: VertexAttributeMap = {};\n for (const key of checked.value.keys) {\n const value = source[key];\n if (value === undefined) continue;\n const cloned = cloneAttribute(key, value);\n if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n if (key === 'skinIndex') {\n if (!(cloned instanceof Uint16Array)) {\n return failure(key, typeof value, 'skinIndex storage must be Uint16Array');\n }\n copiedAttributes.skinIndex = cloned;\n } else {\n if (!(cloned instanceof Float32Array)) {\n return failure(key, typeof value, `${key} storage must be Float32Array`);\n }\n copiedAttributes[key] = cloned;\n }\n }\n const mesh: MeshAsset = {\n kind: 'mesh',\n vertices: packed.value.vertices.slice(),\n ...(indexArray === undefined ? {} : { indices: indexArray.slice() }),\n attributes: copiedAttributes,\n aabb: Float32Array.from(aabb),\n submeshes: ranges.value,\n materialSlots: Object.freeze(materialSlots.map((slot) => ({ ...slot }))),\n };\n return ok(Object.freeze(mesh));\n };\n\n if (options.attributes !== undefined) {\n const result = appendVertices(options.attributes);\n if (!result.ok) {\n // Keep construction side-effect free; the structured error is surfaced\n // by build() because the builder itself intentionally has no throw path.\n const constructionError = result.error;\n return {\n appendVertices,\n appendIndices,\n addSubmesh,\n build: () => err(constructionError),\n };\n }\n }\n if (options.indices !== undefined) {\n const result = appendIndices(options.indices);\n if (!result.ok) {\n const constructionError = result.error;\n return {\n appendVertices,\n appendIndices,\n addSubmesh,\n build: () => err(constructionError),\n };\n }\n }\n for (const submesh of options.submeshes ?? []) submeshes.push({ ...submesh });\n return { appendVertices, appendIndices, addSubmesh, build };\n}\n","// Exact Utah teapot patch tessellation ported from Three.js TeapotGeometry.\n// Source: three.js ad005397bbd15b0a9fcd5159c782eba56e1cba2a, examples/jsm/geometries/TeapotGeometry.js\n// Three.js is MIT licensed; this file preserves the upstream attribution.\n\nimport type { MeshAsset } from '@forgeax/engine-types';\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\nimport { FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nconst PATCHES = new Uint16Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3, 16, 17, 18, 7, 19, 20, 21, 11, 22, 23,\n 24, 15, 25, 26, 27, 18, 28, 29, 30, 21, 31, 32, 33, 24, 34, 35, 36, 27, 37, 38, 39, 30, 40, 41, 0,\n 33, 42, 43, 4, 36, 44, 45, 8, 39, 46, 47, 12, 12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57, 58, 59, 15, 25, 26, 27, 51, 60, 61, 62, 55, 63, 64, 65, 59, 66, 67, 68, 27, 37, 38, 39, 62,\n 69, 70, 71, 65, 72, 73, 74, 68, 75, 76, 77, 39, 46, 47, 12, 71, 78, 79, 48, 74, 80, 81, 52, 77,\n 82, 83, 56, 56, 57, 58, 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 59, 66, 67, 68, 87,\n 96, 97, 98, 91, 99, 100, 101, 95, 102, 103, 104, 68, 75, 76, 77, 98, 105, 106, 107, 101, 108, 109,\n 110, 104, 111, 112, 113, 77, 82, 83, 56, 107, 114, 115, 84, 110, 116, 117, 88, 113, 118, 119, 92,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 123, 136, 137,\n 120, 127, 138, 139, 124, 131, 140, 141, 128, 135, 142, 143, 132, 132, 133, 134, 135, 144, 145,\n 146, 147, 148, 149, 150, 151, 68, 152, 153, 154, 135, 142, 143, 132, 147, 155, 156, 144, 151, 157,\n 158, 148, 154, 159, 160, 68, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,\n 175, 176, 164, 177, 178, 161, 168, 179, 180, 165, 172, 181, 182, 169, 176, 183, 184, 173, 173,\n 174, 175, 176, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 176, 183, 184, 173,\n 188, 197, 198, 185, 192, 199, 200, 189, 196, 201, 202, 193, 203, 203, 203, 203, 204, 205, 206,\n 207, 208, 208, 208, 208, 209, 210, 211, 212, 203, 203, 203, 203, 207, 213, 214, 215, 208, 208,\n 208, 208, 212, 216, 217, 218, 203, 203, 203, 203, 215, 219, 220, 221, 208, 208, 208, 208, 218,\n 222, 223, 224, 203, 203, 203, 203, 221, 225, 226, 204, 208, 208, 208, 208, 224, 227, 228, 209,\n 209, 210, 211, 212, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 212, 216, 217,\n 218, 232, 241, 242, 243, 236, 244, 245, 246, 240, 247, 248, 249, 218, 222, 223, 224, 243, 250,\n 251, 252, 246, 253, 254, 255, 249, 256, 257, 258, 224, 227, 228, 209, 252, 259, 260, 229, 255,\n 261, 262, 233, 258, 263, 264, 237, 265, 265, 265, 265, 266, 267, 268, 269, 270, 271, 272, 273, 92,\n 119, 118, 113, 265, 265, 265, 265, 269, 274, 275, 276, 273, 277, 278, 279, 113, 112, 111, 104,\n 265, 265, 265, 265, 276, 280, 281, 282, 279, 283, 284, 285, 104, 103, 102, 95, 265, 265, 265, 265,\n 282, 286, 287, 266, 285, 288, 289, 270, 95, 94, 93, 92,\n]);\nconst CONTROL_POINTS = new Float32Array([\n 1.4, 0, 2.4, 1.4, -0.784, 2.4, 0.784, -1.4, 2.4, 0, -1.4, 2.4, 1.3375, 0, 2.53125, 1.3375, -0.749,\n 2.53125, 0.749, -1.3375, 2.53125, 0, -1.3375, 2.53125, 1.4375, 0, 2.53125, 1.4375, -0.805,\n 2.53125, 0.805, -1.4375, 2.53125, 0, -1.4375, 2.53125, 1.5, 0, 2.4, 1.5, -0.84, 2.4, 0.84, -1.5,\n 2.4, 0, -1.5, 2.4, -0.784, -1.4, 2.4, -1.4, -0.784, 2.4, -1.4, 0, 2.4, -0.749, -1.3375, 2.53125,\n -1.3375, -0.749, 2.53125, -1.3375, 0, 2.53125, -0.805, -1.4375, 2.53125, -1.4375, -0.805, 2.53125,\n -1.4375, 0, 2.53125, -0.84, -1.5, 2.4, -1.5, -0.84, 2.4, -1.5, 0, 2.4, -1.4, 0.784, 2.4, -0.784,\n 1.4, 2.4, 0, 1.4, 2.4, -1.3375, 0.749, 2.53125, -0.749, 1.3375, 2.53125, 0, 1.3375, 2.53125,\n -1.4375, 0.805, 2.53125, -0.805, 1.4375, 2.53125, 0, 1.4375, 2.53125, -1.5, 0.84, 2.4, -0.84, 1.5,\n 2.4, 0, 1.5, 2.4, 0.784, 1.4, 2.4, 1.4, 0.784, 2.4, 0.749, 1.3375, 2.53125, 1.3375, 0.749,\n 2.53125, 0.805, 1.4375, 2.53125, 1.4375, 0.805, 2.53125, 0.84, 1.5, 2.4, 1.5, 0.84, 2.4, 1.75, 0,\n 1.875, 1.75, -0.98, 1.875, 0.98, -1.75, 1.875, 0, -1.75, 1.875, 2, 0, 1.35, 2, -1.12, 1.35, 1.12,\n -2, 1.35, 0, -2, 1.35, 2, 0, 0.9, 2, -1.12, 0.9, 1.12, -2, 0.9, 0, -2, 0.9, -0.98, -1.75, 1.875,\n -1.75, -0.98, 1.875, -1.75, 0, 1.875, -1.12, -2, 1.35, -2, -1.12, 1.35, -2, 0, 1.35, -1.12, -2,\n 0.9, -2, -1.12, 0.9, -2, 0, 0.9, -1.75, 0.98, 1.875, -0.98, 1.75, 1.875, 0, 1.75, 1.875, -2, 1.12,\n 1.35, -1.12, 2, 1.35, 0, 2, 1.35, -2, 1.12, 0.9, -1.12, 2, 0.9, 0, 2, 0.9, 0.98, 1.75, 1.875,\n 1.75, 0.98, 1.875, 1.12, 2, 1.35, 2, 1.12, 1.35, 1.12, 2, 0.9, 2, 1.12, 0.9, 2, 0, 0.45, 2, -1.12,\n 0.45, 1.12, -2, 0.45, 0, -2, 0.45, 1.5, 0, 0.225, 1.5, -0.84, 0.225, 0.84, -1.5, 0.225, 0, -1.5,\n 0.225, 1.5, 0, 0.15, 1.5, -0.84, 0.15, 0.84, -1.5, 0.15, 0, -1.5, 0.15, -1.12, -2, 0.45, -2,\n -1.12, 0.45, -2, 0, 0.45, -0.84, -1.5, 0.225, -1.5, -0.84, 0.225, -1.5, 0, 0.225, -0.84, -1.5,\n 0.15, -1.5, -0.84, 0.15, -1.5, 0, 0.15, -2, 1.12, 0.45, -1.12, 2, 0.45, 0, 2, 0.45, -1.5, 0.84,\n 0.225, -0.84, 1.5, 0.225, 0, 1.5, 0.225, -1.5, 0.84, 0.15, -0.84, 1.5, 0.15, 0, 1.5, 0.15, 1.12,\n 2, 0.45, 2, 1.12, 0.45, 0.84, 1.5, 0.225, 1.5, 0.84, 0.225, 0.84, 1.5, 0.15, 1.5, 0.84, 0.15,\n -1.6, 0, 2.025, -1.6, -0.3, 2.025, -1.5, -0.3, 2.25, -1.5, 0, 2.25, -2.3, 0, 2.025, -2.3, -0.3,\n 2.025, -2.5, -0.3, 2.25, -2.5, 0, 2.25, -2.7, 0, 2.025, -2.7, -0.3, 2.025, -3, -0.3, 2.25, -3, 0,\n 2.25, -2.7, 0, 1.8, -2.7, -0.3, 1.8, -3, -0.3, 1.8, -3, 0, 1.8, -1.5, 0.3, 2.25, -1.6, 0.3, 2.025,\n -2.5, 0.3, 2.25, -2.3, 0.3, 2.025, -3, 0.3, 2.25, -2.7, 0.3, 2.025, -3, 0.3, 1.8, -2.7, 0.3, 1.8,\n -2.7, 0, 1.575, -2.7, -0.3, 1.575, -3, -0.3, 1.35, -3, 0, 1.35, -2.5, 0, 1.125, -2.5, -0.3, 1.125,\n -2.65, -0.3, 0.9375, -2.65, 0, 0.9375, -2, -0.3, 0.9, -1.9, -0.3, 0.6, -1.9, 0, 0.6, -3, 0.3,\n 1.35, -2.7, 0.3, 1.575, -2.65, 0.3, 0.9375, -2.5, 0.3, 1.125, -1.9, 0.3, 0.6, -2, 0.3, 0.9, 1.7,\n 0, 1.425, 1.7, -0.66, 1.425, 1.7, -0.66, 0.6, 1.7, 0, 0.6, 2.6, 0, 1.425, 2.6, -0.66, 1.425, 3.1,\n -0.66, 0.825, 3.1, 0, 0.825, 2.3, 0, 2.1, 2.3, -0.25, 2.1, 2.4, -0.25, 2.025, 2.4, 0, 2.025, 2.7,\n 0, 2.4, 2.7, -0.25, 2.4, 3.3, -0.25, 2.4, 3.3, 0, 2.4, 1.7, 0.66, 0.6, 1.7, 0.66, 1.425, 3.1,\n 0.66, 0.825, 2.6, 0.66, 1.425, 2.4, 0.25, 2.025, 2.3, 0.25, 2.1, 3.3, 0.25, 2.4, 2.7, 0.25, 2.4,\n 2.8, 0, 2.475, 2.8, -0.25, 2.475, 3.525, -0.25, 2.49375, 3.525, 0, 2.49375, 2.9, 0, 2.475, 2.9,\n -0.15, 2.475, 3.45, -0.15, 2.5125, 3.45, 0, 2.5125, 2.8, 0, 2.4, 2.8, -0.15, 2.4, 3.2, -0.15, 2.4,\n 3.2, 0, 2.4, 3.525, 0.25, 2.49375, 2.8, 0.25, 2.475, 3.45, 0.15, 2.5125, 2.9, 0.15, 2.475, 3.2,\n 0.15, 2.4, 2.8, 0.15, 2.4, 0, 0, 3.15, 0.8, 0, 3.15, 0.8, -0.45, 3.15, 0.45, -0.8, 3.15, 0, -0.8,\n 3.15, 0, 0, 2.85, 0.2, 0, 2.7, 0.2, -0.112, 2.7, 0.112, -0.2, 2.7, 0, -0.2, 2.7, -0.45, -0.8,\n 3.15, -0.8, -0.45, 3.15, -0.8, 0, 3.15, -0.112, -0.2, 2.7, -0.2, -0.112, 2.7, -0.2, 0, 2.7, -0.8,\n 0.45, 3.15, -0.45, 0.8, 3.15, 0, 0.8, 3.15, -0.2, 0.112, 2.7, -0.112, 0.2, 2.7, 0, 0.2, 2.7, 0.45,\n 0.8, 3.15, 0.8, 0.45, 3.15, 0.112, 0.2, 2.7, 0.2, 0.112, 2.7, 0.4, 0, 2.55, 0.4, -0.224, 2.55,\n 0.224, -0.4, 2.55, 0, -0.4, 2.55, 1.3, 0, 2.55, 1.3, -0.728, 2.55, 0.728, -1.3, 2.55, 0, -1.3,\n 2.55, 1.3, 0, 2.4, 1.3, -0.728, 2.4, 0.728, -1.3, 2.4, 0, -1.3, 2.4, -0.224, -0.4, 2.55, -0.4,\n -0.224, 2.55, -0.4, 0, 2.55, -0.728, -1.3, 2.55, -1.3, -0.728, 2.55, -1.3, 0, 2.55, -0.728, -1.3,\n 2.4, -1.3, -0.728, 2.4, -1.3, 0, 2.4, -0.4, 0.224, 2.55, -0.224, 0.4, 2.55, 0, 0.4, 2.55, -1.3,\n 0.728, 2.55, -0.728, 1.3, 2.55, 0, 1.3, 2.55, -1.3, 0.728, 2.4, -0.728, 1.3, 2.4, 0, 1.3, 2.4,\n 0.224, 0.4, 2.55, 0.4, 0.224, 2.55, 0.728, 1.3, 2.55, 1.3, 0.728, 2.55, 0.728, 1.3, 2.4, 1.3,\n 0.728, 2.4, 0, 0, 0, 1.425, 0, 0, 1.425, 0.798, 0, 0.798, 1.425, 0, 0, 1.425, 0, 1.5, 0, 0.075,\n 1.5, 0.84, 0.075, 0.84, 1.5, 0.075, 0, 1.5, 0.075, -0.798, 1.425, 0, -1.425, 0.798, 0, -1.425, 0,\n 0, -0.84, 1.5, 0.075, -1.5, 0.84, 0.075, -1.5, 0, 0.075, -1.425, -0.798, 0, -0.798, -1.425, 0, 0,\n -1.425, 0, -1.5, -0.84, 0.075, -0.84, -1.5, 0.075, 0, -1.5, 0.075, 0.798, -1.425, 0, 1.425,\n -0.798, 0, 0.84, -1.5, 0.075, 1.5, -0.84, 0.075,\n]);\n\nexport interface TeapotProvenance {\n readonly source: 'three.js';\n readonly commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a';\n readonly path: 'examples/jsm/geometries/TeapotGeometry.js';\n readonly license: 'MIT';\n}\n\nexport type TeapotMeshAsset = MeshAsset & { readonly provenance: TeapotProvenance };\n\nfunction basis(value: number): [number, number, number, number] {\n const inverse = 1 - value;\n return [\n inverse * inverse * inverse,\n 3 * value * inverse * inverse,\n 3 * value * value * inverse,\n value * value * value,\n ];\n}\n\nfunction derivativeBasis(value: number): [number, number, number, number] {\n const inverse = 1 - value;\n return [\n -3 * inverse * inverse,\n 3 * inverse * inverse - 6 * value * inverse,\n 6 * value * inverse - 3 * value * value,\n 3 * value * value,\n ];\n}\n\nfunction evaluatePatch(\n surface: number,\n s: number,\n t: number,\n fitLid: boolean,\n blinn: boolean,\n): {\n point: [number, number, number];\n ds: [number, number, number];\n dt: [number, number, number];\n} {\n const sb = basis(s);\n const tb = basis(t);\n const dsb = derivativeBasis(s);\n const dtb = derivativeBasis(t);\n const point: [number, number, number] = [0, 0, 0];\n const ds: [number, number, number] = [0, 0, 0];\n const dt: [number, number, number] = [0, 0, 0];\n for (let row = 0; row < 4; row++) {\n for (let column = 0; column < 4; column++) {\n const control = PATCHES[surface * 16 + row * 4 + column] ?? 0;\n const source = control * 3;\n for (let axis = 0; axis < 3; axis++) {\n const lidScale = fitLid && surface >= 20 && surface < 28 && axis !== 2 ? 1.077 : 1;\n let value = (CONTROL_POINTS[source + axis] ?? 0) * lidScale;\n if (!blinn && axis === 2) value *= 1.3;\n const pointWeight = value * (sb[row] ?? 0) * (tb[column] ?? 0);\n const dsWeight = value * (dsb[row] ?? 0) * (tb[column] ?? 0);\n const dtWeight = value * (sb[row] ?? 0) * (dtb[column] ?? 0);\n point[axis] = (point[axis] ?? 0) + pointWeight;\n ds[axis] = (ds[axis] ?? 0) + dsWeight;\n dt[axis] = (dt[axis] ?? 0) + dtWeight;\n }\n }\n }\n return { point, ds, dt };\n}\n\nfunction cross(\n a: readonly [number, number, number],\n b: readonly [number, number, number],\n): [number, number, number] {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction normalize(value: [number, number, number]): [number, number, number] {\n const length = Math.hypot(value[0], value[1], value[2]);\n return length > 0 ? [value[0] / length, value[1] / length, value[2] / length] : [0, 1, 0];\n}\n\n/** Build an exact Three.js TeapotGeometry-compatible Utah teapot mesh. */\nexport function createTeapotGeometry(\n size = 0.8,\n segments = 18,\n bottom = true,\n lid = true,\n body = true,\n fitLid = true,\n blinn = true,\n): Result<TeapotMeshAsset, AssetError> {\n if (!Number.isFinite(size) || size <= 0 || !Number.isFinite(segments) || segments < 2) {\n return err(\n new AssetError({\n code: 'asset-parse-failed',\n expected: 'finite positive size and segments >= 2',\n hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n detail: { field: 'parameters', value: size, reason: `segments=${segments}` },\n }),\n );\n }\n const steps = Math.max(2, Math.floor(segments));\n const maxHeight = 3.15 * (blinn ? 1 : 1.3);\n const maxHeight2 = maxHeight / 2;\n const trueSize = size / maxHeight2;\n const firstSurface = body ? 0 : 20;\n const lastSurface = bottom ? 32 : 28;\n const activeSurfaces: number[] = [];\n for (let surface = firstSurface; surface < lastSurface; surface++) {\n if (lid || surface < 20 || surface >= 28) activeSurfaces.push(surface);\n }\n const vertices = new Float32Array(\n activeSurfaces.length * (steps + 1) * (steps + 1) * FACTORY_FLOATS_PER_VERTEX,\n );\n const indices: number[] = [];\n const stride = steps + 1;\n let vertex = 0;\n const positions: Array<[number, number, number]> = [];\n for (const surface of activeSurfaces) {\n const surfaceStart = vertex;\n for (let sStep = 0; sStep <= steps; sStep++) {\n const s = sStep / steps;\n for (let tStep = 0; tStep <= steps; tStep++) {\n const t = tStep / steps;\n const evaluated = evaluatePatch(surface, s, t, fitLid, blinn);\n const normalRaw = cross(evaluated.dt, evaluated.ds);\n const normal =\n evaluated.point[0] === 0 && evaluated.point[1] === 0\n ? ([0, evaluated.point[2] > maxHeight2 ? 1 : -1, 0] as [number, number, number])\n : normalize([normalRaw[0], normalRaw[2], -normalRaw[1]]);\n const position: [number, number, number] = [\n Math.fround(trueSize * evaluated.point[0]),\n Math.fround(trueSize * (evaluated.point[2] - maxHeight2)),\n Math.fround(-trueSize * evaluated.point[1]),\n ];\n const base = vertex * FACTORY_FLOATS_PER_VERTEX;\n vertices[base] = position[0];\n vertices[base + 1] = position[1];\n vertices[base + 2] = position[2];\n vertices[base + 3] = normal[0];\n vertices[base + 4] = normal[1];\n vertices[base + 5] = normal[2];\n vertices[base + 6] = 1 - t;\n vertices[base + 7] = 1 - s;\n positions.push(position);\n vertex++;\n }\n }\n for (let sStep = 0; sStep < steps; sStep++) {\n for (let tStep = 0; tStep < steps; tStep++) {\n const v1 = surfaceStart + sStep * stride + tStep;\n const v2 = v1 + 1;\n const v3 = v2 + stride;\n const v4 = v1 + stride;\n const same = (a: number, b: number) =>\n positions[a]?.[0] === positions[b]?.[0] &&\n positions[a]?.[1] === positions[b]?.[1] &&\n positions[a]?.[2] === positions[b]?.[2];\n if (!same(v1, v2) && !same(v1, v3) && !same(v2, v3)) indices.push(v1, v2, v3);\n if (!same(v1, v3) && !same(v1, v4) && !same(v3, v4)) indices.push(v1, v3, v4);\n }\n }\n }\n const mesh = meshFromInterleaved(vertices, new Uint32Array(indices));\n if (!mesh.ok) return mesh;\n return ok({\n ...mesh.value,\n provenance: {\n source: 'three.js',\n commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a',\n path: 'examples/jsm/geometries/TeapotGeometry.js',\n license: 'MIT',\n },\n });\n}\n","// @forgeax/engine-runtime - Procedural Torus geometry (M3 / w8).\n//\n// Mirrors Three.js r184 TorusGeometry: createTorusGeometry(radius, tube,\n// radialSegments?, tubularSegments?) -> Result<MeshAsset, AssetError>.\n// `radius` is the distance from the torus center to the tube center (ring\n// radius); `tube` is the cross-section (tube) radius. Degenerate parameters\n// fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n// plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createTorusGeometry(\n radius: number,\n tube: number,\n radialSegments: number = 8,\n tubularSegments: number = 24,\n): Result<MeshAsset, AssetError> {\n if (radius <= 0) return err(degenerate(`radius=${radius}`));\n if (tube <= 0) return err(degenerate(`tube=${tube}`));\n const rs = radialSegments | 0;\n const ts = tubularSegments | 0;\n if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n if (ts < 3) return err(degenerate(`tubularSegments=${ts}; minimum 3`));\n\n const vertexCount = (rs + 1) * (ts + 1);\n const indexCount = rs * ts * 6;\n const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n const indices = new Uint32Array(indexCount);\n\n let vIdx = 0;\n for (let j = 0; j <= rs; j++) {\n const v = (j / rs) * Math.PI * 2;\n const cosV = Math.cos(v);\n const sinV = Math.sin(v);\n for (let i = 0; i <= ts; i++) {\n const u = (i / ts) * Math.PI * 2;\n const cosU = Math.cos(u);\n const sinU = Math.sin(u);\n const x = (radius + tube * cosV) * cosU;\n const y = (radius + tube * cosV) * sinU;\n const z = tube * sinV;\n // normal = normalize(position - center_of_tube_at_u)\n const centerX = radius * cosU;\n const centerY = radius * sinU;\n const nx = x - centerX;\n const ny = y - centerY;\n const nz = z;\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n vertices[base + 0] = x;\n vertices[base + 1] = y;\n vertices[base + 2] = z;\n vertices[base + 3] = nx / nlen;\n vertices[base + 4] = ny / nlen;\n vertices[base + 5] = nz / nlen;\n vertices[base + 6] = i / ts;\n vertices[base + 7] = j / rs;\n vIdx++;\n }\n }\n\n let iIdx = 0;\n for (let j = 1; j <= rs; j++) {\n for (let i = 1; i <= ts; i++) {\n const a = (ts + 1) * j + i - 1;\n const b = (ts + 1) * (j - 1) + i - 1;\n const c = (ts + 1) * (j - 1) + i;\n const d = (ts + 1) * j + i;\n indices[iIdx++] = a;\n indices[iIdx++] = b;\n indices[iIdx++] = d;\n indices[iIdx++] = b;\n indices[iIdx++] = c;\n indices[iIdx++] = d;\n }\n }\n\n return meshFromInterleaved(vertices, indices);\n}\n"]}