夜のインテリアシーンを使ったレンダラ比較

難しいとされる夜のインテリアシーンを

Cinema 4D フィジカル
Corona Renderer
Octane Rneder

にて比較してみました.レンダリング時間についてはハードウェアやレンダラの設定次第で長くも短くもできるので参考にはならないと思いますが,一応書き留めておきます.

なお,検証に使ったCPUは16コアでGPUレンダラについては1080Tiを使用しています.

レンダラとは

簡単に言うと3Dで作成したシーンを一枚の絵として書き出すためのものです.多くの3DCGソフトはレンダラを最初から搭載しているので,特に意識せず使用できるわけですが,プラグインとして使用できる高性能なレンダラも数多く存在します.

Cinema 4DではCPUベースの標準レンダラ,フィジカルレンダラ(Advanced Render)に加え,GPUレンダラのRadeon ProRenderも搭載されています.(Cinema 4Dのグレードにより機能制限あり)

サードパーティのレンダラは以下のようなものがありますが,すべてがCinema 4D R20に対応しているわけではありません.

Arion Render
Arnold Renderer
Corona Renderer
Cycles4D
Indigo Renderer
Iray
Keyshot
Lux Render
Maxwell Render
Octane Render
ProRender
Redshift
Thea Render
U-Render
V-Ray

これでも一部ですが,多いですね.どれもがそれぞれ特徴を持っています.どのサイトに行ってもサンプル画像は非常に綺麗です.

どのレンダラを使えばよいのか

Cinema 4D純正のAdvanced Renderでも十分綺麗な絵を出すことができます.もし思うように綺麗な絵が出なくてレンダラの変更を検討されている場合,他のレンダラを使って綺麗な絵が出るかというとそうでもないと思います.絵の綺麗さだけで言うとレンダラの問題ではなく,マテリアルやライティング,レンダリング設定などの知識が不足しているためです.

レンダラを変更する理由は,メモリ効率が良い,スピードが速い,設定が楽,パーティクルをレンダリングできる,などといった理由の方が比重が高いと感じています.また,仕事内容によってレンダラを使い分けている方も沢山いらっしゃると思います.

Advanced Renderひとつとっても,仕事によってはGIを使用せずに非常に早くレンダリングした画像をコンポジットで修正するケースや,GIを使った比較的長めのレンダリング時間でリッチなライティング効果を表現するなど,使い分けができます.また,Advanced RenderはCinema 4D純正レンダラなので当然ながらCinema 4Dとの親和性は高く,サードパーティレンダラでは難しい表現も簡単にできてしまうこともあります.

Advanced Renderのスピード

Cinema 4DのAdvanced Renderのスピードは遅いのか(たまに聞かれる),という問いに対しては単純に回答するのはとても難しく,答えはYesでもあり,Noでもあります.スピードに関しては他と比べると標準的だと思うのですが,設定次第で早くも遅くもなります.スピードが遅いと感じている場合,改善するためにレンダラがどの部分で遅くなっているのかを理解する必要があります.そうしなければどのパラメータを調整したらいいのかがまず分かりません.分からない場合,さらに適当にいじってしまうという悪手を誘発してしまうこともありますが,これはどのレンダラでも当てはまります.

より高性能なPCを使うという選択肢も当然ありですが,それよりも前にしっかりとマニュアルを読んで理解を深めることが大切だと思います.マニュアルに書いてある専門用語はGoogleで検索すれば大体のことは解決します.

レンダラについて知識がついてくると,レンダリングしようとするシーンが簡単なのか難しいのか,または特定のどの部分が難しいのかが分かるようになりますし,そのための設定値もだいたいつかめてきます.

これから紹介する画像のレンダリング時の解像度は2400*1600と1200*1600で統一していますが掲載画像は少し小さくしています.また,ライトの強度も同じではないので,明るさや色味,影の出方など若干異なります.

Advanced Render (Cinema 4D標準) (CPU)

ノードマテリアルの検証用に作成したシーンでしたが,せっかくなのでこのシーンを使います.レンダラはCinema 4Dのフィジカルです.

プライマリ: QMC
セカンダリ: イラディアンスキャッシュ

