TouchDesignerPerformModeで複数ウィンドウをフルスクリーン出力する方法

スポンサードリンク

アプリケーション起動時にPerformModeで立ち上げ、自動的に複数のディスプレイをフルスクリーン出力する方法を考えてみました。
展示作品の場合、プログラムを操作する人間が常にいるわけではない為、ボタンでウィンドウを立ち上げるわけにはいきません。
もっといい方法があるかもしれませんが、とりあえずメモ程度に…

最終的なノード

今回は1つの動画を「上、中、下」3分割し、3つのディスプレイにそれぞれ出力する場面を考えます。
動画の分割方法については別途記事を書く予定です。
2017-01-25_120209.jpg

1. Window COMP

映像の最終出力結果を保持したオペレータを「Operator」にアタッチすることで、
映像を外部Windowとして出力することが可能になります。
2017-01-25_122018.png
今回はproject1コンポーネントの子階層で、「top, medium, bottom」という名前のnull DATを最終出力としているので、
このような表記となっています。
残り2つのwindowコンポーネントについても、project1/medium, project1/bottomという具合で最終出力を参照しています。

マルチスクリーンに描画する際は、それぞれの「Location」を「Single Monitor」に設定し、「Monitor」インデックスを適切な出力先に割り当ててください。
フルスクリーン描画する際は「Size」を「Full Location」、「Borders」を「Off」に変更します。
後の設定は適宜自由に行ってください。
2017-01-25_125950.png

2. Info CHOP

アタッチしたオペレータのattributeを参照することができます。
今回はこの中の「winopen」パラメータを使用していきます。
このパラメータは、Windowが開かれている場合に1、それ以外の場合に0を返します。
2017-01-25_120505.png

3. Select CHOP

先述のように、「winopen」パラメータのみを使用するので、これを抽出します。
2017-01-25_120447.png

4. Logic CHOP

今回は
・「Windowが閉じている場合はWindowを開く」
・「Windowが開いている場合は何もしない」
というロジックを組んでいきます。
Window COMPの「Open In Separate Window」に「0から1」のパルス信号を渡すと
ウィンドウが立ち上がる仕組みとなっているので、これに合うように値を編集します。

ウィンドウが立ち上がっていないとき、渡ってくる値は「0」ですが、
ウィンドウが立ち上がっていなければウィンドウを立ち上げる、すなわち「1」をExportするという処理を実装するため、
論理値を反転させる必要があります。
よって、このLogic CHOPでは、「Channel Pre OP」を「Invert」に設定し、論理値を反転させます。

※このチャンネル値をWindow COMPの「Open In Separate Window」にExportすればいいように思われますが、
Perform Modeで初回起動した際、ウィンドウは立ち上がりません。(常に1ではトリガーとして作用しない)

2017-01-25_120529.png

5. Delay CHOP

先ほどの注釈を踏まえて、起動時はチャンネル値が0であるように仕向けます。(正しい方法かわかりませんが)
Delayを仕込むことによって、起動時に前ノード(Logic CHOP)から出力された「1」という値は一定時間遅延して出力されます。
Delay CHOPの初期値は0であるので、うまく「0 -> 1」の遷移ができるという理屈です。
そして、このチャンネル値を初めのWindow COMPの「Open In Separate Window」に出力します。
2017-01-25_120615.png

注意

初めからすべての画面にフルスクリーンで出力すると、PCの操作ができなくなります。
(なぜなら、ウィンドウを消すとロジックに検出されてウィンドウが再び立ち上がるからです)
展示作品の場合は常にコンテンツだけを表示させたいということもあって、この手法で実装しています。
あしからず。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサードリンク