2018年9月26日

【連載】第3回:映像制作におけるUE4の活用~マテリアル設計~

作成 株式会社ジェットスタジオ 赤崎弘幸

■レンダリング手法の違いとマテリアル設計

映像やビジュアライゼーションなどプリレンダにてCG制作を行っている方々はおそらく、ArnoldやV-Rayなどのレイトレーシングベースのレンダラーを使用していることが多いかと思います。私もその中の1人で、フル3DCGの映像を主軸にレンダラーはV-Rayを最も使用しています。これらのレンダラーには、大抵何にでも使える万能なマテリアルが1つ用意されていて反射も屈折も発光もほとんどの質感が難なく表現できてしまいます。万能マテリアルで表現しにくい質感というとヘアマテリアルやカーペイントマテリアルなど特殊なものが該当します。

fig01_aiStandard_VRayMtl.jpg

fig01. ArnoldのaiStandardマテリアル(左)とV-RayのVRayMtl(右)。画面はMayaのもの。

これらのマテリアルは物理ベースで設計されており、その点はUE4のPBRマテリアルも同じです。パラメータは少し違いますが、どちらも適切な値を入力すれば大きく予想から外れた質感になることはほぼありません。ただし、前述のレイトレーシングと同じ感覚でUE4のマテリアルを触ってみるといろいろと違うところに気づくでしょう。

まず、UE4はディファードレンダリングというラスタライズ法でレンダリングされています。レンダリング手法に関するお話はここでは割愛しますが、ラスタライズではArnoldやV-Rayの万能マテリアルですんなり出てしまう反射や屈折などの表現が素直に出てくれません。

参考:レイ トレーシングとラスタライズの違い NVIDIA

これらの違いについて予備知識を全く持たずにマテリアルを触り始めると、「透過のパラメータが出ない!」「画面外のものが映り込まない!」など当たり前のようにできていたことが出来なくなり戸惑うことがあるかもしれません。UE4では、例えば反射は「Scene Capture」「Screen Space Reflection」などの近似手法を用いて表現され、屈折はBlend Modeを「Translucent」に設定し透過させ、背景を歪ませるという手法で表現されます。反射についてはどちらかというとレンダリング寄りの機能にあたりますが、Blend Modeようにマテリアル側で事前に設定しなければならないこともいくつかあります。

fig02_UE4Material.jpg

fig02. ガラスのマテリアル(左)と肌のマテリアル(右)の例。表現したい質感に適切な「Blend Mode」や「Shading Model」を選択してから各インプットへ値を接続する必要があります。

参考: ・反射 Unreal Engine ・マテリアル エディタ - 屈折の操作ガイド Unreal Engine

■サンプルコンテンツの活用

金属や肌は比較的シンプルなマテリアルです。適切なマップを準備できていればそれらを入力するだけでマテリアルはほとんど完成です。

fig03_SimpleMaterial.jpg

fig03. 塗装された金属のマテリアル

髪や眼球などの特殊なマテリアルは単純にマップ入力だけとはいきません。マテリアルエディタ内で多くのノードを駆使して組み上げる必要が出てきます。とはいえ最初は何をすべきか分からないかと思います。サンプルコンテンツをうまく利用してみましょう。

fig04_DigitalHumansSample.jpg

fig04. Epic Games Launcherのラーニングタブから多くのサンプルコンテンツを入手できます。

デジタルヒューマンプロジェクトをダウンロードしヘアマテリアルのグラフを覗いてみるとfig05のような構造になっています。全体像を俯瞰で見てしまうと情報量が多く目を背けたくなるかもしれませんが、各インプットごとに右側から順を追って確認していくと理解しやすいと思います。分かりやすいように配置やグループを整理しました。

fig05_HairSheetMaster.jpg

fig05. デジタルヒューマンプロジェクトのヘアマテリアアル

最も簡単そうなEmissiveの入力を見てみます。(fig06)右側から逆に見ていくとまず一番最初にあたるのがSwitchというノード。これはisEmissiveと名付けられたStaticBoolParameterから、TrueかFalseかのどちらかを受取って分岐ができるノードです。デフォルトではFalseになっているため実質赤線の部分しか結果に反映されていません。これをTrueに変更すると青線側が有効になり、カラー(HairEmissiveColor)と明るさ(HairEmissiveBrightness)を掛け算(Multiply)した結果が反映されます。その後のAddは0を足しているだけなので特に影響は無く用途は不明です。Emissiveつまり自己発光を髪に付加する必要が無いのであれば、青線部分とスイッチ関連は全て削除してしまって直接「0」をEmissiveに繋いでも問題ありません。

