ParticleBlinkScriptノードの使用

ParticleBlinkScriptノードは、 BlinkScriptノードですが、画像ではなくパーティクルシステムで動作します。これはパーティクルノードであり、Blinkカーネルを記述してパーティクルを変更することで、次の方法では達成できないカスタム動作を可能にします。 Nukeの組み込みのパーティクルノード。

ParticleBlinkScriptノードを使用するには、他のパーティクルノードと同じ方法でパーティクルシステムに接続します。

注意:  ParticleBlinkScriptノードプロパティの完全な内訳については、 ParticleBlinkScriptリファレンスガイド。

ParticleBlinkScriptノードグラフの簡単な例

ParticleBlinkScriptでPropertiesタブ、 scriptセクションでは、粒子の属性を変更するためにBlinkカーネルを作成します。読み書きする各属性を宣言します画像。ノードはそれぞれをバインドします画像同じ名前のパーティクル属性にカーネルで宣言します。

たとえば、パーティクルの位置を変更する場合は、 画像呼ばれたp_position。すべてのパーティクルイメージ名はプレフィックスで始まる必要がありますp_

注意:  プレフィックスは、属性名と一致する前に削除されます。接頭辞の理由は、宣言できる他のタイプの特別なイメージがあるためです(以下を参照)。

点滅カーネルの例

Nuke各パーティクルの速度にドラッグ係数を掛けるParticleDrag opがあります。以下は、同じことを行うBlinkカーネルの例です。

kernel ParticleDragKernel : ImageComputationKernel<ePixelWise>

{

//関心のあるパーティクル属性の画像を宣言します

Image<eRead> p_startTime;

Image<eReadWrite> p_velocity;

param:

//パラメータを宣言します

float _drag; // This will be a knob for the drag factor

float _dt; // The time step for the kernel

float _endTime; // The particle system time at the end of the step

void define() {

defineParam(_drag, "pa_drag", 1.0f);

defineParam(_dt, "_dt", 1.0f);

defineParam(_endTime, "_endTime", 1.0f);

}

void process() {

//このパーティクルのタイムステップを計算します

float dt = max(0.0f, min(_dt, float(_endTime - p_startTime())));

//これは抗力であるため、dtに対して指数関数的に減衰させるとより正確になります。他の力については、単にdtで乗算することができます。

float t = pow(1.0f-_drag, dt);

p_velocity() *= t;

}

};

画像粒子速度属性に対して宣言されている、 p_velocity。この場合、 画像読み書きされるため、次のように宣言する必要があります。 eReadWrite。このカーネルでは、 画像の幅は1で、パーティクルシステムのパーティクル数の高さです。

注意:  多くの場合、属性を読み取るだけでよく、その場合は次のように宣言できます。 eRead

単一のパラメーターがあります。 pa_drag、そして速度は処理する()方法。Nukeすべてのパーティクルに対してプロセスメソッドを1回呼び出します。

注意:  プレフィックスpa_ドラッグパラメータ名に追加することは必須ではありませんが、ParticleBlinkScriptがカーネルパラメータのノブを作成するときに名前の衝突を防ぐため、良い習慣です。

詳細については、 NukeHelp下のメニューDocumentation > Guide to Writing Blink Kernelsまたは次の場所に移動します: https://learn.foundry.com/nuke/developers/121/BlinkKernels/

警告:  ParticleBlinkScriptは、カーネル内で記述できるコードに制限がないため、非常に柔軟です。その結果、カーネルソースからコンパイルされたコードにより、 Nukeクラッシュするため、注意してください!