痕跡4

痕跡

はじめに

明けましておめでとうございます。この投稿で67件目になります。今年はなんとか100件を達成したいと思っております。よろしくお願い致します。

移動や変化の痕跡はリアリティを上げるために重要です。またプログラムによる記憶の活用を実体験する観点からも重要と考えています。Monogokoroのサイトでは「痕跡」のテーマを多く取り上げてきました。これまで紹介してきた痕跡の手法は、砂を除ける手法(2025.11.30「衝突問題の基本」)、局所的な部分を動かす手法(2025.11.14「痕跡3」)、pbr MATのシェーダーを利用する手法(2025.06.14「プロシージャル3「創発的関係」」)、ポテンシャルフィールドを利用する手法(2025.09.01「ポテンシャルフィールド・・・」)等を述べてきました。今回紹介するのは、pbr MATを使う手法とポテンシャルフィールドを使う手法で、これまで述べてきた手法と関連しています。以前紹介したポテンシャルフィールドを利用する手法は、table DATによりポテンシャルを作る場所を記憶するタイプでした。この記憶した位置にオブジェクトを配置したり、metaball SOPで機能を割り当て、ポテンシャルを作ってきました。この手法は記憶させる数が決まっている場合は便利ですが、連続的な不特定の数のポテンシャルをつくるには、多くの配置する位置を適当に決める方法と、その位置に多くのsphere or metaball SOPを用意する必要がありました。今回、マウスで描くことで配置する位置を定め、個別にsphere or metaball SOPをそれぞれに用意することなく、連続的な痕跡を作る方法を紹介します。任意の位置に痕跡やポテンシャルを作製するのに優れた手法です。今回のポイントはtrail CHOPとlimit SOPです。trail CHOPはこれまでも何度も使っており、当然の活用方法です。limit SOPを使う方法は、位置データを見える化するのに便利です。実はこのオペレータをこれまで使ったことが無かったのです。limit SOPを知ることで連続的なポテンシャルの痕跡を作ることができるようになりました。プログラムはTouchdesignerのよるものです。

連続する凹を作製する場合

まず映像をみていただきましょう。

比較するのに適した映像は、2025.07.28のblog「痕跡1」の中の「記憶させることで跡を残す方法」の節です。ここではマウスの位置をtableに書き込み、その位置にsphere SOP(球)を割り付けています。マウスの位置を連続的にtableに書き込むとsphere SOPがそれぞれの位置に割り付けれますが、位置の数だけ用意しておく必要があります。このため連続的に多くの数が変化する場合に割り付けるのが困難です。今回はこの点を修正したものです。sphere SOPの替わりに記憶するオペレータを用意し、それをgeo COPMにインスタンシングして配置するというのが今回の方法です。この記憶するオペレータがtrail CHOPです。これは大変便利な記憶のさせ方です。

上の図はtrail CHOPによるマウスの位置をgeometry COMPのインスタンシングに使ってsphere SOPを配置する部分のプログラムです。これまでのblogにも何度も使っているインスタンシングのオーソドックスな使い方です。ただtrail CHOPは興味深いオペレータであるので、ここで述べておきます。上の画像はpanel CHOPによってマウスの位置を読み取り、これをtrail CHOPにどんどん入力します。trail CHOPは言わばシフトレジスタを見える化したオブジェクトで、入ってきたデータをサンプリングしてシフトして保持します。保持できるデータ数は設定できます。例えばパラメータWindow lengthを4sにしておくと、サンプリングは60Hzなので、240サンプルが常に記憶されます。241番目が入ってくると最初のデータを捨てて新しい値が加わります。ですので、常に240サンプルのマウス位置(x, y)が記憶されます。もし入力を止め240サンプルを保持したい場合は、trail CHOPのActiveをoffにします。sphere SOPを加工した形状を240個の(x, y)座標にインスタンシングすることで、上の映像の左側の映像を描いています。この映像からcolor MAP, normal MAP. height MATをつくり、pbr MATにアサインすることでgrid SOP(平面)に見かけ上の凸凹を作ります。このプログラム部分を次に示します。

この構成はpbr MATを使う場合のオーソドックスな形式です。色を凸凹に変える手法です。pbr MATを使う場合はlightはenvironment Lightを使います。この結果が映像のに右側です。全体的に特に新しい点はありませんが、短期記憶をするシフトレジスタにあたるtrail CHOPを使ってインスタンシングすることにより、連続的な痕跡が扱えるようになりました。

