4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TouchDesigner Exprimentalに追加されたJSON DATを使ってみた

Last updated at Posted at 2020-08-17

wrnchAIが入ったのが話題になりがちなTouchDesignerですが、同時にJSON DATも入ったの知ってました?
他アプリケーションで吐いたデータを使うときに、いままでTDのためにわざわざCSVで書き出してたのが結構楽になると思うのでとりあえず使ってみました。
本記事で使用したバージョンは2020.40290です。

Experimental:JSON DAT(公式ドキュメント)
https://docs.derivative.ca/Experimental:JSON_DAT

Experimental版のTouchDesignerのDLはこちら
https://derivative.ca/download/experimental

今回はサンプルとして、このページのスケルトンデータを読んで表示してみます。
https://kinectron.github.io/docs/example-skeleton-images-azure.html

ファイルからの読み込みはFile in DATで

書くほどでもないことですが、JSON DATはあくまでテキストのパーサなので、ファイルに書いてあるJSONデータを使いたい時は通常通りFile in DATで読み込んでから渡す必要があります。
NDJSONとか読むときに便利そうですね。

スクリーンショット 2020-08-17 16.56.15.png

DATの出力は文字列。データはopアクセスもしくはevalで

JSONをパースした結果をXML DATのようにTableによしなに並べてくれるみたいな機能はなさそうでした。
DATからの出力はFormat(Pretty print的な)するかどうかを選べるだけで、あくまでひとつのJSON文字列であるようです。

パース結果は、dat.resultで取り出して利用することができます。
このリンクで言っているJSONable Python Objectにあたるものだと思います。
https://docs.derivative.ca/TDJSON

一応、resultをオペレータのStorageに入れて、Examine DATでTable化することはできはします。
スクリーンショット 2020-08-17 22.32.16.png

トップレベルがArrayで包まれる

これまでのスクショで気づいた方もいるかも知れませんが、元データがJSON DATに入ると一層深くArrayで包まれます。
JSON DATの出力をさらにJSON DATに食わせるともう一層追加されます。

スクリーンショット 2020-08-17 17.05.55.png

JSON DATのリファレンスを読むと、パース結果のオブジェクトへのアクセスは

  • DAT.source: 入力のパース結果
  • DAT.results: JSONPath Filterパラメータでフィルタリングされた結果
  • DAT.result: DAT.resultsの最初の要素

の3通りが用意されているようです。

おそらくこのresultresultsが常に存在することを担保するために、Arrayで包む仕様になっているのかもしれません。
じゃあDAT.resultsの方いらんくね?とも思うんですが、この辺まだよく捉え切れてなくてなんとも言えないです。

Python Objectはevalに突っ込むこともできます。

スクリーンショット 2020-08-17 17.25.53.png

結果がArrayの場合、JSON DAT => Eval DAT => Convert DATでTableに変換すると扱いやすかったです。

結果がObject(dict)の場合、さっき書いたようにStorageに突っ込むか、ちまちまスクリプトを書くかしか扱う方法がなさそうで、それだといまいちJSON用オペレータが組み込まれたインパクトが薄いなーと思っています。

フィルタリング

ということで元データがどんな形であれ、最終的にArrayになるようなデータ抽出をしたいわけですが、それを可能にするのがこのフィルタリング機能です。

JSONPathという記法で抽出するデータを指定します。
スクリーンショット 2020-08-17 23.36.14.png

ここでなんとなくDAT.resultsにも意味があるような気がしてきましたが、なんか掴みどころがなくてやっぱりまだよくわかってません。

スケルトンデータ読み込み

ここまで書いて力尽きてきたのでGitHubにあげてリンクするだけにします。。
https://github.com/nariakiiwatani/TouchDesignerEx_JSONDAT_sample

ざっくり解説すると

  • JSONファイルを読む(File in DAT)
  • 各関節のカメラからの3D座標と回転(Quaternion)を1フレーム毎に取り出せるようJSONPathを記述(JSON DAT)
  • 回転(Quaternion)をインスタンシングで使えるようにオイラー角に変換(Script CHOP)
  • 各関節の1フレーム分の位置と回転をCHOPひとつになるようにShuffleとかSelectとかでデータをいじる
  • それをGeometry COMPに突っ込んでインスタンシング

ということをやっています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?