U-Renderを試してみた

Cinema 4Dのプラグインレンダラー「U-Render」、の、新しいバージョンを試してみました。

U-Renderについて詳しくは以下のサイトをごらんください。まあ簡単にいうと、ゲームエンジンみたいなテクノロジーを使ってるので、C4Dですごく速いレンダリングができます、というレンダラーです。

本家 u-render.com

日本代理店 TMSダイレクト

今回ショートムービーなど作ってみたやつがこちらになります。後半にブレイクダウンがついてます。

このムービーの「ロボット」と背景の「遺跡」、この記事の後のほうにあるテスト動画の「研究室」の各3Dモデルは、Unreal Engineのマーケットプレイスで買ったやつをUEからFBXで書き出してC4Dに持ってきました。若干改造もしています(ロボットに生えてる苔とか)。

Brute Robot
Aicnent Temple
Abandoned Laboratory

ショートムービーのみどころ

このショートムービーは、主にSSGI機能に重点を置いてシーンを設計しました。

SSGI=スクリーンスペースグローバルイルミネーション機能は、U-Renderの2022年4月に出たバージョンで追加されました。スクリーンスペース、つまり画面に見えてる範囲内だけグローバルイルミネーション(大域照明、間接照明)が効くという機能で、Unreal Engineなんかにもついてますね。

従来U-Renderの照明関係の特殊効果はIBL=イメージベーストライティングとAO=アンビエントオクルージョンぐらいだったのですが、これにSSGIが加わったことで、今回のショートムービーのようなライトの照り返し、間接照明の動的な変化などが表現できるようになっています。

SSGIの効果についてはムービー後半のブレイクダウンを見ていただければおわかりになるかと思います。ロボットの目から出てるビーム状のライトが動くにつれて、照り返す明かりが薄暗い空間に広がっていきますが、これをグローバルイルミネーションを使わずに(つまりフェイクのライトで)表現しようとするととても大変です。グローバルイルミネーションを使った場合でも、方式によってはちらつきや明度むらが発生してうまくいかないことも結構あるので、U-RenderのSSGIはなかなかよくできているのではないかと思います。

U-Renderの照明機能

U-Renderの照明に関わる各機能について簡単に紹介します。

まずC4Dのビュー(クイックシェーディング)ではこんな感じです。そういえばC4D R26でクイックシェーディングのライトが変わっててびっくりしました。従来のデフォルトライトじゃなく、三点照明みたいなのになってますね。

C4Dのビュー表示

U-Renderの設定にある「環境」のグループでは、いわゆる「環境マップ」の設定ができます。U-Render公式で配布されてるコンテンツにHDRI環境マップがあるので、ここではそれを使っています。

U-Renderの「環境」設定

「グローバルマップ」のみ設定すると、U-Renderのレンダリングではマテリアルの鏡面反射成分に環境マップが映り込むようになります(レンダリング設定の「反射」がオフでもこれは効きます)。このシーンではライトが逆光の配置になっているので、見えてる物体の手前側は大部分が影になっています。鏡面反射成分だけだと、真っ黒な物体にテカテカが映り込むのみになります。

U-Render、直接照明+環境マップ

「イメージベーストライティング」を有効にすると、環境マップから拡散反射成分にも照明が効くようになります。真っ暗だったところが見えるようになり、物体に立体感も出てきます。とはいえ、照明効果には影がない(遮蔽されない)ので、まだウソくさいですね。

IBLを追加

「ライティング」では、アンビエントオクルージョン=AO、スクリーンスペースグローバルイルミネーション=SSGIなどが設定できます。

U-Renderの「ライティング」設定

AOを有効にするとこうなります。これだけで突然リアルになりましたね。パッと見だと、真面目なグローバルイルミネーションと区別がつきません。

ここで使っているのはAOの「グランドトルース(Ground-Truth)AO」というモードで、もうひとつの「半球AO」モードよりも正確な結果が得られます。U-RenderのAOはただ単に「入り隅を暗く塗る」というのものではなく、環境マップやIBLの効果のみ遮蔽する(直接照明には影響しない)ものだそうで、「環境」の効果と組み合わせることで擬似的な間接照明として機能します。この例のような開放的なシーンでは、環境とAOだけでそこそこリアルな結果が得られそうですね。

AOを追加

