このページは、まだ未完成です。。。

nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)

ツール本体

モデルとテクスチャをまとめて指定
モーションファイルを指定(vmd)

ツールの使い方

 ※ まだファイル操作がろくにできないスマホやタブレットなどのモバイル端末では利用は厳しい。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 を読み込んで動かせたりする実装してみたいとは思う。

細かいこと

細かいこと

現状

(2025/8/13)

 とりあえず、ChatGPT-5 もとにかく詰まったら使って、MMDモデルを読み込むところまで持っていくことはできた。ただし使い方にクセのある仕様になってしまった。MMD の表示にはモデルファイルだけでなく、テクスチャなどの周辺情報が必要であるが、そこら辺の読み込み方法に関して苦戦していた。まず、直接ファイルパスのURLを渡す以外で、blob の参照のURLも利用できることを試すまでは、うまくいっていたが、それ以降のテクスチャを読み込むことに関しては詰まった。そこら辺に関しては ChatGPT-5 が Map を使う方法を吐き出したのでそれをそのまま利用した。

 正直手軽だとは現状言い難いし、ファイル読み込みにはかなり改善の余地があるものと感じられる。ただ、そのためだけにバックエンドとか用意したくないし悩みものである。なんとかクライアント側の JS で、ZIPファイルだったりをガリガリ処理させられないか考える必要もありそう。

TODOs

  1. 最低限 pmx や pmd を読み込み、カメラを動かせる
  2. 全画面モードや高解像度モード。
  3. blob URLへのMAP変換がうまくいかないバグへの対応
// 例
manager is working
mmdviewer/:516 .png
mmdviewer/:517 blob:https://www.nyanmo.info/足.png
mmdviewer/:515 
  1. 欠損しているテクスチャ画像などのリソースエラーの表示
  2. 正しくテクスチャを表示できず、白っぽくなったり、色褪せたみたいな表示になったりする。toon周り未対応の弊害?とにかくもっとまともなマテリアルだのテクスチャだのの実装をする。
  3. テクスチャなしとありモードの切り替えボタン
  4. 全体的にもっと明るい感じにする。薄暗い感じの解消
  5. blender のように、上や横に自動的にカメラを運ぶ機能
  6. 透視投影、平行投影の切り替え
  7. blender みたいに等間隔の補助線を表示する
  8. 地面を表示する。
  9. 全画面モードも考慮したコントローラー
  10. 専用フォームでない view へのファイルのドラックアンドドロップに対応する
  11. いくつかサンプルモーションを用意し、ボタンを押すだけでモデルを動かせるようにする。例えば歩くとか、何か踊らせるとか。
  12. 自動で カメラやモデルをぐるぐる動かして、放置していたら全体像を眺められるようにする。
  13. WASD や タッチパネル上のコントローラーを用意してモデルを動かせるようにする。
  14. 机とか、椅子とか家の一室みたいなのとか、Sample オブジェクトを配置する。
  15. youtubeでいう シアターモードみたいなの欲しい。タブ内で全画面みたいな。
  16. モデルなどをうまく読み込めなかったときのエラーハンドリングと通知
  17. zip ファイルなどを受け付けて、モバイルでも利用しやすくする
  18. ボーンを動かせる
  19. vmd を読み込める
  20. 複数モデル読み込み

調べてわかったこと

MMDLoader

 MMDLoader などは、最新バージョンの three.js にはないっぽいので、古いバージョンを参照する必要がありそう。r170くらいで three.js/examples/jsm /loaders/MMDLoader.js の github の差分に以下のような記述があった。

		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.' );

 しかし、URLを辿って、three-mmd-loader を参照してみたところ、“coming soon"となっており、現時点(2025/8/9)ではまだ何もできていないことがわかった。

Version r170のdiffを観察
肝心のリポジトリはまだ開発が動き出している様子はない

 こんな状態なので、インターネットから消えるとめんどくさいし、とりあえず適当な場所に、MMD の類が three.js からなくならないうちに r170 のリポジトリごとクローンしておくことにした。

zip.js

 以下は、FS | @zip.js/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));

参考にしたものや使ったもの