はじめに
「粒子を使った電子の道作製 ステップ2」の続きです。ステップ2では、前の白玉の位置に黄玉が置き換えられ、白玉が新たな場所に発生し、常に黄玉から白玉にビームを放射することを行いました。今回は2点改良しています。1.ステップ2では、黄玉と白玉の置き換えと白玉の発生は、カウンターを使って同じタイミングの繰り返してで行っていました。ステップ3では、白玉の領域に粒子が到達した数を数え、達してから一定時間の後、黄玉と白玉の置き換えと白玉の発生を行います。2.ステップ2では、ビームは常に発生している状態でした。このため黄玉と白玉が置き換わった時に、前の状態の名残のビームがオーバ―シュートしていました(ステップ2の映像を再度みてください)。これ除きます。
作製した映像
まず作製した映像を見ていただきましょう。
黄玉から白玉にビームが放射されます。ビームの流れが粒子だけでなく残像を残すようにしました。見やすくなるという点と、前の白玉に黄玉が置き換わったことが残像として残したほうがわかりやすいのではないかと思ったからです。この操作は残像を残こすフィードバックでTouchDesignerでは定番の方法です。この部分のプログラムは次になります。

render TOP ー>feedback TOP ー>level Top ー> over TOP(feedback TOPへ)の部分がそれです。level TOPのGamma値を1.0から1.04等、僅かに上げることで、残像が得られます。
フィードバック制御部分の説明
次に今回のプログラムの中心であるフィードバック制御部分について述べます。次がその部分のプログラムです。

前の白玉を黄玉に変換して新たに白玉を作る部分は、ステップ2と同じです。ステップ2ではカウントを数えて10回数えると変化するようにしていました。この変化させる信号をカウントではなく、粒子が到達した数を数えて作るのが課題です。「黄玉/白玉交換制御部」がそれを行うパートです。白玉に到達した粒子を数える方法は、2026.07.25「粒子を使った伝搬モデル1」とほとんど同じです。この部分でメインのフィードバック系を作っています。ビーム生成部分のPOPからpop to SOPに変換しています。これはgroup POPの領域設定がSOPを使った方が便利な場合があるからです。group SOPで白玉に位置にBoxを作っています。ここに到達する粒子数を数えます。これがsop to DAT ー> infeo CHOP =>select CHOP(num_rowsを選択)です。これをtrail CHOP ー> analyze CHOPで移動平均を求めます。expression CHOPが条件判定です(3に設定)。この後、timer CHOPで設定した時間ビームを保たせます(3秒に設定)。これがchop execute DAT ー> timer CHOPです。select CHOPはreadyを選択しています。readyはtimerが起動すると0になり、終了で1にもどります。logic CHOPで1,0を反転し、カウンターの代わりにフィードバックします。これがメインのフィードバック系です。
もう一つの課題である、黄玉と白玉が交換した時、前の状態のビームがオーバ―シュートする対策について述べます。これに2つの対策を行っています。この部分が「particla POPのコントロール 」の部分です。
1.黄玉と白玉が交換した時、ビームを消す対策です。これは黄玉と白玉が交換した時、右下にあるswitch POPを切り替えて、ビームから黒い画面に切り替えるという対策です(switch POPを切り替える方法は次で述べます)。効果的ですが、実際にオーバシュートした粒子が見かけ上消えるだけで粒子自体は消えてはいません。switchが元に戻った時に画面に粒子が残る場合がありました。これを完全になくすには、画面全体から移動して無くなるまで20秒程度待つ必要がありました。これでは長すぎます。そこでもう一つのが対策を行いました。
2.粒子を消す制御を加えます。
「黄玉/白玉交換制御部」の右側のselect CHOPを「particle POPのコントロール」のfilter CHOPに繋ます。select CHOPのreadyは判定基準を満たした時に0になり、timerの設定時間3秒後に1になります。logic CHOPの反転は0, 1が逆になります。このlogic CHOPは右下のswitch POPをコントロールしています。粒子を放出して白玉に到達し、設定した数に達し0に、その3秒後に1になり粒子側の映像から黒い背景に変わります。同時にfilter CHOPに接続された信号は、maht CHOPを経てpartical POPのパラメータである、Maximum Particlesをコントロールします。このパラメータは粒子の数を与えます。粒子の映像から黒の背景に変わる時、Maximum Particlesの数は1000から1に向かって下がっていきます。つまり放射を切った時に粒子自体が無くなっていきます。この2つの対策で切り替わった瞬間にオーバージュートすることを防いでいます。
3.粒子の放射の仕方をコントロールします。
これは、particle POPのBirth RateとLife Expectをコントロールしています。Birth Rateは発生する割合、Life Expectは寿命です。switch CHOPは粒子を放出していると時は上側、すなわち値を挙げる方向につながり、粒子を消す時に、一気に0になります。徐々にこれらのパラメータを挙げていくのは、粒子の固まりが一気に白玉に達するのを防ぐためです。一気に0にするのは、粒子を消すためです(2番と同時に働きます)。徐々に上げることで最初僅かの粒子が達するようにしています。白玉に一気に粒子が達すると、その最初で判定基準を満たしてしまうのを防ぐためです。またビームの形も最初少なく後で増えるようにしたほうが見栄えもよくなります。
こうしたコントロールは映像を作りながら直していきます。通常何をコントロールすれば所望の結果が得られるのか、明確でない状態でプログラムを書いて行きます、試行錯誤する中で、どのパラメータが重要だということがわかってきます。これがわかると、再度整理してプログラムを修正します。所望の状態を作るには何をすればよいかの試行錯誤には時間がかかります。
まとめ
白玉の領域に粒子が到達した数を数え、達してから一定時間の後、黄玉と白玉の置き換えと白玉の発生とそれへのビーム放射を繰り返しました。ステップ2では置き換えた際に、前の状態の残存ビームがオーバ―シュートしていました。これをビームの表示を消し且つ粒子数を減らすことで防ぎました。また、particle POPのパラメータを制御することで、飛び出し時にまとまった粒子が一気に到達するのを防ぎました。以上で任意の場所に移動する位置に対して、次々にビームを送るプログラムができました。

コメント