TouchDesignerでDMX機材を[Art-Netを経由して]制御する。


## はじめに
今回は、DMX制御できる照明機材をTouchDesigner(以下"TD")で制御するのですが、"Art-Net"というものに乗せて制御する方法を紹介したいと思います。

## Art-Netとは?
PCや照明卓にて照明機材を制御する場合、DMXというプロトコルを使って制御することが多いです。
DMXを入出力するためのケーブルは、PCに直接接続することができないため、インターフェースを挟む必要があります。
このときに使用するのが[ENTTECのDMXUSB PRO](https://www.enttec.com.au/product/controls/dmx-usb-interfaces/dmx-usb-pro-interface/)や[クワテックのDoctor MX](http://www.kuwatec.co.jp/doctormx/)などの製品です。これらのインターフェースは、PCとUSBで接続するタイプのものです。

Art-Netは、(語弊はあるかもしれませんが)ざっくり言うと「DMXをネットワーク上で通信・制御する」ためのプロトコルです。
[ENTTECのOPENDMX ETHERNET](https://www.enttec.com.au/product/controls/dmx-ethernet-lighting-control/ethernet-dmx-interface/)などのインターフェースを使うと、PCとインターフェースをUSBではなくLAN経由(Wi-Fi経由)で通信することが可能になります。
ネットワークで接続できるということは、PCも照明(ユニバース)も複数用意して制御できることになります。
ユニバースで照明の種類を分けたり、複数台のPCや制御卓で照明を制御できるようにすることで、転換や管理、仕込みが安全かつ迅速に行えるようになると考えられます。(特にたくさんの機材を使う現場などで)
また、インターフェースはUSBより有線LANで接続した方が安心です。(おすすめはしませんが、インターフェースをルーターに接続するとワイヤレスでも制御できます。)

つまり、冒頭からごちゃごちゃ言ってしまいましたが、Art-Netで照明を制御すると良いことがいっぱいです!
Art-Net自体についてはググったらたくさん出てくると思うので、気になる方は調べてみてください。(投げやりですみません)

### 追記
[別記事](https://qiita.com/LUDO/items/eec489555ecf3a872197)で解説しました！



## 準備
ということで、実際どのように機材を接続すれば良いのか説明したいと思います。

今回、用意したものは

- PC(Macbook pro)
- USB Type-c変換
- LANケーブル
- ENTTEC OPENDMX ETHERNET(以下、ODE。今回使用したのはmk2ではないです)
- 5PIN(オス) - 3PIN(メス)変換 
- キャノンケーブル(DMXケーブルがなかったので、オーディオ用ケーブルを代用しました)
- moving head(DMX制御できる照明機材)

です。

TDは、2019年8月現在でmacの最新バージョンを使っています。(2019.18360というものです。)

接続は上記の順番で繋げば大丈夫です。
![IMG_4502.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/5e2ddc65-2d95-bf81-8c95-2d88577acb98.jpeg)
(写真のODEの右側とPCがLANケーブルで接続されています。)


## PCのネットワーク設定
まずは、PCのネットワーク設定をしましょう。
(今回はMacでの設定方法を記載します。windowsも設定することは同じです。)
PCの環境設定からネットワークの環境設定に入ります。
左側ネットワーク選択から有線LANを選択して、IPv4を手入力にすると、以下のようにネットワーク設定を変更できるようになります。
<img width="666" alt="2019-08-21 21.44.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/1cc83ba5-1555-0d5d-87a3-6da451f6537f.png">

PCやルーターのIPアドレスはODEと同じネットワークである必要がありますが、ODEのIPアドレスは後ほど変更しますので、任意のアドレスで大丈夫です。(PCとルーターが同じネットワークに存在するようにIPアドレスを設定しましょう。)

今回は、

- PCのIPアドレス : 169.254.206.100
- サブネットマスク : 255.255.0.0
- ルーター : 169.254.206.1

に設定しました。

PCの設定は以上になります。

## ODEの設定
次にODEの設定方法を記述します。
[ENTTECのサイト](https://www.enttec.com.au/product/lighting-communication-protocols/art-net-lighting/nmu/)から、自分の用意したODEの種類を選択して、移動したページからAppsというところにある"N M U: Configure and Manage ODE"というものをインストールします。

インストールしたら、ODEをPCに接続した状態でNMUを起動して"Discovery"をクリックします。
すると、ネットワーク上にあるODEを検出して一覧で表示してくれます。
<img width="544" alt="スクリーンショット 2019-08-21 21.48.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/bbdad65f-5a0f-d984-63d4-129af8aa91a9.png">

この画像では、一度IPアドレスを設定しているため"169.254.~"となっていますが、初期設定だと"10.7.~"になっていると思います。
任意のODEを選択して"Configure..."をクリックすると、IPアドレスなどODEの設定を変更することができます。

ここで、以下の画像のようにそれぞれ設定します。
<img width="728" alt="スクリーンショット 2019-08-21 21.46.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/39682e40-56d9-3e19-74be-881197f7d531.png">

まず、IPアドレスはPCのネットワークと同じにする必要があります。
今回の場合はPCを"169.254.206.100"としたため、ODEは"169.254.~"という形にします。
(変更したIPは、ODE本体などに養生を貼って書いておくといいかもしれません。)
protocolが"Art-Net"になっているのを確認します。
他のパラメータも初期状態のままで大丈夫です。
(複数台接続している場合は、任意のユニバースを設定してあげてください。)
"Save Config"をクリックすると、設定を保存してくれます。(少し時間がかかると思います。)
成功すると、変更した後のIPアドレスの状態で再度ネットワーク上のODEが表示されます。

ODEの設定は以上です。

## TDの設定
それでは、TD側の設定を見ていきましょう。

TDでDMX信号を出力するには、"DMX Out CHOP"を使いますが、このCHOPの設定の前に"Art-Net DAT"を使ってODEの接続情報を取得、確認しましょう。
ODEが接続されている状態で"Art-Net DAT"のPoll Devicesにある"Poll"ボタンをクリックします。
すると、DAT内にIPなどの情報が表示されます。
![スクリーンショット 2019-08-21 22.07.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/86a51f03-b6fd-6978-6c2f-5a9911025095.png)
次に、"DMX Out CHOP"の設定をしましょう。
まず、CHOPのDMXタブ内の"Interface"を"Art-Net"にします。
![スクリーンショット 2019-08-21 22.01.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/6fa312e5-a2a2-ceec-4e9e-ef27a11006bb.png)
このタブ内は、基本的にこのままで大丈夫です。(複数のODE接続している場合、NMUで確認したuniverseにそれぞれのuniverseを割り当ててください。)

次にNetworkタブの"Network address"にODEのIPアドレスを設定しましょう。
"Art-Net DAT"に記載されているもの(NMUで設定したものと同じ)で大丈夫です。
![スクリーンショット 2019-08-21 22.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/b23858de-da97-6077-3436-073e990d0ba2.png)
それ以外はそのままの設定で大丈夫です。

あとは、照明機材の方のDMXアドレスを確認して照明機材自体のチャンネル数に対して、適切な値を送ってあげると制御することができます。
ここについての説明は、今回は割愛します。TDで照明機材を制御するためのサイトはいくつかあるため、そちらをご参考ください。
下でもいくつか紹介しています。

↓複数のPCで同じDMXチャンネルの照明を制御するデモです。↓

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Test &quot;DMX&quot; via &quot;Art-Net&quot;<a href="https://twitter.com/hashtag/TouchDesigner?src=hash&amp;ref_src=twsrc%5Etfw">#TouchDesigner</a> <a href="https://twitter.com/hashtag/DMX?src=hash&amp;ref_src=twsrc%5Etfw">#DMX</a> <a href="https://t.co/l4S4YPGxBa">pic.twitter.com/l4S4YPGxBa</a></p>&mdash; LUDO TAKEBE (@for_LUDO) <a href="https://twitter.com/for_LUDO/status/1164793781159256065?ref_src=twsrc%5Etfw">2019年8月23日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

照明が光ると楽しいですね。

## 注意点
特に複数台で接続するときに起こるであろう注意点を挙げます。

まず、複数台のPCから同じDMXチャンネルに値を送った場合、「値の大きい方の信号を優先する(HTP)」ということに注意してください。PC1が100で信号を送って、そのあとにPC2で50を送っても、100のままです。

また、片方のPCから信号を送っているときに接続を解除すると、その値は残ったままになります。
例えば、あるPCでディマーのチャンネルを255にしたまま接続を切ると、他のPCで操作しても255のままになってしまいます。(もちろん値の大きいものを優先する、という法則は適用されます。)
これを解除するには、別のDMX出力するインターフェースや制御卓に接続する、ODEを再起動する、などの必要があります。("ODEに値を入れ込んでいる"という状態なので、照明機材の方を再起動しても戻りません。)
なので、接続を解除する場合は全てのチャンネルを0にしてから解除しましょう。


## むすび
今回は「とりあえず僕はこれでできました」という方法の列挙になってしまいました。
「書いてある通りにやってみたけど、うまくいかないよ」みたいなことがありましたら、ご連絡ください。

「この辺の説明、誤解生まれるよ」的なご指摘なども大歓迎です!
ぜひ、教えてください。

次は、同じことをTDではなくMaxでやってみたいと思います。
よろしくお願いします。



## 参考にしたサイト、記事

- TDでDMXを制御する方法は、[こちらの記事](https://qiita.com/k_ohara/items/fac500e66dcd8bf00dfe)や[こちらの記事](https://qiita.com/komakinex/items/84f4d4c32fd7d62416d1)が参考になると思います。
- ODEの設定については、[こちらのblog](https://wao99.sakura.ne.jp/suzuki/2016/08/30/post-693/)を参考にさせて頂きました。
- DERIVATIVE社さんの公式サイトで紹介されていた[こちらの動画とtoxファイル](https://derivative.ca/community-post/tutorial/dmx-controller)がとてもおすすめです。英語ですが、そんなに難しくありません。内容もTDのチュートリアルとしてだけでなく、照明制御自体の勉強にもなります。
- pixel mappingをする場合は[こちらのWS動画](https://www.youtube.com/watch?v=ShYYcr30vJw)が非常に参考になります。少し古いものではありますが、現在のバージョンでも変わらず使える手法で、サンプルファイルもあります。