3DプリンタでMMDデータを出力する


概要

CG用途に作られた大部分の3Dモデルは、ほとんどの場合、そのまま3D出力することができません。 非常に運が良ければ、3D出力ソフトウェアの解釈と人間の意図が偶然に一致することもありますが、たいていは、人間の意図するものとは違うものが出てきます。
人間は3Dデータを直接解釈することができません。 2Dで出力された画像(または動画)を脳内で合成して、その3D形状を意図します。 一方で3D出力ソフトウェアは、3Dデータから直接、数学的に3D形状を解釈します。
CG用途につくられた3Dデータは、隠れて見えないところには穴が開きっぱなしだったり、ひらひらした部分は厚みのないポリゴン一枚でできていたり、ポリゴン同士がねじれて重なっていたりします。 そのような場合、3D出力ソフトウェアは形状の内側と外側の判断がつかなくなり、適当に補完する結果、人間がそのレンダリング画像から想定する形状とは違う形状を出力してしまいます。
3D出力ソフトウェアと人間の意図を一致させるには、対象の3D形状を、表を向いたポリゴンだけで連続かつ完璧に被覆する必要があります。
この文書では、MMDで使われるCG用途の3Dデータを、半機械的な作業で3D出力可能な形式に変換し、実際に出力する方法を説明します。 ただし超絶無理矢理力業なので、あまり期待されないようにして下さい。 また、テクスチャマッピング情報は失われますので、別途工夫が必要です。

用意するもの

ハードウェア
ここでは、ごく平凡な3Dプリンタを使います。みなさんのご家庭にもきっとあると思います。
ソフトウェア
以下のソフトウェアをそれぞれダウンロードしてインストールします。 この文書では、それぞれ表記のバージョンで作業しましたが、最新版で問題ないと思います。
アドオン
ダウンロードして、展開せずに保存しておきます。
テストケース
ダウンロードして、展開して保存しておきます。

手順

1. Blenderの環境設定

1-1. まずはBlenderを起動します。 はじめて起動した人は、まず深呼吸して落ち着いて下さい。 おもむろに[File] → [User Preference]と選択してください。
1-2. Blender User Preferencesウィンドウでで[Addons]を選択し、下のほうにある[Install from File...]を選択します。
1-3. ダウンロードしたmmd_script_263.zipを選択して、右上の[Install from File...]を選択すると、MMDデータインポート/エクスポート用のアドオンがインストールされます。
1-4. インストールしたアドオンは、有効化する必要があります。 [Addons]画面の左上の検索窓に miku と入力すれば、先ほどインストールしたアドオンが見つかりますので、右端のチェックボックスをチェック状態にします。 これで、アドオンが使えるようになります。
1-5. 3Dプリンタを使う場合、もうひとつ便利なアドオンがありますので、有効化しておきましょう。 検索窓に 3d print と入力すれば、Mesh: 3D Print Toolbox が見つかりますので、チェックボックスをクリックして有効化します。 このアドオンは、Blender 2.67に最初からインストールされています。
1-6. これでBlenderの準備は完了です。 ただし、アドオンの有効/無効の情報は、Blenderを終了すると失われてしまいます。 起動する度に再設定するのは面倒だと思う場合は、[File] → [Save Startup File]で、状態を保存しておきましょう。

2. PMDファイルのインポート

