見出し画像

ライティング💡の話(Unity学習15回目)

(約 2,800文字の記事です。)

このテーマはかなり深い。Unityなどのゲームエンジンに限らず、目に見える作品を作るならば避けて通れないほどのテーマだ。静止画だろうが写真だろうが、当然映画やアニメーションでも、目に見えるもの=可視光線なわけだから。

とはいえここではそういう一般論はなしにして、Unityというゲームエンジン特有の話になる。厳密にはUE4にも共通するので、ゲームエンジン特有の光りの扱い方、ということになるが、Unity学習中なのでUnityの話になる。

影=光を演算するということ(制限時間)

とは言ってもまずは比較対象のBlenderのCyclesの話から。以下のようにじっくり光を計算するのがCycles。影のフチのにじみや物体表面の質感表現など、誰でも簡単にフォトリアルな結果を手に入れられるのがCyclesの強み。

画像3

白い床に緑色が反射した影もリアルだろう。ノーマルマップによる疑似凹凸もそれっぽく見えるだろう。だがこの品質を1秒間に30枚も出せるはずがない。Blender作業中の絵はEeveeなのでここまでリアルではなくて、この画像はCyclesのレンダリング結果だ。確かに美しい。(だが逆にセル画調のレンダリングが苦手なのだ。3DCGくさい変な絵が出てくる。)

静的・動的ライティング

では静的ライティング、動的ライティングって何?となると、これ、実はゲームエンジンのように「短い時間の限られた時間内にそれっぽい絵を作り出すための工夫」なのだ。ゲームは例えば1秒間に30枚~120枚の絵を作り出す必要がある。ホント一瞬のうちに次の絵を作り出さなければならない。BlenderのCyclesのように1分待って、とは行かない。

静的ライティング、これ、BlenderのCyclesでは聞かないと思う。それもそのはず、Cyclesでは演算時間をたっぷり確保して光の経路を計算するので、待ちさえすればかなりリアルな演算結果を手に入れられるわけだから、シンプルで分かりやすい。これは間違いない。

だからこそBlenderの作例ではやたらとフォトリアルな絵や動画が多い。それこそが強みだからだ。だがそこに弱点もあると私は感じている。フォトリアルな静止画または動画以外で何ができるのか(アウトプットできるのか)?という根本的な問題。そんなにフォトリアルが重要か?

なのでそういう限られたレンダリング時間内で光の演算を終わらせるために、事前に計算しておけることは計算しておいて、データを読み込むだけで終わらせようという仕組み、これが静的ライティングだ。

逆にEeveeのように計算で高速に影を求めるのが動的ライティング。

ゲームエンジンではこの静的・動的ライティングによって、ハッキリ言って面倒臭い。ライティングに関する学習量が一気に増える。そして限られた時間内で「それっぽく」絵を作るがゆえに、影のでき方が不自然だったりカクツキがあったりと、色々と犠牲になっている部分もある。

そこを何とか上手くやっているのがUE4なのだが、これにはこれでまた面倒な仕組みを駆使して「何とかかなりそれっぽい絵」を作り出す仕組みがてんこ盛り。それがUE4だ。

Unityはある程度妥協している分、軽いのだが、リアル志向で観察すると厳しい絵が多いのも事実。今後のHDRPの画質向上に期待。

さて、基本に戻って学習メモ。

静的ライティング=ベイク=ライトマップの生成

ま、要するに「影も含めてテクスチャにしちゃえば?」という考え方。なので背景の建物だとか電柱だとか、絶対に動かないものはこれで事前に影情報を求めてマップ化しちゃえば?という発想。

だから動かない前提なので、動く物があっても影ができない。影を演算しない。影はマップとして固定されている。動かない物体専用の影情報だから。

画像2

左側の不思議な絵。照明範囲と主な影は固定されている。反対の画像右側はダイナミックライトなので、リアルタイムで影を演算している。

厳密にはどちらも直接光の影だけはリアルタイム演算。静的ライティングでは光の影響+間接光の影がライトマップに焼き付けられているわけだが、あまり気にしなくていい。

じゃあ全部ダイナミックがいいのかとなると、そうとも言えない。電柱の影を見て欲しい。右側のダイナミックライトは間接光であってもセル画のようにくっきりハッキリした影になる。そして影が少し薄い。

対して左側の静的ライトは間接光の影のフチがリアルにぼやけている。また影の濃さも周りの闇の濃さと一致している。

画像1

動く物体が通過するとどうなるかというと、影だけじゃなくてディフューズカラー(地の色)もまた見えない。真っ黒な球体。

こんな感じで、静的・動的ライティングで差はある。BlenderのCyclesは前者寄りなので演算時間がかかる分、かなりリアルになる。一方でゲーム内で動く影は後者なので、よく見ると影はくっきりハッキリした影になっていると思う。お好みのゲームでご確認下さい。

もちろんこの静的ライティングの弱点を「ライトプローブ」なる仕組みで緩和することができる。だがそれでもごまかし程度であって、映画を作るための3DCG動画を作るというようなことは絶望的に難しい。ゲームエンジンは常にフレームレートを出せることが前提で設計されているのだから、しょうがない。

セル画(トゥーンシェーダー)の絵作りには無関係

ただしリアル志向ではなくてセル画(トゥーンシェーダー)のような絵作りとなれば話は別だ。くっきりはっきりが逆に好ましい上に、そもそも最初から厳密な光の演算は誰も求めていない。むしろ感覚重視で情報の丸め込み技術のほうが重要なわけで。

とはいえUnityの基礎として最低限は知っておくべきなのでチュートリアルを進める。次は反射プローブの話に進む予定。

こんな感じでゲームエンジンにはゲームエンジン特有の仕様がある。UE4を少しかじっていたのですぐに分かる部分も多かったが、振り返ってみるとやはりUE4よりもUnityのほうがラーニングパスが丁寧で分かりやすい気がする。


今回の創作活動は約1時間30分(累積 約2,765時間)
(755回目のnote更新)


筆者はAmazonアソシエイト・プログラムに参加しています。(AmazonアソシエイトとはAmazon.co.jpの商品を宣伝し所定の条件を満たすことで紹介料をAmazon様から頂けるという大変ありがたい仕組みのこと。)
以下のリンクを経由してAmazonでお買物をするとその購入額の1~3%ほどのお小遣いが私に寄付されます(笑)以下のリンクを経由して頂ければ紹介商品以外のご購入でもOKですよ~。



読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