@carbonenginejs/runtime-resource 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/NOTICE +29 -29
- package/README.md +67 -548
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3005 -3005
- package/dist/CjsResManQueue.js +214 -214
- package/dist/CjsResource.js +566 -566
- package/dist/CjsResourceSource.js +59 -59
- package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
- package/dist/format/CjsBlueReader.js +269 -269
- package/dist/format/CjsFormat.js +192 -192
- package/dist/format/CjsReader.js +18 -18
- package/dist/format/CjsResourceProbe.js +277 -277
- package/dist/format/payloadContract.js +173 -173
- package/dist/formats/black/CjsBlackFormat.js +278 -278
- package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -153
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -382
- package/dist/formats/black/core/CjsBlackReader.js +639 -639
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -433
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +182 -182
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +125 -125
- package/dist/formats/bnk/core/graph.js +140 -140
- package/dist/formats/bnk/core/helpers.js +409 -409
- package/dist/formats/bnk/core/musicNodes.js +489 -489
- package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +118 -118
- package/dist/formats/cmf/core/buffers.js +233 -233
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +287 -287
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +364 -364
- package/dist/formats/cmf/core/shared.js +268 -268
- package/dist/formats/cmf/core/writer.js +517 -517
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +193 -193
- package/dist/formats/dds/core/bc6h.js +288 -288
- package/dist/formats/dds/core/bc7.js +251 -251
- package/dist/formats/dds/core/helpers.js +815 -815
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3901 -3901
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +87 -87
- package/dist/formats/flac/core/helpers.js +295 -295
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +87 -87
- package/dist/formats/gif/core/helpers.js +360 -360
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +290 -290
- package/dist/formats/gltf/core/helpers.js +292 -292
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +666 -666
- package/dist/formats/gltf/core/targets.js +163 -163
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +46 -0
- package/dist/formats/gr2/CjsGr2Format.js.map +1 -0
- package/dist/formats/gr2/core/CjsFormatGr2.js +273 -0
- package/dist/formats/gr2/core/CjsFormatGr2.js.map +1 -0
- package/dist/formats/gr2/core/bitknit2.js +280 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -0
- package/dist/formats/gr2/core/curves.js +1047 -0
- package/dist/formats/gr2/core/curves.js.map +1 -0
- package/dist/formats/gr2/core/gsf.js +72 -0
- package/dist/formats/gr2/core/gsf.js.map +1 -0
- package/dist/formats/gr2/core/helpers.js +332 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -0
- package/dist/formats/gr2/core/json.js +622 -0
- package/dist/formats/gr2/core/json.js.map +1 -0
- package/dist/formats/gr2/core/oodle1.js +388 -0
- package/dist/formats/gr2/core/oodle1.js.map +1 -0
- package/dist/formats/gr2/core/reader.js +617 -0
- package/dist/formats/gr2/core/reader.js.map +1 -0
- package/dist/formats/gr2/core/tangents.js +48 -0
- package/dist/formats/gr2/core/tangents.js.map +1 -0
- package/dist/formats/gr2/core/targets.js +351 -0
- package/dist/formats/gr2/core/targets.js.map +1 -0
- package/dist/formats/gr2/index.js +3 -0
- package/dist/formats/gr2/index.js.map +1 -0
- package/dist/formats/index.js +30 -23
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/jpeg/CjsJpegFormat.js +206 -206
- package/dist/formats/jpeg/core/helpers.js +350 -350
- package/dist/formats/jpeg/core/jpeg.js +377 -377
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +192 -192
- package/dist/formats/mp3/core/helpers.js +338 -338
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +191 -191
- package/dist/formats/mp4/core/helpers.js +449 -449
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +253 -253
- package/dist/formats/obj/core/helpers.js +573 -573
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +88 -88
- package/dist/formats/ogg/core/helpers.js +387 -387
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +999 -999
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +195 -195
- package/dist/formats/png/core/helpers.js +583 -583
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +261 -261
- package/dist/formats/red/core/CjsRedReader.js +194 -194
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +139 -139
- package/dist/formats/red/core/redGraph.js +68 -68
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +365 -365
- package/dist/formats/stl/core/helpers.js +261 -261
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +629 -629
- package/dist/formats/stl/core/targets.js +163 -163
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +192 -192
- package/dist/formats/tga/core/helpers.js +446 -446
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +192 -192
- package/dist/formats/wav/core/helpers.js +328 -328
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +191 -191
- package/dist/formats/webm/core/helpers.js +537 -537
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +86 -86
- package/dist/formats/webp/core/helpers.js +214 -214
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +241 -241
- package/dist/formats/wem/core/bitStream.js +259 -259
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +417 -417
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +83 -83
- package/dist/formats/yaml/core/CjsYamlReader.js +305 -305
- package/dist/formats/yaml/core/helpers.js +160 -160
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +49 -48
- package/dist/index.js.map +1 -1
- package/dist/resourcePath.js +18 -18
- package/dist/resourceStates.js +9 -9
- package/dist/resources/AudioGeometryResData.js +47 -47
- package/dist/resources/GStateBindingCallbackData.js +31 -31
- package/dist/resources/MeshDecalData.js +37 -37
- package/dist/resources/MeshDecalLodData.js +34 -34
- package/dist/resources/Tr2EffectRes.js +71 -71
- package/dist/resources/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resources/Tr2GrannyStateRes.js +44 -44
- package/dist/resources/Tr2ImageRes.js +114 -114
- package/dist/resources/Tr2LightProfileRes.js +40 -40
- package/dist/resources/Tr2MaterialArea.js +34 -34
- package/dist/resources/Tr2MaterialMesh.js +31 -31
- package/dist/resources/Tr2MaterialRes.js +34 -34
- package/dist/resources/Tr2ShaderPermutation.js +43 -43
- package/dist/resources/Tr2TextureLodManager.js +80 -80
- package/dist/resources/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resources/Tr2TexturePackChannel.js +37 -37
- package/dist/resources/Tr2TexturePipeline.js +52 -52
- package/dist/resources/Tr2TexturePipelineParams.js +34 -34
- package/dist/resources/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js +22 -0
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resources/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resources/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resources/TriGeometryRes.js +239 -239
- package/dist/resources/TriGeometryResAreaData.js +59 -59
- package/dist/resources/TriGeometryResJointData.js +38 -38
- package/dist/resources/TriGeometryResLodData.js +88 -88
- package/dist/resources/TriGeometryResMeshData.js +63 -63
- package/dist/resources/TriGeometryResSkeletonData.js +34 -34
- package/dist/resources/TriGrannyRes.js +43 -43
- package/dist/resources/TriJointBinding.js +38 -38
- package/dist/resources/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resources/TriRtGeometryConstants.js +88 -88
- package/dist/resources/TriTextureRes.js +304 -304
- package/dist/resources/enums.js +18 -18
- package/dist/resources/resourceBoundary.js +47 -47
- package/dist/resources/texturePipelineBehavior.js +308 -308
- package/dist/texture/CjsTextureArrayRes.js +406 -406
- package/dist/texture/CjsTextureParameterProxy.js +133 -133
- package/docs/README.md +69 -0
- package/docs/architecture.md +86 -0
- package/docs/concepts/resource-lifecycle.md +217 -0
- package/docs/formats/README.md +104 -0
- package/{FORMAT-PROVENANCE.md → docs/formats/provenance.md} +173 -155
- package/docs/formats/stl.md +37 -0
- package/docs/formats/wwise.md +44 -0
- package/docs/reference/events.md +92 -0
- package/docs/reference/motherlode-cache.md +244 -0
- package/docs/reference/queues.md +102 -0
- package/docs/reference/reload.md +107 -0
- package/docs/reference/texture-arrays.md +113 -0
- package/docs/reference/texture-pipeline.md +53 -0
- package/docs/roadmap.md +104 -0
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +20 -20
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -0
- package/format-notices/gr2/NOTICE +60 -0
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -0
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +52 -51
- package/resource-lifecycle.md +0 -679
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sources":["../../../../../src/formats/gr2/core/reader.js"],"sourcesContent":["/**\n * Low-level pure-JavaScript Granny .gr2 reader.\n *\n * The reader walks Granny's embedded reflection type tree, applies pointer\n * fixups, decompresses sections through {@link decompressGr2Section}, and\n * reconstructs a shared object graph.\n */\nimport { decompressBitKnit2 } from \"./bitknit2.js\";\nimport { decompressOodle1 } from \"./oodle1.js\";\n\n/**\n * Granny member type ids used by the reflected type tree.\n *\n * These values mirror the granny_member_type enum and are exposed for callers\n * that need to inspect raw type metadata.\n */\nexport const GRANNY_MEMBER_TYPES = Object.freeze({\n End: 0,\n Inline: 1,\n Reference: 2,\n ReferenceToArray: 3,\n ArrayOfReferences: 4,\n VariantReference: 5,\n UnsupportedRemove: 6,\n ReferenceToVariantArray: 7,\n String: 8,\n Transform: 9,\n Real32: 10,\n Int8: 11,\n UInt8: 12,\n BinormalInt8: 13,\n NormalUInt8: 14,\n Int16: 15,\n UInt16: 16,\n BinormalInt16: 17,\n NormalUInt16: 18,\n Int32: 19,\n UInt32: 20,\n Real16: 21,\n EmptyReference: 22\n});\nconst M = GRANNY_MEMBER_TYPES;\n/** Size in bytes of a reflected Granny transform member. */\nexport const GRANNY_TRANSFORM_SIZE = 68;\nconst TRANSFORM_SIZE = GRANNY_TRANSFORM_SIZE;\n\n/**\n * Known GR2 file magic values mapped to their pointer size in bytes.\n *\n * The reader currently supports little-endian 32-bit and 64-bit Granny files.\n */\nexport const GR2_MAGICS = Object.freeze({\n \"29de6cc0baa4532b25f5b7a5f666e2ee\": 4,\n \"e59b495e6f631f141e13eba990beedc4\": 8\n});\nconst MAGICS = GR2_MAGICS;\n\nconst HEX_BYTES = Array.from({ length: 256 }, (_, value) => value.toString(16).padStart(2, \"0\"));\nconst UTF8_DECODER = new TextDecoder(\"utf-8\");\n\n/**\n * Convert bytes to a lowercase hexadecimal string without relying on Node's Buffer.\n *\n * @param {Uint8Array} bytes Source bytes.\n * @returns {string} Two hexadecimal characters per byte.\n */\nexport function bytesToHex(bytes)\n{\n let out = \"\";\n for (let i = 0; i < bytes.length; i++) out += HEX_BYTES[bytes[i]];\n return out;\n}\n\n/**\n * Decode UTF-8 bytes using the browser and Node standard Encoding API.\n *\n * @param {Uint8Array} bytes UTF-8 encoded bytes.\n * @returns {string} Decoded text.\n */\nexport function decodeUtf8(bytes)\n{\n return UTF8_DECODER.decode(bytes);\n}\n\n/**\n * Convert an IEEE 754 binary16 value to a JavaScript number.\n *\n * @param {number} h Unsigned 16-bit half-float bits.\n * @returns {number} Decoded floating-point value.\n */\nfunction half2float(h)\n{\n const\n s = (h & 0x8000) >> 15,\n e = (h & 0x7c00) >> 10,\n f = h & 0x03ff;\n if (e === 0) return (s ? -1 : 1) * Math.pow(2, -14) * (f / 1024);\n if (e === 0x1f) return f ? NaN : (s ? -Infinity : Infinity);\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / 1024);\n}\n\n/** Compression format id for uncompressed GR2 sections. */\nexport const GR2_COMPRESSION_NONE = 0;\n\n/** Compression format id for legacy Granny Oodle0 sections. */\nexport const GR2_COMPRESSION_OODLE0 = 1;\n\n/** Compression format id for legacy Granny Oodle1 sections. */\nexport const GR2_COMPRESSION_OODLE1 = 2;\n\n/** Compression format id for Granny BitKnit2 sections. */\nexport const GR2_COMPRESSION_BITKNIT2 = 4;\n\n/**\n * Decompress one GR2 section payload according to its section-directory format.\n *\n * @param {number} format Section compression format id.\n * @param {Uint8Array} bytes Compressed section payload.\n * @param {number} expandedSize Expected decompressed byte length.\n * @param {{first16: number, first8: number}} sec Section metadata used by Oodle1 streams.\n * @returns {Uint8Array} Raw section bytes, decompressed when needed.\n * @throws {Error} If the format is not supported or the codec rejects the stream.\n */\nexport function decompressGr2Section(format, bytes, expandedSize, sec)\n{\n if (format === GR2_COMPRESSION_NONE) return bytes;\n if (format === GR2_COMPRESSION_OODLE0 || format === GR2_COMPRESSION_OODLE1)\n return decompressOodle1(bytes, expandedSize, { first16: sec.first16, first8: sec.first8 });\n if (format === GR2_COMPRESSION_BITKNIT2) return decompressBitKnit2(bytes, expandedSize);\n throw new Error(`section needs codec: format ${format} (0=None,2=Oodle1,4=BitKnit2)`);\n}\n\n/**\n * Reflected Granny file graph produced by the low-level reader.\n *\n * @typedef {object} RawGr2ReadResult\n * @property {number} version Granny file format revision from the file header.\n * @property {number} secCount Number of sections in the source file.\n * @property {object} fileInfo Reflected `granny_file_info` object graph with\n * references resolved to shared JavaScript objects.\n */\n\n/**\n * Parse raw `.gr2` bytes into the reflected Granny object graph.\n *\n * This is the low-level reader used by the package entry point. It decompresses\n * sections, applies pointer fixups, walks the embedded type tree, and preserves\n * pointer identity for repeated references in the resulting object graph.\n *\n * @param {Uint8Array|Buffer} buf Raw `.gr2` file bytes.\n * @returns {RawGr2ReadResult} Parsed Granny file metadata and object graph.\n * @throws {Error} If the file magic, compression format, or reflected graph is\n * unsupported or malformed.\n */\nexport function readGr2Raw(buf)\n{\n const dv0 = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n /**\n * Read a little-endian uint32 from the original file bytes.\n *\n * @param {number} o Byte offset in the file buffer.\n * @returns {number} Unsigned 32-bit integer.\n */\n const\n fu32 = o => dv0.getUint32(o, true),\n magic = bytesToHex(buf.subarray(0, 16)),\n P = MAGICS[magic];\n\n if (!P) throw new Error(\"unknown gr2 magic \" + magic);\n\n const\n MEMBER_DEF_SIZE = 20 + 3 * P,\n H = 32,\n version = fu32(H),\n secBase = H + fu32(H + 12),\n secCount = fu32(H + 16),\n rootTypeSec = fu32(H + 20),\n rootTypeOff = fu32(H + 24),\n rootObjSec = fu32(H + 28),\n rootObjOff = fu32(H + 32);\n\n const secs = [];\n for (let i = 0; i < secCount; i++)\n {\n const b = secBase + i * 44;\n secs.push({\n format: fu32(b), dataOffset: fu32(b + 4), dataSize: fu32(b + 8), expandedSize: fu32(b + 12),\n first16: fu32(b + 20), first8: fu32(b + 24),\n pFixOff: fu32(b + 28), pFixCnt: fu32(b + 32)\n });\n }\n\n const sectionBase = new Array(secCount);\n let total = 0;\n const datas = secs.map(s =>\n {\n const raw = buf.subarray(s.dataOffset, s.dataOffset + s.dataSize);\n return decompressGr2Section(s.format, raw, s.expandedSize, s);\n });\n\n for (let i = 0; i < secCount; i++)\n {\n sectionBase[i] = total;\n total += secs[i].expandedSize;\n }\n\n const mem = new Uint8Array(total);\n for (let i = 0; i < secCount; i++)\n {\n mem.set(datas[i], sectionBase[i]);\n }\n\n const dv = new DataView(mem.buffer);\n\n /**\n * Read a little-endian uint32 from the relocated section memory.\n *\n * @param {number} o Byte offset in relocated section memory.\n * @returns {number} Unsigned 32-bit integer.\n */\n const u32 = o => dv.getUint32(o, true);\n\n /**\n * Read a little-endian int32 from the relocated section memory.\n *\n * @param {number} o Byte offset in relocated section memory.\n * @returns {number} Signed 32-bit integer.\n */\n const i32 = o => dv.getInt32(o, true);\n\n /**\n * Read a little-endian float32 from the relocated section memory.\n *\n * @param {number} o Byte offset in relocated section memory.\n * @returns {number} Float32 value widened to a JavaScript number.\n */\n const f32 = o => dv.getFloat32(o, true);\n\n const reloc = new Map();\n for (let i = 0; i < secCount; i++)\n {\n const s = secs[i];\n if (s.pFixCnt === 0) continue;\n\n let rel;\n if (s.format === 4)\n {\n const csz = fu32(s.pFixOff);\n rel = decompressBitKnit2(buf.subarray(s.pFixOff + 4, s.pFixOff + 4 + csz), s.pFixCnt * 12);\n }\n else\n {\n rel = buf.subarray(s.pFixOff, s.pFixOff + s.pFixCnt * 12);\n }\n\n const rdv = new DataView(rel.buffer, rel.byteOffset, rel.byteLength);\n for (let k = 0; k < s.pFixCnt; k++)\n {\n const\n b = k * 12,\n from = rdv.getUint32(b, true),\n toSec = rdv.getUint32(b + 4, true),\n toOff = rdv.getUint32(b + 8, true);\n reloc.set(sectionBase[i] + from, sectionBase[toSec] + toOff);\n }\n }\n\n const NULL = -1;\n\n /**\n * Resolve a relocated pointer field from a global section-memory offset.\n *\n * @param {number} g Global offset of the pointer field.\n * @returns {number} Global target offset, or the null sentinel when absent.\n */\n const ptr = g => (reloc.has(g) ? reloc.get(g) : NULL);\n\n /**\n * Read a null-terminated UTF-8 string from relocated section memory.\n *\n * @param {number} g Global string offset, or the null sentinel.\n * @returns {string|null} Decoded string, or null for absent references.\n */\n function readString(g)\n {\n if (g < 0) return null;\n let end = g;\n while (end < mem.length && mem[end] !== 0) end++;\n return decodeUtf8(mem.subarray(g, end));\n }\n\n const typeCache = new Map();\n\n /**\n * Read and cache a reflected Granny type definition.\n *\n * @param {number} g Global offset of the first member definition.\n * @returns {{type: number, name: string|null, refType: number, arrayWidth: number}[]} Member descriptors.\n */\n function readType(g)\n {\n if (typeCache.has(g)) return typeCache.get(g);\n const members = [];\n let t = g;\n\n while (true)\n {\n const type = u32(t);\n if (type === M.End) break;\n members.push({\n type,\n name: readString(ptr(t + 4)),\n refType: ptr(t + 4 + P),\n arrayWidth: i32(t + 4 + 2 * P)\n });\n t += MEMBER_DEF_SIZE;\n if (members.length > 4096) throw new Error(\"type member overflow\");\n }\n\n typeCache.set(g, members);\n return members;\n }\n\n const sizeCache = new Map();\n\n /**\n * Compute the byte size of an object for a reflected Granny type.\n *\n * @param {number} typeOff Global type-definition offset.\n * @returns {number} Object size in bytes.\n */\n function objectSize(typeOff)\n {\n if (sizeCache.has(typeOff)) return sizeCache.get(typeOff);\n sizeCache.set(typeOff, 0);\n\n let sz = 0;\n for (const m of readType(typeOff))\n {\n sz += memberSize(m);\n }\n\n sizeCache.set(typeOff, sz);\n return sz;\n }\n\n /**\n * Compute the byte width of one reflected member.\n *\n * @param {{type: number, refType: number, arrayWidth: number}} m Member descriptor.\n * @returns {number} Member size in bytes.\n */\n function memberSize(m)\n {\n const w = m.arrayWidth > 0 ? m.arrayWidth : 1;\n switch (m.type)\n {\n case M.Inline:\n return objectSize(m.refType) * w;\n\n case M.Reference:\n case M.String:\n return P;\n\n case M.EmptyReference:\n return 4;\n\n case M.ReferenceToArray:\n case M.ArrayOfReferences:\n return 4 + P;\n\n case M.VariantReference:\n return 2 * P;\n\n case M.ReferenceToVariantArray:\n return 2 * P + 4;\n\n case M.Transform:\n return TRANSFORM_SIZE;\n\n case M.Real32:\n case M.Int32:\n case M.UInt32:\n return 4 * w;\n\n case M.Int16:\n case M.UInt16:\n case M.BinormalInt16:\n case M.NormalUInt16:\n case M.Real16:\n return 2 * w;\n\n case M.Int8:\n case M.UInt8:\n case M.BinormalInt8:\n case M.NormalUInt8:\n return 1 * w;\n\n default:\n return 0;\n }\n }\n\n const layoutCache = new Map();\n\n /**\n * Compute and cache the fixed per-member byte layout of a reflected type.\n *\n * Granny types are static structural definitions, so every instance of a\n * given type has an identical member layout; this only needs to run once\n * per type instead of once per object instance (as recomputing offsets\n * with {@link memberSize} inside {@link readObject} would).\n *\n * @param {number} typeOff Global type-definition offset.\n * @returns {{members: object[], offsets: number[]}} Cached member list and\n * each member's byte offset relative to the start of the object.\n */\n function typeLayout(typeOff)\n {\n if (layoutCache.has(typeOff)) return layoutCache.get(typeOff);\n\n const\n members = readType(typeOff),\n offsets = new Array(members.length);\n let size = 0;\n for (let i = 0; i < members.length; i++)\n {\n offsets[i] = size;\n size += memberSize(members[i]);\n }\n\n const layout = { members, offsets };\n layoutCache.set(typeOff, layout);\n return layout;\n }\n\n /**\n * Byte stride between consecutive elements of a fixed-width numeric member type.\n *\n * @param {number} type Granny member type id.\n * @returns {number} Element stride in bytes.\n */\n function numericStride(type)\n {\n switch (type)\n {\n case M.Real32:\n case M.Int32:\n case M.UInt32:\n return 4;\n\n case M.Int16:\n case M.UInt16:\n case M.BinormalInt16:\n case M.NormalUInt16:\n case M.Real16:\n return 2;\n\n default: // Int8, UInt8, BinormalInt8, NormalUInt8\n return 1;\n }\n }\n\n /**\n * Read one fixed-width numeric value from relocated memory.\n *\n * @param {number} type Granny member type id.\n * @param {number} o Global byte offset of the value.\n * @returns {number} Decoded value.\n */\n function numericAt(type, o)\n {\n switch (type)\n {\n case M.Real32:\n return f32(o);\n\n case M.Int32:\n return i32(o);\n\n case M.UInt32:\n return u32(o);\n\n case M.Int16:\n case M.BinormalInt16:\n return dv.getInt16(o, true);\n\n case M.UInt16:\n case M.NormalUInt16:\n return dv.getUint16(o, true);\n\n case M.Real16:\n return half2float(dv.getUint16(o, true));\n\n case M.Int8:\n case M.BinormalInt8:\n return dv.getInt8(o);\n\n case M.UInt8:\n case M.NormalUInt8:\n return mem[o];\n }\n }\n\n /**\n * Read a scalar or fixed-width numeric member from relocated memory.\n *\n * @param {{type: number, arrayWidth: number}} m Numeric member descriptor.\n * @param {number} off Global offset of the numeric field.\n * @returns {number|number[]} Decoded scalar or array.\n */\n function numeric(m, off)\n {\n const w = m.arrayWidth > 0 ? m.arrayWidth : 1;\n if (w === 1) return numericAt(m.type, off);\n\n const\n stride = numericStride(m.type),\n out = new Array(w);\n for (let i = 0; i < w; i++)\n {\n out[i] = numericAt(m.type, off + i * stride);\n }\n return out;\n }\n\n /**\n * Read a Granny transform struct from relocated memory.\n *\n * @param {number} o Global offset of the transform bytes.\n * @returns {{flags: number, position: number[], orientation: number[], scaleShear: number[]}} Decoded transform.\n */\n function readTransform(o)\n {\n return {\n flags: u32(o),\n position: [ f32(o + 4), f32(o + 8), f32(o + 12) ],\n orientation: [ f32(o + 16), f32(o + 20), f32(o + 24), f32(o + 28) ],\n scaleShear: [ f32(o + 32), f32(o + 36), f32(o + 40), f32(o + 44), f32(o + 48),\n f32(o + 52), f32(o + 56), f32(o + 60), f32(o + 64) ]\n };\n }\n\n let depth = 0;\n const objCache = new Map(); // typeOff -> Map<objOff, object>\n\n /**\n * Read a reflected object graph node, preserving pointer identity and cycles.\n *\n * @param {number} typeOff Global type-definition offset.\n * @param {number} objOff Global object-data offset.\n * @returns {object|null} Decoded object, or null for absent references.\n */\n function readObject(typeOff, objOff)\n {\n if (typeOff < 0 || objOff < 0) return null;\n\n let byOff = objCache.get(typeOff);\n if (byOff === undefined)\n {\n byOff = new Map();\n objCache.set(typeOff, byOff);\n }\n else\n {\n const cached = byOff.get(objOff);\n if (cached !== undefined) return cached;\n }\n\n if (++depth > 200) { depth--; throw new Error(\"recursion too deep\"); }\n\n const obj = {};\n byOff.set(objOff, obj);\n const { members, offsets } = typeLayout(typeOff);\n for (let idx = 0; idx < members.length; idx++)\n {\n const\n m = members[idx],\n field = objOff + offsets[idx];\n let name = m.name || \"_\";\n\n if (Object.prototype.hasOwnProperty.call(obj, name))\n {\n let n = 2;\n while (Object.prototype.hasOwnProperty.call(obj, name + \"\u0000\" + n)) n++;\n name = name + \"\u0000\" + n;\n }\n switch (m.type)\n {\n case M.String:\n obj[name] = readString(ptr(field));\n break;\n\n case M.Reference:\n obj[name] = readObject(m.refType, ptr(field));\n break;\n\n case M.Transform:\n obj[name] = readTransform(field);\n break;\n\n case M.Inline: {\n const\n w = m.arrayWidth > 0 ? m.arrayWidth : 1,\n os = objectSize(m.refType);\n if (m.arrayWidth > 1)\n {\n obj[name] = [];\n for (let i = 0; i < w; i++)\n {\n obj[name].push(readObject(m.refType, field + i * os));\n }\n }\n else\n {\n obj[name] = readObject(m.refType, field);\n }\n break;\n }\n\n case M.ReferenceToArray: {\n const\n count = i32(field),\n p = ptr(field + 4),\n os = objectSize(m.refType),\n a = [];\n for (let i = 0; i < count; i++)\n {\n a.push(readObject(m.refType, p + i * os));\n }\n obj[name] = a;\n break;\n }\n\n case M.ArrayOfReferences: {\n const\n count = i32(field),\n p = ptr(field + 4),\n a = [];\n for (let i = 0; i < count; i++)\n {\n a.push(readObject(m.refType, ptr(p + i * P)));\n }\n obj[name] = a;\n break;\n }\n\n case M.VariantReference:\n obj[name] = readObject(ptr(field), ptr(field + P));\n break;\n\n case M.ReferenceToVariantArray: {\n const\n vt = ptr(field),\n count = i32(field + P),\n p = ptr(field + P + 4),\n a = [],\n os = vt >= 0 ? objectSize(vt) : 0;\n for (let i = 0; i < count; i++)\n {\n a.push(readObject(vt, p + i * os));\n }\n\n if (vt >= 0) Object.defineProperty(a, \"__type\", { value: readType(vt), enumerable: false });\n obj[name] = a;\n break;\n }\n\n case M.Real32:\n case M.Int8:\n case M.UInt8:\n case M.BinormalInt8:\n case M.NormalUInt8:\n case M.Int16:\n case M.UInt16:\n case M.BinormalInt16:\n case M.NormalUInt16:\n case M.Int32:\n case M.UInt32:\n case M.Real16:\n obj[name] = numeric(m, field);\n break;\n\n default:\n obj[name] = null;\n }\n }\n depth--;\n return obj;\n }\n\n const\n rootTypeG = sectionBase[rootTypeSec] + rootTypeOff,\n rootObjG = sectionBase[rootObjSec] + rootObjOff,\n fileInfo = readObject(rootTypeG, rootObjG);\n return { version, secCount, fileInfo };\n}\n\n/** Alias for {@link readGr2Raw} when importing from reader.js directly. */\nexport const readGr2 = readGr2Raw;\n\n/**\n * Frozen convenience namespace for low-level GR2 reader helpers.\n *\n * The same constants and functions are also exported directly from reader.js.\n */\nexport const reader = Object.freeze({\n MEMBER_TYPES: GRANNY_MEMBER_TYPES,\n TRANSFORM_SIZE: GRANNY_TRANSFORM_SIZE,\n MAGICS: GR2_MAGICS,\n COMPRESSION_NONE: GR2_COMPRESSION_NONE,\n COMPRESSION_OODLE0: GR2_COMPRESSION_OODLE0,\n COMPRESSION_OODLE1: GR2_COMPRESSION_OODLE1,\n COMPRESSION_BITKNIT2: GR2_COMPRESSION_BITKNIT2,\n read: readGr2Raw,\n readRaw: readGr2Raw,\n readGr2Raw,\n decompressSection: decompressGr2Section,\n decompressGr2Section\n});\n"],"names":["GRANNY_MEMBER_TYPES","Object","freeze","End","Inline","Reference","ReferenceToArray","ArrayOfReferences","VariantReference","UnsupportedRemove","ReferenceToVariantArray","String","Transform","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","EmptyReference","M","GRANNY_TRANSFORM_SIZE","TRANSFORM_SIZE","GR2_MAGICS","MAGICS","HEX_BYTES","Array","from","length","_","value","toString","padStart","UTF8_DECODER","TextDecoder","bytesToHex","bytes","out","i","decodeUtf8","decode","half2float","h","s","e","f","Math","pow","NaN","Infinity","GR2_COMPRESSION_NONE","GR2_COMPRESSION_OODLE0","GR2_COMPRESSION_OODLE1","GR2_COMPRESSION_BITKNIT2","decompressGr2Section","format","expandedSize","sec","decompressOodle1","first16","first8","decompressBitKnit2","Error","readGr2Raw","buf","dv0","DataView","buffer","byteOffset","byteLength","fu32","o","getUint32","magic","subarray","P","MEMBER_DEF_SIZE","H","version","secBase","secCount","rootTypeSec","rootTypeOff","rootObjSec","rootObjOff","secs","b","push","dataOffset","dataSize","pFixOff","pFixCnt","sectionBase","total","datas","map","raw","mem","Uint8Array","set","dv","u32","i32","getInt32","f32","getFloat32","reloc","Map","rel","csz","rdv","k","toSec","toOff","NULL","ptr","g","has","get","readString","end","typeCache","readType","members","t","type","name","refType","arrayWidth","sizeCache","objectSize","typeOff","sz","m","memberSize","w","layoutCache","typeLayout","offsets","size","layout","numericStride","numericAt","getInt16","getUint16","getInt8","numeric","off","stride","readTransform","flags","position","orientation","scaleShear","depth","objCache","readObject","objOff","byOff","undefined","cached","obj","idx","field","prototype","hasOwnProperty","call","n","os","count","p","a","vt","defineProperty","enumerable","rootTypeG","rootObjG","fileInfo"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { generateBiNormals, generateTangents, generateNormals } from '@carbonenginejs/core-math/mesh';
|
|
2
|
+
export { generateBiNormals, generateNormals, generateTangents } from '@carbonenginejs/core-math/mesh';
|
|
3
|
+
import { clamp } from '@carbonenginejs/core-math/num';
|
|
4
|
+
export { clamp } from '@carbonenginejs/core-math/num';
|
|
5
|
+
import { isPacked, unpackMeshTangents, encodeTangentFrame, decodeTangentFrame, isNullTangent, NULL_TANGENT_UNORM, TANGENT_PI, TANGENT_TAU } from '@carbonenginejs/core-math/tangent';
|
|
6
|
+
export { NULL_TANGENT_UNORM, TANGENT_PI, TANGENT_TAU, decodeTangentFrame, encodeTangentFrame, isNullTangent, isPacked, unpackMeshTangents } from '@carbonenginejs/core-math/tangent';
|
|
7
|
+
import { dot, cross as cross$1 } from '@carbonenginejs/core-math/vec3';
|
|
8
|
+
export { dot } from '@carbonenginejs/core-math/vec3';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Tangent-frame helpers backed by @carbonenginejs/core-math.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Cross product of two vec3 values.
|
|
17
|
+
*
|
|
18
|
+
* @param {ArrayLike<number>} a Left-hand vector.
|
|
19
|
+
* @param {ArrayLike<number>} b Right-hand vector.
|
|
20
|
+
* @returns {number[]} `a x b`.
|
|
21
|
+
*/
|
|
22
|
+
function cross(a, b) {
|
|
23
|
+
return cross$1([0, 0, 0], a, b);
|
|
24
|
+
}
|
|
25
|
+
const tangents = Object.freeze({
|
|
26
|
+
TAU: TANGENT_TAU,
|
|
27
|
+
PI: TANGENT_PI,
|
|
28
|
+
NULL_TANGENT_UNORM,
|
|
29
|
+
cross,
|
|
30
|
+
dot,
|
|
31
|
+
clamp,
|
|
32
|
+
isNull: isNullTangent,
|
|
33
|
+
isNullTangent,
|
|
34
|
+
decode: decodeTangentFrame,
|
|
35
|
+
decodeTangentFrame,
|
|
36
|
+
pack: encodeTangentFrame,
|
|
37
|
+
encode: encodeTangentFrame,
|
|
38
|
+
encodeTangentFrame,
|
|
39
|
+
unpack: unpackMeshTangents,
|
|
40
|
+
unpackMeshTangents,
|
|
41
|
+
isPacked,
|
|
42
|
+
generateNormals,
|
|
43
|
+
generateTangents,
|
|
44
|
+
generateBiNormals
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export { cross, tangents };
|
|
48
|
+
//# sourceMappingURL=tangents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tangents.js","sources":["../../../../../src/formats/gr2/core/tangents.js"],"sourcesContent":["/**\n * Tangent-frame helpers backed by @carbonenginejs/core-math.\n */\n\nimport {\n generateBiNormals,\n generateNormals,\n generateTangents\n} from \"@carbonenginejs/core-math/mesh\";\nimport { clamp } from \"@carbonenginejs/core-math/num\";\nimport {\n TANGENT_PI,\n TANGENT_TAU,\n NULL_TANGENT_UNORM,\n decodeTangentFrame,\n encodeTangentFrame,\n isNullTangent,\n isPacked,\n unpackMeshTangents\n} from \"@carbonenginejs/core-math/tangent\";\nimport {\n cross as crossInto,\n dot\n} from \"@carbonenginejs/core-math/vec3\";\n\nexport {\n TANGENT_PI,\n TANGENT_TAU,\n NULL_TANGENT_UNORM,\n clamp,\n decodeTangentFrame,\n encodeTangentFrame,\n generateBiNormals,\n generateNormals,\n generateTangents,\n isNullTangent,\n isPacked,\n unpackMeshTangents,\n dot\n};\n\n/**\n * Cross product of two vec3 values.\n *\n * @param {ArrayLike<number>} a Left-hand vector.\n * @param {ArrayLike<number>} b Right-hand vector.\n * @returns {number[]} `a x b`.\n */\nexport function cross(a, b)\n{\n return crossInto([ 0, 0, 0 ], a, b);\n}\n\nexport const tangents = Object.freeze({\n TAU: TANGENT_TAU,\n PI: TANGENT_PI,\n NULL_TANGENT_UNORM,\n cross,\n dot,\n clamp,\n isNull: isNullTangent,\n isNullTangent,\n decode: decodeTangentFrame,\n decodeTangentFrame,\n pack: encodeTangentFrame,\n encode: encodeTangentFrame,\n encodeTangentFrame,\n unpack: unpackMeshTangents,\n unpackMeshTangents,\n isPacked,\n generateNormals,\n generateTangents,\n generateBiNormals\n});\n"],"names":["cross","a","b","crossInto","tangents","Object","freeze","TAU","TANGENT_TAU","PI","TANGENT_PI","NULL_TANGENT_UNORM","dot","clamp","isNull","isNullTangent","decode","decodeTangentFrame","pack","encodeTangentFrame","encode","unpack","unpackMeshTangents","isPacked","generateNormals","generateTangents","generateBiNormals"],"mappings":";;;;;;;;;AAAA;AACA;AACA;;;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,KAAKA,CAACC,CAAC,EAAEC,CAAC,EAC1B;AACI,EAAA,OAAOC,OAAS,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAEF,CAAC,EAAEC,CAAC,CAAC;AACvC;MAEaE,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC;AAClCC,EAAAA,GAAG,EAAEC,WAAW;AAChBC,EAAAA,EAAE,EAAEC,UAAU;EACdC,kBAAkB;EAClBX,KAAK;EACLY,GAAG;EACHC,KAAK;AACLC,EAAAA,MAAM,EAAEC,aAAa;EACrBA,aAAa;AACbC,EAAAA,MAAM,EAAEC,kBAAkB;EAC1BA,kBAAkB;AAClBC,EAAAA,IAAI,EAAEC,kBAAkB;AACxBC,EAAAA,MAAM,EAAED,kBAAkB;EAC1BA,kBAAkB;AAClBE,EAAAA,MAAM,EAAEC,kBAAkB;EAC1BA,kBAAkB;EAClBC,QAAQ;EACRC,eAAe;EACfC,gBAAgB;AAChBC,EAAAA;AACJ,CAAC;;;;"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
const CMF_CLASS_KEYS = Object.freeze(["Root", "Section", "Metadata", "MetadataEntry", "Mesh", "IndexGroup", "VertexElement", "MeshLod", "MeshArea", "LodMeshArea", "BoneBinding", "MorphTargets", "MorphTarget", "LodMorphTarget", "AudioOcclusionMesh", "Skeleton", "BoneMask", "BoneWeight", "Animation", "AnimationChannel", "AnimationCurve"]);
|
|
2
|
+
const CHANNELS = Object.freeze([{
|
|
3
|
+
name: "position",
|
|
4
|
+
usage: "Position",
|
|
5
|
+
elementCount: 3
|
|
6
|
+
}, {
|
|
7
|
+
name: "normal",
|
|
8
|
+
usage: "Normal",
|
|
9
|
+
elementCount: 3
|
|
10
|
+
}, {
|
|
11
|
+
name: "tangent",
|
|
12
|
+
usage: "Tangent",
|
|
13
|
+
elementCount: 4,
|
|
14
|
+
flexible: true
|
|
15
|
+
}, {
|
|
16
|
+
name: "binormal",
|
|
17
|
+
usage: "Binormal",
|
|
18
|
+
elementCount: 4,
|
|
19
|
+
flexible: true
|
|
20
|
+
}, {
|
|
21
|
+
name: "texcoord0",
|
|
22
|
+
usage: "TexCoord",
|
|
23
|
+
elementCount: 2,
|
|
24
|
+
usageIndex: 0
|
|
25
|
+
}, {
|
|
26
|
+
name: "texcoord1",
|
|
27
|
+
usage: "TexCoord",
|
|
28
|
+
elementCount: 2,
|
|
29
|
+
usageIndex: 1
|
|
30
|
+
}, {
|
|
31
|
+
name: "color0",
|
|
32
|
+
usage: "Color",
|
|
33
|
+
elementCount: 4,
|
|
34
|
+
usageIndex: 0
|
|
35
|
+
}, {
|
|
36
|
+
name: "blendIndice",
|
|
37
|
+
usage: "BoneIndices",
|
|
38
|
+
elementCount: 4,
|
|
39
|
+
usageIndex: 0,
|
|
40
|
+
type: "UInt16"
|
|
41
|
+
}, {
|
|
42
|
+
name: "blendWeight",
|
|
43
|
+
usage: "BoneWeights",
|
|
44
|
+
elementCount: 4,
|
|
45
|
+
usageIndex: 0
|
|
46
|
+
}]);
|
|
47
|
+
function buildCmfFromShared(root) {
|
|
48
|
+
return {
|
|
49
|
+
version: 1,
|
|
50
|
+
metadata: null,
|
|
51
|
+
meshes: (root.meshes ?? []).map(mesh => buildMesh(mesh)),
|
|
52
|
+
skeletons: [],
|
|
53
|
+
animations: []
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function buildMesh(mesh) {
|
|
57
|
+
const vertex = mesh.vertex ?? {},
|
|
58
|
+
indices = mesh.indices ?? [],
|
|
59
|
+
boneBindings = (mesh.boneBindings ?? []).map(binding => buildBoneBinding(binding)),
|
|
60
|
+
affectedByBones = boneBindings.length > 0,
|
|
61
|
+
morphTargets = buildMorphTargets(mesh),
|
|
62
|
+
affectedByMorphTargets = morphTargets.targets.length > 0,
|
|
63
|
+
vertexCount = vertexCountOf(vertex),
|
|
64
|
+
stride = estimateVertexStride(vertex, vertexCount);
|
|
65
|
+
return {
|
|
66
|
+
name: mesh.name ?? "",
|
|
67
|
+
decl: buildDecl(vertex),
|
|
68
|
+
lods: [{
|
|
69
|
+
vb: {
|
|
70
|
+
index: 1,
|
|
71
|
+
offset: 0,
|
|
72
|
+
size: vertexCount * stride,
|
|
73
|
+
stride
|
|
74
|
+
},
|
|
75
|
+
ib: {
|
|
76
|
+
index: 2,
|
|
77
|
+
offset: 0,
|
|
78
|
+
size: totalIndexCount(indices) * bytesPerIndex(indices),
|
|
79
|
+
stride: bytesPerIndex(indices)
|
|
80
|
+
},
|
|
81
|
+
areas: indices.map((group, index) => ({
|
|
82
|
+
firstElement: firstTriangle(indices, index),
|
|
83
|
+
elementCount: Math.floor((group.faces ?? []).length / 3)
|
|
84
|
+
})),
|
|
85
|
+
morphTargets: morphTargets.lods,
|
|
86
|
+
threshold: 0xffffffff,
|
|
87
|
+
vertex,
|
|
88
|
+
indices
|
|
89
|
+
}],
|
|
90
|
+
areas: indices.map(group => ({
|
|
91
|
+
name: group.name ?? "",
|
|
92
|
+
bounds: bounds(mesh),
|
|
93
|
+
bones: [],
|
|
94
|
+
affectedByBones,
|
|
95
|
+
affectedByMorphTargets
|
|
96
|
+
})),
|
|
97
|
+
boneBindings,
|
|
98
|
+
morphTargets: {
|
|
99
|
+
decl: morphTargets.decl,
|
|
100
|
+
targets: morphTargets.targets
|
|
101
|
+
},
|
|
102
|
+
uvDensities: [],
|
|
103
|
+
bounds: bounds(mesh),
|
|
104
|
+
audioOcclusionMesh: {
|
|
105
|
+
vertices: [],
|
|
106
|
+
indices: [],
|
|
107
|
+
bounds: {
|
|
108
|
+
min: [0, 0, 0],
|
|
109
|
+
max: [0, 0, 0]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
topology: "TriangleList",
|
|
113
|
+
skeleton: null,
|
|
114
|
+
vertex,
|
|
115
|
+
indices
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function buildMorphTargets(mesh) {
|
|
119
|
+
const targets = mesh.morphTargets ?? [];
|
|
120
|
+
if (!targets.length) {
|
|
121
|
+
return {
|
|
122
|
+
decl: [],
|
|
123
|
+
targets: [],
|
|
124
|
+
lods: []
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const baseVertex = mesh.vertex ?? {},
|
|
128
|
+
vertexCount = vertexCountOf(baseVertex),
|
|
129
|
+
specs = morphChannelSpecs(targets, baseVertex, vertexCount),
|
|
130
|
+
decl = buildDeclFromSpecs(specs),
|
|
131
|
+
stride = estimateStrideFromDecl(decl),
|
|
132
|
+
vertices = targets.map(target => canonicalMorphVertex(baseVertex, target, specs, vertexCount));
|
|
133
|
+
return {
|
|
134
|
+
decl,
|
|
135
|
+
targets: targets.map((target, index) => ({
|
|
136
|
+
name: target.name ?? "",
|
|
137
|
+
maxDisplacement: target.maxDisplacement ?? maxDisplacement(vertices[index].position ?? [])
|
|
138
|
+
})),
|
|
139
|
+
lods: vertices.map(vertex => ({
|
|
140
|
+
vb: {
|
|
141
|
+
index: 0,
|
|
142
|
+
offset: 0,
|
|
143
|
+
size: vertexCount * stride,
|
|
144
|
+
stride
|
|
145
|
+
},
|
|
146
|
+
vertex
|
|
147
|
+
}))
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function morphChannelSpecs(targets, baseVertex, vertexCount) {
|
|
151
|
+
return CHANNELS.flatMap(spec => {
|
|
152
|
+
let elementCount = 0;
|
|
153
|
+
for (const target of targets) {
|
|
154
|
+
const vertex = target.vertex ?? {},
|
|
155
|
+
values = vertex[spec.name] ?? [];
|
|
156
|
+
if (!values.length) continue;
|
|
157
|
+
const count = targetSourceCount(target, vertexCount);
|
|
158
|
+
elementCount = Math.max(elementCount, channelWidth(spec, vertex, count));
|
|
159
|
+
}
|
|
160
|
+
if (!elementCount) return [];
|
|
161
|
+
if ((baseVertex[spec.name] ?? []).length) {
|
|
162
|
+
elementCount = Math.max(elementCount, channelWidth(spec, baseVertex, vertexCount));
|
|
163
|
+
}
|
|
164
|
+
return [{
|
|
165
|
+
...spec,
|
|
166
|
+
elementCount
|
|
167
|
+
}];
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function canonicalMorphVertex(baseVertex, target, specs, vertexCount) {
|
|
171
|
+
const sourceVertex = target.vertex ?? {},
|
|
172
|
+
vertexIndices = Array.isArray(target.vertexIndices) ? target.vertexIndices : null,
|
|
173
|
+
sourceCount = targetSourceCount(target, vertexCount),
|
|
174
|
+
result = {};
|
|
175
|
+
for (const spec of specs) {
|
|
176
|
+
const source = sourceVertex[spec.name] ?? [],
|
|
177
|
+
output = new Array(vertexCount * spec.elementCount).fill(0),
|
|
178
|
+
sourceWidth = channelWidth(spec, sourceVertex, sourceCount),
|
|
179
|
+
base = baseVertex[spec.name] ?? [],
|
|
180
|
+
baseWidth = channelWidth(spec, baseVertex, vertexCount),
|
|
181
|
+
rowCount = Math.min(sourceCount, sourceWidth ? Math.floor(source.length / sourceWidth) : 0);
|
|
182
|
+
for (let row = 0; row < rowCount; row++) {
|
|
183
|
+
const vertexIndex = vertexIndices ? vertexIndices[row] : row;
|
|
184
|
+
if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;
|
|
185
|
+
const count = Math.min(sourceWidth, spec.elementCount);
|
|
186
|
+
for (let component = 0; component < count; component++) {
|
|
187
|
+
const sourceValue = source[row * sourceWidth + component],
|
|
188
|
+
baseValue = base[vertexIndex * baseWidth + component] ?? 0;
|
|
189
|
+
output[vertexIndex * spec.elementCount + component] = target.dataIsDeltas === false ? sourceValue - baseValue : sourceValue;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
result[spec.name] = output;
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
function targetSourceCount(target, fallbackCount) {
|
|
197
|
+
if (Array.isArray(target.vertexIndices)) return target.vertexIndices.length;
|
|
198
|
+
return vertexCountOf(target.vertex ?? {}, fallbackCount);
|
|
199
|
+
}
|
|
200
|
+
function buildBoneBinding(binding) {
|
|
201
|
+
return {
|
|
202
|
+
name: binding.name ?? "",
|
|
203
|
+
bounds: {
|
|
204
|
+
min: binding.minBounds ?? binding.bounds?.min ?? [0, 0, 0],
|
|
205
|
+
max: binding.maxBounds ?? binding.bounds?.max ?? [0, 0, 0]
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function buildDecl(vertex, vertexCount = vertexCountOf(vertex)) {
|
|
210
|
+
const specs = CHANNELS.filter(spec => Array.isArray(vertex[spec.name]) && vertex[spec.name].length > 0).map(spec => ({
|
|
211
|
+
...spec,
|
|
212
|
+
elementCount: channelWidth(spec, vertex, vertexCount)
|
|
213
|
+
}));
|
|
214
|
+
return buildDeclFromSpecs(specs);
|
|
215
|
+
}
|
|
216
|
+
function buildDeclFromSpecs(specs) {
|
|
217
|
+
const decl = [];
|
|
218
|
+
let offset = 0;
|
|
219
|
+
for (const spec of specs) {
|
|
220
|
+
const {
|
|
221
|
+
usage,
|
|
222
|
+
usageIndex = 0,
|
|
223
|
+
type = "Float32",
|
|
224
|
+
elementCount
|
|
225
|
+
} = spec;
|
|
226
|
+
decl.push({
|
|
227
|
+
usage,
|
|
228
|
+
usageIndex,
|
|
229
|
+
type,
|
|
230
|
+
elementCount,
|
|
231
|
+
offset
|
|
232
|
+
});
|
|
233
|
+
offset += elementCount * elementTypeSize(type);
|
|
234
|
+
}
|
|
235
|
+
return decl;
|
|
236
|
+
}
|
|
237
|
+
function channelWidth(spec, vertex, vertexCount) {
|
|
238
|
+
const values = vertex[spec.name] ?? [];
|
|
239
|
+
if (spec.flexible && vertexCount > 0 && values.length % vertexCount === 0) {
|
|
240
|
+
const width = values.length / vertexCount;
|
|
241
|
+
if (width === 3 || width === 4) return width;
|
|
242
|
+
}
|
|
243
|
+
return spec.elementCount;
|
|
244
|
+
}
|
|
245
|
+
function vertexCountOf(vertex, expectedCount = 0) {
|
|
246
|
+
if (expectedCount > 0) {
|
|
247
|
+
for (const spec of CHANNELS) {
|
|
248
|
+
const values = vertex[spec.name] ?? [];
|
|
249
|
+
if (values.length && values.length % expectedCount === 0) return expectedCount;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
for (const spec of CHANNELS) {
|
|
253
|
+
const values = vertex[spec.name] ?? [];
|
|
254
|
+
if (!values.length) continue;
|
|
255
|
+
if (spec.flexible) {
|
|
256
|
+
if (values.length % spec.elementCount === 0) return values.length / spec.elementCount;
|
|
257
|
+
if (values.length % 3 === 0) return values.length / 3;
|
|
258
|
+
}
|
|
259
|
+
const count = values.length / spec.elementCount;
|
|
260
|
+
if (Number.isInteger(count)) return count;
|
|
261
|
+
}
|
|
262
|
+
return 0;
|
|
263
|
+
}
|
|
264
|
+
function estimateVertexStride(vertex, vertexCount) {
|
|
265
|
+
return estimateStrideFromDecl(buildDecl(vertex, vertexCount));
|
|
266
|
+
}
|
|
267
|
+
function estimateStrideFromDecl(decl) {
|
|
268
|
+
return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);
|
|
269
|
+
}
|
|
270
|
+
function elementTypeSize(type) {
|
|
271
|
+
return type === "Float32" ? 4 : type.includes("16") ? 2 : 1;
|
|
272
|
+
}
|
|
273
|
+
function totalIndexCount(indices) {
|
|
274
|
+
return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);
|
|
275
|
+
}
|
|
276
|
+
function bytesPerIndex(indices) {
|
|
277
|
+
return indices.some(group => group.bytesPerIndex === 4 || (group.faces ?? []).some(index => index > 0xffff)) ? 4 : 2;
|
|
278
|
+
}
|
|
279
|
+
function firstTriangle(indices, areaIndex) {
|
|
280
|
+
let first = 0;
|
|
281
|
+
for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);
|
|
282
|
+
return first;
|
|
283
|
+
}
|
|
284
|
+
function bounds(mesh) {
|
|
285
|
+
return {
|
|
286
|
+
min: mesh.minBounds ?? [0, 0, 0],
|
|
287
|
+
max: mesh.maxBounds ?? [0, 0, 0]
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
function maxDisplacement(deltaPositions) {
|
|
291
|
+
let max = 0;
|
|
292
|
+
for (let i = 0; i + 2 < deltaPositions.length; i += 3) {
|
|
293
|
+
max = Math.max(max, Math.hypot(deltaPositions[i], deltaPositions[i + 1], deltaPositions[i + 2]));
|
|
294
|
+
}
|
|
295
|
+
return max;
|
|
296
|
+
}
|
|
297
|
+
function hydrateCmf(root, classes, hydrationOptions = {}) {
|
|
298
|
+
const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
|
|
299
|
+
return hydrate("Root", {
|
|
300
|
+
...root,
|
|
301
|
+
metadata: root.metadata ? hydrate("Metadata", root.metadata, hydrationClasses) : null,
|
|
302
|
+
meshes: root.meshes.map(mesh => hydrateMesh(mesh, hydrationClasses)),
|
|
303
|
+
skeletons: root.skeletons.map(skeleton => hydrate("Skeleton", skeleton, hydrationClasses)),
|
|
304
|
+
animations: root.animations.map(animation => hydrate("Animation", animation, hydrationClasses))
|
|
305
|
+
}, hydrationClasses, hydrationOptions);
|
|
306
|
+
}
|
|
307
|
+
function hydrateMesh(mesh, classes) {
|
|
308
|
+
return hydrate("Mesh", {
|
|
309
|
+
...mesh,
|
|
310
|
+
decl: mesh.decl.map(element => hydrate("VertexElement", element, classes)),
|
|
311
|
+
lods: mesh.lods.map(lod => hydrate("MeshLod", {
|
|
312
|
+
...lod,
|
|
313
|
+
areas: lod.areas.map(area => hydrate("LodMeshArea", area, classes)),
|
|
314
|
+
morphTargets: lod.morphTargets.map(target => hydrate("LodMorphTarget", target, classes))
|
|
315
|
+
}, classes)),
|
|
316
|
+
areas: mesh.areas.map(area => hydrate("MeshArea", area, classes)),
|
|
317
|
+
boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", binding, classes)),
|
|
318
|
+
morphTargets: hydrate("MorphTargets", {
|
|
319
|
+
decl: mesh.morphTargets.decl.map(element => hydrate("VertexElement", element, classes)),
|
|
320
|
+
targets: mesh.morphTargets.targets.map(target => hydrate("MorphTarget", target, classes))
|
|
321
|
+
}, classes),
|
|
322
|
+
audioOcclusionMesh: hydrate("AudioOcclusionMesh", mesh.audioOcclusionMesh, classes)
|
|
323
|
+
}, classes);
|
|
324
|
+
}
|
|
325
|
+
function hydrate(type, fields, classes, hydrationOptions = {}) {
|
|
326
|
+
const Class = classes?.[type];
|
|
327
|
+
const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
|
|
328
|
+
return Class ? populate(new Class(), fields, options) : fields;
|
|
329
|
+
}
|
|
330
|
+
function populate(instance, fields, hydrationOptions = {}) {
|
|
331
|
+
if (!instance || typeof instance.SetValues !== "function") {
|
|
332
|
+
throw new TypeError("CjsFormatGr2 CMF class population requires classes to implement SetValues(values)");
|
|
333
|
+
}
|
|
334
|
+
instance.SetValues(fields, {
|
|
335
|
+
...hydrationOptions,
|
|
336
|
+
skipUpdate: true,
|
|
337
|
+
skipEvents: true
|
|
338
|
+
});
|
|
339
|
+
return instance;
|
|
340
|
+
}
|
|
341
|
+
function createHydrationClasses(classes, hydrationOptions) {
|
|
342
|
+
const map = Object.create(classes || null);
|
|
343
|
+
Object.defineProperty(map, "__hydrationOptions", {
|
|
344
|
+
value: hydrationOptions,
|
|
345
|
+
enumerable: false
|
|
346
|
+
});
|
|
347
|
+
return map;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export { CMF_CLASS_KEYS, buildCmfFromShared, hydrateCmf };
|
|
351
|
+
//# sourceMappingURL=targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.js","sources":["../../../../../src/formats/gr2/core/targets.js"],"sourcesContent":["export const CMF_CLASS_KEYS = Object.freeze([\n \"Root\",\n \"Section\",\n \"Metadata\",\n \"MetadataEntry\",\n \"Mesh\",\n \"IndexGroup\",\n \"VertexElement\",\n \"MeshLod\",\n \"MeshArea\",\n \"LodMeshArea\",\n \"BoneBinding\",\n \"MorphTargets\",\n \"MorphTarget\",\n \"LodMorphTarget\",\n \"AudioOcclusionMesh\",\n \"Skeleton\",\n \"BoneMask\",\n \"BoneWeight\",\n \"Animation\",\n \"AnimationChannel\",\n \"AnimationCurve\"\n]);\n\nconst CHANNELS = Object.freeze([\n { name: \"position\", usage: \"Position\", elementCount: 3 },\n { name: \"normal\", usage: \"Normal\", elementCount: 3 },\n { name: \"tangent\", usage: \"Tangent\", elementCount: 4, flexible: true },\n { name: \"binormal\", usage: \"Binormal\", elementCount: 4, flexible: true },\n { name: \"texcoord0\", usage: \"TexCoord\", elementCount: 2, usageIndex: 0 },\n { name: \"texcoord1\", usage: \"TexCoord\", elementCount: 2, usageIndex: 1 },\n { name: \"color0\", usage: \"Color\", elementCount: 4, usageIndex: 0 },\n { name: \"blendIndice\", usage: \"BoneIndices\", elementCount: 4, usageIndex: 0, type: \"UInt16\" },\n { name: \"blendWeight\", usage: \"BoneWeights\", elementCount: 4, usageIndex: 0 }\n]);\n\nexport function buildCmfFromShared(root)\n{\n return {\n version: 1,\n metadata: null,\n meshes: (root.meshes ?? []).map((mesh) => buildMesh(mesh)),\n skeletons: [],\n animations: []\n };\n}\n\nfunction buildMesh(mesh)\n{\n const\n vertex = mesh.vertex ?? {},\n indices = mesh.indices ?? [],\n boneBindings = (mesh.boneBindings ?? []).map((binding) => buildBoneBinding(binding)),\n affectedByBones = boneBindings.length > 0,\n morphTargets = buildMorphTargets(mesh),\n affectedByMorphTargets = morphTargets.targets.length > 0,\n vertexCount = vertexCountOf(vertex),\n stride = estimateVertexStride(vertex, vertexCount);\n\n return {\n name: mesh.name ?? \"\",\n decl: buildDecl(vertex),\n lods: [ {\n vb: { index: 1, offset: 0, size: vertexCount * stride, stride },\n ib: { index: 2, offset: 0, size: totalIndexCount(indices) * bytesPerIndex(indices), stride: bytesPerIndex(indices) },\n areas: indices.map((group, index) => ({\n firstElement: firstTriangle(indices, index),\n elementCount: Math.floor((group.faces ?? []).length / 3)\n })),\n morphTargets: morphTargets.lods,\n threshold: 0xffffffff,\n vertex,\n indices\n } ],\n areas: indices.map((group) => ({\n name: group.name ?? \"\",\n bounds: bounds(mesh),\n bones: [],\n affectedByBones,\n affectedByMorphTargets\n })),\n boneBindings,\n morphTargets: {\n decl: morphTargets.decl,\n targets: morphTargets.targets\n },\n uvDensities: [],\n bounds: bounds(mesh),\n audioOcclusionMesh: {\n vertices: [],\n indices: [],\n bounds: { min: [ 0, 0, 0 ], max: [ 0, 0, 0 ] }\n },\n topology: \"TriangleList\",\n skeleton: null,\n vertex,\n indices\n };\n}\n\nfunction buildMorphTargets(mesh)\n{\n const targets = mesh.morphTargets ?? [];\n if (!targets.length)\n {\n return { decl: [], targets: [], lods: [] };\n }\n\n const\n baseVertex = mesh.vertex ?? {},\n vertexCount = vertexCountOf(baseVertex),\n specs = morphChannelSpecs(targets, baseVertex, vertexCount),\n decl = buildDeclFromSpecs(specs),\n stride = estimateStrideFromDecl(decl),\n vertices = targets.map((target) => canonicalMorphVertex(baseVertex, target, specs, vertexCount));\n\n return {\n decl,\n targets: targets.map((target, index) => ({\n name: target.name ?? \"\",\n maxDisplacement: target.maxDisplacement ?? maxDisplacement(vertices[index].position ?? [])\n })),\n lods: vertices.map((vertex) => ({\n vb: { index: 0, offset: 0, size: vertexCount * stride, stride },\n vertex\n }))\n };\n}\n\nfunction morphChannelSpecs(targets, baseVertex, vertexCount)\n{\n return CHANNELS.flatMap((spec) =>\n {\n let elementCount = 0;\n for (const target of targets)\n {\n const\n vertex = target.vertex ?? {},\n values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n const count = targetSourceCount(target, vertexCount);\n elementCount = Math.max(elementCount, channelWidth(spec, vertex, count));\n }\n if (!elementCount) return [];\n if ((baseVertex[spec.name] ?? []).length)\n {\n elementCount = Math.max(elementCount, channelWidth(spec, baseVertex, vertexCount));\n }\n return [ { ...spec, elementCount } ];\n });\n}\n\nfunction canonicalMorphVertex(baseVertex, target, specs, vertexCount)\n{\n const\n sourceVertex = target.vertex ?? {},\n vertexIndices = Array.isArray(target.vertexIndices) ? target.vertexIndices : null,\n sourceCount = targetSourceCount(target, vertexCount),\n result = {};\n\n for (const spec of specs)\n {\n const\n source = sourceVertex[spec.name] ?? [],\n output = new Array(vertexCount * spec.elementCount).fill(0),\n sourceWidth = channelWidth(spec, sourceVertex, sourceCount),\n base = baseVertex[spec.name] ?? [],\n baseWidth = channelWidth(spec, baseVertex, vertexCount),\n rowCount = Math.min(sourceCount, sourceWidth ? Math.floor(source.length / sourceWidth) : 0);\n\n for (let row = 0; row < rowCount; row++)\n {\n const vertexIndex = vertexIndices ? vertexIndices[row] : row;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n\n const count = Math.min(sourceWidth, spec.elementCount);\n for (let component = 0; component < count; component++)\n {\n const\n sourceValue = source[row * sourceWidth + component],\n baseValue = base[vertexIndex * baseWidth + component] ?? 0;\n output[vertexIndex * spec.elementCount + component] = target.dataIsDeltas === false\n ? sourceValue - baseValue\n : sourceValue;\n }\n }\n result[spec.name] = output;\n }\n\n return result;\n}\n\nfunction targetSourceCount(target, fallbackCount)\n{\n if (Array.isArray(target.vertexIndices)) return target.vertexIndices.length;\n return vertexCountOf(target.vertex ?? {}, fallbackCount);\n}\n\nfunction buildBoneBinding(binding)\n{\n return {\n name: binding.name ?? \"\",\n bounds: {\n min: binding.minBounds ?? binding.bounds?.min ?? [ 0, 0, 0 ],\n max: binding.maxBounds ?? binding.bounds?.max ?? [ 0, 0, 0 ]\n }\n };\n}\n\nfunction buildDecl(vertex, vertexCount = vertexCountOf(vertex))\n{\n const specs = CHANNELS\n .filter((spec) => Array.isArray(vertex[spec.name]) && vertex[spec.name].length > 0)\n .map((spec) => ({ ...spec, elementCount: channelWidth(spec, vertex, vertexCount) }));\n return buildDeclFromSpecs(specs);\n}\n\nfunction buildDeclFromSpecs(specs)\n{\n const decl = [];\n let offset = 0;\n for (const spec of specs)\n {\n const { usage, usageIndex = 0, type = \"Float32\", elementCount } = spec;\n decl.push({ usage, usageIndex, type, elementCount, offset });\n offset += elementCount * elementTypeSize(type);\n }\n return decl;\n}\n\nfunction channelWidth(spec, vertex, vertexCount)\n{\n const values = vertex[spec.name] ?? [];\n if (spec.flexible && vertexCount > 0 && values.length % vertexCount === 0)\n {\n const width = values.length / vertexCount;\n if (width === 3 || width === 4) return width;\n }\n return spec.elementCount;\n}\n\nfunction vertexCountOf(vertex, expectedCount = 0)\n{\n if (expectedCount > 0)\n {\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (values.length && values.length % expectedCount === 0) return expectedCount;\n }\n }\n\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n if (spec.flexible)\n {\n if (values.length % spec.elementCount === 0) return values.length / spec.elementCount;\n if (values.length % 3 === 0) return values.length / 3;\n }\n const count = values.length / spec.elementCount;\n if (Number.isInteger(count)) return count;\n }\n return 0;\n}\n\nfunction estimateVertexStride(vertex, vertexCount)\n{\n return estimateStrideFromDecl(buildDecl(vertex, vertexCount));\n}\n\nfunction estimateStrideFromDecl(decl)\n{\n return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);\n}\n\nfunction elementTypeSize(type)\n{\n return type === \"Float32\" ? 4 : type.includes(\"16\") ? 2 : 1;\n}\n\nfunction totalIndexCount(indices)\n{\n return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);\n}\n\nfunction bytesPerIndex(indices)\n{\n return indices.some((group) => group.bytesPerIndex === 4 || (group.faces ?? []).some((index) => index > 0xffff)) ? 4 : 2;\n}\n\nfunction firstTriangle(indices, areaIndex)\n{\n let first = 0;\n for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);\n return first;\n}\n\nfunction bounds(mesh)\n{\n return {\n min: mesh.minBounds ?? [ 0, 0, 0 ],\n max: mesh.maxBounds ?? [ 0, 0, 0 ]\n };\n}\n\nfunction maxDisplacement(deltaPositions)\n{\n let max = 0;\n for (let i = 0; i + 2 < deltaPositions.length; i += 3)\n {\n max = Math.max(max, Math.hypot(\n deltaPositions[i],\n deltaPositions[i + 1],\n deltaPositions[i + 2]\n ));\n }\n return max;\n}\n\nexport function hydrateCmf(root, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n ...root,\n metadata: root.metadata ? hydrate(\"Metadata\", root.metadata, hydrationClasses) : null,\n meshes: root.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: root.skeletons.map((skeleton) => hydrate(\"Skeleton\", skeleton, hydrationClasses)),\n animations: root.animations.map((animation) => hydrate(\"Animation\", animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrate(\"MorphTargets\", {\n decl: mesh.morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: mesh.morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return Class ? populate(new Class(), fields, options) : fields;\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsFormatGr2 CMF class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["CMF_CLASS_KEYS","Object","freeze","CHANNELS","name","usage","elementCount","flexible","usageIndex","type","buildCmfFromShared","root","version","metadata","meshes","map","mesh","buildMesh","skeletons","animations","vertex","indices","boneBindings","binding","buildBoneBinding","affectedByBones","length","morphTargets","buildMorphTargets","affectedByMorphTargets","targets","vertexCount","vertexCountOf","stride","estimateVertexStride","decl","buildDecl","lods","vb","index","offset","size","ib","totalIndexCount","bytesPerIndex","areas","group","firstElement","firstTriangle","Math","floor","faces","threshold","bounds","bones","uvDensities","audioOcclusionMesh","vertices","min","max","topology","skeleton","baseVertex","specs","morphChannelSpecs","buildDeclFromSpecs","estimateStrideFromDecl","target","canonicalMorphVertex","maxDisplacement","position","flatMap","spec","values","count","targetSourceCount","channelWidth","sourceVertex","vertexIndices","Array","isArray","sourceCount","result","source","output","fill","sourceWidth","base","baseWidth","rowCount","row","vertexIndex","Number","isInteger","component","sourceValue","baseValue","dataIsDeltas","fallbackCount","minBounds","maxBounds","filter","push","elementTypeSize","width","expectedCount","reduce","element","includes","total","some","areaIndex","first","i","deltaPositions","hypot","hydrateCmf","classes","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","hydrateMesh","animation","lod","area","fields","Class","options","keys","__hydrationOptions","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","create","defineProperty","value","enumerable"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/formats/index.js
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
|
-
export { CjsBlackFormat } from './black/CjsBlackFormat.js';
|
|
2
|
-
export { CjsBnkFormat } from './bnk/CjsBnkFormat.js';
|
|
3
|
-
export { CjsCmfFormat } from './cmf/CjsCmfFormat.js';
|
|
4
|
-
export { CjsDdsFormat } from './dds/CjsDdsFormat.js';
|
|
5
|
-
export { CjsFbxFormat } from './fbx/CjsFbxFormat.js';
|
|
6
|
-
export { CjsFlacFormat } from './flac/CjsFlacFormat.js';
|
|
7
|
-
export { CjsGifFormat } from './gif/CjsGifFormat.js';
|
|
8
|
-
export { CjsGltfFormat } from './gltf/CjsGltfFormat.js';
|
|
9
|
-
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
|
|
1
|
+
export { CjsBlackFormat } from './black/CjsBlackFormat.js';
|
|
2
|
+
export { CjsBnkFormat } from './bnk/CjsBnkFormat.js';
|
|
3
|
+
export { CjsCmfFormat } from './cmf/CjsCmfFormat.js';
|
|
4
|
+
export { CjsDdsFormat } from './dds/CjsDdsFormat.js';
|
|
5
|
+
export { CjsFbxFormat } from './fbx/CjsFbxFormat.js';
|
|
6
|
+
export { CjsFlacFormat } from './flac/CjsFlacFormat.js';
|
|
7
|
+
export { CjsGifFormat } from './gif/CjsGifFormat.js';
|
|
8
|
+
export { CjsGltfFormat } from './gltf/CjsGltfFormat.js';
|
|
9
|
+
export { CjsGr2Format } from './gr2/CjsGr2Format.js';
|
|
10
|
+
import './gr2/core/curves.js';
|
|
11
|
+
import '@carbonenginejs/core-math/mesh';
|
|
12
|
+
import '@carbonenginejs/core-math/num';
|
|
13
|
+
import '@carbonenginejs/core-math/tangent';
|
|
14
|
+
import '@carbonenginejs/core-math/vec3';
|
|
15
|
+
import './gr2/core/helpers.js';
|
|
16
|
+
export { CjsJpegFormat } from './jpeg/CjsJpegFormat.js';
|
|
17
|
+
export { CjsMp3Format } from './mp3/CjsMp3Format.js';
|
|
18
|
+
export { CjsMp4Format } from './mp4/CjsMp4Format.js';
|
|
19
|
+
export { CjsObjFormat } from './obj/CjsObjFormat.js';
|
|
20
|
+
export { CjsOggFormat } from './ogg/CjsOggFormat.js';
|
|
21
|
+
export { CjsPngFormat } from './png/CjsPngFormat.js';
|
|
22
|
+
export { CjsRedFormat } from './red/CjsRedFormat.js';
|
|
23
|
+
export { CjsStlFormat } from './stl/CjsStlFormat.js';
|
|
24
|
+
export { CjsTgaFormat } from './tga/CjsTgaFormat.js';
|
|
25
|
+
export { CjsWavFormat } from './wav/CjsWavFormat.js';
|
|
26
|
+
export { CjsWebmFormat } from './webm/CjsWebmFormat.js';
|
|
27
|
+
export { CjsWebpFormat } from './webp/CjsWebpFormat.js';
|
|
28
|
+
export { CjsWemFormat } from './wem/CjsWemFormat.js';
|
|
29
|
+
export { CjsYamlFormat } from './yaml/CjsYamlFormat.js';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|