の組み合わせです.リファレンス用に高品質な画像を作ろうということで,プライマリにQMCを使うという思い切った設定にしています.当然ながらレンダリング時間はかなりかかりました.マニュアルによるとQMC+イラディアンスキャッシュの組み合わせはQMC+QMCよりもレンダリング時間がかかるというようなことが書かれていましたが,シーン設定により異なるでしょう.

私の場合はCinema 4Dでは基本はイラディアンスキャッシュを使用していますが,サンプルやレコード密度を調整したり,コンポジットタグであれこれGI設定を変えてもアーティファクトが解消しにくい場合はQMCで行うこともあります.

それにしても思ったよりもずっとレンダリング時間が長くなってしまいました.

20181227-1

20181227-2

気になるレンダリング時間ですが,1枚目(元画像は2400*1600pixel)は一台で計算して24時間,2枚目(元画像は1200*1600pixel)は23時間(被写界深度(DOF)あり)です.そんなにかかるの?と思われるでしょうが,高サンプルでQMCを使って夜のインテリアシーンだとこんなものじゃないでしょうか.DOFを綺麗にするためにはより高いサンプリング品質も必要です.

Advanced RenderでQMC+イラディアンスキャッシュで20時間以上かかるこのシーンをほかのレンダラはどのくらいのスピードでレンダリングできるのでしょうか.

ちなみにイラディアンスキャッシュ+イラディアンスキャッシュを使用した画像も記事の最後に掲載していますので,よかったら最後まで読んでみてください.

Coronaでレンダリング (CPU)

Corona Rendererは建築ビジュアライゼーションで定評のあるレンダラです.3ds MAX版はすでにVer 3がリリースされており,最近ArchiCADプラグインのアルファ版がリリースされました.やはり建築業界でシェアを伸ばしてきているようです.Cinema 4D版はまだ正式リリースはされていませんが,しかし少しずつ開発が続いており現時点ではCorona専用ノードマテリアルも使用できるようになっています.このノードシステムがなかなか良いのですが,この話はまた別の機会にでも.

Corona RendererはCPUレンダラで,レンダリング手法はパストレーシング,またはUHDキャッシュの2つから選択できます.UHDキャッシュというのがかなり賢いようで,難しいインテリアシーンでも設定値の試行錯誤をほとんど必要とせず,またアーティファクトの問題が発生しないような印象があります.

デノイザーやトーンマッピングも搭載していますし,建築シーンでは重要となるライトコントロールやAOVsも強力です.ヘアレンダリングもできますよ.

Corona Rendererの全機能リストです.

https://corona-renderer.com/features/features-full-list

肝心のレンダリング時間ですが,30分ほど計算させました.UHDキャッシュモードのフルバウンスGIでSampling balanceもデフォルト設定です.デノイザーのおかげでノイズは30分程度でかなり無くなります.Corona Rendererのスピードと品質のバランスは非常に良いと思います.ペンダントランプのガラスシェードのノイズが収束するまでにはより多くの時間が必要だと感じました.

20181230_corona1_30min

この画像で約30分+デノイズをかけた状態です.

20181230_gaming_room_corona_8h43m

上の画像は8時間ほどレンダリングしたものです.被写界深度(DOF)を使わなければ30分+デノイズで十分な画像は得られます.DOFのようなボケを真面目に計算するとレンダリング時間は大幅に伸びてしまいますが,これは大体どのレンダラでも一緒です.

20181230_gaming_room_corona2

DOF以外の部分は30分でも結構綺麗な状態になります.これはデノイザーが効いているためです.2時間かけてもボケ部はザラツキが残ります.

Octaneでレンダリング

OctaneはGPUレンダラーなので,レンダリング時間やレンダリングできるシーンの大きさは完全にGPU性能に依存します.テストでは1080Tiを1枚使用です.Octaneのレンダリングモードは

Directlighting
Pathtracing
PMC
Infochannel

から選択でき,GIは「Pathtracing」か「PMC」で使用できます.PMCは主にインテリアシーンで小さな光源やコースティクスのあるシーンで使用するモードとされていますが,Octane公式フォーラムを見るとスピードや品質に関してはPathtracingと比べて意見が分かれているように見受けられました.あとOctane4で搭載されたデノイザーはPMCではまだ使用できませんので,今回はPathtracingを使用しています.

