UE4は物理ベースレンダリングを採用しているので、真面目にやろうとするといわゆるジャパアニメのようなキャラクターは、ライティングによりとても怖い見た目になってしまいます。
これをなるべく回避し、UE4のリアルなライティングに馴染ませるようにマテリアルを調整してみたのが、以下のような画像です。
もちろんこれも完璧なライティングではありませんが、ちゃんとシャドウは全て落としています。そしてこれを動画にしたものが以下です。
今回この動画を作成するにあたって、GitHubから取得したUE4のmasterブランチを使ってビルドしたカスタムUE4を使っているので、画像など一部現在のUE4とかみ合わない可能性がありますのでご了承ください。
※バージョン的にはUE4.9の開発中のものです。
どのようなところに注意すべきか?
いわゆるアニメ的なキャラが怖くなる要因は彫りの深い黒い影に綺麗なグラデーションがかかったような状態です。何も考えずに作ると以下のような感じになるのではないでしょうか。
これはプレビューシーンのライティングが適当というのもありますが、かなり顔周りに暗い影ができてしまっています。これを調整していきましょう。
コツはサブサーフェース スキャッタリング
さて、いきなり専門用語がでてきましたが、サブサーフェース スキャッタリング(以下SSS)とはなんでしょう?
以下引用。
光が半透明な物体の表面を透過し、内部で散乱した後に表面から出て行くメカニズムのこと。表面下散乱という訳語で呼ばれる事もある。フォトリアルな3DCGの質感を生成する技術のひとつである。SSSと略される。
つまり、どういう事かと言うと光が物体の表面を透過する事により、影が緩やかについてくれるわけです。更にSSSは人の肌を作るのに最も適したレンダリングなので、これを使わない手はありません。
UE4でSSSを使う方法
UE4でSSSを使う方法は実はかなり色々とあります。まずはマテリアルを作りましょう。今回は顔の肌のマテリアルです。
マテリアルの一番大きいノードの正式名称はわかりませんが、最終マテリアル入力ノードというような呼ばれ方をしているようです。まずはそれを選択し、詳細の中にある、"Shading Model"を変更します。
この中でSSSを使うものにあたるのが、"Subsurface"と"Preintegrated Skin"と"Susurface Profile"の3つです。どれも似ているようで結構違いがあります。今回使用するのは3つの中の"Subsurface"です。
SSSの調整の仕方
では、どのようにSSSを調整していくか?具体的なマテリアルノードをみていきます。
実は難しいことは全然やっていません。キーとなる入力は"サブサーフェスカラー"と"オパシティ"です。
サブサーフェスカラーの方は単純にテクスチャーサンプルの色情報と肌色に補正をかけたいだけのVectorパラメーターでそれをMuitiply(かけ算)しただけです。肌色に補正をかけるのは、そのままテクスチャーサンプルの色を渡すと、どうしても白っぽくなってしまうので、健康的に見える肌色成分の乗算をしています。
次にオパシティ(半透明)です。なぜオパシティが重要なのか公式のドキュメントを読んでみます。
サブサーフェス シェーディングモデル | Unreal Engine
マテリアルの Opacity チャンネルは、マテリアルがサブサーフェス スキャタリングと MLM_Subsurface シェーディング モデルlを使用すると若干違う意味合いをもつようになります。こうしたタイプのサーフェスは完全に不透明であるため、この場合の Opacity はライトを散乱する場合にマテリアルがどれくらいの密度になるかを制御するだけでなく以下も制御します。
更に以下のようにも書いています。
サブサーフェス マテリアルに対する Opacity を妥当な値、例えば、0.1 に設定するようにしてください。デフォルトのオパシティは 1 です。これは、満足のゆくサブサーフェス タイプのエフェクトにはなりません。
という事はSSSのマテリアルに適したオパシティを渡してあげなくてはいけません。ここでは透過率を"0.1"に設定しました。これで程よく光が透き通るように、影も比較的綺麗についてくれます。これでSSSの設定はOKです。
補正にエミッシブも入れておく
これだけで必ずしもいい影がつくというわけでもなく、マテリアルパラメーターとして外部からエミッシブカラーの入力を渡せるようにしています。エミッシブは自己発光する属性です。どうしても影の形がきつくなるようであれば、エミッシブによる調整を可能とするためです。
しかしエミッシブは自己発光色なため、やりすぎるとライティングの意味がありません。今回の絵では軽く明るさを保つために外部から"0.05"という僅かな値だけを与えています。これもレベルの中の環境に合わせて設定します。外部から渡せるようにしておけばいつでも調整が可能です。
場合によってはアンビエントオクルージョンも入れる
次は服や装飾品に関するマテリアルです。
ほとんどさっきと同じようにSSSも入れながら、微妙に調整しています。一際目立つのが、"アンビエントオクルージョン"という部分です。
アンビエントオクルージョンは環境光などの光が細かく狭い遮蔽された部分にも影をつけて描画する方法です。これは実際にかける前と後で比較してみます。
とても微妙な差かもしれませんが、うっすらと影がつきました。今回はテクスチャーに描かれた影を適用しただけなので微妙ですが、アンビエントオクルージョンマップと呼ばれる専用に生成したテクスチャーを適用すれば、かなり立体的な影がつきます。
今回のようなケースでは微妙ですが、場合によっては大きな変化となります。影をはっきりとさせたいようなケースがあれば、アニメのようなキャラでも意味があります。特に髪はハッキリと影をつけたいというケースがあり、今回は髪に対してもアンビエントオクルージョンを適用しています。これで髪の影もクッキリとさせる事が出来ました。
残りのマテリアル
残りの部分ですが、目など半透明を扱っているマテリアルです。
これはシンプルで、Shading Modelも"Default Lit"とBlend Modeが"Translucent"になっているだけです。パラメーターは、ベースカラーと半透明色をそのままオパシティに渡しています。ただし、ここでもエミッシブカラーだけは調整できるようにしています。
目はアニメキャラの印象が最も目立つ部分です。時には暗く、時には光るような印象を持たせたいため、いつでも調整できるようにしています。
最後に、これが出来たからといってあらゆる環境で綺麗に可愛く見えるわけではありません。最終的にはポストプロセスエフェクトやライトの置き方にも注意する必要があり、その調整も含めて可愛く見せるように試行錯誤するという事に気を付けてください。
2015/05/11 追記
Twitterより引用。
ブログ記事にも載っけてなかったけど、ライティングの適当なプレビューシーン上でDefault LightとSubsurfaceのシェーディングモデルを使った時の影の差。ライトによる影響力が低くなっているのがわかる。#UE4Study pic.twitter.com/fc9B9ZuKTT
— alwei (@aizen76) 2015, 5月 11
こうしてみるとやはり差は大きいですね。
謝辞
今回は様々な検証のために様々なものを使わせていただきました。
まずは踊っていただいたレーシングミク2015を作っていただいた、Digitrevxさんや楽曲やモーションの方々に感謝。(詳細は冒頭の動画の中にて)
そしてMMDモデルをFBXに変換するためのMMD4Mecanimの中のpmx2fbxの作者のNoraさん。
更にモーフのインポートに困っていた時にUE4のPMX&VMD変換プラグインを作っていただいた黒幕さん。
※上記はUE4のプライベートリポジトリーをフォークしているため、UE4リポジトリーへのアクセス権がないと見れません
他にも様々な苦労がありましたが、ここまで完成できたのはWeb上で様々なモノを公開してくれている方々のおかげです。
改めてありがとうございました。