summit/frontend/node_modules/three-stdlib/loaders/MMDLoader.cjs.map

1 line
76 KiB
Plaintext
Raw Normal View History

2025-12-08 16:31:30 +00:00
{"version":3,"file":"MMDLoader.cjs","sources":["../../src/loaders/MMDLoader.js"],"sourcesContent":["import {\n AddOperation,\n AnimationClip,\n Bone,\n BufferGeometry,\n Color,\n CustomBlending,\n DoubleSide,\n DstAlphaFactor,\n Euler,\n FileLoader,\n Float32BufferAttribute,\n FrontSide,\n Interpolant,\n Loader,\n LoaderUtils,\n MeshToonMaterial,\n MultiplyOperation,\n NearestFilter,\n NumberKeyframeTrack,\n OneMinusSrcAlphaFactor,\n Quaternion,\n QuaternionKeyframeTrack,\n RepeatWrapping,\n Skeleton,\n SkinnedMesh,\n SrcAlphaFactor,\n TextureLoader,\n Uint16BufferAttribute,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\nimport { TGALoader } from '../loaders/TGALoader'\nimport { Parser } from '../libs/mmdparser'\n\n/**\n * Dependencies\n * - mmd-parser https://github.com/takahirox/mmd-parser\n * - TGALoader\n * - OutlineEffect\n *\n * MMDLoader creates Three.js Objects from MMD resources as\n * PMD, PMX, VMD, and VPD files.\n *\n * PMD/PMX is a model data format, VMD is a motion data format\n * VPD is a posing data format used in MMD(Miku Miku Dance).\n *\n * MMD official site\n * - https://sites.google.com/view/evpvp/\n *\n * PMD, VMD format (in Japanese)\n * - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4\n *\n * PMX format\n * - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f\n *\n * TODO\n * - light motion in vmd support.\n * - SDEF support.\n * - uv/material/bone morphing support.\n * - more precise grant skinning support.\n * - shadow support.\n */\n\n/**\n * @param {THREE.LoadingManager} manager\n */\nclass MMDLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.loader = new FileLoader(this.manager)\n\n this.parser = null // lazy generation\n this.meshBuilder = new MeshBuilder(this.manager)\n this.animationBuilder = new AnimationBuilder()\n }\n\n /**\n * @param {string} animationPath\n * @return {MMDLoader}\n */\n setAnimationPath(animationPath) {\n this.animationPath = animationPath\n return this\n }\n\n // Load MMD assets as Three.js Object\n\n /**\n * Loads Model file (.pmd or .pmx) as a SkinnedMesh.\n *\n * @param {string} url - url to Model(.pmd or .pmx) file\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n load(url, onLoad, onProgress, onError) {\n const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin)\n\n // resource path\n\n let resourcePath\n\n if (this.resourcePath !== '') {\n resourcePath = this.resourcePath\n } else if (this.path !== '') {\n resourcePath = this.path\n } else {\n resourcePath = LoaderUtils.extractUrlBase(url)\n }\n\n const modelExtension = this._extractExtension(url).toLowerCase()\n\n // Should I detect by seeing header?\n if (modelExtension !== 'pmd' && modelExtension !== 'pmx') {\n if (onError) onError(new Error('THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.'))\n\n return\n }\n\n this[modelExtension === 'pmd' ? 'loadPMD' : 'loadPMX'](\n url,\n function (data) {\n onLoad(builder.build(data, resourcePath, onProgress, onError))\n },\n onProgress,\n onError,\n )\n }\n\n /**\n * Loads Motion file(s) (.vmd) as a AnimationClip.\n * If two or more files are specified, they'll be merged.\n *\n * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)\n * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadAnimation(url, object, onLoad, onProgress, onError) {\n const builder = this.animationBuilder\n\n this.loadVMD(\n url,\n function (vmd) {\n onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object))\n },\n onProgress,\n onError,\n )\n }\n\n /**\n * Loads mode file and motion file(s) as an object containing\n * a SkinnedMesh a