3DプリンタでMMDデータを出力する - その2


概要

さて、先に説明の手順で使ったデータは、比較的開口部の小さいデータでした。 そのため、Precision値が0.04でも、内部と外部を容易に分離することができました。
しかし、そうは上手くいかない場合もあります。 ポリゴンの隙間が大きすぎる場合です。 元々のデータで各パーツの隙間が大きかったり、あるいは、ポーズによって大きい隙間が出来たりすることがあります。
Precision値を大きくすれば、隙間に対する許容度は上がりますが、形状の精度も失ってしまいます。
そんなときは、データを少し編集して、大きい開口部をざっと塞いでしまいます。 そうすれば、小さいPrecision値でも内部と外部を分離出来るようになり、精度の良いソリッドモデルを得ることができます。
今回は、まず、Lat式ミクのPMDモデルデータに、武術のVPDポーズデータを適用します。 それから、その開口部を塞ぐ修正を入れます。 そして、前文書の手順により3D出力可能なデータに変換し、実際に出力します。

用意するもの

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

手順

1. ポーズ付きPMXの出力

1-1. PmxEditorを起動します。 Pmx編集ウィンドウのメニューから[ファイル] → [開く]と選択します。 そして、ダウンロードした Lat式ミクVer2.3_Normal.pmd を開いて下さい。
1-2. PmxViewウィンドウに、ロードされたモデルが表示されます。 メニューから[表示] → [TransformView]と選択して下さい。
1-3. TransformViewウィンドウが表示されます。 メニューから[編集] → [Vpdファイル関連] → [形状の読み込み]と選択します。 そして、ダウンロードした武術ポーズ集の 単翼頂.vpd を開いて下さい。
1-4. 格好いいポーズがロードされたら、メニューの[ファイル] → [現在の形状で保存]を選択します。 ここでは、Lat式ミクVer2.3_Normal_形状変化.pmx と名前を付けて保存しました。
PmxEditorでの作業はこれで終了です。

2. データ編集準備

2-1. Blenderを起動します。 Cubeを消してから、先ほど保存したPMXファイルをインポートします。
さてこの状態で、前文書の手順に従うとどうなるかを確認してみます。 手順と関係ありませんので、読み飛ばしても構いません。
これがPMXファイルのロード直後の状態です。
前文書の3-25まで作業するとこのようになります。 一部の内部パーツは残っていますが、胴体以下の内部パーツが残っていません。
外皮を取った方は、このようになっています。 一見問題ないように見えますが、内部を確認してみましょう。
Alt+Bを押すと、表示制限範囲を選択するモードになります。 断面を見るためには、縦に長く囲みます。
このように、表示範囲が制限されますので、視野を回して側面にまわりこみます。
頭の部分はちゃんと外皮一枚で構成されていますが、胴体は二重になっています。 上着、スカート、下半身の間の隙間が大きく、内部と外部が分離できなかったためです。 Uniform Mesh ResamplingでPrecisionやOffsetをある程度大きく取れば、内部と外部を分けることが出来ます。 ただしその分、形状が荒くなってしまいます。 詳細な形状を取るためには、開口部を閉じてやる必要があります。
2-2. PMXファイルからインポートしたデータのモデル部分を、一旦stlにエクスポートします。 ここではlatmiku.stlと名前を付けて保存します。
2-3. エクスポートしたら、blenderを初期化してまっさらにし、同じstlファイルをインポートしなおします。
このデータは、オブジェクトの原点と、形状データが離れています。 それ自体は構わないのですが、少し編集しにくいため、形状データをオブジェクトの原点に近づけます。 モデルを視野に入れ、編集モードをEditModeに切り替えて下さい。
2-4. EditModeに切り替わったら、頂点が全て選択されていることを確認します。 そうでなければ、"A"キーを何度か押して全選択状態にします。
右のパネルからTransformのパネルを開き、MedianのXとYを両方に0を入力します。 ぴったり0にはならない場合がありますが、構いません。 これでモデルが原点付近に移動します。
2-5. 編集モードをObjectModeに戻します。
2-6. 少し込み入った作業をするため、表示の遠近感がない方がやりやすくなります。
メニューの[View] → [View Persp/Ortho]を選択すると、表示モードが切り替わります。 テンキーがあれば、テンキーの"5"を押してもよいです。
2-7. Orthoモードで表示されます。
2-8. これから編集が必要な領域を確認します。
Alt+Bを押して、表示範囲を制限するモードにします。 カーソルがクロスに変わったら、モデルの半身を囲むように選択して下さい。 これで、囲った部分だけが表示されるようになります。 上手くできなかった場合は、もう一度Alt+Bを押すと元に戻ります。
2-9. 視野を回して、左から断面の様子を確認します。 少し解りにくいでしょうか。 上着、スカート、下半身のあいだに大きな隙間があります。 これから、これらの3つのパーツを編集し、隙間を塞ぎます。
2-10. Alt+Bをもう一度押して、表示範囲制限を解除してください。 そのあと、EditModeに切り替えます。 EditModeになったら、"P"キーを押してSeparateメニューを表示し、[By loose parts]を選択して下さい。
2-11. これで、連続している部分ごとに、別のオブジェクトに分離されます。 編集モードをObjectModeに戻して下さい。
2-12. 作業しやすいよう、各パーツを別のレイヤに移動します。 右クリックで上着の部分だけを選択し、"M"キーを押して、2つめのレイヤに移動させて下さい。
2-13. スカートの部分を選択し、"M"キーを押して、3つめのレイヤに移動させて下さい。 スカートは2つあります。 2つとも移動させて下さい。
2-14. 下半身の部分を選択し、"M"キーを押して、4つめのレイヤに移動させて下さい。
2-15. 1つめのレイヤには腕から上だけが残りました。

