照明制御プロトコルのArt-Netについて(TouchDesignerと共に)

## はじめに

以前、"[TouchDesignerでDMX機材を[Art-Netを経由して]制御する。](https://qiita.com/LUDO/items/25e2a27619a05fffeab9)"という記事を書きました。
こちらはTouchDesigner(以下、TD)の説明とODEの設定についてをさらっとまとめたものでしたので、検索したら上位に出てきやすいですが我ながら内容の薄い記事だな、というのが感想でした。


そこで今回は、(リクエストもあったので)Art-Netという規格とはどんなものなのか、設定を変えるとどうなるのか、という部分について(プログラマではなく)現場の舞台照明さん目線で記事を書きたいと思います。
特に最近は海外から安い電飾を大量に仕入れることができるようになり、いろんな方がTDで自作のプログラムを書きDMXの制御をしている印象です。また、バーチャルライブの案件では、UEやNotchなどの3DCGソフトにDMX信号をArt-Netなどで入力してバーチャル照明を制御しているところをよく拝見します。
自身の記事の内容アップデートが記事のモチベーションです。~~が、本当の思いとしては、なんとなくの設定でたまたま通信できた、みたいな方が実績としていろんなSNSに写真や動画をアップロードしているのを各所で見かけたので、~~ この記事を読んでちゃんと理解しようと思って欲しい ~~(自分の理解がとても浅いと理解してほしい)~~、と思って書きました。
照明制御や電飾などの制御はとても奥が深いです。~~が、(なぜかわかりませんが)自称なんでも屋さんや自称メディアアーティストみたいな方々から知ったかぶりをされることが多い印象です。たしかに"とりあえず通信する"とか"とりあえず光らせる"みたいなレベルのことをするのはとても簡単でアウトプットもそれっぽいものになりがちなのですが、全然理解していないのに、私たちは全然扱えますよ、みたいな雰囲気を出されがちでちょっと...です。~~(本当にすごいのは、簡単にそれっぽくなるように規格や照明機材を考えた先人たちです。)
それはそのまま僕自身に返ってくる気持ちでもありますが...。


Art-Netの概要についてまとめた後に、実践編についてはTouchDesignerでArt-Netを使用するためのオペレータ(DMX IN/OUTのchop)の各パラメータに沿って記載します。

TD version : 2022.32120

## そもそもArt-Netとは
Art-Netとは、EthernetネットワークにおけるUDP/IPを使用し、DMXやRDM、タイムコードなどの信号を伝送する規格です。DMXをイーサネットで伝送する規格は他にもsACNや各照明卓メーカーの独自規格などいくつかありますが、舞台現場で最も一般的に使用されている印象です。
>細かい話をすると(後ほど詳細は記述しますが)、ユニキャスト・ブロードキャストに対応しているのがArt-Netで、ユニキャスト・マルチキャストに対応しているのがsACNになります。また、sACNは複数の照明信号が同じユニバースに入力された際にHTPやLTPで信号を合成するのではなく、ユニバースごとに優先順位をつけて管理することができるのも大きな特徴の一つです。
バックアップシステムとして利用すると効果を発揮しますね！

これらのプロトコルは、DMX512-A(以下、DMX)という照明規格を複数まとめてイーサネット上を行き来することができるというのが基本的な特徴です。本来、DMXは5PINのキャノンケーブル(特性インピーダンスは110Ω程度)で伝送される信号で、一本のケーブルに対して512chしか通信できないものです。これは3PINのDMXケーブルでも同じチャンネル数になります。
今まではこれで事足りていたのですが、最近は様々な機能をもった機材が増えてきたことにより、灯体ごとに必要なチャンネル数が増えてきました。また、照明制御側の性能も向上していることから、たくさんのDMXを使って高性能な灯体を大量に扱いたくなることが多いです。
そうして、512チャンネルだけでは全然足りなくなってしまい、DMXケーブルを何本も引き回してたくさんのDMXチャンネルを灯体側に送る必要がでてきました。

そこで生まれたのが、Art-Netなどのイーサネットを用いた伝送プロトコルです。これらはその512のDMXチャンネルのかたまりをユニバースという単位でまとめて、1本のイーサネットを使い大量にユニバースを伝送できることができます。
ちなみに、Art-Netにもバージョンがあるのですが、Art-Net3や4(最新)では最大32,768ユニバース(16,777,216ch)も伝送することができます。こうなると、制御する人間側の管理が追いつかないレベルですね。。(フルで使うことはほぼないですが、途中を間引いたりしながら制御機器や灯体の種類ごとに分けることで大量のユニバースを使うことはあります。)
いまだに照明機材(灯体)にはDMXケーブルを挿して通信することがほとんどですが、高性能な灯体ではイーサネットポートがついていてArt-Netを直接受信することが可能なものもあります。

