ツール本体
ツールの使い方
※ まだファイル操作がろくにできないスマホやタブレットなどのモバイル端末では利用は厳しい。PC推奨。
1. 適当な MMD モデルをダウンロードしてくる
2. zip ファイルとかになっていると思うのでとにかく展開する
3. textures フォルダーの内容を、モデルファイルと同じ場所に全部配置し直す
- 配置し直す前
modelFolder
├── model.pmx
├── readme.txt
└── textures
├── 何かしらのテクスチャ.png
├── 何かしらのテクスチャ1.png
├── ...
├── 何かしらのテクスチャ2.bmp
├── 何かしらのテクスチャ3.bmp
├── ...
- 配置し直したあと
modelFolder
├── 何かしらのテクスチャ.png
├── 何かしらのテクスチャ1.png
├── ...
├── 何かしらのテクスチャ2.bmp
├── 何かしらのテクスチャ3.bmp
├── ...
├── model.pmx
└── readme.txt
4. ファイルを指定する
モデルとテクスチャをまとめて指定のところで、モデルファイルとテクスチャのファイルをすべて指定する。すると、自動的にモデルが読み込まれ、Three.js の シーンが立ち上がってうまく行けば、モデルが見えるはずである。ちなみに全てのモデルには対応できないようで、読み込めない場合もあるためご了承ください。
このツールを作ろうとした動機
単に気軽に、MMD モデルを確認したいとき用。pmx や pmdを読み込んで表示し、色々カメラを動かせるところまでを第一マイルストーンとして、できればボーンを自由に動かしたり、vmd を読み込んで動かせたりする実装してみたいとは思う。
細かいこと
とりあえず、ChatGPT-5 もとにかく詰まったら使って、MMDモデルを読み込むところまで持っていくことはできた。ただし使い方にクセのある仕様になってしまった。MMD の表示にはモデルファイルだけでなく、テクスチャなどの周辺情報が必要であるが、そこら辺の読み込み方法に関して苦戦していた。まず、直接ファイルパスのURLを渡す以外で、blob の参照のURLも利用できることを試すまでは、うまくいっていたが、それ以降のテクスチャを読み込むことに関しては詰まった。そこら辺に関しては ChatGPT-5 が Map を使う方法を吐き出したのでそれをそのまま利用した。 正直手軽だとは現状言い難いし、ファイル読み込みにはかなり改善の余地があるものと感じられる。ただ、そのためだけにバックエンドとか用意したくないし悩みものである。なんとかクライアント側の JS で、ZIPファイルだったりをガリガリ処理させられないか考える必要もありそう。 MMDLoader などは、最新バージョンの three.js にはないっぽいので、古いバージョンを参照する必要がありそう。r170くらいで three.js/examples/jsm
/loaders/MMDLoader.js の github の差分に以下のような記述があった。 しかし、URLを辿って、three-mmd-loader を参照してみたところ、“coming soon"となっており、現時点(2025/8/9)ではまだ何もできていないことがわかった。 こんな状態なので、インターネットから消えるとめんどくさいし、とりあえず適当な場所に、MMD の類が three.js からなくならないうちに r170 のリポジトリごとクローンしておくことにした。 以下は、FS | @zip.js/zip.js の引用したもの。一応簡単に必要そうな部分の使い方のメモとして。ただどうすればいいかは、まだ調査できていない。細かいこと
現状
(2025/8/13)
TODOs
// 例
manager is working
mmdviewer/:516 足.png
mmdviewer/:517 blob:https://www.nyanmo.info/足.png
mmdviewer/:515
調べてわかったこと
MMDLoader
console.warn( 'THREE.MMDAnimationHelper: The module has been deprecated and will be removed with r172. Please migrate to https://github.com/takahirox/three-mmd-loader instead.' );
zip.js
const TEXT_CONTENT = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.";
const FILENAME = "lorem.txt";
const BLOB = new Blob([TEXT_CONTENT], { type: zip.getMimeType(FILENAME) });
let zipFs = new zip.fs.FS();
zipFs.addBlob("lorem.txt", BLOB);
const zippedBlob = await zipFs.exportBlob();
zipFs = new zip.fs.FS();
await zipFs.importBlob(zippedBlob);
const firstEntry = zipFs.children[0];
const unzippedBlob = await firstEntry.getBlob(zip.getMimeType(firstEntry.name));
参考にしたものや使ったもの
-
Three.js – JavaScript 3D Library
https://threejs.org/ (2025年8月9日) -
three CDN by jsDelivr - A free, fast, and reliable Open Source CDN
https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/ (2025年8月9日) -
three.js でMMDを使う #JavaScript - Qiita
https://qiita.com/shoichi1023/items/6cbaefe078c33f600bfe (2025年8月9日) -
ブラウザ3Dゲームを作る作戦その4: MMDデータを読み込んで動かす - 式姫で遊ぶ日記
https://iwanabot.hatenablog.com/entry/2020/05/01/014258 (2025年8月9日) -
GitHub - takahirox/three-mmd-loader
https://github.com/takahirox/three-mmd-loader (2025年8月9日) -
GitHub - mrdoob/three.js at r170
https://github.com/mrdoob/three.js/tree/r170 (2025年8月9日) -
GitHub - mrdoob/three.js: JavaScript 3D Library.
https://github.com/mrdoob/three.js/tree/dev (2025年8月9日) -
Three.jsこと始め
https://koro-koro.com/threejs-no1/ (2025年8月9日) -
ChatGPT
https://chatgpt.com/ (2025年8月13日) -
Fullscreen API - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API (2025年8月13日) -
Three.jsでの最適なリサイズ処理 - ICS MEDIA
https://ics.media/tutorial-three/renderer_resize/ (2025年8月13日) -
zip.js - JavaScript library to zip and unzip files
https://gildas-lormeau.github.io/zip.js/ (2025年8月13日) -
GitHub - gildas-lormeau/zip.js: JavaScript library to zip and unzip files supporting multi-core compression, compression streams, zip64, split files and encryption.
https://github.com/gildas-lormeau/zip.js/tree/master (2025年8月13日) -
FS | @zip.js/zip.js
https://gildas-lormeau.github.io/zip.js/api/classes/FS.html (2025年8月13日)