20181230_6_gaming_room_1_octane

上の画像のレンダリング時間は26分です.デノイザーはかけています.

20181230_7_gaming_room_1_octane_hikaku

デノイザーがかかっていないと,画像左のような状態(Coronaも大体似たような状態)です.これをデノイザーなしで綺麗にしようとすると,レンダリングにもっと時間をかける必要があります.

20181230_8_gaming_room_2_octane

上の画像はレンダリング時間16分+デノイズした状態です.レンダリングを早く切り上げすぎたのか,デノイザーの設定がちょっと乱暴だったのか,少々ディテールが飛んでしまいました…

さすがに早いですね.しかしGPU性能に依存している点を忘れてはいけません.数万ピクセルの画像をレンダリングしたり,高解像度のテクスチャを使用するにはそれなりのGPUが必要になります.また,デノイザーはより多くのGPUパワーを必要とするため,レンダリングは終わったもののデノイザーがGPUのメモリ不足で適用できない,といった問題が出ることもあります.

現在のハードウェアの限界点も把握しておいた方がよいので,日ごろの練習やテストはやはり大切です.

Advanced Renderで時間短縮に挑戦

CoronaとOctaneでレンダリング時間だけ見ると相当早いなというか,Advanced Renderがめちゃくちゃ遅い印象じゃないでしょうか.ただし,この二つはデノイザーを併用している恩恵もありますし,Advanced Renderは品質は高いが遅い設定にしたためです.

他のレンダラもやってみようかと思いましたが,マテリアル変換がしんどくなったのでこの辺で終了.サードパーティレンダラを使うということはそのレンダラ専用のマテリアルを作る必要があるのが難点の一つです.

V-Ray,Arnold,Redshiftなどもあるので,興味があればまずはデモ版を入れて試してみるのが良いです.

最後は,Cinema 4DのAdvanced RenderではQMCを使って20時間以上かけた最初の画像をレンダリング設定を詰めて早くしてみました.

次の画像はプライマリ,セカンダリともにイラディアンスキャッシュを使用して2時間30分です.うまく短縮させるにはテストレンダリングする過程でどこに問題があるのか見極める必要があります.このシーンでは壁と天井の左上あたりのアーティファクトがなかなか取れないので,全体のサンプル値は押さえて,壁と天井にコンポジットタグを適用し,タグのGI設定でストカスティックサンプルの倍率とレコード密度の比率をあげることでその部分のみ計算精度を上げています.逆に特定のオブジェクトだけ計算精度を下げることもできます.このようにすれば無駄にイラディアンスキャッシュの計算をすることもありませんし,時間短縮できます.

とはいえ,今回テストしたCoronaやOctaneと比べるとスピードでは地力の違いもあり,見劣りします(デノイザーがやはり強力です)ので,より高性能なレンダラが必要だと感じたのであれば,サードパーティレンダラを使用したり,またはハードウェアを変更する方が作業効率も良くなると思います.

20181227-1_AR_2h30m

こちらはイラディアンスキャッシュ+イラディアンスキャッシュで2時間30分.

ノードマテリアルに関する使用上の注意

Cinema 4DもR20からノードマテリアルを搭載しています.便利で強力な機能ですが,初学者にとっては少し混乱を招くことになる点があります. テストでインテリアシーンを作ったので,ノードマテリアルを使うときの注意点を紹介したいと思います.

ノードマテリアルが追加されたことにより,Cinema 4Dでマテリアルを作成する時,標準マテリアルかノードマテリアルを作成するかを選択できるようになりました.(特殊なシェーダは除いています.)

20181222_5

標準マテリアル

標準マテリアルはマテリアルマネージャの

新規標準マテリアル
新規PBRマテリアル

から作成できます.

PBRマテリアルについて

