X-ParticlesとRedshiftで炎を作る。
今回はX-Particlesで作った炎や煙をRedshiftでレンダリングしてみたいと思います。
この映像の炎はCineam4Dとプラグインの「X-Particles」の「xpExplosiaFX」を使い、
「Redshift(テスト版)」でレンダリングしています。
少々ややこしいのは、
この炎はCinema4Dの標準レンダラーではレンダリングできるものの、
外部レンダラーのRedshiftではそのままレンダリングは出来ません。
今回は、その工程を覚書として残したいと思います。
「標準レンダラー」や「外部レンダラー」って何?という人はまず先に
→こちらをご覧ください。
□レンダリングまでの流れ
「xpExplosiaFX」で作った炎や煙は一旦「OpenVDB」というファイルに書き出して、
これをRedshiftで読み込んでRedshift用マテリアルをつけてあげることで
RedShftでレンダリングが可能となります。
文字で書くと長くて面倒くさそうですが、実際に試してみるとそんなに難しくはありません。
では進めていきましょう。
※X-ParticlesとRedshiftのインストールについては割愛します。
■まずは標準レンダラーでレンダリングするまで
①最初に「X-Particles」のオブジェクト、「xpExplosiaFX」を配置します。
このオレンジ色の範囲内のみに炎や煙が描写されることになります。
②次に「炎や煙の発生元となるオブジェクト」を配置します。
③発生元のオブジェクト(球体)に右クリックで「X-Particlesタグ」→「xpEFX SourceTag」をつけます。
④再生してみると煙が出ます。
⑤しかし、レンダリングしても発生源の球体しか表示されません。
何故なら必要なマテリアルをつけていないからです。
⑥「作成」→「特殊マテリアル」→「X-particle Gaseous」をクリックして、マテリアルを作ります。
⑦マテリアルを「xpExplosiaFX」にドラッグしてつけます。これでキチンとレンダリングできました。
⑧そのままではあまり面白くないので、「スプライン」→「らせん」を配置し、
発生源の球体を右クリックして「スプラインに沿う」タグをつけます。
⑨「パススプライン」に「らせん」をドラッグアンドドロップします。
「スプライン上の位置」を0フレームで「0%」、90フレームで「100%」にしてキーフレームを設定します。
これで、「らせん」の形に合わせて球体が炎を上げながら動くようになりました。
※端が切れてしまう場合は、「xpExplosiaFX」のサイズを大きくするか、「らせん」を小さくして調整します。
■Redshiftでレンダリングする
※これまでに作ったオブジェクトは引き続き使います。
①「Redshift」の「RenderView」を立ち上げます。
Redshiftでレンダリングしてみると、また発生源しか表示されません。
Redshiftではこのままだとレンダリングできないのです。なので、まずはキャッシュ=「OpenVDB」を作ります。
②「X-Particles」の「xpCache」を配置します。
③「オブジェクト」タグの「EFX Format」を「X-Particles」から「OpenVDB」に変えます。
「Folder」に、VDBファイルの保存先を指定します。
(今回は300MB程度ですが、内容次第でギガ単位となるので余裕のある場所に保存しましょう)
※注意!
ここで最初の落とし穴があります。
VDBファイルの保存先は日本語が入らない様にして下さい。
DドライブやEドライブ直下に「xpCache20200316」などであれば問題ありませんが、
「キャッシュ3月16日」とかにしてしまうとうまく保存されないことがあります。
「Build Cache」をクリックすると書き出しが始まります。
完了したら、緑のアイコンが赤に変わります。Cacheの完了=VDBデータ完成です。
次はRedshiftでこのデータを読み込みましょう。
④「Redshift」→「Objects」→「Redshift Volume」を配置します。
「Redshift Volume」の「オブジェクト」タグの「Path」に先ほどキャッシュしたVDBファイルを指定します。
「Display」の「Preview」を「off」から「Points」にします。
「Maximum Points to Display」を10から100ぐらいにします。
この数値が高い程プレビュー画面の視認性が上がりますが、処理も重たくなります。またレンダリングには無関係です。
さて、このままでは最初のフレームしか描写されません。
次は「Animation」のタブをクリックし、
「Mode」を「Simple」にします。繰り返したい場合は「Loop」や「Ping-Pong」を選びます。
Start FrameとEnd Frameに値を打ち込みます。
0から90フレームのプロジェクトなので、Startを0、Endを90としてしまいたいところですが…。
※注意!
ここが2つ目の落とし穴です。
「Start Frame」を「0」にしてしまうと、
Redshiftでレンダリング時にエラー画面が現れます(一応レンダリングはしてくれますが)。
「OpenVDB」のデータを見てみましょう。
00001からはじまり、00090で終わっています。
(ネットからダウンロードしたVDBデータでは0から始まるものもあります)
なので、今回Startは「1」が正解なのです。
ちなみに、「Detect Frames」をクリックすると、自動的に設定してくれます(笑)
そこまで終わったら再生してみます。無事表示されました。
点描みたいなのが「OpenVDB」によって描かれたものです。
ただし、レンダリングしてみるとまだ表示されません。
標準レンダラーでマテリアルをつけたのと同様に、今度はRedshift用のマテリアルを付けます。
⑤UI左下のマテリアルマネージャから「作成」→「Redshift」→「Materials」→「Volume」をクリック。
現れたマテリアルをダブルクリックします。
「Scatter」のChannelの隣のボタンをクリックして
「Redshift Volume」→「density」を選択。
「Emission」のChanelの隣のボタンをクリックして
「Redshift Volume」→「fuel」を選択。
「Emission Remap Ramp」の隣のボタンをクリックして「プリセットを読み込み」で「Flame1」を選びます。
マテリアルを「RedShift Volume」に付けてレンダリングすると、無事にレンダリングできました。
⑥さて、最後まで再生してみましょう。
私の環境では、このようなプレビュー画面になりました。
アレ?元の動きと重ならない!位置や角度が違う!?なにかミスした!?
※注意!
これが3つ目の落とし穴です。
「らせん」のスプラインでアニメーションをつけたのは、このためです。
「炎と煙の発生源が動かないVDB」ではこの問題には気づけませんでした。
Q.さて、ここでクイズです。
理想に対して「対称」になっているオブジェクトの向きを直さなくてはなりません。
どうすればよいでしょうか?
回転させてみれば合うのでは?…合いませんでした。
「ミラーツール」等で何とか出来ないか?…出来そうで、出来ませんでした。
「対称」オブジェクトを使えば解決では?…対称位置にアニメーションを作ってくれますが、
アニメーションを維持したまま、対称物の方だけを残す事は出来ませんでした。
ではどうするか?
この問題は知っている人からすれば常識であるものの、知らない人は戸惑うのではないでしょうか。
「ミラー」「フリップ」「シンメトリー」「反転」「対称」などでググっても
それぞれ「何かしら答えや情報が出る」だけに正解にたどり着きにくいのです。
私は苦労しました(汗)
A.答え
オブジェクトの「座標」のスケール、「S.X」「S.Y 」「S.Z」の任意の値をマイナスにします。
今回で言うと、「RedShift Volume」の座標タブの S.Zが「1」になっているのを「-1」にします。
はい、これでピッタリ合いました!
この対称状態になってしまう現象が
「私の環境の問題」なのか「私の知識不足」なのか「仕様」なのか「バグ」なのかは分かりません(汗)
しかし、「スケールの値にマイナスを入れると対称状態になる」のは
Cinema4Dを扱う中で知っていて損な情報ではないので、覚えておくと良いのではないでしょうか。
余談ですが冒頭の映像を作る過程でそれが分からず、無理やり作ったのがこの下の映像です。
本来は手前に来るはずの炎の玉が奥に行ってしまっており、破片の動きとも合っていません。
試行錯誤で1日つぶしてしまったので「知らなかった~」という人の役に立てれば幸いです(笑)
⑥さて、これで問題なくレンダリングできるようになりました。
「RedShift Volume」以外のオブジェクトは不要なので「ヌル」にまとめて非表示にでもしておきましょう。
もしも、炎が途中で切れてしまっている!
という場合、「xpExplosiaFX」のサイズが小さかったせいです。
サイズを大きくするか、または「らせん」を小さくするかした後で、
「xpCache」でVDBファイルを作り直しましょう。
最後に、「VDBとは何か」といいますと
「VDBとはDreamworks Animationが提唱しているボリュームを表現するためのオープンソースのフォーマット」
だそうです。
DTM関係で「ボリューム」と聞いたら音量でしょうけれど、
3DCG関係で「ボリューム」と聞いたらこのVDBの事を言っている可能性がありますね(笑)
□炎や煙の動きを変えたい
詳細に解説すると大変なので少しだけ。
※キャッシュを作った後(VDB化した後)では操作できないので、その前段階で行います。
■風で煙の向きを変えてみる。
X-Particlesで「Modifiers」→「Motion」→「xpWind」を配置。
「xpExplosiaFX」の「Modifiers」タグの「Modifiers」にドラッグアンドドロップ。
「Mode」が「Include」になっていれば配置した「Modifiers」の効果が表れ、「Exclude」になっていれば無視されます。
■遮蔽物で煙の流れに影響を与えてみる
遮蔽物となるオブジェクトを配置し、右クリックで「X-Particlesタグ」→「xpEFX ColliderTag」を付けます。
ちなみに、「xpColliderTag」だと効果がなく無視されますのでご注意。
■まとめ
ひとまず、X-Particlesの炎や煙をRedshiftでレンダリングすることが出来ました。
炎や煙の形をもっとカッコよく調整したい!という気持ちもありますが、今回の覚書はここまで。
厳しいのは、プレビュー画面である程度の煙の流れは把握出来るものの
フレームが進むとどうしても重くなり、きちんと形を確認するには
標準レンダラーでレンダリングして試す…という作業の繰り返しとなることですね。
理想の炎や煙を作るには慣れが必要かもしれません。
ただ、リアルタイムに確認しながら作りたい!という方は「EmberGen」というソフトを用いるのも手です。
□「EmberGen」って何?
2019年に「EmberGen」というソフトウェアが登場しました。
これはCinema4Dとは別のソフトで、
リアルタイムに確認しながら炎や煙の映像を制作することが出来ます。
2020年3月現在、機能制限されたアルファ版がダウンロード可能となっています。
(ライセンス購入した場合のみ書き出しも可)
将来的にはVDB形式も書き出し出来るようになるそうで、映像制作者からとても注目を集めています
そして、この「EmberGen」で作ったVDBファイルも公式が配布しているので、
興味のある方は利用してみると良いでしょう。
今回も思いのほか長文記事となってしまいました。
だいぶ人を選ぶ内容かつ、既に環境を揃えている人には当たり前な内容だったかもしれません(汗)
どなたかの参考になれば幸いです!
映像、イラスト、漫画、コンテなどの制作、画像加工を承っております!→こちら