今回はCinema 4D 2024.4で搭載された新パーティクルシステムを使ったエフェクトを作るチュートリアルとなります.
使用するCinema 4Dのバージョンは最新版に更新しておいてください.レンダラーはRedshiftを使用しますが,こちらも最新版に更新しておいてください.執筆時の最新バージョンは
となります.
つくるエフェクトはこちら
今回は新パーティクルシステムを用いて次のようなエフェクトを作成します.パーティクルのコントロールにフィールドフォースを用いています.フィールドフォースは様々なフィールドオブジェクトから複雑なベクトルを生成できる強力な機能です.とても便利な機能でパーティクル以外にもいろいろ応用もできるので覚えておきたい機能の一つと言えます.
Youtube動画で全行程を公開しています
新規プロジェクトを作成する
新規プロジェクトを作成します.最初に「プロジェクト設定」(Ctrl+D)を開いて,
「プロジェクトスケール」…「1 cm:センチメートル」
「時間最大」…「300F」
にしておきます.

作業に入る前にパーティクル用のレイアウトを作る
新しいパーティクルシステムに関するメニューはメインメニューの「シミュレート」の中にありますが,使用するオブジェクトが大幅に増えており,それぞれのオブジェクトを作る度に「シミュレート」メニューから行うのは手間なので,パーティクル用のレイアウトを最初に作っておくことをオススメします.
パーティクル用のレイアウトを作る動画はこちらを参考にしてください.
基本エミッターを追加する
それでは,シーンに「基本エミッター」を追加します.基本エミッターを追加すると,「パーティクルグループ」も同時に作成されます.

エミッターはパーティクルを放射するためのもので,放射時のパーティクルの数や速度,カラーなど様々なパラメータを決めることができます.そして放射されたパーティクルは必ずグループに属します.基本エミッターから放射されたパーティクルは一緒に作成されたパーティクルグループオブジェクトに属します.
エミッターの「プロパティ」タブを開き,グループの欄に別のパーティクルグループをドラッグして変更することができます.もしグループが空欄になっている場合は,ルートグループに属します.

基本エミッターの設定を変更する
まずは基本エミッターの「放射」タブを開き,
「形状」…「円形」
「スケール」…「3cm, 3cm, 100cm」
とします.円形の場合はZのサイズは意味をなさないためデフォルトで問題ありません.
「レート」…「10000」
とします.他はデフォルトのままとしますので,毎秒10000個のパーティクルを放射します.

続いて「プロパティ」タブを開き,
「速度」の
「方向」…「半径」
「カラー」の
「サンプルモード」…「ランダム」
に変更し,グラデーションカラーにノットをいくつか追加して好みのカラーを設定します.
作例では宇宙っぽい青紫系を使用しました.ランダムモードの場合,各パーティクルのカラーにここで作成したグラデーションカラーからランダムに適用されます.

アニメーションを再生(ショートカット:F8)すると円の半径の方向に向かってパーティクルが放射されます.
この動きをベースとして,これから渦を巻くような動きを作っていきます.

らせんスプラインで渦状を作成する
パーティクルはスプラインに沿って動かすことができるので,まずは渦をスプラインで作成していきます.
長方形スプラインのアイコンを長押しして,サブパレットから「らせん」スプラインをシーンに追加します.

らせんを選択し,「オブジェクト」タブを開き,
「開始半径」…「0㎝」
「開始角度」…「60°」
「終了半径」…「200㎝」
「終了角度」…「-270°」
「高さ」…「0㎝」
「分割数」…「200」
「平面」…「XZ」
とします.


さらに,このスプラインを複製回転するので,回転ツールに切り替えて回転バンドの緑色の軸をCtrlキーを押しながらドラッグして複製と回転を同時に行います.この時,Shiftキーも同時に押しておくことで量子化も使って180°回転させます.


パーティクルをフィールドフォースで動かす
このスプラインに沿ってパーティクルを動かしていきますが,そのためには「フィールドフォース」を使う必要があります.
フィールドフォースはフィールドオブジェクト(線形フィールドや球体フィールドなど)を用いてベクトルを生成する機能です.スプラインをフィールドフォースで使うことでスプラインに沿ったベクトルのほか,スプラインに引き寄せるベクトルなどを生成することができます.
シーンにフィールドフォースを追加します.