SSGIもオンにするとこうなります。先のショートムービーと違って、こちらは開放的なシーンで特徴的なライトもないのでわかりにくいですが、ロボットの足の裏とか腹のあたりが地面からの照り返しで明るくなっています。

SSGIを追加

3DCGの用途にもいろいろあり、写真と見紛うようなリアルさまでは必要ないことも多いので、だいたいこの例くらいの絵が出てくれれば十分という場合には、U-Renderは有力な選択肢になると思います。なんせこの絵だとレンダリング時間1秒未満で出てきますからね。

スクリーンスペースとオーバースキャン

U-Renderでは「スクリーンスペースグローバルイルミネーション=SSGI」と、もうひとつ「スクリーンスペース反射=SSR」でスクリーンスペースの機能が使われています(SSRを有効にするにはレンダリング設定の「反射」とマテリアルの「反射」にある「スクリーンスペース反射」の両方を有効にする必要があります)。

ゲームエンジンを使っている方はご存知かと思いますが、スクリーンスペースの機能は「画面に見えている要素を再利用する」仕組みです。つまり「画面の外にあるものは反映されない」ということです。たとえばSSGIの場合、どれだけ明るい部分があっても、それが画面の外に出てしまっていると間接照明には何の効果もありません。

その制約を軽減するための設定が「基本」にある「レンダリング解像度オーバースキャン」です。レンダリングの際に、内部では「レンダリング出力解像度」よりも外側まで計算することで「スクリーンスペース」が拡張され、より広い範囲まで効果が届くようになります。計算される解像度が出力解像度よりも大きくなるぶんレンダリング時間も長くなりますが、これがかなり効果的に働く場合もあります。

U-Renderの「基本」設定

この「オーバースキャン」が特に効いてくるのは、カメラが動いて視野が変化するような場合です。視野が変化すると、画面(=スクリーンスペース)に収まる範囲も変化するため、SSGIやSSRが明るくなったり暗くなったりします。

オーバースキャンの効果を検証する動画も作ってみました。

オーバースキャンなしだと視野の変化に伴うSSGIやSSRのパカつきがものすごいですが、オーバースキャン50%ではだいぶマシになっていると思います。

いっぽうで、明るい領域が他のオブジェクトによって遮られているような状況では、オーバースキャンの効果はありません。後半の研究室のシーンでドアをくぐって部屋に入るところなどは、間接照明が急に変化しています。

オーバースキャンを使ったとしてもSSGIに反映されるのは前方のみなので、室内のシーンでは全体的に明るさが不足することになります。イメージベーストライティングを併用すれば全体をなんとなく明るくすることはできますが、真正のグローバルイルミネーションのようなリアルさは望めません。

また、SSGIに比べるとSSRのほうが視野の変化によるパカつきが激しいようです。SSGIと違ってスムージングがかかってないからだと思います。SSRのほうはレンダリング設定の「反射」にあるオプションを状況に合わせて調整する必要もありそうです。

U-Renderの「反射」設定

ほんとに速いのか

で、U-Renderはほんとに速いのか? って話ですが、場合によるというか、作業のどの部分でスピードを求めるかということにもよるかと思います。

フレームあたりのレンダリングスピードはかなり速いので、動画の出力待ちの時間は短くなります(冒頭で紹介したショートムービー本編部分のレンダリング時間は2時間半ぐらいでした)。この点では速いといっていいと思います。

作業のレスポンスの快適さという点では、若干難ありかもしれません。レンダリング設定が軽いうちは、ライトやマテリアルをいじっても即座にレンダービューに反映され、まさにリアルタイムで結果が見られるのですが、設定をリッチにしていくとレンダービューの更新に時間がかかるようになります。ひどいときはC4D自体の操作がガクガクになるので、リアルタイムのレンダービューを使うのは実質不可能になります。僕が上記のショートムービーを作ったときは、レンダリング設定を軽いプレビュー用とリッチな本番出力用で使い分けるとかでなんとかしました。

NPRは?

2022年4月のバージョンではNPR(ノンフォトリアリスティックレンダリング、いわゆるトゥーンレンダリング)の機能も追加されています。こちらもちょっと試したのですが、テクスチャの反映のされかたが一般的なトゥーンレンダリングと違っていたり、オブジェクト単位の個別設定ができなかったりと、まだ発展途上といった感触でした。U-Renderはわりと速いペースで機能追加されているようなので、今後に期待しています。