2-1. インストールしたてのBlenderであれば、Cubeが一個置いてあると思いますが、いらないので消します。 "X"キーを押すと、ポップアップメニューが出てOK?と聞いてきますので、[Delete]を選択すれば消えます。
2-2. Cubeを消したら、さっそくミクさんを召喚しましょう。 [File] → [Import] → [MikuMikuDance Model (.pmd/.pmx)]と選択します。
2-3. MMDのモデルデータを展開したフォルダを開き、インポートするpmdファイルを選択し、[Import MMD Polygon Model]を押します。 日本語はすべて豆腐化して読めなくなりますが、ファイルが特定できればとくに差し支えありません。
2-4. 表示画面の視点は、マウスの中央ボタンと、Ctrl+中央ボタン、Shift+中央ボタンで操作できます。 適当に見やすいレイアウトにしたら、ミクさんの形状部分を1回右クリックして、選択状態にしてください。 うまく選択できなかった場合、"A"キーを押せば、全選択解除/全選択が切り替えできます。 ミクさんの形状を選択できたら、メニューから[File] → [Export] → [Stl (.stl)]と選択してください。
2-5. わかりやすい場所に名前を付けて保存します。 ここでは、tdamiku.stlとしました。
2-6. ここで一度このSTLファイルを確認してみましょう。 MiniMagics2.0を起動して、先ほど保存したtdamiku.stlを開いて下さい。 詳しい操作は一般的なWindowsソフトウェアに準じますので割愛します。
まだこの状態では、パーツにエラーがあります、と表示されます。 反転三角が2396個、バッドエッジが1345個、シェルが132個もあります。 どう考えても、手作業で何とかなる代物ではありません。
3D出力するためには、形状データのトポロジーを再構築して、表面を向いた三角形だけで過不足なく形状を覆い、単一のシェルにする必要があります。

3. 形状データの再構築

