Maya2017→Unity5.5に挑戦② Unity上での質感調整など

どうも!Maya太郎です。

去年(2016年)はVR元年というだけあって
ゲームエンジンを用いたVRコミュニティがすごく賑わっていました。

そもそも2015年にUnityというゲームエンジンの無償使用の範囲が拡大したことをきっかけに
ライバルのUE(アンリアルエンジン)もビジネス方針を変えて無償利用の敷居が大幅に下がりました。
(現状でも年商規模などによってライセンスが必要になりますので完全無料ではありません。注意)

それを機にゲーム業界だけでなく
多くの業界のクリエーターがゲームエンジンを使い出すきっかけになったような気がします。
Maya太郎もその時期に何度かUnityをインストールしてみたものの、うまくなじめずに放置していたのですが
先日、思いつきでUnity最新版をインストールしたところ
割とすんなりと基本機能が使えてしまいました。何で今まで挫折してたのだろうというぐらいに

最近のゲームエンジンは、あらゆるリアルタイムCG技術の導入で
グラフィック表現能力がかなり進化しています。
擬似的ながらもリアルタイムの映り込みやGI(グローバルイルミネーション)を
導入しているので、シーンによってはプリレンダー系CGに見劣りすることなく
インタラクティブなCGを作ることが可能です。

最近のゲームCGはすごいレベルになっているので
それを手軽に作成できる(しかも無料からスタート)というのは
すごく魅力的だと思います。

「これ、Mayaの話なの?」

と思われるでしょうが、UnityもUEも、モデリングなどの素材を作る機能はありません。
素材を外部から持ち込んで、それを制御するだけの実行環境に特化しているので
作業の過程でMayaなどの統合CGソフトは深いつながりがあるのです。

前回記事でも書きましたが
この記事はゲームを作るためではなく、
過去に作ったMayaのシーンをUnityに変換して、
リアルタイムCGとしてシーン空間を
(シーンのスケールサイズで)歩き回るなど
「Mayaで作ったデータで遊ぶ」ことが第一目標です。

商用利用になると一気にハードルが上がるのですが
余興程度の使い方であれば、Mayaユーザーのみなさんが簡単に楽しめるレベルになっています。
この記事はそういう意味での「楽しみ方」の紹介なのです。

ということで、Unityを再開して10日ほど使ってきたので
ある程度雰囲気がつかめてきました。
スクリプトは使わない前提で、画面操作だけで出来るとこを最優先しての
操作レポートです。今回もUnity自体の操作の説明はありません。
Maya→Unityで出来る面白いこと。を紹介できればと思います。

 

今回の記事はすべてUnityの画面です。

前回FBX経由でUnityに変換した室内用CGのモデルデータです。
いろいろ設定していますが、今回も雑感レポートなので割愛します。

夜の照明にして、照明器具のライティングのみで照らしています。
ArnoldやRendermanなどのレンダリング結果ではなく、Unityの作業画面でリアルタイムで動くCGです。

作業画面でのアイコン表示を簡単に非表示にする方法が分からないので、紛らわしい表示になっています…
見えている画面表示は
ライトからのリアルタイムの照明と、事前計算(ベイク)したライトマップとの混合表示になっています。

これがリアルタイム表示で視点をグリグリ動かせるというのは、すばらしいですよね。

 

最新のリアルタイム反射技術を使ってみる

正確な原理はよく分からないのですが、
SSR(スクリーンスペースリフレクション)という技術でリアルタイムに反射を表現する技術があります。
まだ完全に標準実装ではなく(別ダウンロード)で、手探りで使ってみたのですが、
床の反射がとてもリアルです。擬似的な反射には見えません。
しかしこの方式にも制約があって、画像の範囲外(カメラの背面や見切れた部分)の映り込み表現ができません。

制約の内容から推測すると、SSR対象オブジェクト(今回は床)のカメラ視点からの傾きを計算して
スクリーンスペース(画面内)の画像を反転などの鏡面処理を内部でしているんじゃないかなと考えています。
しかしこういうことを思いついて実装する人はすごいですね。

ということでSSRを使っただけだと、そもそも画面内に存在しない画像を映りこませることは原理上できません。
このシーンでは、窓から外を見たときの部屋の映り込みは表現されません。
窓に映りこむはずの部屋の景色はカメラの背面にあるためです。

こういう場合は、原始的な方法である「リフレクションマップ」を使った擬似反射表現を使います。
おそらくこの機能ははるか以前からあるのだと思います。
Reflection Probeという機能ですが、シーン内の好きな場所に設置して、その地点からの反射マップを自動的に作成します。その近くに反射表現するオブジェクトがある場合、その反射マップを自動的に反映する技術のようです。
便利ですね。さすがゲームエンジン。設定だけで他の処理は自動でやってくれます。

窓の反射には窓の近くにRefrection Probeを適用して、映り込みを表現します。
原理上厳密には映り込み位置は正確ではなくずれているでしょうが、雰囲気は出ています。

実はこのアイコンがReflection Probeのアイコンです。
部屋中何箇所も設置しています。
ガラスや金属のオブジェクトのある場所に設置しておくわけですね。
もちろん、リアルタイムで更新する設定にすると負荷はあがるので
ゲームに使う場合は負荷を考えて慎重に使う必要がありますが、
今回はフレームレートなど気にしないので
負荷を考えずに気ままに設置しています。

 

ステンレスの表現難しいです

個人的に難しいのはステンレスの質感です。表面素材の設定だけでなく、映り込みの表現も難しいです。
SSRだけの反射だとタイルは映りこみますが、室内の背景が映りこまないので

Refrection Probeも併用して反射表現をしています。

Unityのマテリアルの説明は初めてになりますが
標準マテリアルはこんな感じです。
PBR対応で高度な質感表現ができますが
ArnoldなどのGIランダラーと比べると設定項目が少なく
数値設定で微調整できる項目もほとんどありません。
微調整はマップデータを直接調整するという場合も多々あります。
機会があればUnityでの質感設定の細かい話もしたいと思いますが
深入りするほどMayaとは関係の話になってしまいがち?になるので…

 

動画を用意しました。こんな感じです ↓

アセットストアで素材調達

部屋が殺風景なので
アセットストアで無料の3D素材を探します。
このような「ストア」方式は、スマホやWindowsなどでも導入されている便利な方式ですね。
どの場合もそうですが、「無料で利用できるもの」はそれなりのものしかありませんが…

適当に配置しました。

にぎやかになってきました
無料ではいい素材が見つからなかったですが…文句は言えない…

自分でモデリングするべきでしょうが、手軽に遊びたい場合は無料の素材を利用するのもいいですね。

まとめ

このように、息抜きとしてMayaデータで遊べる便利な時代です。
仕事などで納品に使わなくても
打ち合わせ用に活用したり
データを等身大空間的に歩き回ることであら捜し(キャラクタ目線で確認できる)など
応用幅が広いです。

今回ちらっと触れた質感表現の技術ですが
「リアルタイムCG」のCG技術は、
Mayaで普段利用している「プリレンダーCG」とは考え方の違う部分も多くあります。
「長距離走と短距離走」のトレーニング理論が違うように
それぞれが独自に進化した技術もありますが共通している部分もあります。
今後数年で、双方の技術はよりハイブリット化してくると予想されるので
リアルタイムCGに興味ない方も、研究してみると面白いですよ。

Maya太郎は独学で10年近く「研究だけ」はしています。
仕事には結びつきません(涙)

では!