>ちなみにプロトコルの中身についてはあまり詳しくないのですが、 ~~TCP /IP(Transmission Contorol Protocol / Internet Protocol)の中のうち~~ UDP（User Dategram Protocol)を使用しています。ざっくり言うとOSCなどと同じ部類ということですね。
デフォルトでArt-NetはUDP portの6454番を使用して通信しています。
→<b>訂正ですが、こちら"はTCP/IPのうちのUDP"というのは正確ではないとのご指摘をいただきました！(筆者が勉強不足ですみません。。)シンプルにUDP/IPに基づいた通信規格です。<b/>


とても余談なのですが、Art-Netというのは通信のプロトコルなので、Art-Netに対応していると書いてあれば基本的にどんな種類のソフトとどんなArt-Net NODEでも通信することができます。PCにドライバーを入れたりする必要はありません。
なぜこのようなことを書くかというと、たまにArt-Net nodeの商品説明欄にわざわざ"TouchDesigner対応"や"Max8対応機器"などと記載されていることがあります。これは、嘘ではないのですがArt-Net対応の機材なので当たり前のことです。
わざわざ分けて書いている意味がよく理解できないですが、その機材がいろんなものに対応しているのがすごいということでなく、Art-Netという規格がすごいのです。


## IPアドレスについて
Art-Netを使う際ですが、ネットワーク上で通信を行うためIPアドレスの設定は重要になります。
基本的にArt-Netを扱う場合はIPアドレスの第一オクテットは"2"か"10"に設定することが一般的です。これは、特に守らなくても通信ができないということではありません。むしろ、2.0.0.0~というのはプライベートIPアドレスの範囲外ですよね...。
ですが、MA LightingのgrandMA2という世界シェアトップの照明卓は、このルールを守らなくてはArt-Netの信号を出力させてくれない仕様になっていたりします。
その他、IPアドレス設定の際に気を付けることは、一般的なUDP通信をする際と同様です。サブネットなどと一緒に適切に設定しましょう。



## 伝送方式の種類と特徴
IPアドレスの設定とも一部被ってきますが、上記のようにArt-Netはユニキャストとブロードキャストの2種類の伝送方法があります。
照明信号に限らず、一般的な通信でも使われる用語なので知ってる方も多いと思いますが、ざっくり言うと"1対1"か"1対全"か、という違いになります。


ユニキャストは1対1の通信となるため、送る側が送信先のIPアドレスを指定して通信することになります。
関係ない信号を受信する手間が省けるので信号を受ける側の負担は少ないですが、送信側は送る相手の数だけ信号を出力しないといけないため大変です。
ブロードキャストは1対全の通信となるため、送る側はIPアドレスで範囲を指定するだけで、その範囲内の全ての機器に同じ情報を送信することが可能です。基本的に、送信先のIPアドレスの後ろオクテッドを255にしたらブロードキャストになると考えてください。
送信側は、細かい設定をする必要がないため非常に楽ですが、受け取る側は自身に必要な情報なのか、というのを判断するところから始まるので、非常に負担が大きくなります。(これでレーザーのPCソフトの挙動がおかしくなったことが何度かあります。)
内容に依りますが、適切な通信方法を選択し設定しましょう。


ユニキャスト・ブロードキャストの詳細については、他に詳しい記事がたくさんあるので、気になる方は検索してみてください。


## ユニバースについて
先ほど、Art-Netは最大で32,768ユニバースも扱うことができる、と記載しました。これを通し番号で管理すると大変なことになるので、Art-Netは3つの大きな単位"Universe / SubNet / Net"でIDをつけて管理しています。
一番大きな単位はNetで、一番小さな単位はUniverseになります。(つまり、Netの中にSubNetがあり、そのなかにUniverseがあります。)

 - Universe
こちらは上述の通り、DMXの512chで一つとなります。このユニバースの数を系統数と呼んだりします。
0~15までの数字で指定して管理します。

 - SubNet
こちらは0~15までの16系統のUniverseをまとめたものになります。
同じく0~15までの数字で指定して管理します。
Art-Net1, 2はこのUniverseとSubNetしかなかったので、最大で256ユニバースしか使えませんでした。(十分多いですが...。)

 - Net
こちらは、SubNet(及びその中のUniverse)をまとめたものになります。
0~127までの数字で指定して管理します。

これらの"Net：SubNet：Universe"を用いてArt-Netのユニバースを指定します。
単純計算で128 × 16 × 16で32,768ユニバースですね。
ちなみにユニバースは一般的に0からスタートしますが、grandMAシリーズは卓内のパッチを1からスタートさせます。(ので、必ず一つズレます。。。)
例えば、通し番号でユニバース0は"0:0:0"となり、ユニバース18は"0:1:2"です。


実際の現場ではさまざまな照明機材を使用するため、灯体の種類ごとにユニバースを分けて管理することが多いです。
(逆に会場の回線の都合などで、全ての信号を512chの1系統に収めることもあります。)
例えば、一般灯体のPARライトや会場の常設機材をユニバース0(1系統目)にして、持ち込み機材のLED類をユニバース1(2系統目)、ムービングライトをユニバース2以降、などのようにするとわかりやすいです。
照明卓を分けて制御する場合は、各卓で扱う灯体を分けて、一つ目の卓で使う灯体はサブネットの0番のユニバース0~15に振り分け、二つ目の卓で扱う灯体はサブネット1番のユニバース0~15、などのように分けても良いと思います。
(特に電飾などのLEDはたくさんのチャンネルを使用するので、ちゃんと分けた方が無難です。)


