位置合わせツール,その他のプラグイン

以前Twitterで投稿してみた位置合わせツールを少し拡張しました.

以前投稿した時の動画

この時はオブジェクトの位置を任意のオブジェクトへ移動させるにとどまっていました.標準の転写ツールに似ていますが,軸位置や中心部,バウンディングボックスの最小,最大を,移動させたいオブジェクトとターゲットオブジェクト両方に指定できるようにしています.また,角度とスケールも各軸ごとに設定できるようにしています.少数ですが何名かの方から良いフィードバックを頂けました.

Cinema 4Dは階層でオブジェクトを管理するので他のソフトから乗り換えた方には少し戸惑う部分なのかもしれません.

その後,もう少し手を入れて,軸のみを任意のオブジェクトの場所に移動させる軸モードも追加しました.あとインターフェイスも少し改良しています.

現在のバージョン

20190219

他,マテリアルリンクが切れたテクスチャタグを一括消去したり,オブジェクトのポリゴン選択範囲タグをまとめて選択するスクリプトをプラグイン化しました

プラグインを書くのも意外と楽しいものだと感じ始めているところです.

 

thinkingParticles 3: パーティクルを消す

前回,放物線を描くパーティクルを出しました.このパーティクルはライフタイムが経過するまで表示されます.

ディフレクタにヒットしたら消える

今回はシンプルにディフレクタにヒットしたら消えるようにします.ディフレクタを作成したら,TPとスペースワープにバインドを行っておきます.この時点ではまだパーティクルは突き抜けます.

20190128-6

ParticleDieを使う

新規ダイナミックセットを作成し,Delete_particlesに名前を変更しておきます.このセットにはパーティクルグループ(blue),ParticleDieノード,StdCollisionノードを作成します.バインドしていればStdCollisionのInactiveにDeflectorがあるので,Activeにしておきます.このOutputをParticleDieのONポートに接続します.blueとParticleDieも接続します.これでディフレクタにヒットしたらParticleDieがオンになり,パーティクルが消えました.

20190128-7

今回は短いですがここまで.ParticleDieは今後よく使うことになりそうです.

thinkingParticles 2: 放物線とパーティクルグループの変更

パーティクルグループの準備

今回は二つのパーティクルグループを扱うので,最初にグループを二つ作成し,redとblueという名前にしておきます.それぞれのグループのカラーを赤と青に変えておきます.

パーティクルを斜め上に真っすぐ飛ばす

ダイナミックセットを作成して名前をGererateに変更します.中にGeneratorのBornノードとOperatorsのStandardからVelocityノードを作成します.Bornはデフォルトで原点からパーティクルを発生しますが,まだパーティクルはその場にとどまるだけなので,Velocityノードのパーティクルに接続します.Velocityは速さと向きを定義できます.Speedを100,Directionを0,1,1とするとちょうど斜め上にパーティクルが飛んでいきます.また,BornノードはパーティクルグループがAllになっているので,redに変更しておきます.赤いパーティクルが出てきますね.
20190128-1

重力をつくる

重力はMAXのフォースから重力を下向きに作成して,GravityとTPをスペースワープでバインドを行います.重力の強度は適当に設定します.
新規ダイナミックセットを作成して名前をForceにして,中にAllグループと,StdForceノードを作成し,Particleポートを繋ぎます.StdForceはスペースワープにバインドしたのでDeactive ListにGravityが追加されているはずです.これをActiveにすれば重力がAllグループ,つまりすべてのパーティクルに作用します.
redグループのパーティクルが放物線を描いて落ちていく.
20190128-2

パーティクルグループを変える

今回はパーティクルグループをredグループからblurグループへ途中で変えてみます.新規ダイナミックセットを作成して名前をChange_groupに変更します.
この中にredグループ,Groupノード,PatricleAgeノードを作成しておきます.O redからO GroupへParticleを接続します.O GroupのGroupをblueに変更します.
さらにParticleAgeのParticleポートへO redを接続し,OutポートからO GroupのONポートへ接続します.この時,PatricleAgeのパラメータはRelativeにしてTime1を50,Time2を100としておきます.Relativeはスカラー値なので50にした場合,パーティクル寿命のちょうど中間地点でTrueが出力されるので,そこでblueグループのパーティクルに変更されます.Absoluteだと時間のようです.
パーティクルが途中でredからblueに変わりました.
20190128-3

風を追加してTurbulenceを入れる

重力と同じ手順でフォースの風を追加,バインド,Activateします.Turbulenceの数値を少しあげて乱流をつくりました.他,重力やBornのパーティクル数も変えてみます.
20190128-4

red,blueグループのシェイプも作ってみる

