ポイントクラウドを扱う
「Leica製3DスキャナーBLK360を試す 後編」にていくつかの点群データを公開していますが、これを使って点群データを使った演出を組んでみましょう。サンプルファイルはこちら。サンプルデータはこちらです。
点群を表示する
点群は非常に重たいです。特に今回共有しているデータは1000万頂点以上。多ければ4000万頂点以上あります。まずは最小の描画負荷で点を描画してみましょう。
最初にPoint File In TOPでplyファイルを読み込みます。plyファイルをTouchDesignerに直接ドラッグ&ドロップすることもできます。plyファイルは1つの頂点につき複数の情報を持たせることができるのですが、今回利用するのはx、y、z、red、green、blueの6つです。Point File in TOPでは3つまでしか扱えないので残りの3つを扱うためにはPoint File Select TOPを使います。
Point File Select TOPのRed、Green、Blueのラベルにそれぞれred, green, blueを指定します。
今回作成したplyファイルはRGB値が8bit(0〜255の256段階)なのですが、読み込んだ際に32bit扱いで読み込まれています。なのでMath TOPのRangeを使って0から255を0から1になるようにマッピングします。
次にFit TOPを挟み込みます。これは描画する点群の数を簡単に調整できるようにするためです。PCのスペックが心許ない方はFitで解像度を下げてから次のステップに進みましょう(1000x1000でも100万個の頂点を描画することになり、オンボードのGPUだとかなり厳しくなります)。この際、Viewer Smoothnessなどの補完処理を切っておくこと(Nearest Pixelに設定すること)が重要です。また、xyzを扱うTOPとrgbを扱うTOPで解像度やその他設定が同じになるようにしておきましょう(解像度が変わってくるとインスタンシングがうまく動作しなくなってしまいます)。
最後にNull TOPを繋いでTOPの準備は完了となります。
次にSOPの準備にかかります。最小の描画負荷は1ピクセルの点になります。作り方はAdd SOPとConvert SOPです。
Add SOPのAdd PointsをONにして、
Convert SOPでは Convert toをParticle Per Point、Particle TypeをRender as Point Spritesに変更します。
あとはConstant MATを使った通常のインスタンシング、レンダリングと同様のセットアップを行います。
こうすると点群が表示されます。
原点からの距離を計算する
点群はTouchDesigner上ではTOPとして扱われるため、Matte TOPなどを使って変化する点群と変化しない点群を切り替えた演出を作ることが可能です。
今回はいろんな用途に使える距離を計算したTOPを作って色を変化させるように作ります。
まずは原点0からの距離を計算してみます。やり方は非常に簡単でMath TOPのCombine ChannelのLengthを使うだけです。のちの計算がわかりやすいようにCombine Channels OutputはRGB全てに同じ色を入れています。
この状態だと若干扱いづらいのでこの距離を計算したTOPを正規化します。Analyze TOPを使って最大値のRGBを持つTOPを作成し、Composite TOPのDivideで正規化を行い、0から1の値に変換します。
この際、Composite TOPの Input SmoothnessをNearest Pixelにしておくよう注意しておきましょう。
最後にこの距離マップを使ってLookUpをかけることで原点から放射状に白と黒の輪が広がっていくような演出を作ることができます。
光輝く森
Ramp TOPの黒の部分の比重を増やし、Matte TOPで元のPlyの色と切り替えるようにすると森の中心から光の輪が出るような演出を作ることができます。
これにBloomをかけるとさらに効果的です。
発展形
Lengthを計算する前の画像にひと工夫することで様々なバリエーションを作ることができます。
例えばLengthを計算する前にReorderを挟んでXYZ軸それぞれの方向での距離計算にしたり、原点以外のXYZ座標を一度TOPにして引き算することで放射の中心点を変更可能にしたり、といったことが可能になります。
また、最新バージョンのTouchDesigerのPaletteにはPointCloudカテゴリが追加され、プリミティブな点群データや点群データの移動や回転、マージを行えるtoxが利用可能です。このあたりを使ってみるのもお手軽で良いでしょう。
この記事が気に入ったらサポートをしてみませんか?