#contentsx(): Page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする" does not exist.
満を持して登場したUnity5ですが、皆さんもう試しましたか?
私は相変わらず .NET Framework バージョンが 3.5 だったことで意気消沈していたのですが、せめて流行りの物理ベースレンダリングなるものくらいは触ったつもりになっておこうということで、MMD4Mecanimを使ってさくらば氏製作のMMD川内改二モデル*1をUnity5に取り込み、物理ベースレンダリングさせてみました。
Unity歴は一週間未満、Unity5歴は一日未満の人間が書いていますので、間違いを含んでいる可能性があります。
まぁぶっちゃけMMD4Mecanimの公式サイトでチュートリアルを読めばわかることなので、さっくりと書きます。
ここまでやるとGameビューに次のように表示されます。
なお地面としてPlaneオブジェクトを敷いてありますが別にあってもなくてもいいです。
&ref(): File not found: "川内_デフォルト_サムネイル.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする";
&ref(): File not found: "川内_デフォルト.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする";
実際カワイイ!
物理ベースレンダリングさせるにはどうするかというと、モデルのマテリアルのシェーダに「Standard」を指定するだけです。
さくらば氏の川内改二モデルの場合、Hierarchyビューは次のような感じになっているはずです。
#ref(): File not found: "Hierarchyビュー.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする"
これの「U_Char」以下にあるマテリアルのShaderを片っ端から「Standard」に変更します。
#ref(): File not found: "Inspectorビューでのマテリアル設定1.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする"
ただしそれだけだと白目になってしまいます。
元のシェーダ名に「Transparent」が含まれているマテリアルは、シェーダの Rendering Mode を「Opaque」から「Transparent」に変更しましょう。
今回のモデルでは次の6マテリアルが該当します。
#ref(): File not found: "Inspectorビューでのマテリアル設定2.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする"
ここまでやるとGameビューに次のように表示されます。
&ref(): File not found: "川内_物理ベースレンダリング1_サムネイル.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする";
&ref(): File not found: "川内_物理ベースレンダリング1.png" at page "ぼやきごと/2015-03-21/Unity5で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 "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする"
このファイルをProjectビューの Assets フォルダ以下の適当な場所にドロップしましょう。
するとマテリアルのShader設定でこのシェーダが選択できるようになります。
すべてのシェーダをこれに置き換えてもよいのですが、カリングを無効化すべきマテリアルは、元のシェーダ名に「BothFaces」が含まれているものとなります。
数が多いのでここに羅列はしませんが、元のシェーダ名によって適当するシェーダを切り替えてください。
シェーダを適用した結果、Gameビューに次のように表示されました。
&ref(): File not found: "川内_物理ベースレンダリング2_サムネイル.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする";
&ref(): File not found: "川内_物理ベースレンダリング2.png" at page "ぼやきごと/2015-03-21/Unity5でMMDモデルを物理ベースレンダリングする";
やっぱり夜戦にはマフラーが必要だよね〜。
Unity5で簡単に物理ベースレンダリングさせることができました。
ただカリングを無効化しようとすると面倒なので、Standardシェーダでカリングの設定もできるようになってくれたら嬉しいですね。
今回の記事では書いていませんが、標準のアセットを利用すればMMDモデルをカーソルキー等で歩行させる程度はすぐにできてしまいます。
下手をするとMMD動画(というかMMDモデルを利用した動画)の作成もUnity5の方が楽…なんてこともあるかも?
もうしばらく色々触ってみようと思います。