最初に円周フィールドで回転する動きを作る
フィールドフォースを選択し,「オブジェクト」タブを開き,
「速度タイプ」…「絶対速度を設定」
「強度」…「60」
とします.「絶対速度を設定」にすることで,フィールドフォースで生成した向きに対して「強度」で設定した速度で移動させることができます.
フィールドリストの線形フィールドを長押ししてサブパレットから「円周フィールド」をリストに追加します.

すると,エディタビュー状に円周フィールドによって生成されたベクトルラインが表示されます.

このベクトル表示は3D空間に影響するベクトルの向きと大きさを表しています.また,表示設定を変更することもできます.
フィールドフォースを選択し,「表示」タブを開き
「ボックスサイズ」…「500㎝,0㎝,500㎝」
「ライン密度」…「50%」
にすると次のようになります.「ベクトルの長さを表示」が「ラインの長さ」になっている場合はフィールドフォースで生成されるベクトルの大きさによって長さが異なります.現在,「速度タイプ」が「絶対速度に設定」で,「強度」が「60」の長さになっています.

もし,長さが見にくい場合は「輝度」に変更してもよいでしょう.輝度にした場合は長さは一定となり,線の明るさの変化で方向がわかります.この状態は絶対速度を60に設定しているため,どの線も同じ輝度となります.

この状態でアニメーションを再生させるとパーティクルは放射された瞬間に円周フィールドの生成する方向に向かって60の強さで移動します.
円周フィールドの向きを反転させる
円周フィールドの「向き」タブを開き,
「向きを反転」…「オン」
にしてベクトルの向きを反転させます.

この状態では緩やかに外側に向かっていきますがまだ不十分なので,ここにスプラインフィールドを使ってらせんスプラインに沿って移動するベクトルを追加していきます.

らせんスプラインをフィールドフォースに追加する
フィールドリストにらせんスプラインをドラッグ&ドロップして,らせんをスプラインフィールドとして追加します.

フィールドリストのらせんをクリックし,スプラインフィールドの設定を表示させて「向き」タブを開き,
「長さ」…「正規化」
にします.正規化の場合,ベクトル長さは「1」になります.

もう一つのらせんスプラインも同様に追加し,同じ設定にします.ただしこちらのレイヤーは
「不透明度」…「20%」
にしてやや弱くしておきます.数値は動きを見ながら好みで調整しましょう.

球体フィールドで外側に移動するベクトルを追加する
まだ意図する動きにはなっていませんので,パーティクル全体をもっと外側へ押し出していくベクトルも必要です.それは球体フィールドを使うことで中心から360°の外側へ向いたベクトルを作れます.
フィールドフォースの「オブジェクト」タブを開き,新たに「球体フィールド」を追加します.

球体フィールドレイヤーの
「合成」…「加算」
にして,下のレイヤーで作成したベクトルに対して加算合成を行います.

球体フィールドを追加すると次のような動きになります.全体が外へ外へ押し出されるようになります.

ランダムフィールドで動きにムラをつくる
さらに動きにムラを付けるために「ランダムフィールド」を追加します.フィールドフォースでランダムフィールドを使うと,ランダムなベクトルの向きを生成してくれます.

ランダムフィールドの設定を変更します.ランダムフィールドレイヤーの
「合成」…「加算」
「不透明度」…「20%」
として,下のレイヤーで生成したベクトルに対して少しだけ加算します.
「フィールド」タブを開き,
「スケール」…「500%」
「アニメーション速度」…「100%」
とします.スケールを大きくすればより大きなうねりができ,ノイズ自体をアニメーションさせることで常に変化するランダムなベクトルを生成します.

ランダムフィールドによるうねりを加えることができました.

後は好みで各フィールドレイヤのパラメータを調整していきます.フィールドフォースをつかうことで通常のフォースよりより複雑で柔軟性の高いベクトルを生成することができます.とても便利で強力な機能なのでぜひ使いこなせるようにいろいろなパターンで練習してみください.
数式モディファイヤを使って動きを整える
しかしまだ完成ではありません.このままではパーティクルが放射上に移動してしまうため,なるべくY軸方向の移動を抑えて平たんにしたいと思います.
シーンに「数式」モディファイヤを追加します.

数式モディファイヤはパーティクルの属性を操作することができるものです.作例ではY方向の移動を抑えて,かつ少しずつ上昇させていくことにします.「オブジェクト」タブを開き,
「操作」…「適用」
「ソース」…「プロパティ」
「値」…「0.03」
「プロパティ」…「移動距離」
「プロパティ出力」…「位置」
「プロパティチャンネル」…「Y」
とします.
この設定では「適用」を使用した場合には次の計算式が行われます.
プロパティ出力 = 値 * プロパティ
設定に従い置き換えると
パーティクルの位置Y = 0.03 * パーティクルの移動距離
の計算となります.つまりパーティクルが移動していくにつれて徐々に位置Y方向に移動していくことになります.

アニメーションを再生させると次のようになります.

モディファイヤの順を変更する
モディファイヤはオブジェクトマネージャの上から下に向かって順に効果がかかります.ここで数式をフィールドフォースの下に配置することで,フィールドフォースの次に数式の処理を行われるようにしておきます.アニメーション結果も変わります.


移動距離でパーティクルをキルする
エミッターからはパーティクルを放射し続けているため,タイムラインが長くなると大量のパーティクルを毎フレーム処理するため動作が重くなります.ここでは一定の移動距離に到達したパーティクルをキルするために条件とキルモディファイヤをつかってみます.
シーンに「条件」オブジェクトと「キル」モディファイヤを追加します.


キルモディファイヤを条件の子にします.条件を変更する必要があるので,条件を選択し「条件」タブを開き
「条件」…「移動距離」
「比較」…「より大きい」
「値」…「500㎝」
とします.移動距離が500㎝を超えた場合,子にしたキルが実行されます.

キルを選択し,「オブジェクト」タブを開き,
「チャンス」…「30%」
にします.チャンスの値を下げることでキルが実行されるパーティクルをある程度調整できます.条件に当てはまってもキルされないパーティクルもあるというこです.

モディファイヤとパーティクルグループの関係
モディファイヤはパーティクルグループの子にするとそのグループにのみ効果が適用されます.
モディファイヤがグループの外にある場合はすべてのパーティクルグループに対して効果が適用されます.
今回の作例ではパーティクルグループが一つしかないため,外にあっても問題ありませんが,複数のパーティクルグループがある場合にはどのモディファイヤを適用させるか,またはさせたくないかを考えながらオブジェクト階層を組み立てる必要があります.

パーティクルのレンダリング
パーティクルをレンダリングする方法はいくつかありますが,Redshiftによる場合の基本的な使い方を紹介します.
パーティクルグループに「タグ」→「レンダリング」→「RSオブジェクト」タグを適用します.

パーティクルグループにRSオブジェクトタグを適用した場合,「パーティクル」タブが表示されます.このモードを変更して様々なタイプでレンダリングすることができますが,今回は
「モード」…「最適化球体」
「スケール倍率」…「0.5」
としておきます.最適化球体はRedshiftが生成する球体で球体インスタンスよりもメモリ効率が優れているメリットがあります.スケール倍率は元々のパーティクルサイズに乗算する値で,調整することでパーティクルサイズを調整できます.

パーティクルのマテリアル
パーティクルグループにマテリアルを適用します.マテリアルマネージャを開き,「作成」→「マテリアル」→「標準」でRedshift標準マテリアルを作成します.

マテリアルをダブルクリックしてノードエディタを開いたら,「カラーユーザーデータ」ノードを作成します.
左上の「+」ボタンまたは,Cキーを押してアセットウィンドウを開き,検索窓に「user」と入力すると「カラーユーザーデータ」ノードが表示されるのでダブルクリックまたはノードエディタにドラッグ&ドロップします.

