プログラミング/Unity/MMDモデルを物理ベースレンダリング のバックアップ(No.3)


Unity5の物理ベースレンダリングを試してみます。

はじめに

満を持して登場したUnity5ですが、皆さんもう試しましたか?

私は相変わらず .NET Framework バージョンが 3.5 だったことで意気消沈していたのですが、せめて流行りの物理ベースレンダリングなるものくらいは触ったつもりになっておこうということで、MMD4Mecanimを使ってさくらば氏製作のMMD川内改二モデル*1をUnity5に取り込み、物理ベースレンダリングさせてみました。

Unity 5.0.0f4 を使用しました。
Unity歴は一週間未満、Unity5歴は一日未満の人間が書いていますので、間違いを含んでいる可能性があります。

MMD4MecanimでMMDモデル取り込み

まぁぶっちゃけMMD4Mecanimの公式サイトでチュートリアルを読めばわかることなので、ざっくりと書きます。

  1. プロジェクトを作成する。
  2. MMD4Mecanimをインポートする。
    • プロジェクトを開いている状態で MMD4Mecanim.unitypackage をダブルクリックし、出てきたダイアログでImportボタンを押すだけ。
  3. MMDモデルをフォルダ丸ごとProjectビューの Assets フォルダ以下の適当な場所にドロップする。
  4. 放り込んだモデルフォルダの中に (モデルファイル名).MMD4Mecanim というファイルができているはずなのでそれを選択する。
  5. Inspectorビューに利用規約が出るのでよく読んで同意し、次に出てきた画面でProcessボタンを押す。
  6. 色々走った後、モデルフォルダ内にPrefabができあがるので、それをHierarchyビューにドロップする。
  7. Hierarchyビューのカメラやライトをいい感じに調整する。

ここまでやるとGameビューに次のように表示されます。
なお地面としてPlaneオブジェクトを敷いてありますが別にあってもなくてもいいです。

&ref(): File not found: "川内_デフォルト_サムネイル.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";
&ref(): File not found: "川内_デフォルト.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

実際カワイイ!

物理ベースレンダリングさせてみる

物理ベースレンダリングさせるにはどうするかというと、モデルのマテリアルのシェーダに「Standard」を指定するだけです。

さくらば氏の川内改二モデルの場合、Hierarchyビューは次のような感じになっているはずです。

&ref(): File not found: "Hierarchyビュー.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

これの「U_Char」以下にあるマテリアルのShaderを片っ端から「Standard」に変更します。

&ref(): File not found: "Inspectorビューでのマテリアル設定1.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

ただしそれだけだと白目になってしまいます。
元のシェーダ名に「Transparent」が含まれているマテリアルは、シェーダの Rendering Mode を「Opaque」から「Transparent」に変更しましょう。
今回のモデルでは次の6マテリアルが該当します。

  • 1.eyeR
  • 2.eyeL
  • 3.eyeR2
  • 4.eyeL2
  • 36.udemou
  • 38.tanshoutou_hikari

&ref(): File not found: "Inspectorビューでのマテリアル設定2.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

ここまでやるとGameビューに次のように表示されます。

&ref(): File not found: "川内_物理ベースレンダリング1_サムネイル.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";
&ref(): File not found: "川内_物理ベースレンダリング1.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

パラメータを弄っていないので微妙な部分もありますが、脚の質感や腰巻きなどは良い感じになっているのではないでしょうか。

…あれ?マフラーが表示されていないぞ?

カリングに対処してみる

よく見るとマフラー以外にも髪の毛の一部や脇の裏の布地などが表示されていません。
これは何故かというとシェーダによってカリング処理(裏面描画のカット)が有効になっているためです。

このままでは不格好なのでカリングを無効化したいところですが、バージョン 5.0.0f4 現在のStandardシェーダにはカリングを無効化するための設定がありません。
カリング無効化のためにはシェーダを用意する必要があります。

とはいえ一から作る必要はありません。
StandardシェーダはUnityの公式サイトから無料でダウンロードできるため、それを弄ればよいのです。

Unity公式サイトのダウンロードページからPERSONAL版のダウンロードページへ行くと、わかりにくいですが本体ダウンロードボタンよりちょっと下に「ADDITIONAL DOWNLOADS」という項目があります。
そこをクリックして、「Built in shaders」をダウンロードしましょう。

ダウンロードしたパッケージの DefaultResourcesExtra フォルダにある Standard.shader がStandardシェーダファイルです。
これをコピーしてファイル名を StandardCullOff.shader とでも変更し、内容を書き換えてください。
書き換え済みのファイルを添付しておきます。

  • &ref(): File not found: "StandardCullOff.shader" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

このファイルをProjectビューの Assets フォルダ以下の適当な場所にドロップしましょう。
するとマテリアルのShader設定でこのシェーダが選択できるようになります。

すべてのシェーダをこれに置き換えてもよいのですが、カリングを無効化すべきマテリアルは、元のシェーダ名に「BothFaces」が含まれているものとなります。
数が多いのでここに羅列はしませんが、元のシェーダ名によって適当するシェーダを切り替えてください。

シェーダを適用した結果、Gameビューに次のように表示されました。

&ref(): File not found: "川内_物理ベースレンダリング2_サムネイル.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";
&ref(): File not found: "川内_物理ベースレンダリング2.png" at page "プログラミング/Unity/MMDモデルを物理ベースレンダリング";

やっぱり夜戦にはマフラーが必要だよね〜。

おわりに

Unity5で簡単に物理ベースレンダリングさせることができました。
ただカリングを無効化しようとすると面倒なので、Standardシェーダでカリングの設定もできるようになってくれたら嬉しいですね。

今回の記事では書いていませんが、標準のアセットを利用すればMMDモデルをカーソルキー等で歩行させる程度はすぐにできてしまいます。*2
下手をするとMMD動画(というかMMDモデルを利用した動画)の作成もUnityの方が楽…なんてこともあるかも?(さすがに言い過ぎか)

参考サイト

Stereoarts Homepage
MMD4Mecanimの配布元です。
Unity3D - MMD4Mecanimを使用してMMDモデルにUnityで踊って頂いてみた。 - Qiita
MMD4Mecanimの使い方の参考にしました。
Unity 5 Standard Shaderを試す - Onoty3D
Unity5の物理ベースレンダリングについて参考にしました。

*1 なぜ川内かって?カワイイからだ!
*2 もっともこれはUnity4でもできることですが。