3DCGツールで動くものを作る場合、色々な選択肢がありますが、その中にMikuMikuDanceがあります。
■ MikuMikuDance
https://sites.google.com/view/vpvp/
このツールは、かなり前から存在するのですが、現在のアーキテクチャを使う場合だと、古いバージョンを使うメリットはないので、
■ MikuMikuDance(64bitOS Ver)
を選ぶことになります。
近年のPCは32bit OSは入っていないので、WINDOWS 10になってから32bit版は存在していません。その為、現在のバージョンは64bit環境になっていますから、新規にインストールする場合だと、このバージョンを選ぶことになります。
D irectX 12
Direct Xと言うのは、WINDOWSのAPIでOS上で色々な物を管理する為の機能として使用します。このAPIは、ゲームで見かけると思いますが、現在使用されている最新版のDirect X 12 Ultimateがありますが、このAPIはXbox Series Xでも使用されています。
このバージョンでは、近年のゲームで実装されている
■ DXR
■ VRS
■ Mesh Shader
■ Sampler Feedback
が実装されています。
■ DXR
この機能が、リアルタイムレイトレーシングになります。Zバッファやスキャンラインのように光の計算をしない方法ではなく、光の計算をすることで、 【 光の反射 】 【 光の屈折 】 【 透明 】 のような処理を疑似的ではなく、物理法則に基づいて計算することでリアルな質感を表現できるようになっています。
■ VRS
可変レートシェーディングで、目に見える部分をより繊細に描き、注視することがない周辺部分は繊細さを落とすなどして、シェーダーのピクセル解像度を状況に応じて調節することにより、見た目に影響を与えず描画を高速化します。
■ Mesh Shader
これは、第一世代のRTXシリーズ(Turingアーキテクチャ)に追加された新しいプログラマブルシェーダーで、オブジェクトの遠近からどれだけ詳細に描画するか(LoD)を計算したり、遠過ぎたり隠れて見えないオブジェクトを除外するカリング計算を担当するタスクシェーダーと組み合わせることで、レンダリングしなければならないオブジェクトを減らしつつ、そのディテールをできるだけ高く保つことにより、パフォーマンスと画質を大幅に向上させることができます。
■ Sampler Feedback
テクスチャサンプラーがどのように使用されているかをゲームエンジンが追跡し、フィードバックを得られるようにする仕組みで、フィードバックをもとに品質をスマートに調整します。
MikuMikuDanceでは、Direct X9世代のAPIを使用しますが、このバージョンでは、HLSLが使用できるので、プログラマブルシェーダーが使用できます。
MikuMikuDanceはそのまま使用しても展開したフォルダー内にオブジェクトが用意されているので、最初から動くものを作れます。
M ikuMikuDanceを使う
MikuMikuDanceは、
■ Microsoft Visual C++ 2008 再頒布可能パッケージ(x64)
https://drive.google.com/uc?id=1vHZ-rOYg8s
X6DX1swS8CqHDkcLKZYGIc&export=download
■ Microsoft Visual C++ 2010 再頒布可能パッケージ(x64)
https://drive.google.com/uc?id=1v5ViPeKXKO
wVVQuPzQOAspeHcNCe_sJG&export=download
■ DirectX エンド ユーザー ランタイム
https://drive.google.com/uc?id=1MlGShj7-2o6
c34fep2legDH9LhMfUEvS&export=download
もダウンロードして、インストールしないと実行できないのでエラーが出るので、最初にインストールしておく必要があります。
とは言っても、MikuMikuDanceそのものがインストール型のソフトではないので、開発環境用の命令セットや実行可能なAPIの追加をすることになるので、そう言った 【 動作に必要な物の準備 】 を事前に行う必要があります。その後、立ち上げると、
のような画面になるので、ここで、
の読み込みを選択すると、キャラクターオブジェクトを読み込むことができます。MikuMikuDanceでは、
■ キャラクターオブジェクト : PMX形式
■ キャラクターのモーション : VMD形式
■ キャラクターのポース : VPD形式
■ アクセサリーや背景など : X形式
のように形式が決まっており、キャラクターオブジェクトの場合だと、形状とテクスチャーの設定だけだと動きませんから、
■ IKとFKの指定が終わっている
■ ウェイトが適正に指定されている
■ シェイプキーの指定が終わっている
■ 剛体の設定が終わっている
と言う4つの条件が成立している条件のモデルを使う事になります。また、ボーン名などの指定も仕様が存在するので、それに合わせた状態で作る事になりますが、モデルについては最初から用意されています。 【 読込 】 ボタンをクリックすると、
のようにMikuMikuDanceフォルダー内の内部フォルダーにあるモデルにアクセスする事になりますが、この中から用意されたPMXファイルを読み込むと、
のようなメッセージが出て、最初から登録されているオブジェクトが読み込まれます。
この状態で、ポーズを読み込むと
のように握りなどの手が用意されているので、VPDファイルを適応すると、
のように、現在のポーズに対して追加する事ができます。つまり、モーションのブレンドが出来るので、これを使う事で、てのひょ場を入れ替える事が出来るのですが、モーションは始点のポーズを決めてから、変更が行われるフレームで異なるポーズを入れる事で動きを指定する事になりますが、この時に、
の部分で、フレームを指定した後に、キーフレームを打ちます。この時の速度の調整はカーブで行うのですが、
の場所で行う事になります。読み込んだPMXファイルにポーズを付ける場合、
の場所で、ボーンを選択のボタンをクリックし、この状態で、モデルのボーンを動かす事になります。基本的に可動域以外は動かないので、その関節の動作に合わせて動かす事になります。
この部分で、 【 シーン内におけるキャラクターの動き 】 を作る事ができます。
そして、キャラクターの表情などは、シェイプキーで登録されているので、ボーンとは異なる操作で指定します。これは、
の場所で指定できます。ここに登録されているシェイプキーが選択できるのですが、
■ 目
■ まゆ
■ その他
で指定します。
■ シーンの操作
MikuMikuDanceでは、
■ キャラクターオブジェクト
■ シーン・照明・アクセサリー
の切り替えを行って作業を行う事になります。
キャラクターモデルを使う場合には追加したキャラをここで選択し、シーン内の作業を行う場合には、カメラ・照明・アクセサリーを選択します。
シーン内の視点変更は、
シーンについては、
のようにカメラの指定ができますが、
■ 視野角(VOF)の変更
■ 現在のカメラの始点を指定したフレームに登録
を行えます。証明についても色と光の差す位置を変更できるのですが、 【 登録 】 のボタンがあるので、光の位置や色をキーフレームで操作する事が出来るようになっています。始点のコントロールは、
で行えるようになっていますが、指定したモーションの再生を行う事もできます。影の設定も可能で、
のようになっていますが、シーンの作りが、遠方まで抜けていて影の計算範囲が長い場合と、近景だけで完結している状態で影の計算範囲が狭くてもいい場合で、この数値を変更します。
プ ロジェクトの読み込み
MikuMikuDanceでは、作成したプロジェクトを保存できるのですが、最初からプロジェクトファイルが用意されています。
ここから全員で踊るシーンを読み込むと、
のように複数人で踊るシーンを読み込むことができます。
M ikuMikuEffect
MMDにはMMEと言うエフェクトが存在しており、
■ MME 【 拡張表示・出力系ツール:VPVP Wiki 】
https://w.atwiki.jp/vpvpwiki/pages/219.html#id_d854d03f
を追加することで、エフェクトを使えるようになります。ファイルを展開すると、
のようなファイルが揃っているので、これをそのままMikuMikuDanxeのフォルダー内にドロップすると
のような状態になります。この状態で、MikuMikuDanceを開くと、
のように画面の右上にMMEffectのボタンが増え、ここをクリックすると、画像のようにエフェクト関連のメニューが表示されます。
ちなみに、同じセットで、キャラをSourさんとこの可愛いミク単に入れ替えてシェーダーを適応すると、
の様な質感になります。このセットは、
と全く同じものになりますが、こんな感じになります。
エフェクト類については、光源やパーティクルなどもあるので、かなりいろいろなも事ができますが、DoFなども追加できるので色々な効果を追加できます。
ちなみに、MMEでエフェクトを入れて最初のセットを使って書き出すと、
■ MMD+MMEで書き出してみた
のような感じになります。この動画は、Sourさんとこの可愛いミクたんの配置とVMDの適応とエフェクトの設定しかしていないので、特に難しい事は何もしていないのですが、
■ Core i5 650
■ H55M-Pro
■ DDR 1333 2GBx2+1GBx2(DUAL CH)
■ Quadro K620(PCI Express x16 【GEN2動作】)
■ SATA HDD
■ WINDOWS 10 x64 (20H2)
の環境だとfps数がかなり落ちました。その為、エフェクト類を追加すると、これよりも遅い環境だと、MMEを使って複雑な処理を入れるとプレビューがまともにできないと思います。
現在のアーキテクチャだと考えにくいので、フツーに動くとは思いますが、BGAの構成の文教用の端末だとかなり重く感じるのではないかな?と思います。
M ikuMikuDanceの仕様
冒頭で 【 Direct X9版 】 と書いたように、このAPIはWINDOWS用の物になりますが、MikuMikuDanceは、基本的にラスタライズで動いているので、通常の処理だと、ビューポートレンダーやゲームのような処理が行われています。レンダリングがその仕様になっていますから、基本的に、ラスタライズで出来ない事は通常のMikuMikuDanceでは行えません。この拡張が、プログラマブルシェーダーを使った処理になりますが、DirectX 9の3DライブラリのDirect 3Dでは、HLSLが使用できるので、これを用いる事で、コードでの指定によって色々な事が出来るようになっています。この拡張をしているのがMMEになります。ちなみに、
の状態から、エフェクトを追加する場合、
から 【 エフェクト割当 】 を追加する事になりますが、選択後に
のようなウインドウが出るので、ここにエフェクトを割り当てる事になります。適応すると、画像のようにシーンの状態が変化しますが、ここで、キャラやモーションを入れ替えてシーンを作ります。この時にも、エフェクトを追加する事になりますが、変更することで、
の様な質感になります。
FXの設定ですが、 【 オブジェクト単位 】 で行う事になりますが、RayMMDのように 【 細かな設定が出来る物もある 】 のでそう言った質感までコントロールできる物を用いると計算が増えるので、結構重たくなります。シーン内で色々な指定が出来るので質感を追い込めるという利点はありますが、ラスタライズでも
■ シーン内の総ポリゴン数の増加
■ シーン内の光源の増加
■ リグでの演算の総数の増加
■ シェーダーによる演算の増加
■ ポストプロセスの処理の増加
が発生すると重くなるので、オブジェクトが多かったり、動く対象物を多く実装してシーン内で動作させようと思うと、負荷が高くなってしまいます。また、テクスチャのサイズが大きく枚数を増やすと、シーン内の質感を高くできますが、この場合、ラスタライズとプリレンダリングで共通して 【 VRAMとメモリーの容量が必要になる 】 ので環境に合わせたテクスチャの使い方を行う必要があります。
基本的に、MikuMikuDance自体は処理が軽いので、通常のシェーダーなしの状態だと負荷もそれほど上がりませんが、複数のエフェクトを追加して処理を追加していくと結構重くなるので、マシンスペックが低いと、複雑な光の計算をするだけでプレビュー時のfpsが1fps~2fpsくらいまで下がる事があります。
レンダリングについては、プレビューが出来ないようなシーンでもEeveeで書き出すのと同じくらいでしたから、3DCGのレンダリングとしては、かなり高速に終わる部類だと思いますから、通常のゲーミングPCだと出来る事はかなり多いと思います。
あと、非圧縮AIVIは容量が巨大にになるので、今回の動画でも12GB弱になりましたからストレージ区画をかなり消費します。HDDの環境でもフルHDだと書き出せない事はありませんから、HDDがある環境だとHDDに書き出しても問題はないのですが、SSDのワンスピンドルの環境だと、Cドライブの書き込み容量をどんどん消費するので、ストレージの寿命が恐ろしい勢いで減っていきます。とは言っても、シネマカメラで高品質のソースを使う場合には、かなり巨大な容量の素材が山のようにたまるので、そう言った作業と比較すると、そうでもないのですが、MikuMikuDanceは8Kで書き出せるのでそう言った高解像度の書き出しや360度映像での書き出しをする場合だと、500GBくらいだとあっという間に埋まってしまうので、大容量のストレージが必要になります。
今回の動画の設定だと、現在のアーキテクチャのゲーミングPCだとあっという間に終わると思いますが、前述の条件は、1フレームの負荷の話なので、
■ 解像度
■ フレームレート
が上がると、レンダリング時間も長くなります。
処 理で気になった事
ポストプロセスの処理になりますが、MikuMikuDanceでは、プログラマブルシェーダーで処理をしているので、HLSLで制御する事になりますが、MMEを使うと、DoFとMotion Bluerを同時にかける事ができます。
この辺りは、近年の3DCGツールでレンダリングをする場合には問題なく処理が出来るのですが、重ね掛けをすると、DoFが抜ける事があります。その為、こう言った処理をする場合に、外部のFxの重ね掛けをするだけでは、この二つの効果が適正に動作しないことがあります。
Motion Bluerは、写真と動画出は意味合いが少し違ってくるのですが、写真の場合だと、 【 被写体ブレを撮る 】 という考え方になりますが、動画の場合だと 【 カクつきを消す 】 と言う意味合いもあります。映像では、 【 コマ飛ばし 】 という手法もあるので、アクションを撮る場合にブラーが入らないようにして動きを見せる方法がありますが、フレームレートを下げていくとどうしてもカク付いた動きに見える場合があります。その時に、残増感を少し入れる事で、自然な動きに見えるようになるので、 【 Motion Bluer 】 を入れます。
日常の動きだと、コマ飛ばしのような動きになると違和感が出てしまうので、実写の場合だと、シャッタースピードで調整することになりますが、MikuMikuDanceではそう言った機能が存在しないので、fps数を下げるとカクついて見えるので、Bluerエフェクトを使う事になります。
ちなみに、フィルムの場合、ローリングシャッターなので、羽根の角度を変えて遮蔽する範囲を変更するので、シャッターアングルと言います。フィルムの流れる速度は等速なので、シャッターの回転時に角度を変えると光の入る時間が変わるので、実質的に露光時間が変わります。その為、フィルムで映像を撮る場合には、シャッタースピードではなく、シャッターアングルと言う角度の変化で指定するようになっています。とは言っても、DSLR製品だとシャッタースピードになりますが、アングルでの指定が出来る製品もあります。
あと、3DCGでは、座標系がソフトによって全く違うのですが、グラフィックのライブラリでも仕様が異なります。その為、三軸の位置情報をRGBの三色に分けてそれを合成して作成する 【 ノーマルマップ 】 の向きも座標が異なると作り方が変わってきます。
ノーマルマップについては、Ray MMDでしか使わないのですが、この時に、MikuMikuDance用とMikuMikuMoving用でテクスチャが違う事がありますが、MikuMikuMoving用ではGLのテクスチャが使用されていることがあるので、Direct Xとは向きが逆になっています。
この場合、GIMPなどで、トーンカーブのカラーを反転させて調整する事になりますが、ノーマルマップで球体の表示をした時に、右側に影が来るのがOpen-GLで、左に影が来るのがDicrect 3Dと言う違いがありますから、目的に応じて使い分ける事になります。
お 借りした物
【 モデル 】
Sour式ミク ( Sour暄さん)
【 セット 】
MikuMikuDanceに入っているきしめんの物
【 モーション 】
MikuMikuDanceに入っているきしめんの物
【 エフェクト 】
HgSSAO.fx ver0.0.3 針金Pさん
HgDOF.fx v0.0.6 針金Pさん
HgToonShader ver0.0.1 針金Pさん