チュートリアル > 質量によるパーティクル フローのパーティクルへの影響 |
パーティクル フローを使用すれば、ユーザは、MAXScript によって生成されるパーティクル チャネルから、特定のフォース関連のオペレータの影響をコントロールできます。この機能はパーティクル ワイヤリングと呼ばれ、パーティクル フロー ユーザ インタフェースにおいて非表示のオプションです。
次のチュートリアルでは、軽いパーティクルは吹き飛ばされるが、重いパーティクルはほとんど影響を受けず動かないでいるという、現実感のある動作が得られるように、各パーティクルの質量を計算し、風のフォースの影響をコントロールする方法について説明します。
パーティクル ビューの設定 |
パーティクル ビューの設定には、パーティクルの可変サイズを定める Scale オペレータが備えられています。 スクリプト ワイヤリングを有効にするには、次の手順を行う必要があります。 |
ChannelsUsed ハンドラは、[スクリプト オペレータ](Script Operator)が使用するチャネルを定義します。アクセスする必要のあるプロパティを指定せずに、パーティクル コンテナからパーティクル関連の値を取得したり、設定することはできません。このように、パーティクル フローは、[スクリプト オペレータ](Script Operator)にすべてのチャネルを与える必要はなく(パーティクル フローには任意の数のチャネルが存在します)、実際に必要となるチャネルだけを与えます。これによりメモリが節約されます。
パラメータ pCont には、パーティクル コンテナが含まれます。
質量を計算するためにパーティクルのサイズを読み取る必要があるので、スケール チャネルにアクセスする必要があります。
また、浮動小数点値の格納に使用可能な汎用データ チャネルである浮動小数点チャネルも必要になります。
Init ハンドラは[スクリプト オペレータ](Script Operator)の初期化に使用します。通常は、Proceed ハンドラが使用できるように、変数を定義して初期値を取得するか、オブジェクトを作成します。ただし、ここではこのハンドラを使用しません。パラメータ pCont には、パーティクル コンテナが含まれます。
[スクリプト オペレータ](Script Operator)がパーティクル フローによって評価されるたびに、Proceed ハンドラが呼び出されます。ハンドラには、スクリプトの実際の本体が含まれています。パラメータ pContには、オペレータの適用先であるすべてのパーティクルを収めたパーティクル コンテナが含まれています。
次に、パーティクル コンテナ内の現在のパーティクルの数を読み込みます。これに続くループで、パーティクル 1 つずつにアクセスします。変数に値を割り当てる理由は、これに続く for ループ内で、ループのサイクルが終わるごとに to 上限値を評価して、i 変数がこの上限値よりも大きいかどうかを判断するためです。for ループ内部で pCont.NumParticles() メソッド呼び出しを使用しているため、このメソッドは n 回呼び出されます。 ここで n はパーティクルの数になります。ただし、現在のコードを使用した場合、メソッドは 1 度しか呼び出されず、このためスクリプトがより高速に処理されます。
次に、1 からパーティクルの数までカウントする for ループを使用して、これに続くコード ブロックをパーティクルごとに繰り返します。変数 i には、現在のパーティクル インデックスが格納されます。
複数のパーティクルを処理するので、アクセスする現在のパーティクルを指定する必要があります。パーティクル コンテナの .particleIndex プロパティを i 変数に設定することにより、i 番目のパーティクルが現在のパーティクルになります。これ以降のパーティクル プロパティへのアクセス呼び出しはすべて、そのパーティクルに対して行われます。
これが、パーティクルの質量に反比例した影響値を計算する実際のコード行になります。この計算結果が、現在のパーティクルの particleFloat チャネルに割り当てられます。この計算結果は、particleFloat チャネルから浮動小数点値を受け取れるようにスクリプト ワイヤリングを有効にした Force オペレータからアクセスされます。