先月Oculus Rift DK2が届いたので折角だしゲーム制作に挑戦してみよう、ということでニコニ立体ちゃんことアリシア・ソリッドの3DモデルをUE4で取り込んでOculusで戯れてみることにした。

Oculusを使って、と書いたけど別にOculusが無くても戯れられます。というか、Oculus表示が出来るというだけでOculusならではなことは特にしてません。

マップを用意する

いきなり自分で1からマップ作ってくとなると結構ハードルが高いので、今回はマーケットプレイスから入手できるブループリントオフィスのマップをそのまま使わせてもらう。

Epic Gamesが提供しているサンプルプロジェクトはちょっと尋常じゃないクオリティなんだけど、サンプルプロジェクトで使われているアセットは自作のゲームにも流用可能なので、取り敢えず何か作ってみようみたいなときにそこから始めるといきなりなんかかっこいい感じになってテンションが上がります。まだ何もしてないのになんかすごいの出来ちゃった感が出る。まだ何もしていない。

それはそれとして、見てるだけでもかなり勉強になるので積極的にサンプルプロジェクトを弄ってみると良さそう。あれどうやるんだろう、みたいのがContent Examplesに大体あったりする。

モデルを読み込む

Alicia_solid_Unity.FBXをインポートする。取り敢えず何も考えないでインポートしてみたけど、よくある「モデルが寝てる!」とかもなく普通に読み込めた。ちなみに開発時点では配布開始直後だったのでVer.1のを使ってるけど、記事書いてる時点ではVer.3まで出てました。

が、哀しいことにモーションはちょっと大変なことになってます。頭の中で「ゲッダンんーふふんーふふんーふふんーふふーふふふー」みたいなBGMが流れました。

インポートのオプション良くわかってなくて間違えたかなーとか思ったけど、他の3Dモデリングツールで開いてもアニメーション上手く見れないみたいな話を聞いたので、結局諦めてアニメーションのインポートのチェックは外してメッシュだけ読み込んだ。

見た目の調整

勇んでインポートしたままのスケルタルメッシュをポンと配置すると、(特にアニメ調のキャラクターのモデルだと)あ、あれ??なんか思ってたのと違う…みたいな気持ちになる。

default

…まずは見た目を調整しよう。こっから試行錯誤。

とりあえずUnlitにしてみる

こんな感じ

unlit

スケルタルメッシュをダブルクリックして表示してみて、ライティングなしの表示に変えてみると、元々のテクスチャそのままの表示になるのでそれっぽく見える(当たり前)。ようしそれならとすべてのマテリアルのShading ModelをUnlit(ライティングなし)に変えてみる。置いてみます。超、浮いてます。

真っ暗闇のマップにアリシアちゃんだけを配置して眺める分にはいいんだけど、なまじマップがサンプルプロジェクトのおかげでやたらリアルなので、一人だけ全くライティングの影響を受けてないアリシアちゃんがものすごい異物感出る。

真面目にマテリアルを弄ってみる

ちゃんと質感を考慮してないままリアルなライティングが効くところに置いてるからフィギュアっぽい感じになってしまってるので、それぞれマテリアルを調整する。

マテリアルのドキュメントを読むと、どうやらラフネスとかスペキュラとかを調整してやると良さそうだ。

あとそれから、例えば肌や髪、目なんかは石とか壁とかとは光の反射の仕方が違うので、そういう設定をする。Shading Modelのドキュメント読むと肌とかにはちゃんとそれ用の設定があるらしい。このあたりでアリシアちゃんが血色良くなって生き物っぽくなってきました。

それから服、これも布っぽい感じが欲しいところ。なんかそういうのの例ありそうだなと思ってContent Examplesを見に行くとそのままずばりCloth.umapがある。開いてみると、すごい布だ!布感ある!ってなります。でもこれは上手く取り入れられたかというと微妙なところ。もうちょい試行錯誤が必要そう。

調整済み

んで最終的にこんな感じ。

セルシェーディング

リアルさを追求していく方向性ではなくて、アニメっぽいキャラなんだからアニメっぽくレンダリングしてあげれば良いのでは、の方向性。というより、あれ?って思ってニコニ立体の配布ページに見に行くとそう(セル画風のレンダリングに)なってるし、モデラーさんの製作過程見ても「トゥーンシェーダー作って適用」みたいに書いてあるので、ならばUE上でもそうしてあげればよいのではということに気付く。

UE4だとポストプロセスでやるやり方があるようで、シモダジュンヤさんのそれを参考にやってみる。

Cell Shading in Postprocess セルシェーディングのポストプロセス

これも一発では上手く行かなくて、影になってるとこに入ると真っ黒になる、みたいなのが起きたりしてかなり試行錯誤した。したけど何したか思い出せないんだ…。いきなり手を出すにはちょっと難易度高いやつだった。

結果多少はそれっぽい感じにはなったんだけど元の見た目に忠実ってとこまではなってないし、一方マテリアル調整してそれっぽくなった版のアリシアちゃんもこれはこれで悪くないよなぁ、と悩んだ末Alicialusでは動的に切り替えられるようにした。セルシェーディングするかしないかはRender Custom Bufferのチェックで決めてるので、Cキー押すとBPでメッシュのRender Custom Bufferをトグルするようにしてある。口で説明するより見た方が早いのでデモで試してみてください。

ライティング

モデル自体のマテリアルやレンダリングの仕方もそうなんだけど、そもそもの話としてライディングがどぎついというのもある。実は、弱めのポイントライトが配置された室内とか、反射光で照らされる木陰とかだと、取り込んだそのままでも思ったよりそれっぽく見えるし、マテリアル調整後やセルシェーディング有効にしてても直射光が当たってるとこだと眩しくて微妙な感じになる。

んじゃライティング調整すればって話なんだけど、今回マップが自分で1からセットアップしたやつじゃなくてサンプルプロジェクトのやつを使わせてもらってるので、ディレクショナルライトの光自体を弱めちゃうと全体が暗くなって雰囲気が変わってしまうのでやらなかった。同じくポストプロセスで色々と弄っても調整可能なのも分かってるけど、それも全体に影響するのでちょっと悩み中。

長くなってきたので一旦切ろう、その2、モーションを付けてみた編に続きます。