MMDモデル「らぶ式ミク」をLightWaveで再現する

最終更新:2016/09/06

MMDモデル「らぶ式ミク」は、ボーカロイド「初音ミク」のMikuMikuDance用ユーザーモデルのひとつ。初音ミクのモデルは数多くあるけど、その中でも個人的にとても気に入っているばかりでなく、二次元キャラクター風の3DCG人物モデルとしての完成度も高いと思っていて、人物モデリングの参考にもさせてもらっている。

分析のために分解してみたりもするんだけど、綿密に計算して展開されたUVマップや精緻に描かれたテクスチャー画像、豊かな表情を可能にする100にものぼるモーフ・マップなど、どこをとっても感嘆するばかり。MikuMikuDanceで表示させた時に見栄えがするようにと考えられた工夫も随所に織り込まれていて、一言で言い表す賞賛の言葉も見当たらないくらい。

自社の製品開発の一環として研究のために購入してきた競合の自動車メーカーの高性能車両を分解してみたら、その設計や構造は言うに及ばず、普通に運転する分にはまず目に触れるはずもないエンジン内部の部品も綺麗に磨かれていたのを見て二度驚いたといった逸話を思い出してしまった。

そんな「らぶ式ミク」の制作に熱意を傾けた諸氏に尊敬を捧げ、敬意を払うとともに、参考にさせてもらっている恩返しという意味もこめてLightWaveでらぶ式ミクをMMD風に再現する方法を考えてみた。LightWaveでアニメ調のレンダリング出力をさせるためのマテリアル研究も兼ねている。

モデラーでサーフェースを設定する

PMD形式ファイル・ローダーを使って「らぶ式ミク」を読み込むと、最初は次の画像のような真っ白なモデルが出てくる。単純なモデルの場合はテクスチャーもUVマップと併せてロードされるのだけど、人物モデルのような複雑なモデルの場合はUVマップとテクスチャーの対応がちゃんととれていないことがある。

LoveMiku000

レイヤーが大量に読み込まれるけど、ほとんどがモーフ用で実際のモデルが保存されているのは2番レイヤーなので、フルキーの「2」キーを押してモデル本体を表示させる。

共通設定

「らぶ式ミク」は、surf000からsurf007までの8つの部分のサーフェースに色分けされている。まず、すべてのサーフェースに対して次のとおりに設定する。色はすべてテクスチャーで再現されるため、すべて初期値の白のままにしておく。

  • 「自己発光度」を「100%」
  • 「拡散レベル」を「0%」
  • 「透明度」を「0%」

なお、透明度が設定されているとポリゴンの表裏が反転しているように見えることがある。実は上の画像もインポート直後のものではなく、透明度を0%に設定してからスクリーン・ショットを撮ったもの。本当にインポート直後だと色々透けて見えてしまうので…。

自己発光度を100%、拡散レベルを0%にするのはエッジ・ラインの抽出でも使った手法なんだけど、モデル自身の陰影を打ち消すための設定であって、別に全身を発光させたいわけではない。MMD風にレンダリングさせるにはレイトレースがむしろ問題になる。陰影にあたる部分はテクスチャーに直接描かれているので、問題にならない。

テクスチャーを割り当てる

次に、サーフェースの「色」に割り当てるテクスチャーとUVマップを対応させる。簡単にまとめると次の表のとおり。

らぶ式ミクのサーフェースとテクスチャーの対応
サーフェース名 主な部位 テクスチャー画像
surf000 ヘッドセット Lm_jac.bmp
surf001 顔・体 Lm_body.bmp
surf002 目の周囲・口・眉毛など Lm_body.bmp
surf003 服・靴・袖 Lmtex.bmp
surf004 瞳(標準) Lm_eyes.bmp
surf005 瞳(表情用) Lm_star.tga
surf006 表情用 yyk_tpo.tga
surf007 Lmhair.tga