StdShapeは前回使ったので,今回は実際のジオメトリをパーティクルとして飛ばしてみます.シーンの中にキューブと球体を作っておきます.
新規ダイナミックセットを作成し,名前をShapeにします.中にred,blueのグループノードを作ります.さらにOperatorsカテゴリからShape→GeomInstanceノードを二つ作成して,それぞれのグループのParticleポートを接続しておきます.GeomInstanceのパラメータにPick Objectを使ってシーン内のキューブと球体を各GeomInstanceノードに設定しておけば,redはキューブ,blueは球体といった具体でシェイプを定義できます.途中でグループが変わるとメッシュも入れ替わります.
20190128-5

thinkingParticles 1: パーティクルの出し方

3ds MAX用プラグインのthinkingParticlesの学習記録を残しておこうかと思います.

thinkingParticlesとは

thinkingParticles(以下TPとする)は3ds MAX用のパーティクルプラグインです.パーティクルは粒子のことですが,3DCGでいうパーティクルは意味合いがかなり広くなり,粒子を出すだけでなく,多数のオブジェクトを効率よく動かす方法として用いられます.
TPはその中でもプロシージャラルワークフローにより,パーティクルの動きを制御することができます.
また,プロシージャラルにより多くの動作を自動化させることも可能です.例えば他のオブジェクトにトリガーを仕込み,オンになるとパーティクルが発生する,またそのパーティクルがさらに他のオブジェクトのトリガーとなる,などということも可能です.自動化されることにより,アニメーションの修正の効率もよくなるというわけです.
というようなプラグインですが,簡単に使えるような代物でもなく,かなり勉強が必要だなと思います.私も全くの初心者でこれからしっかり勉強していこうかと思ったわけですが,備忘録として記録をのこしておこうかと思います.
MAX,TPに関しては全くの初心者なのでいろいろ間違いを書いてしまうと思いますが,この点はご勘弁ください.
ちなみにこの記事ではパーティクルを出すだけで終わってますが,TPは映像で広く使われていまして,極めていけばこんなものまで出来てしまうという代物ですね.シン・ゴジラのビル破壊にも使われているのは有名な話かと.


TPオブジェクトを作成する

最初にTP用インターフェイスを使うためにThinkingオブジェクトを作成します.これはParticles SystemのThinkingから作成します.シーンにTPオブジェクトを作成し,選択したら修正パネルからThinkingのプロパティか,Shift+Alt+Pでインターフェイスを開きます.
20190127-1 20190127-2
TPのインターフェイスを開く.このインターフェイスでパーティクルを作ったりアニメーションを作っていくことになります.
20190127-3

TPはグループとダイナミックセットを組みあわせて使う

またパーティクルは出ません.
TPはパーティクルグループとそのアニメーションを作るダイナミックセットを作成してくことになります.
パーティクルグループはデフォルトでAllがあり,これはすべてのパーティクルグループとなります.TPはグループから別のグループにアニメーションを変化させながらヒストリを作成していくようなイメージでしょうか.複数のグループは親子関係にすることができます.
パーティクルグループに新規グループを作成し,Particleと名前をつけておきます.パーティクルグループは分かりやすいようにカラーも変えておいた方が良いですね.ダイナミックセットも新規に作成し,Generateと名前をつけます.
GenerateにPosition Bornを作成してアニメーションを再生すれば,原点からパーティクルが出現します.TPの位置ではないんですね.Position BornのGroupがAllになっていたら,Allグループのパーティクルとなり,GroupをParticleグループに変更すれば,そのパーティクルはParticleグループのものとなります.カラーを変えておけばビューポートの色も変わりますね.
20190127-4

StdShapeノードを使ってみる

パーティクルは出ましたが,まだレンダリングしても何も出ません.この時点ではパーティクルのシェイプを定義していないためです.
シンプルなキューブにしてみましょう.新規ダイナミックセットを作成してShapeという名前にして,中にStdShapeノードを作成します.ここでGroupノードからParticleグループノードを作成し,パーティクルをStdShapeノードのパーティクルに渡します.StdShapeパラメータのシェイプタイプをCubeに変更すればParticleグループからキューブが出てきます.
20190127-5

フォースを使って動きをつける

風や重力などはMAXのフォースを使うことができます.風を使いたい場合は,先に風オブジェクトを作成して,さらに風とTPオブジェクトをスペースワープにバインドをしておきます.
TPインターフェイスを開き,またダイナミックセットを作成し名前をForceとします.ダイナミックセットは一つの中で作っても良いのですが,役割ごとに分けておくのが良いみたいです.複雑になってきた時に管理しやすいのだと思います.
Forceの中にDinamicsからStdForceノードを作成し,こちらも同じようにParticleグループノードを作成し接続します.しかしまだ風は動作しません.
StdForceノードを選択すると,先にスペースワープにバインドをしたのでDeactie ListにWindがリストされていますね.Windを選択してActivateすると風が機能します.
20190127-6

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

20181227-2

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

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分.