## TouchDesignerでのパラメータについて
では、上記のArt-Netの内容をTouchDesignerでどのように設定して使用するのか、というのを見てみたいと思います。

### DMX IN
![スクリーンショット 2023-02-17 16.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/154b0658-fc1e-1c26-1d17-65e0093a5493.png)
DMX In chopは文字通り、DMXの信号を受信するためのchopです。

 - Interfaceの部分はデフォルトでEnttecのUSB Proになっているので、こちらを"Art-Net"に変更します。(もちろん、sACNや他の方法を使用する場合はそちらに設定します。)
 - Formatはデフォルトの設定が無難です。Latestに設定してしまうと、場合によっては信号が破棄されてしまい挙動がおかしくなる可能性があります。
 - Net, Subnet, Universeの3つが、前述のユニバース設定になります。
 - Local Addressは、TDを開いてるPC(受信するPC)のIPアドレスのうち、Art-Netで通信をするイーサネットportのIPアドレスを設定します。
 - Rateは入力するArt-Net信号のrate(サンプリング)です。一般的には最大の44Hzですが、デフォルトの30でも問題ないと思います。
 - Keep Values...やClear Outputは、基本的にデフォルトで大丈夫だと思います。入力した信号が残ると困る場合のみ変更が必要です。

### DMX OUT
![スクリーンショット 2023-02-17 16.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/9bc91239-4095-8304-cba5-4e81be54cb31.png)
![スクリーンショット 2023-02-19 13.11.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/f0a86b7e-26b9-61ef-e5aa-f872eccf1ef1.png)
DMX Out chopは文字通り、DMXの信号を出力するためのchopです。
こちらの方がパラメータが多いですね。

- 1タブ目のDMXセッティングについてはDMX Inと同様です。
- 2タブ目のNetwork項目について、"Network Address"は送信先のIPアドレスです。デフォルトでは"255.255.255.255"になっています。これは上記のようにブロードキャストを表しますが、その中でもリミテッドブロードキャストと呼ばれるもので、同じネットワークにある全ての機器に送信されます。ユニキャスト通信をする場合は、ここに送信先のIPアドレス(255を使用していないもの)を設定します。
- Local AddressはDMX Inと同様にこのTouchDesignerを開いているPC(送信元PC)のIPアドレスです。Art-Netで通信をしたいIPアドレスを指定します。
- Local Port以下については、ほとんど設定を変更することはありません。Art-Netは上記のように6454番を使用してUDP通信をしているのですが、そのportを変更する必要があるときにここの設定を変更します。送信側と受信側のそれぞれのportを指定します。


### その他
DMX In chopをInfo chopに入れると、当然いろいろな情報が見えます。
![スクリーンショット 2023-02-17 16.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474709/552b350a-6e97-8f3f-3652-d0c2cc6dc870.png)
ここで一つ、とても大事な情報が...
先日調べていてたまたま発見した裏技的な仕様なのですが、ArtTimeCodeが入力できます！
ArtTimeCodeとは、Art-Netプロトコルを用いたTimeCodeのことですね。
そもそもArtTimeCodeを出力することができる機材というのも少ないですが、レーザーなどでもよく使用する[Visual ProductionsのTimeCore](https://www.visualproductions.nl/products/timecore)という機材などが対応しています。


## むすび
余談も挟みつつ、わーっとArt-NetとTDでの各設定について解説をしました。
勢いで書いた部分もありますので、後々更新する可能性が高いです。
今回もTD側の解説が少なくなってしまったので、実際にどのようなプログラムを組むとDMXの制御がしやすいのか、というのも、自身のやっている範囲内で紹介していけたらと思っています。

ちなみに実際のプログラムについては触れてませんが、どのようにTDをシステムに組み込み、照明や映像を制御しているのか、という部分については、[自身のnote](https://note.com/ld_/)の記事でいくつか紹介しています。
照明卓とTDを連携させるメリット/デメリットについてまとめてますので、合わせて読んでみていただけますと幸いです。



以前は、Art-Net(DMX)を使いこなせるようになるととても強力な武器になる、と言われていましたが、現在では使用できるのが当たり前なものとなっている印象です。。
よく調べて詳しくなることにデメリットはほぼないと思いますので、この機会にさまざまなサイトなどで調べてみるのも良いと思います。

記載内容に不備はないよう努めましたが、ご不明点やご指摘などあればコメントをいただけますと幸いです。
よろしくお願いいたします。


## 参考サイト
- [ウシオライティングの営業サポートブログ](http://www.ushiolighting.co.jp/entertainment/blog/?tag=art-net)
- [照明ネットワーク概論](https://show-network-lab.hateblo.jp/entry/artnet)
- [Derivative TouchDesigner Documents](https://derivative.ca/UserGuide/DMX_In_CHOP)