3. データを編集して開口部を塞ぐ

3-1. 2つめのレイヤに切り替えて、EditModeにします。
3-2. メニューの[View] → [Front]と選択して、真正面の表示にして下さい。 もし頂点が選択されていれば、"A"キーを何度か押して選択解除状態にしてください。
3-3. これから、ナイフツールで切り口を入れ、面を作ります。
"K"キーを押してから、"C"キー、"Z"キーと順番に押して下さい。 腰の高さの左の空間部分で一度クリックし、水平にカーソルを移動させ、右の空間部分で再度クリックしてください。
3-4. 水平に赤い点が付いたら、Enterキーを押してください。 Enterキーを押せば、確定します。 間違えた場合は、ESCキーを押せば何事もなかったように元に戻ります。
3-5. 胴にぐるっと一周頂点が追加されます。 もし半分にしか頂点がなかっら、"Z"キーを忘れています。 斜めっていたり、切るところを間違えていた場合は、Ctrl+Zを押すとアンドゥできますので、やり直して下さい。
3-6. メニューから[Mesh] → [Faces] → [Make Edge/Face]を選択します。
3-7. 切り口に面が張られます。 これで、上着の作業は終了です。 ObjectModeに戻って下さい。
3-8. 表示を3つめのレイヤに移動します。 スカートのひとつを選択して、EditModeに切り替えて下さい。
3-9. これから、スカートの上側の開口部に面を張ります。
表示を拡大し、スカートのエッジから、隣り合う二頂点だけを選択してください。 それから、メニューから[Select] → [Edge Loop]と選択して下さい。
3-10. エッジの一周が選択状態になります。
3-11. メニューから[Mesh] → [Faces] → [Fill]を選択して下さい。
3-12. 開口部に面が張られます。 これで、スカートの作業は終了です。 ObjectModeに戻って下さい。
3-13. 表示を4つめのレイヤに移動します。 下半身を選択して、EditModeに切り替えて下さい。
3-14. 今度は、開口部を少しだけ上に伸ばします。
メニューから[Select] → [Non Manifold]を選択して下さい。
3-15. 腰の開口部が選択されます。 メニューから[Mesh] → [Extrude Region]を選択して下さい。
3-16. "Z"キーを2回押します。1回目の"Z"キーは最初からかかっている法線方向限定移動を解除し、2回目の"Z"キーはZ方向限定移動を設定します。 それから、カーソルを鉛直に動かして、形状を少しだけ上に伸ばして下さい。 最後に、クリックして、形状を確定します。
これで、下半身の作業は終了です。 ObjectModeに戻って下さい。