インポート直後はいずれのサーフェースにも定数(Value)のプロシージャル・マップのレイヤーが仮に割り当てられているので、それらを消去し、残ったひとつのレイヤーを「画像マップ」に切り替える。「投影」は「UV」、「UVマップ」は「Texture」をそれぞれ選択する。MMDモデルは仕様上UVマップをひとつしか持てないため、すべてのサーフェースのためのUVをひとつのUVマップに保持している。

具体的なテクスチャーの設定は次のとおり。

surf000

LoveMiku001

surf001

LoveMiku002

surf002

LoveMiku003

surf003

LoveMiku004

surf004

LoveMiku005

surf005

「らぶ式ミク」では目が手前と奥にひとつずつ、左右で合計4つあり、モーフによって入れ換えている。surf005は奥にある目のテクスチャーを設定するためのもの。

LoveMiku006

surf006

モーフによって目や口や眉に出ない様々な表情を実現するためのテクスチャーを設定する。モーフが適用されていない時は表面に出てこないようになっている。モデラーの右下にあるマップ選択で「M」ボタンをクリックし、モーフ・マップを選択すると効果を確認できる。

LoveMiku007

surf007

LoveMiku008

髪の毛のテクスチャーのTGA画像には毛先に向かってアルファ・チャンネルが設定されているのを確認してはいるんだけど、アルファ・チャンネルを透明度のマップに設定してもうまく透過されなかったので、ひとまずグラディエント・マップで代替する。「入力パラメータ」に「Slope」を選択し、パラメータ「0」を値「0%」に設定し、パラメータ「0.8」付近のところに値「0%」のキーを作り、更にパラメータ「1.0」で「20%」になるようにキーを設定する。これで前髪で目が隠れてしまっても瞳が透けて見えるようになる。

LoveMiku009

髪の毛にはお好みで「反射光」を「100%」、「光沢」を「40%」くらいに設定するとハイライトが綺麗に出るようになる。

保存

サーフェースの設定が完了すると次の画像のようになる。オブジェクトに名前をつけてLightWave形式で保存する。LightWaveでは日本語等のマルチバイト文字への対応がいまいちですぐに文字化けするので、できれば半角の英数字・記号でファイル名をつけるほうが無難。

LoveMiku010

レイアウトに読み込む

保存した「らぶ式ミク」のオブジェクトをレイアウトに読み込む。ひとまず2番レイヤーの「Model」を読み込む。オブジェクトの「アイテムプロパティ」を開き、「輪郭」タブでラインレンダーによって出力させるエッジを選択する。「シルエットエッジ」と「鋭角の折り目」だけにチェックする。

なお、モデルの作り方の都合上、顔や体の途中でパーツやサーフェースが区切られているため、「共有しないエッジ」や「サーフェイス境界」を選択してしまうと予期しないところに線が出力されてしまう。

LoveMiku011

モーフ・ミキサーで表情を制御

次に、オブジェクトの「アイテムプロパティ」の「変形」タブで変位プラグインの「Morph Mixer」を追加する。複数のモーフ・マップを文字通り混合してオブジェクトを任意に変形させることができる。MMDの表情選択や適用量のスライダーとほぼ同じ機能を持つもの。

LoveMiku012

「Morph Mixer」の「プロパティ」を選ぶと、モーフ・マップの一覧と変位量のスライダーが表示される。「1_」で始まるモーフ・マップ名が眉、「2_」で始まるモーフ名が目、「3_」で始まるモーフ名が口(及び舌や歯や顎)、「4_」で始まるモーフ名がその他の表情、髪の毛の量、袖の大きさなどに割り当てられている。

LoveMiku013

モーフ・ミキサーを閉じるとオブジェクトにモーフが適用され、表情などが変わっている。レンダリングすると次のような画像が出力される。MMDのレンダリング出力に比べると全体的にやや明るい感じになるけど、概ね再現できているように思う。

 

LoveMiku014

スケルゴン(ボーン)については今回まったく手をつけていないので、アニメーションまでは確認できていない。MMDでは、直接他のボーンに接続されていない宙に浮いたボーンを設定できるけど、すべてのボーンが直接接続されていて親子関係で連続している必要があるLightWaveのスケルゴンとは互換性がない。つながっていないボーンを適宜補間する必要があり、そのままでは動かすことはできない。