3-1. MeshLabを起動します。 ツールバーの[Show Layer Dialog]を選択して、レイヤダイアログを表示しておけば、作業の中身が少し解りやすくなります。 そうすれば、[Import Mesh]を選択して、さきほど保存したtdamiku.stlを開いてください。
3-2. Post-Open Processingウィンドウが出たら、OKを押します。
3-4. これでMeshLabにミクさんの形状データが読み込まれます。
3-5. メニューの[Filters] → [Remeshing, Simplification and Reconstruction] → [Uniform Mesh Resampling]を選択します。
3-6. Uniform Mesh Resamplingウィンドウで、以下の通りパラメータを設定します。 詳しい説明は省略しますが、これ以外の設定では、ほとんど上手くいかないと思います。
PrecisionとOffsetはworld unitで入力します。 入力すると、連動してperc onが変化し、さらにその影響でworld unitが少しずれますが、気にしなくても良いです。 Precisionのperc onが0.1〜0.5程度、Offsetが50.1〜51.0程度であれば大体良いでしょう。
3-7. [Apply]を押すと処理がはじまります。 PCの性能に拠りますが、この処理には、数分から数十分程度かかります。 Windowsエクスペリエンスインデックスが8.0のプロセッサとメモリで、ちょうど3分かかりました。
待ち時間を使って処理の説明をしましょう。 手順とは関係ないので読み飛ばしてもかまいません。
この処理は、任意の面から等距離になる面にポリゴンを張り直します。 Absolute Distanceにチェックをいれなければ、面の表裏が区別されますが、チェックを入れると表裏は無関係になります。 CG用途の場合、薄い部分はポリゴンの表裏を区別せず表示する場合が多いでしょう。 必要なければ、裏面を作らない場合も多くあります。 そのため、裏表を区別しないようにして処理をします。
メッシュを張り直すに当たっては、perc onの割合で、等間隔の格子で処理されます。 たとえばPrecisionが0.1%に設定されていて、形状の外寸が立方体だったとすれば、シーンが1000×1000×1000の格子に分割されます。 そしてその各格子でポリゴンからの距離が計算され、距離が一定値を横切るところに面が貼られます。
その一定値は、Offsetの値で決まります。 50%が、ちょうどポリゴンの表面になります。 裏表を区別しない場合、50%以下にすると形成できる表面がなくなってしまいますので、必ず50%より大きい値にする必要があります。 また、Offsetのunit値がPrecisionのunit値の半分より小さければ、厚みがないところが消失してしまいます。
PrecisionとOffsetを小さくするほど出力は高精細になりますが、あまり小さくしすぎると表面と内部が繋がってしまいます。 これは、内部(と人間が思っている部分)と外部を繋ぐ最も狭い隙間の寸法に依存します。 隙間なく作られているデータであれば、PCの性能が許す限りPrecisionを小さくすることができます。 とはいえ、出力装置の精度より高い解像度で分割してもあまり意味がありませんし、Precisionを半分にするたび処理時間は8倍になるので注意が必要です。
うまく出来れば、下図のように、元のモデルのポリゴンを少し厚めの皮にした中空の形状が形成されます。
3-8. 処理が完了すると、新しいレイヤに結果が出力されます。
3-9. [File] → [Export Mesh...]を選択して、わかりやすい場所に出力結果をstlで保存します。 ここではtdamiku2.stlにします。
3-10. 出力設定はとくに変更せず、[OK]を押すと保存されます。
3-11. 中身の詰まった形状にするために、Blenderでの作業が必要です。 再度Blenderを開いて下さい。
先ほど作業したデータはもう必要ありませんので、状態を初期化しましょう。 メニューの[File] → [New]を選択したら初期化確認のポップアップが出ます。 [Reload Start-Up File]を選択すると、Blenderが初期状態に戻ります。
3-12. Cubeを消してから、[File] → [Import] → [Stl (.stl)]で、まずtdamiku.stlをインポートします。 これは、MeshLabで変換する前のデータです。
3-13. Blderのレイヤを2つめのレイヤに切り替えて下さい。 ビューの下のツールバーにある、歯のような部分をクリックすると、レイヤが切り替わります。
3-14. 2つめのレイヤに切り替えたら、tdamiku2.stlをインポートします。 先ほどMeshLabで変換した後のデータです。
ファイルサイズがたいへん大きくなっています。 ここから先、あらゆる操作に大変時間がかかるので注意して下さい。
3-15. tdamiku2が読み込まれたら、その形状を選択した状態で、編集モードを[Edit Mode]に切り替えます。 時間がかかります。 焦らないでゆっくり構えて下さい。
3-16. 頂点編集モードになりました。
3-17. 形状データの端の方で1回だけ右クリックして、外の方の頂点を1個だけ選択します。 とにかく処理が重くて、なかなか反応しないかもしれませんが、焦らないで下さい。 おかしなことになれば、ESCキーを押せば大体キャンセルできます。
3-18. 端の方の頂点が1個選択できたら、メニューから[Select] → [Linked]と選択して下さい。
3-19. しばらく待てば、形状データの外皮の部分が選択されます。 そうすれば、悠然と"P"キーを押してください。 Separeteメニューが表示されますので、[Selection]を選択して下さい。 この操作により、形状の外皮部分だけが別のオブジェクトに分離されます。 少しフリーズしたようになるかもしれませんが、慌てず待って下さい。
3-20. 画面から頂点メッシュの表示が消えたら、編集モードを[Object Mode]に切り替えます。
3-21. いったん全選択解除しましょう。 メニューの[Select] → [(De)select All]を選択するか、"A"キーを押します。
3-22. 選択解除されたら、外皮形状のオブジェクトを、一回だけ右クリックして、選択します。
最初と同じように見えますが、今回は内部と外皮が別のオブジェクトに分離されており、いまは外皮オブジェクトだけを選択しています。 内部はtdamiku2に、外皮はtdamiku2.001というオブジェクトになっています。
3-23. メニューの[Object] → [Move to Layer...]を選択するか、"M"キーを押します。
3-24. ポップアップが出ますので、移動先のレイヤとして、3番目のレイヤを選択しましょう。
3-25. 外皮オブジェクトが3番目のレイヤに移動され、編集中の2番目のレイヤには、内部の残骸オブジェクトが残ります。
ここで内部オブジェクトがきれいに残らないようであれば、内部と外皮が繋がってしまっています。 MeshLabでUniform Mesh ResamplingするときにPrecision + Offsetの値がポリゴンの隙間より小さいとそのようになります。 細かい手作業をする方法もありますが、MeshLabに戻ってPrecisionを再設定するのが簡単でしょう。
3-26. 3番目のレイヤに、めでたく、外皮だけで構成されたミクさんが出力されました!
3-27. ここで、Print 3Dアドオンを使って、ソリッド性をチェックしてみましょう。 左パネルからPrint 3Dのパネルを探し、[Solid]をクリックすると、ソリッドかどうかチェックされます。 結果は、その下のOutput:の部分に表示されます。 ちゃんと、Non Manifold Edge:とBad Condig. Edges:が両方ともゼロになっています。
3-28. ソリッド性が確認できたら、STLでエクスポートすれば、第一段階完成です。 tdamiku3.stlと名前を付けて保存します。
3-29. MiniMagicsでロードして確認します。 メッシュの三角数と点の数が莫大な数になっていますが、エラーはありません。
変換の基本的な手順は、これで終了です。 要するに、形状をいったんボクセル化して、それを再度メッシュに戻しているだけです。 全くエレファントな解法ですが、十分な解像度で行えば、実際上の問題はありません。 またこれは本質的に、人間の脳内変換と似た処理です。
ただしここまでの手順だと、少し形状が膨張しており、また、無駄に頂点数が多くなっています。 そこで、さらに以下の手順で処理し、元の形状に近づけ、データ量を減らします。