4. 編集結果の確認とデータ変換

4-1. Shiftを押しながらレイヤ切り替えボタンを順に押し、4つのレイヤを全て表示状態にして下さい。
4-2. 編集結果を確認しましょう。 Alt+Bを押して、表示範囲を選択するモードにし、半身を囲むように選択して下さい。
4-3. 回り込んで断面を確認します。 先ほど追加した面と、伸ばした下半身がそれぞれ交差し合っています。 こうなれば、Uniform Mesh Resamplingのあとで内部と外部をちゃんと分離することができます。
4-4. Alt+Bを押して表示制限を解除してください。 それから、"A"キーを何度か押して、全オブジェクトを選択した状態にします。 この状態でエクスポートすれば、選択したオブジェクトを単一の形状としてstlにエクスポートできます。 ここではlatmiku2.stlと名前をつけて保存します。
4-5. MeshLabでlatmiku2.stlを読み込んで、Uniform Mesh Resamplingをかけます。 PrecisionとOffsetはどちらも0.04を入力します。 処理が終わったら、結果をlatmiku3.stlに保存します。
ところで、MeshLabでの表示に一部黒い部分がありますが、気にする必要はありません。 黒い部分は、ポリゴンの裏面です。 このモデルデータでは少し折り重なっている部分があるようです。
4-6. latmiku3.stlをblenderに読み込んで、内部と外皮を分離します。 今度は胴体以下の内部も残っています。
4-7. 外皮オブジェクトのレイヤに切り替えて、Alt+Bで表示範囲制限をかけ、断面を確認します。 ちゃんと皮一枚のソリッドデータになっています。 確認したら、外皮オブジェクトをlatmiku4.stlにエクスポートします。
4-8. MiniMagicsでlatmiku4.stlを開いて確認します。 パーツにエラーがあります、と表示されていますが、反転三角もバッドエッジも0です。 ただし、シェルが2になっています。 このエラーは、まず気にする必要はありません。 blenderでの作業の中で、連続している部分を取っていますので、シェルが2つといっても離島になっているわけでもありません。
4-9. 後処理を1枚だけで説明します。 今回はShrinkWrapを使わずに、Decimateで頂点だけ減らしておきます。
右パネルの[Object Modifier]を開き、[Add Modifier]から、[Decimate]を選択して追加します。 DecimateモディファイアのRatioは0.1に設定します。 そしてそのままstlにエクスポートします。
4-10. エクスポートする際に、左のExport STLパネルの[Apply Modifiers]にチェックが入っていることを確認して下さい。 チェックされていれば、エクスポートの時にモディファイアが適用された状態でstlに出力されます。 Decimateモディファイアの計算に時間がかかるため、保存にも時間がかかるので注意して下さい。 ここでは、最終結果をlatmiku5.stlに保存します。

5. 出力

5-1. MiniMagicsでlatmiku5.stlを開いて確認します。 頂点を集約すると、エラーがなくなりました。
5-2. MakerWareでlatmiku5.stlを開いて配置します。 例によって、倒立状態で出力します。
5-3. 今回は、この出力設定で出力しました。 Build Plateの温度を110℃から118℃に変更した以外は、標準のLow設定を使いました。
5-4. 出力中。
5-5. はい完成。出力時間は1時間49分でした。
5-6. サポート材除去後、正面から。 ネクタイはサポート材の除去中に折れてなくなってしまいました。
5-7. 側面から。
5-8. 背面から。 髪の毛の先の細い部分も、サポート除去中に折ってしまいました。 やることが雑なんだから。

2013/7/8 初版
不明な点があれば章節番号添えて@junnnoへ。または感想や作例など、手を叩いてよろこびます

戻る