ウェイト・マップはインポートされているようなので、理論上はボーンの問題さえクリアできればLightWaveでも「らぶ式ミク」を動かせると思われるけど、ポリゴンの数が多くスケルゴンの動きをテストするにも時間がかかるため実際に動かそうとするにはかなりの労力が必要になる。

関連記事

LightWave用MMDモデルPMD形式ファイル・インポーター

最終更新:2016/09/06

MikuMikuDnace用モデルデータのPMD形式ファイルをLightWaveで読み込む方法。

まず、『Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ』(Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package)が必要なので、マイクロソフトの次のページからダウンロードする。

パッケージの詳細についてはこちらを参照。

リストから「Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ」を選択するとダウンロードページに移動するので、システムによってダウンロードするファイルを選ぶ。Windows XPやVistaなどの32ビットシステムの場合はx86ベース(vcredist_x86.EXE)、Windows 7や8のような64ビットシステムの場合はx64ベース(vcredist_x64.EXE)を選択する。両方ともダウンロードしても特に問題なかった。EXEファイルを実行するとパッケージが自己解凍してインストールされる。

LightWaveのプラグインを多数作成しているfault0d氏のウェブサイト『Poly to Poly』からAS PMD Helperをダウンロードする。私はLightWave10を使っているのでバージョン0.121を選択。アーカイブファイルにはx64用のプラグインも同梱されている。

zipファイルを解凍して、AS_PMD_Helper.pファイルをLightWave用のプラグインが格納されているフォルダにコピーする。バージョンによってフォルダ構成は異なるのでLightWave 2015でも同じかどうかはわからないけど、LightWave 10では次のフォルダ。

C:\Program Files\NewTek\LightWave_10\support\plugins

モデラーを起動し、「ユーティリティ」タブを選択して「プラグイン追加」をクリック。

AS_PMD_Helper.pファイルを指定するとPMDインポーター/エクスポーターといくつかのPMDファイル作成補助プラグインが追加される。

AS_PMD_Helperに同梱されているドキュメントに従ってモデラー設定ファイル(lwm*.cfg ※「*」はLightWaveのバージョンごとに異なる)を更新しておくとPMD形式ファイルをLWOオブジェクトと同列に扱ってくれるようになる。設定ファイルはシステムドライブ(普通はCドライブ)の「ユーザー(Users)」フォルダの各ユーザーフォルダ以下「.NewTek」フォルダ内にあるので注意。

公開されているPMDファイルをダウンロードして試してみた。今回はシナモソさん作成のボーイング767-200をベースにdiagraph01さんが改造したE-767(diagraph01さんのページ)。テクスチャの再現性などなかなか優秀。個人的にはこれで充分満足。

ただ、細かいことを言えば、可動部分など分割されているパーツは一旦ひとつのレイヤーにまとめられてしまって名前がついてるだけで空っぽのレイヤーが大量にできる。また、スケルゴン(ボーン)もロードされるけどあくまでもMMD用に作られたデータなので、インポートした直後はLightWaveでのアニメーションの実用には堪えない(座標や必要なボーンの目安にはなる)。

MMDは日本発のソフトウェアなのでボーンやウェイトマップの名称にかな・漢字を使っていることが多く、改名しないと文字化けしてしまってスケルゴン・エディタなどの一部の機能で使いづらい。もっとも、LightWaveで2バイト文字や3バイト文字を使うのは昔から御法度なので、どっちかと言うとLightWave側の問題なんだけど。(そのへんAdobeの製品はローカライズが完璧なのでビックリする)

PMD形式ファイルを他のソフトウェアで変換することなくLightWaveで直接ロードできるだけでもありがたいと思ったほうが良さそう。

思っていたよりも調整するところがなかったので、単純にLWO形式で保存した後レイアウトに移してレンダリングしてみたのが次の画像。

E-767

関連記事