PBRマテリアルは標準マテリアルと同じですが,デフォルトの設定が異なります.〈カラーチェンネル〉がオフになっていて,〈反射チャンネル〉の中に「拡散反射レイヤー」が作成されていますが,これがカラーの代わりになっています.しかしこれはカラーを使わずに「反射する色」で色を計算する仕組みで,現実的な光の振る舞いに近いですが〈カラーチャンネル〉を使う場合と比べて基本的には計算時間が長いというのが現状です.(Cinema 4D標準レンダラ,フィジカルレンダラ使用時)

また,反射色で計算するので,マルチパスで〈マテリアルのカラー〉が出てきませんが,インターフェイスは標準マテリアルと同じなので,〈カラーチャンネル〉をオンにして〈拡散反射レイヤ〉をオフにすることもできます.

ノードマテリアル

新規ノードベースマテリアル
新規Uberマテリアル

ノードベースマテリアルは上記の2種類から作成できます.〈新規ノードベースマテリアル〉は最初から自分でノードを組む必要がありますが,対して〈Uberマテリアル〉はノードが内部に組み込まれた状態で,かつインターフェイスが標準マテリアルのような状態で使いやすい状態のものになっています.

この二つはノードマテリアルです.ノードマテリアルには標準マテリアルと決定的な違いがあり,それは

ノードマテリアルはカラーチャンネルがない

という点です.ノードマテリアルのインターフェイス上では必ず〈拡散反射〉を使うことになります.

デフォルト設定ではノードマテリアルを使用してマルチパスの〈マテリアルのカラー〉は出すことができませんが,〈プロジェクト設定〉にある〈ノードマテリアルでカラーチャンネルを使う〉を「オン」にすることで,〈マテリアルのカラー〉が出力できるようになります.(デフォルトでは「オフ」になっています)

20181222_8

ただし,このオプションをオンにすると,レンダリングを〈カラーチャンネル〉で行うので,レンダリング結果が変わる点も注意しなくてはなりません.

次のシーンでは壁,床,窓枠などをノードマテリアルで作成しています.

〈ノードマテリアルでカラーチャンネルを使う〉が「オフ」の場合

ノードマテリアルは拡散反射色で計算するので,レンダリング時間は長くなります.インテリアのようなシーンをレンダリングするのであれば,ほとんどの場合は「オフ」にしていないといつまでたってもレンダリングが終わらないということになります.グローバルイルミネーション(GI)の計算結果も異なります.Cinema 4D R20では拡散反射をイラディアンスキャッシュで計算する機能がまだありません.次のようなインテリアシーンをテストしました.壁,床,巾木といった箇所はノードマテリアルです.レンダリング時間は50分ほどかかっていますが,イラディアンスキャッシュを使ってもそもそも拡散反射の照度計算をしていないので,アーティファクトがないのが分かります.窓枠や窓枠下の壁など.

これはPBRマテリアルか,ノードマテリアルであればこのようになります.

20181222_3

上: イラディアンスキャッシュ計算中(真っ白ですが)

20181222_1

アーティファクトが無いのが見て取れます.

〈ノードマテリアルでカラーチャンネルを使う〉が「オン」の場合

この場合は,カラーとして計算します.GI計算も行われているので,イラディアンスキャッシュのアーティファクトも確認できます.しかしレンダリング時間は15分ほどで完了します.色味も少し異なります.入角も暗くなっています.両方ともアンビエントオクルージョンを使用していますが,こちらの方がイラディアンスキャッシュの影響もあり,より暗くなっています.

この画像ではアーティファクトを解消するために,イラディアンスキャッシュの設定を調整する必要があることは明白です.

20181222_4

上: イラディアンスキャッシュ計算中

20181222_2

このように,ノードマテリアルを使用する際は,カラーチャンネルとして計算するかどうかを検討した方がよいです.

ただし,これはCinema 4Dの標準レンダラまたはフィジカルレンダラをつかうことが前提です.サードパーティレンダラの場合はそれぞれのレンダリング手法にあった独自マテリアルを使うことになります.

それを踏まえてインテリアシーンを仕上げてみる

テストシーンではノードマテリアルを使うことを前提に作成していきましたが,色々と追加する小物アセットには標準マテリアルのものも多くあります.いくつかはノードで作り変えていますが,さすがに全て作り変えるのは時間がかかってしまいます.それにR20ではまだ標準マテリアルからノードマテリアルとの相互変換機能というのはありません.(今後実装されるとよいのですが)

