TouchDesignerでVJするときのTipsまとめ

#3年以上経ってからの追記（2021/07/11）
もう最近全然TouchDesignerいじれてないさのです。
この記事に書いてあることはもうだいぶ良くなっていることもあるはずです。
例えばAudio Device Inは推奨できませんとか（ちょっと前にいじってみたら前ほど重くなくなってたのでもう使えるかも）。
他の様々な記事も参照されることをおすすめします！！

#この記事について

TouchDesigner Advent Calendar 15日目の記事です。
最近TouchDesignerでVJをしているさのかずやが、TouchDesignerでVJやる時に気をつけたほうがよいことなどを記します。

## VJとは？
**音楽イベントで、DJなどの音楽に合わせて映像を出す人**です。
用意した（プリレンダリングの）映像ファイルを、タイミングに合わせてエフェクトかけたり、出しかえたりするVJが一般的です。
一方、プログラミングなどでリアルタイムに映像をつくる人たちも多くいて、そういう人をジェネ系VJと呼んだりします。

## TouchDesignerでVJをするメリットとデメリット

以下、数回VJしてみた私感ですが…
メリットとしては下記のようなものが挙げられます。

- ジェネも映像操作もTD内でできる
- （openFrameworksなどに比べると）動画の読み込みと利用が圧倒的に簡単
- ノイズ値の生成・調整が簡単
- 複数の数値（行列）の把握・コントロールが簡単
- OSCとかMidiとかSyphonとか、信号などのやりとりが簡単

一方、デメリットとしては下記のようなものが挙げられます。

- エフェクトは自分でつくる必要がある（パラメータの調整などを通して）
- 完全ランダム値の生成が面倒
- Macくらいのスペックで長時間使うとだんだん重くなる（詳細不明）
- 盛り盛りのファイルだと起動に結構時間かかる
- ただ線繋いでるだけだとできることが限られる（いろいろ覚える必要がある）

この辺は多分使ってみてわかることだと思うので、具体的にイメージできないかもしれません。こういうことを知っておくと予想外のことが起きなくて済む、という程度です。


# とりあえずのTips
どんな使い方をするにしろ、これやっといたほうがいいのでは？ということだけ書いておきます。

## 動画のエンコードを非圧縮（Hapなど）にする
これは別にTouchじゃなくてもそうなのですが。
動画には**エンコード形式**というのがあります。H.264と呼ばれるのが結構一般的で、このエンコード形式だと同じ動画でも、いい画質を保ったままかなり容量を軽くできます。圧縮効率がいいというやつですね。
しかし圧縮されている動画は、**読み込みに時間がかかります。**普段はそんなに気になるほどではないと思うんですが、いくつも映像を読み込んだりループしたりすると、動画の読み込みタイミングでちょっとラグが出ます。


おそらくこちらのエンコードの項目を参考にして頂ければだいたい解決します。
[[TouchDesigner] 動画のカクつきを抑える - Qiita] (https://qiita.com/kodai100/items/58fab87bea36b8ca0903)

Adobe CCを契約しているならAdobe Media Encorderを使うとサクサクできます。
フリーはこういうのとかをご参考にどうぞ。
[おすすめのフリーエンコードソフト11選【エンコーダー】](http://aviutl.info/encoder-osusume/)


## Audio Device Inを使わない
**多分、こいつ結構重くなる原因な気がしてます。**2つとか使ってしまうと結構ソフトごと落ちて悲しい思いをします。
代替策としては、**Max/MSPなどで音を拾ってOSCに変換してTouchDesignerで受ける**、というのが今のところよさそうです。

僕が使ってるやつはクソシンプルなので徐々に改善します。
[sanokazuya0306/soundtoosc](https://github.com/sanokazuya0306/soundtoosc)
それよりも[永松先生](https://twitter.com/ayumu_naga)のおしゃれなpatchをご参照ください。
[nama-gatsuo/SolidSubstanceVJ: a VJ set using motifs like mass solid substances](https://github.com/nama-gatsuo/SolidSubstanceVJ)

## コントローラーを一番上位でまとめて信号だけ送る
例えばMidiコンで操作するとき、繋ぐときと繋がないときとで操作方法分けるのめんどくさいので、コントロール用のUIはつくっておきつつ、Midiコン繋いだらそれはそれで動かせる、みたいなのを一番上位に入れておくのが良さそうです。
下位レイヤーの数値をいじりたいときは、こんがらがらないように気をつけつつ、In CHOPでどんどん送っていく感じが良さそう。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">I released nanoKONTROL V2 (MIDI mapped) GUI for <a href="https://twitter.com/hashtag/TouchDesigner?src=hash&amp;ref_src=twsrc%5Etfw">#TouchDesigner</a> .<br>The project is available on GitHub : <a href="https://t.co/PcqtQ1jJGo">https://t.co/PcqtQ1jJGo</a><a href="https://twitter.com/hashtag/KORG?src=hash&amp;ref_src=twsrc%5Etfw">#KORG</a> <a href="https://t.co/mA2h9vLADw">pic.twitter.com/mA2h9vLADw</a></p>&mdash; Kodai Takao 🌊 (@m1ke_wazowsk1) <a href="https://twitter.com/m1ke_wazowsk1/status/937067516001533952?ref_src=twsrc%5Etfw">2017年12月2日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
@kodai100 氏のこれ、まだ使ってないけどすごい捗りそうなので使ってみます。



## 音に合わせたコントロールを自在にできるようにしておく
VJやる上である種当たり前かもしれませんが。
VJソフトみたいにチャンネルレイヤーとかは（作らないと）ないので、簡易チャンネルレイヤーとして、**一番最後のTOPの直前で全体暗くできる（NullとCrossとか）ものをつくって、フェーダーをアサインしておく**のがよさそう。

# 総じて
**VJソフトとクリエイティブコーディング言語の中間**くらいな立ち位置で、使いようによってはすごく使いやすいと思います。これまでプリレンダとジェネ両方使おうとしたらVDMXとoFでSyphonで送るとかやらなきゃいけなかったところ、それをする必要がなくなったのはかなり便利だし、わざわざBuildしなくていいのもすごくいい。
ただ、**VJソフトを想定しているとコントロール関係は自分で用意しなきゃいけないし、クリエイティブコーディング言語を想定していると不自由な点がたくさんある**ので、その辺を自分でジャキジャキ開発して準備しておく必要がありますね。

# VJがんばろう
なんとなく変化してるスクリーンセーバーにならないように、**音との気持ちよさをうまく作れるように**上手くコントロールしてあげたいですね。身体化できるくらいの仕込みと経験が重要ですね。がんばりましょう。