2014年12月08日

[Unity] MMDダンスPVのテスト

今回はUnityでMMDダンスPV制作の可能性について探るため、テスト動画を制作してみた。

躍らせるまで

これまでMMD4Mechanimを使用してMMDモデルの取り込みをしてきたが、実はMMD4Mechanimには既存のvmdを読み込ませMMDモーションをUnity上にインポートする機能も備えている。

Unity初心者でもマジ天使なプロ生ちゃんに可愛く踊ってもらいたい! | Time to live forever
http://unsolublesugar.com/20141206/040838/

ぶっちゃけ上記ページの通りにやれば良い。

さらにリッチに演出

さらにUnityでは平行光(Directional Light)のほかに、MMDではMMEを導入しないと使えないスポットライト(Spot Light)や点光源(Point Light)も標準装備、またパーティクル(粒子)も撒き散らし放題である。なのでもうちょっとリッチに演出してみた。

Screenshot

この画像ではDirectional Lightの他にモデルの真上からSpot Lightを当て、さらに紫と赤のPoint Lightがモデルの周囲をぐるぐる周るようにしてある。さらに足元からはキラキラとパーティクルも吹き出す。

「キャラクターの周囲をライトがぐるぐる周る」処理は以下のようにする。

まず右クリメニューでCreate Empyを選びシーンに空のオブジェクトを作り、「LightBase」と名付ける。その中にPoint Lightを2つ入れる。

2 Point lights in LightBase

2つのライトはInspectorからそれぞれ赤と紫に色を変えておく。またそのままでは光が強すぎるのでIntensityを0.5以下に調整しておく。ついでにそれぞれの位置を中心からすこしずらしておく。

あとはLightBaseをくるくる回せば、2つの点光源はそれを中心に回転するはずだ。

AutoRotate.csというスクリプトを作成、LightBaseにアタッチ(取り付け)する。内容は以下のようにする。とってもシンプル。

using UnityEngine;
using System.Collections;

public class autorotate : MonoBehaviour {

    public Vector3 rotateangle;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.Rotate(rotateangle);
    }
}

問題がなければrotateangleというパラメータが出現するので、そこに回転角(度)を入力する。今回はYに1を設定。

次にパーティクル(粒子)を設置するが、これはさらに簡単に出来た。Assetsを右クリックしてImport Package>Particleを選択。Standard Asset/Particleフォルダの中にいろんな種類のパーティクルが用意されているので好きなのを選んでシーンに設置。今回はSparkle Risingを置いてみた。これは十字型と円形の光の粒の組み合わせになっているので、それぞれWorld/Local/Rnd Velocityを適当にいじっていい感じのバラマキ具合に調整する。大きさを調整するにはMin/Max Sizeをいじる。

画面品質と影

これで当初よりリッチな演出でダンスさせられるわけだが、気になる事がいくつかある。

  • 画面(特にモデルのエッジ)が荒くて汚い
  • 影がない、あるいは汚い

そこでQuality Settingをいじる。メニューのEdit>Project Setting>Qualityを選択すると以下の様なパネルが出る。

Quality Setting Panel

これはさまざまなプラットフォームに対応させるための、「描画機能をどれくらいもりこむか」の設定画面のようだ。細かい設定ができるが、今回特に優先して設定すべきなのはアンチエイリアシングと、影の設定だ。

アンチエイリアシングは画面のジャギー(ギザギザ)を低減させるものである。今回は「Anti Aliasing」を最高の「8x…」にした。4xと8xはあまり差がみられないが、少なくとも2x以上にはしないとギザギザでとても汚い。

次に影だが、最高の影を求めて設定した結果、画像↓のような設定にした。Shadow Distanceは非常に微妙な調整で結果が大きく変わるので各自調整してほしい。

Shadow Setting

さらに、シーンに戻ってDirectional Lightの設定をする。設定は以下のようにした。

これで綺麗な地面影が出ているはずだが、ちょっとまってほしい。ライトはDirectional LightだけじゃなくてPoint LightやSpot Lightも設置したはずだが、それらの影はどうなった?

調べた結果、実はUnity無料版(非Pro)では、リアルタイムに影を描写できるのはDirectional LightからのHard Shadowのみ、という制限があるらしい。なのでこれ以上の影を望むならProを購入するしかない。なお非リアルタイム(つまり背景のような、通常動かないモデル)であれば影を焼きこむ(Bake)ことによって影を出す方法もあるようだ。これについては期を改めて挑戦したい。

完成

こうして出来た結果がこちらの動画。

使用モデル:くま式結月ゆかり http://kummd.com
「Girls」 曲:EasyPop 歌:MARiA 振付:みうめ トレース:ひま・曇@のあき

動画キャプチャ

なお動画のキャプチャには以下のサイトのスクリプトを使わせて頂いた。

Unity から連番ビットマップを出力する – Keijiro Takahashi
http://keijiro.github.io/posts/unity_screen_recording

記事のなかでは連番画像の動画化にFinal Cut Proを使用しているが、普段AviUtlを使っている人なら、ファイルメニューの「開く」から連番の最初の画像を開くだけであとは勝手に動画にしてくれるのでオススメ。上の動画では一旦AVIで吐き出した後に拡張編集で取り込み、オーディオ再生位置を調整してミックスした。

スクリプトをアタッチする場所はどれでもいいようだが、シーンに空のオブジェクトを作ってそこにくっつけるのが一番シンプルで簡単のようだ。

最後に

今回作ってみた上での感想。無料版ではDirectional Lightのみとはいえ、それでも影が綺麗に出るのはとても良い。MMDでは本当に影に悩まされ続けてきたのでそれだけで涙が出るくらい感動した。各種光源もパーティクルも気兼ねなく使えるし、今回のライトのように、単純な運動を繰り返すオブジェクトを配置する場合はMMDでキーを打つよりもプログラミングしてしまったほうが簡単なケースもある。

今後ダンスPVを作るときは、MMDでモーションを作成し、Unuty上で演出という方法も、可能性としてアリなのかもしれない。

有料版であればSSAOやDOF(被写界深度)系のエフェクトもふんだんに使えるようになるので、うーん、有料版欲しくなってくるな………16万か……。

posted by ちょむ at 14:32| Comment(0) | TrackBack(0) | Unity
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/106228591
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック