パーティクルフローのクラカトア専用ファイルオペレータを利用する

Using Krakatoa Particle Flow File Operators

 

イントロダクション

クラカトア1.1は保存されたパーティクルシーケンス(PRTCSV BIN ファイル)を3dsMaxに戻すためのパーティクルフローオペレータのセットを提供しています。これはダイナミックなパーティクル数をサポートしています。言いかえるとパーティクルの生成とその寿命を扱います。

このチュートリアルではこれらのKrakatoa File Birth、Krakatoa File Update Krakatoa ID Testオペレータを含むパーティクルフローオペレータの基本コンセプトとワークフローの説明をします。

 

パーティクルフローの生成と保存

このテストでは、100フレームの雨のようなとても簡単なパーティクルフローシステムを作りましょう。パーティクルが地面ディフレクタに衝突すると、円形にスポーンします。その間に親のパーティクルを消去し、パーティクルエージによってスポーンされたパーティクルを消去します。これにより様々なパーティクル数とBirth、Spawn、Deleteなどの複数のオペレータを扱うシステムになるでしょう。

 

パーティクルフローを作成する

●新しい3dsMaxシーンを作成します。

●デフォルトのPF Source(長さと幅:だいたい40×40ユニット)地面に作成します。

PF Sourceを+Z方向に50ユニット移動させます。

●エミッションロールアウトのマルチプライヤ量でビューポート%を100.0にします。

●システムマネージメントロールアウトでビューポートのインテグレーションステップをレンダーインテグレーションステップに合わせて1/2フレームにします。

●サイズが140四方のディフレクタースペースワープを地面に作成します。

 

パーティクルフローを調整する

●パーティクルビューのBirthオペレータで量を100、発生開始を0、発生停止を100に変更してください。

●Speedオペレータを100ユニットに変更してください。

●Rotationオペレータを削除してください。

●Displayオペレータをラインにして色をシアン(128,255,255)にしてください。

krakatoa_pfops_basesetup_viewport

 

パーティクルをコ リジョンでスポーンさせる

●Speedオペレータの下にCollision Spawnテストを追加します。

●コリジョンオブジェクトとしてディフレクタを選択します。

●Collision Spawnテストの分裂数を50に設定してください。

●新しいイベントとしてSpeedオペレータをパーティクルビューにドラッグしてください。

●Speedオペレータの方向をランダム水平にして速度を50にしてください。

●Ageテストを同じイベントに追加し、イベント時間 テスト値10 変動3に設定してください。

●新しいイベントとしてDeleteオペレータを追加し、Ageテストにつないでください。

krakatoa_pfops_spawning_flow

krakatoa_pfops_spawning_viewport

 

パーティクルをファイルシーケンスに保存する

●クラカトアGUIを開きます。

●レンダーモードをSave Particles To File Sequenceに切り替えます。

Save Particlesロールアウトで、[]ボタンをクリックし出力パスを設定します。

.PRTファイル形式で保存してください。

SAVE PARTICLESボタンを右クリックし、101フレーム分を保存するためActive Segment [0-100]を選択してください。

パーティクルを処理するためSAVE PARTICLESボタンをおします。すべてのパーティクルを保存するのに数秒ほどかかるでしょう。

 

パーティクルファイルシーケンスをパーティクルフローに戻すためロードする

●新しいPF Sourceをシーンかパーティクルビューに作成します。

デフォルトのBirthオペレータをKrakatoa File Birthオペレータに置き換えます。

PositionオペレータをKrakatoa File Updateオペレータに置き換えます。

RotationとShapeオペレータを消去します。

Displayオペレータを円にして色を赤に設定します。

Krakatoa File Birthオペレータで[]ボタンをクリックし、保存されたシーケンスから1つのファイルをピックします。

Krakatoa File Updateオペレータで[]ボタンをクリックし、上と同じ保存されたシーケンスから1つのファイルをピックします。

デフォルトではワールドスペースにロードされるため、円形のパーティクルは初めのパーティクルシステムから生成されたオリジナルパーティクルのまわりに現れます。しかしタイムラインを動かすと、ロードされたパーティクルは消去されず流れ続けるでしょう。

krakatoa_pfops_reloading_flow

krakatoa_pfops_birth_update

krakatoa_pfops_birth_update_undead

 

死んだはずのパーティクルが見える・・・

●消去されたはずのパーティクルをリムーブするには、Krakatoa File ID Testオペレータを使用しなければなりません。Krakatoa File Birthがファイルをロードされる際、IDチャンネルに記憶されたparticle Born IDとすでフローにロードされたIDを比較します。もしIDがフローに存在せずファイルに存在すれば、そのIDのパーティクルはフローに追加されます。つまり生成されます。パーティクルIDがフローで利用されているがファイルシーケンスにない場合、パーティクルは”死んだ”と見なされます。その場合FileIDと呼ばれるクラカトア特有のパーティクルデータチャンネルにマークされ、プラスかゼロの代わりにID値を-1に設定されます。

Krakatoa File ID Testクラカトア特有 FileIDチャンネルの値をテストするために使用され、特定の範囲に落ちたIDのパーティクルをsend outします。デフォルト設定では、ゼロより下の値とみなされたパーティクルはsend out、つまり消去されます。

Krakatoa File ID Testを2つめのパーティクルフローに追加します。

●Deleteオペレータをパーティクルビューにドラッグします。

●今はDeleteオペレータを無効にし、Krakatoa File ID Testにつなぎます。

2つ目のイベントのDisplayオペレータを緑のドットに設定します。

1つ目のフローの生きているパーティクルが赤の円であるのに対して、死んだパーティクルがすべて緑のドットになったことに気づくでしょう。

krakatoa_pfops_reloading_fileidtest_flow

krakatoa_pfops_birth_update_fileidtest

●2つ目のイベントのDeleteオペレータを有効にすると、マイナスのFileID値に基づいて、オリジナルでは存在していないパーティクルがすべて消去されます。

krakatoa_pfops_birth_update_fileidtest_delete

 

速度をロードする

デフォルトでは、Krakatoa File Updateオペレータは、ファイルシーケンスから位置IDチャンネルのみをロードします。しかしファイルシーケンスはより多くのチャンネルを含んでいます。Krakatoa GUIのChannelsロールアウトで速度、色、密度、ノーマルを含むすべてのデフォルトチャンネルをセットできます。

クラカトアでロードされたパーティクルをレンダーすると、それぞれのフレームで正しい位置に現れますが、速度をロードしていないため、モーションブラーがかかりません。

●ファイルからどのパーティクルデータチャンネルをロードするかを指定するにはKrakatoa File Updateオペレータを選択し、Channel Setupボタンを押します。

●モードレスフローティングダイアログで、PositionとIDに加え、Velocityにチェックします。デフォルトではデータは速度ターゲットデータが100%のブレンド率でロードされるため、既にある速度データを上書きします。

●これで、ロードされたパーティクルのDisplayオペレータをドットからラインに変えるとパーティクルは正しい速度で表示されます。しかしオリジナルに対してわずかしかオフセットされません。

これはパーティクルフローがすべてのオペレータ(位置や速度を含む)がアップデートされ、それからすべてのパーティクルを統合、古い位置や速度に基づく新しい位置を計算します。これに対する修正は、位置や速度をロードし後の統合を中和するプロセスをロードする間、後方に位置を修正します。しかしコードを複雑化しないよう意図的にこれが行われないようにされています。2つのシステム(特にレンダリング時に180°のモーションブラーを伴う場合)の実際の違いは最小であり、高いインテグレーションステップの場合とるに足らないものになります。下のスクリーンショットは2つ目のシステムのインテグレーションステップを1フレームと1/8フレームにして表示したものです。

krakatoa_pfops_reloading_velocity_step1

krakatoa_pfops_reloading_velocity_step1_8


ロードされたパーティクルのトランスフォーム

デフォルトでは、Krakatoa File BirthとKrakatoa File Updateオペレータはワールドスペースでパーティクルをロードするため、ロードされたPF Sourceの位置とは関係なくオリジナルのパーティクルの位置に合わせられます。しかしPF SourceのトランスフォームにLink to Object TMを使用することでパーティクルを異なる位置と回転でロードすることができます。

Krakatoa File Updateオペレータを選択し、Link To Object TMオプションをチェックします。

PF Source 02はワールド起点にアラインされ、オプションによる変更がないことに気づくでしょう。

●それではPF Source 02をX軸に沿って50ユニット動かし、タイムスライダを進めてパーティクルをアップデートしてみましょう。

●すべてのパーティクルシステムが50ユニットシフトされたことに気づくはずです。

krakatoa_pfops_transforming_position

●PF Source 02をY軸で-90°回転させ、時間を変更しアップデートしてください。

krakatoa_pfops_transforming_rotation