粒子の拘束

ParticleBlinkScriptノードを使用して、パーティクルの位置を制限できます。例として、このカーネルは粒子を球の表面に拘束します。各パーティクルは球体の半径まで外側または内側に移動し、球体の表面に接するように速度が回転します。

次のパーティクル制約カーネルの結果の効果

注意:  このカーネルのより現実的なバージョンでは、粒子を瞬時に移動させるのではなく、粒子を徐々に移動させる必要があります。

次のカーネルのノードグラフの例

kernel ParticleSphereKernel : ImageComputationKernel<ePixelWise>

{

Image<eReadWrite> p_position;

Image<eReadWrite> p_velocity;

 

param:

float3 _centre;

float _radius;

void define() {

defineParam(_centre, "pa_position", float3(0.0f, 0.0f, 0.0f));

defineParam(_radius, "pa_radius", 1.0f);

}

void process() {

float3 d = p_position()-_centre;

float r = length(d);

if ( r != 0.0f ) {

d /= r;

//パーティクルを球の表面に移動します

p_position() = _centre + d*_radius;

 

//速度を変更して表面に追従します

float3 v = p_velocity();

float lv = length(v);

if ( lv != 0.0f ) {

v / = lv;

p_velocity()= cross(cross(d、v)、d)* lv;

}

}

}

};