fig06_HairEmissive.jpg

fig06. fig05のEmissiveに入力されている部分だけにフォーカス

BaseColorへの入力は一見複雑そうに見えますが、同じようにSwitchの分岐に注意しつつ見ていくとそれぞれ処理ごとに分けて把握することが出来ます。このグラフは、仮にデフォルトのままスイッチが全てFalseの場合、根元~毛先のカラーグラデーションにノイズを付加するだけの単純な処理になります。

fig07_HairBaseColor.jpg

fig07. fig05のBaseColorへ入力されている部分だけにフォーカス。

必要な機能に絞って整理していった結果ここまでシンプルになりました。(fig08)ひとつひとつ確認しながら自分の手で整理するれば理解も深まり扱いにも慣れてくるでしょう。

fig08_HairMaterial.jpg

fig08. サンプルから必要なものだけをコピーし再構築したへアマテリアルの全体像。マテリアルグラフのノード群はCtrl+C、Ctrl+Vでプロジェクトを超えて移植できます。

以上のヘアマテリアルの例ではサンプルをもとに分解してみましたが、そのまま使ってしまうことも視野に入れます。必要な項目が“パラメータ化”されていれば、マテリアルインスタンスを使用できます。眼球のベースマテリアルM_EyeRefractiveを右クリックし「Create Material Instance」から作成できます。このマテリアルインスタンスに自分で作ったテクスチャを入力し各種パラメータを調節するだけでOKです。Digital Humansにも『シェーダー開発の経験が豊富でなければ、UE4のEyeシェーダーを使用してスクラッチで目を作成することは推奨しません。』ということが書かれています。ノードネットワークを全く触ることなくマテリアルが完成してしまうのでそこから学ぶことはできませんが、不慣れなうちは非常にありがたい設計です。

fig09_EyeMaterialInstance.jpg

fig09. サンプルのマテリアルをそのままインスタンス化した眼球のマテリアル

fig10_FinalImages.jpg

fig10. UE4でマテリアルを構築したキャラクター。髪と目以外のほとんどはマップを入力しただけのシンプルなマテリアルで構成されています。

UE4のマテリアルは、ノードをつないでいくだけで作成できるビジュアルスクリプティングという手法が取り入れられています。これにより、実際にコードを書くことなくHLSLというシェーダー言語を構築できてしまう非常に便利な設計です。また有難いことに豊富なマニュアルとサンプルコンテンツが用意されているため、これらを応用すればマテリアル作成のハードルはグッと下がるように思います。

物理ベースのマテリアルはツールを超えても基本的に同じ考え方でマップ作成やパラメータ設定をすることができます(NPRを除けばですが)。しかしそれでもレンダリング手法が違えば必ず同じ結果が出力されるとは限りません。1枚のレンダリングに何時間も費やすわけにはいかないゲームエンジンでは、高速に処理するためあらゆるところで工夫を凝らしていることが分かりました。そのためか技術が複雑化しているようにも思えますが、ひとつひとつ理解し適切な扱い方を覚え、迷いのない制作に繋げたいものです。

そして、リアルタイムレイトレーシングが現実的になってくれば選択肢が一気に広がるかと思います。処理負荷と必要なハードウェアのことを考えるとまだまだ今は楽観視はできませんが、映像目的など多少のパフォーマンス低下はやむを得ないと割り切れる分野にとっては比較的実用化が早いのではないかと思っています。私も楽しみです。 参考:最新技術を先取りチェック:間もなく実現、アンリアルのリアルタイム レイトレーシング

---
ジェットスタジオは2001年に発足し現在まで、フルCGの映像を中心にアニメ・ゲーム・パチンコなど様々なコンテンツの3DCG制作を行ってきた会社です。詳細は公式HPFacebookページをご覧ください。

(関連記事)

【連載】第1回:映像制作におけるUE4のためのキャラクターデータ構成(モデリング編)

【連載】第2回:映像制作におけるUE4のためのキャラクターデータ構成(リギング編)