カラーユーザーデータノードを選択し,右の属性カラムの
「属性名」…「パーティクルカラー」
を設定します.名前に「RSPColor」と表示されていればOKです.
カラーユーザーデータのアウトポートは標準マテリアルノードの発光カラーに接続します.
発光カラーはデフォルトで隠れているので,アウトポートからワイヤを伸ばし,標準マテリアルノードのポート以外の場所にドラッグ&ドロップすることで隠れているすべてのポートに接続することができます.


つぎは標準マテリアルノードを選択し,「ベース特性」の中からにある「発光」の
「ウェイト」…「3」
程度に上げておきます.

ベース特性の「ベースカラー」と「反射」の
「ウェイト」…「0」
にしておきます.これでパーティクルカラーで発光するだけのマテリアルができました.

マテリアルをパーティクルグループに適用します.マテリアルの名前も分かりやすく変更しておきます.作例では「Particle」としました.

レンダービューでレンダリングしてみる
メインメニューの「レンダリング」→「レンダービューにレンダリング」でRedshiftレンダービューを開きます.

レンダービューの「IPRを開始」ボタンをクリックしてレンダリングを開始すると次のような絵がでてきます.
この時のパーティクルサイズはRSオブジェクトタグで設定した「スケール倍率」によって元々のサイズから0.5小さくなっている状態です.

パーティクルキャッシュを作成する
パーティクルはきちんとレンダリングする前はキャッシュをとる方が良いでしょう.パーティクルキャッシュはAlembicというファイルに記録されていきます.パーティクルグループを選択し,「キャッシュ」タブを開き「シーンのキャッシュ」ボタンをクリックするとキャッシュファイルの保存先と名前を決めてOKを押すとキャッシュ計算がはじまります.
「シーンのキャッシュ」はシーンの中にあるすべてのシミュレーション要素をキャッシュ計算します.
今回の作例に関してはパーティクルグループも一つしかないため,「オブジェクトのキャッシュ」でも構いません.

キャッシュ計算が終わると自動的に「キャッシュモード」が「オン」になりキャッシュファイルを読み込みます.もしアニメーションを再調整する場合はキャッシュモードをオフにしてから行います.

アニメーションでレンダリングする
最後にモーションブラーをかけてレンダリングすることにします.「レンダリング設定」(Ctrl+B)を開き,「レンダラー」が「Redshift」になっていることを確認します.品質に関する調整をしたいので,
「モード」…「アドバンス」
に変更します.軽めのレンダリングにしたいので,「サンプリング」タブを開き
「均一サンプリング」…「オフ」にしてサンプル数を決めるモードにします.
「しきい値」…「0.01」
「サンプル数最小」…「4」
「サンプル数最大」…「16」
とします.

「モーションブラー」タブを開き,
「使用する」…「オン」
「シャッター」の「時間(1/秒)」…「10」
とします.シャッター速度が遅くなるのでよりモーションブラーが強くかかります.

「グローバルイルミネーション」タブを開き,
「使用する」…「オフ」
にします.間接照明は今作例では不要としました.

出力ではレンダリング解像度,アニメーションのフレームレンジを指定しておきましょう.

保存ではファイルフォーマット,保存先のディレクトリとファイル名を決めておきます.

最終レンダリングは「レンダリングして画像ビューワーに」(Shift+R)を実行します.指定したフレームからレンダリングが介されていきます.


レンダリングが終わったらAfterEffectsなどのコンポジットソフトで動画にして完成したものがこちらになります.
数式の値を大きくするとY方向への移動が大きくなり,次のようなバリエーションを作ることもできます.
今回は新パーティクルを使ってエフェクトを作成しました.パーティクルシステムが一新されたので使い方に戸惑う方も多いかもしれませんが,Cinema 4Dのシミュレーション,そして階層システムと合うように作られたものですので,特に条件やグループの把握がしやすいという特徴があり,扱いやすいと感じています.
フィールドフォースについては限定的な機能で解説しましたが,パーティクルだけではなく通常のシミュレーションでも活躍する機能なので,応用範囲も広くこちらも重要な機能だと思います.
それでは最後までトライしていただいた皆さん,お疲れ様でした.最後までご覧いただきありがとうございます.