ということで,ノードマテリアルと標準マテリアルが混在しているわけです.そのため,〈ノードマテリアルでカラーチャンネルを使う〉を「オン」にして,イラディアンスキャッシュの設定もしっかり行わなければいけません.

標準マテリアルとノードマテリアルが混在している場合

次の画像は右側の白い球体のみ標準マテリアル(カラーチャンネル使用)にしています.この球体は間接照明を計算するのでGI計算対象となりますが,ノードマテリアルである壁はGI計算を行うことができません.壁は鏡面(拡散)反射で描画するのみです.これでは,標準マテリアルとノードが混在している場合にライトが最初に壁(ノード)にバウンスして,その光が球体を照らすような表現ができなくなります.

ボックス左側からライトを照らしても,ノードマテリアルである壁は間接照明計算をしないので,白い球体の右半分を間接照明で照らすことができていません.混在しているとこのような問題が発生します.

20181222_6

上: 球体のみ標準マテリアルの場合,ノードマテリアルである壁からの間接照明が表現できません.

20181222_7

上: 〈ノードマテリアルでカラーチャンネルを使用〉を「オン」にすればノードマテリアルの拡散反射はカラーとして扱われます.

反射とカラーではレンダリング時間も大幅に異なります.

標準マテリアルとノードマテリアルが混在していると,カラーチャンネルを使っているその他のアセットがノードマテリアルからの間接照明を受け取ることができなくなります.したがって今作っているシーンでGIを使うなら〈ノードマテリアルでカラーチャンネルを使用〉を「オン」にするしかありません.シーン内がすべてPBRマテリアルまたはノードマテリアルであれば「オフ」のまま試してみたかったところですが…

レンダリング設定

テストシーンは夜のインテリアなので綺麗にしようとすると,かなりのサンプル数とレコード密度が必要になります.サンプル数は〈カスタムサンプル〉にして「1024」にしましたが,テストをすると光が良く当たっていない左上天井と壁回りのアーティファクトがなかなか取れそうにありませんでした.全体のサンプル数を「2048」にしても厳しい印象ですので,全体のサンプル数は「1024」に戻して,天井と壁にコンポジットタグを適用して,タグの設定にある

〈ストカスティックサンプルの倍率〉
〈レコード密度の比率〉

を上げました.これはタグのついているオブジェクトだけイラディアンスキャッシュの計算精度をレンダリング設定の数値から上げる役割がありますが,200,300,400%などして,2倍3倍しないと効果が出にくいです.

しかしそれでも天井のアーティファクトは厳しい結果となりました.やはり暗いシーンは難しいですね.ちなみに左側にあるアルコランプのシェード上部には穴が開いていて光が上方向にも少し抜ける仕組みになっているので,その光が天井を少し照らしています.

20181222_12上: イラディアンスキャッシュ+イラディアンスキャッシュの結果

これからアセットを追加して仕上げていこうかと思います.アーティファクトの解消に関しては,天井と壁だけコンポジットタグの〈強制QMCサンプリング〉を使う方法もありますが,最終的にはプライマリを「QMC」,セカンダリを「イラディアンスキャッシュ」にしようかと思っています.

X-Particles to Redqueen

Recently I purchased X-Particles (a famous particle plugin for Cinema4D ), so I test for a while. Of course, also bought Cycles 4D but it doesn’t formally support R20 at the moment ( may be scheduled for December 2018), so I will leave Cycles4D for the moment.

X-Particles have many functions particles, smoke, flame, cloth, fluid, and many modifiers. So, very powerful and flexible controllable to particles motion.

At the first, I try some basic tutorial.

And then, I wrote code convert X-Particles data to Redqueen particle. First, from X-Particles color data to Redqueen’s particle color, it was very easy and just done.

Next, the particle of Redqueen is the geometry of the sphere. Therefore, Redqueen’s material can be used as it. So, I called X-Particles shader in the material texture each component.

One problem was openVBD has not UV data, so it had to be generated internally code.

X-Particles to Redqueen from T_makoto on Vimeo.