
検索はキーワードに基づいています。
例:「手順」
自然言語で検索しないでください
例:「新しいプロシージャを作成するにはどうすればよいですか?」
着色粒子
ParticleBlinkScriptノードを使用して、パーティクルの年齢や速度などに応じてパーティクルの色を変更できます。次のカーネル例では、パーティクルの存続期間中にパーティクルの色を変更します。4色の個々のノブが作成され、Catmull-Romスプラインを使用して、粒子の経年変化に合わせて色の間をスムーズに補間します。
次の粒子着色カーネルの結果の効果
次のカーネルのノードグラフの例
kernel ParticleColorKernel : ImageComputationKernel<ePixelWise> { Image<eReadWrite> p_color; Image<eReadWrite> p_startTime; Image<eReadWrite> p_life;
param: float4 _color1; float4 _color2; float4 _color3; float4 _color4; float _systemTime;
local: float4 _colors[6];
void define() { defineParam(_color1, "pa_color1", float4(1.0f, 0.0f, 0.0f, 1.0f)); defineParam(_color2, "pa_color2", float4(1.0f, 0.0f, 0.0f, 1.0f)); defineParam(_color3, "pa_color3", float4(1.0f, 0.0f, 0.0f, 1.0f)); defineParam(_color4, "pa_color4", float4(1.0f, 0.0f, 0.0f, 1.0f)); defineParam(_systemTime, "_systemTime", 0.0f); }
void init() { //スプライン接線の最初と最後の色を繰り返します _colors[0] = _color1; _colors[1] = _color1; _colors[2] = _color2; _colors[3] = _color3; _colors[4] = _color4; _colors[5] = _color4; }
// Catmull-Romスプライン float4 spline(float x, int numKnots) { int numSpans = numKnots - 1;
float t = max(0.0f, min(1.0f, x)) * (numSpans-2); int span = int(floor(t)); t -= span;
float4 k0 = _colors[span]; float4 k1 = _colors[span+1]; float4 k2 = _colors[min(numSpans, span+2)]; float4 k3 = _colors[min(numSpans, span+3)];
return 0.5f*(2.0f*k1 + (-k0 + k2)*t + (2.0f*k0 - 5.0f*k1 + 4.0f*k2 - k3)*t*t + (-k0 + 3.0f*k1 - 3.0f*k2 + k3)*t*t*t); }
void process() { float t = (_systemTime-p_startTime())/p_life(); p_color() = spline(t, 6); } }; |
申し訳ありませんが、これは役に立ちませんでした
なぜこれが役に立たなかったのですか? (当てはまるもの全てをご確認ください)
ご意見をいただきありがとうございます。
探しているものが見つからない場合、またはワークフローに関する質問がある場合は、お試しくださいファウンドリサポート。
学習コンテンツを改善する方法についてご意見がある場合は、下のボタンを使用してドキュメントチームにメールを送信してください。
フィードバックをお寄せいただきありがとうございます。