連続したポテンシャル分布を描く場合

上の節ではシェーダーによる見かけ上の凹を作製しました。勿論凸を作ることもできます。次は2025.09.04「ポテンシャルフィールドを含めた「擾乱を伴う反復系」」に利用するポテンシャルを連続的に作製する方法を検討します。「ポテンシャルフィールド・・・」の例では、ポテンシャルとの衝突を計算する部分と、対応するポテンシャルを表示するための2つのブランチが必要です。今回紹介するのはポテンシャルの表示するブランチに対応する部分です。「擾乱を伴う反復系」と衝突させるには、形状だけでなくmetaballを設定し、spring SOPによりポテンシャルと相互作用させる部分が必要となります。それではまず映像を見ていただきましょう。

右側の映像はマウスでなぞった部分を線として表示しています。先の例と同様panel CHOPでマウス位置をどんどんと入力していきtrail CHOPを使ってシフトレジスタにように(x, y)の値を記憶します。ここで先回はインスタンシングしたわけですが、trail CHOPの(x, y)の値を直接線として描くlimit SOPを使います。limit SOP内のCHOPパラメータにtrail CHOPを指定すればできます。この状態の絵が映像の左側です。次に連続したポテンシャルを表示するためのプログラムの主要部分を示します。

重要なのは、lay SOPのインレット1に大地になるgrid SOPを入れ、そして第2インレットにsphere SOPで作った分布図を入れることです。lay SOPは第1インレットに第2インレットの形状を投射して描く機能です。2つの入力はどちらもSOPでなければなりません。ray SOPは他にも興味深い機能があり、これまでのblogで使っています。別の機会に機能をまとめて説明したいと思っています。第2インレットに入れるSOPをどうして作製するのかが今回のポイントです。結局limit SOPで線が得られるので、この線の各ポイントに、sphere SOPを割り付ければsphere SOPの分布図ができます。これを行うのがcopy SOPです。通常ならgeo COMPを使ってインスタンシングしたいところですが、これを使うと出力がTOPになってしまうのです。ray SOPにはSOPで入力する必要があるため、copy SOPを使ってポテンシャル分布を作製します(ここに上げた問題は、2025.07.28の「痕跡1」内の「対象の動きに応じて変化させる方法」で述べたのと同じ課題です。対策も同様にcopy SOPを使っています)。注意点はマウスで変化する入力を常にcopyして連続のポテンシャルを作るのがかなり計算負荷が高い点です。そこで常に変換を行うのではなく、limit SOPで描いておいて、キーボードから信号を送ることで、trail CHOPのactiveをoffにして線の状態を固定します。その固定した線のポイントに対してsphere SOPをcopyすることにしました。この切り替えのための制御を加えています。box SOPダミーと書いた機能は、ポテンシャルを表示する前にlimit SOPの線を描かせるためのもので、boxの四ケ所のpointはgrid SOPより随分と外側の位置にしています。この四ケ所にsphare SOPがコピーされますが、gridから離れているので表示部分の外となり映像に影響ありません。switch SOPで切り替えるためのダミーです。lay SOPの出力はgeo COMPによって2次元化します。それが映像の右側です。tail CHOP, limit SOP, copy SOP, lay SOPこの一連によって連続したポテンシャルを描くことができました。

まとめ

今回はマウスを自由に動かした軌跡をtrail SOPを使うことで記憶し、table DATを使わずに連続したポテンシャルを描きました。2つ目の例では、tail CHOP, limit SOP, copy SOP, lay SOPの一連の組み合わせが重要でした。trail CHOPはシフトレジスタの機能で短期記憶ですが、activeをオフすることで、記憶を保持し続けることができます。limit SOPは軌跡を描く機能として便利です。
プログラムはtrail SOP, limit SOP, table DATといったデータを使ってインスタンシングやcopyをして全体を構成していくのが得意です。つまり、記憶した場所に何かを付けることができます。一方人は、全体のイメージを脳の中で分解して別々の場所に機能毎にパターン化し、何かの時に引きだすこどもできます。プログラムは残念ながら全体から分解する方向は不得意です。統合された結果から、分解して元に戻すことはTouchdesignerにはできません。こうしたことができると、人の様に創造性につながるはずです。AIは全体から何が描いてあるかを抽出することができ、この逆特性をある程度補うことができるように思います。

コメント