4.頂点データの整理

4-1. 右のパネルで[Object Modifier]を選択し、[Add Modifier]を選択して、表示されるリストから[ShrinkWrap]モディファイアを追加します。
4-2. パラメータを以下の通り設定し、[Apppy]を押して確定します。 [Apply]せずに続けることもできますが、処理が重くなるので、確定しておいたほうが無難です。
4-3. 次に、再度[Add Modifier]を選択して、今度は[Decimate]モディファイアを追加します。
4-4. パラメータを以下の通り設定し、[Apppy]を押して確定します。 Ratioを変更すると再計算がはじまります。 これには非常に時間がかかるので注意して下さい。 この処理は、外形状に対してあまり重要でない頂点を集約して、頂点数を減らします。 Ratioを小さくすればするほど、頂点数が減りますが、あまり減らすと形状が荒くなってしまいます。 計算後に表示されるFace Count:が元のモデルの数倍程度になるようにすれば、大体OKです。
4-5. 処理が完了したら、tdamiku4.stlと名前を付けてSTLでエクスポートします。
4-6. だいぶファイルサイズが小さくなりました。
4-7. 頂点集約後のデータにもエラーがないことを確認します。 Blenderの3D Print ToolboxでOKでも、MiniMagicsに読み込ませるとエラーが出る場合が、ときどきあります。 ただこれまで試したところでは、3D Print ToolboxのSolidチェックがOKであれば、MakerWare + Replicator 2Xでは失敗なく出力することが出来ています。

5. 出力

5-1. MakerWareでtdamiku4.stlをロードして配置します。 形状的特徴から、ひっくり返して出力した方が良いです。
5-2. 出力中。
5-3. しかし途中でツインテールが折れて大変なことに。 一応最後まで出力しましたが、完全に失敗作です。 出力時間は3時間16分。
5-4. その後何度か挑戦するも、死屍累々とはまさにこのこと。
5-5. 4度目の挑戦が失敗し、さすがに心が折れました。 ということで、フルサイズ(150mm)の出力は諦め、今回はさくっと100mmで実証出力を行いました。 出力時間は1時間24分。
5-6. 出力サイズが小さいと、サポート材の除去が難しくなります。 指先、スカート、髪の毛の先の方は、サポート除去作業の途中で折れてしまいました。 アンドゥが欲しい。
ところで、なんとこのモデルは自立します! よくデザインされていますね。

不明な点があれば章節番号添えて@junnno

戻る