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


  • 追加された行はこの色です。
  • 削除された行はこの色です。
Unity5の物理ベースレンダリングを試してみます。

#contents

*はじめに [#abstraction]

満を持して登場した[[Unity5>http://unity3d.com/]]ですが、皆さんもう試しましたか?

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

-[[MMD4Mecanim - Stereoarts Homepage>http://stereoarts.jp/]]
-[[【MMDモデル配布あり】川内改二「うそつき」【MMD艦これ】>http://www.nicovideo.jp/watch/sm24312114]]
#nicovideo(sm24312114)

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

*MMD4MecanimでMMDモデル取り込み [#mmd4mecanim]

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

+プロジェクトを作成する。
+MMD4Mecanimをインポートする。
--プロジェクトを開いている状態で MMD4Mecanim.unitypackage をダブルクリックし、出てきたダイアログでImportボタンを押すだけ。
+MMDモデルをフォルダ丸ごとProjectビューの Assets フォルダ以下の適当な場所にドロップする。
+放り込んだモデルフォルダの中に (モデルファイル名).MMD4Mecanim というファイルができているはずなのでそれを選択する。
+Inspectorビューに利用規約が出るのでよく読んで同意し、次に出てきた画面でProcessボタンを押す。
+色々走った後、モデルフォルダ内にPrefabができあがるので、それをHierarchyビューにドロップする。
+Hierarchyビューのカメラやライトをいい感じに調整する。
--ライトの設定は次のサイトと同じにしました。
---[[Unity 5 Standard Shaderを試す - Onoty3D>http://onoty3d.hatenablog.com/entry/2015/03/05/112244]]

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

&ref(川内_デフォルト_サムネイル.png,left,nolink,川内 デフォルト表示);~
&ref(川内_デフォルト.png,left,nolink,noimg,原寸表示);

実際カワイイ!

*物理ベースレンダリングさせてみる [#pbr]

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

-[[Unity 5 Standard Shaderを試す - Onoty3D>http://onoty3d.hatenablog.com/entry/2015/03/05/112244]]

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

&ref(Hierarchyビュー.png,left,nolink,Hierarchyビュー);

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

&ref(Inspectorビューでのマテリアル設定1.png,left,nolink,InspectorビューでマテリアルのShaderを「Standard」に変更したところ);

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

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

&ref(Inspectorビューでのマテリアル設定2.png,left,nolink,InspectorビューでマテリアルShaderの Rendering Mode を「Transparent」に変更したところ);

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

&ref(川内_物理ベースレンダリング1_サムネイル.png,left,nolink,川内 物理ベースレンダリング表示);~
&ref(川内_物理ベースレンダリング1.png,left,nolink,noimg,原寸表示);

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

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

*カリングに対処してみる [#culling]

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

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

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

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

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

-&ref(StandardCullOff.shader,left);

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

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

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

&ref(川内_物理ベースレンダリング2_サムネイル.png,left,nolink,川内 物理ベースレンダリング表示(カリング対処付き));~
&ref(川内_物理ベースレンダリング2.png,left,nolink,noimg,原寸表示);

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

*おわりに [#conclusion]

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

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

*参考サイト [#link]

:[[Stereoarts Homepage>http://stereoarts.jp/]]|MMD4Mecanimの配布元です。
:[[Unity3D - MMD4Mecanimを使用してMMDモデルにUnityで踊って頂いてみた。 - Qiita>http://qiita.com/hiroyuki_hon/items/931c79164b0ffe19517f]]|MMD4Mecanimの使い方の参考にしました。
:[[Unity 5 Standard Shaderを試す - Onoty3D>http://onoty3d.hatenablog.com/entry/2015/03/05/112244]]|Unity5の物理ベースレンダリングについて参考にしました。