【UE4】DMX初めてな人向けな雑記的な何か

DMXって何？って人がいると思うので簡単な説明から。知ってる人は適当に飛ばしちゃってください。
チュートリアル的なのは他にも書いてる人がちょいちょいいるので、もうちょっとざっくりとしたこと書こうかな。

##DMXって
DMXって言うとムービングライトとかの制御を思い浮かべると思うけど、簡単にいうとDMXってただの数値(chとvalue)を送受信するだけなのでMIDIやOSCと同じって考えると理解しやすいかも。

色を扱いたかったら1ch:R/2ch:G/3ch:B、動きを扱いたかったら1ch:Pan/2ch:Tiltみたいに用途によって定義する感じで。
色系ならいわゆるLED Pixel Bar的なものを作って制御も出来るし、動きなら単純にオブジェクトの位置を動かしたり。
ムービングライトになると色と動きの複合なので1ch:Pan/2ch:Tilt/3ch:R/4ch:G/5ch:Bとか。
_※Chの定義はアセットによって違うし説明のために超適当です。_

##なんでDMX使うの？
MIDIとかOSCでよくない？って思うかもしれないけど、DMXを使う理由というか使う場面はDMX卓(コントローラー)やDMX対応のソフトウェアを使いたいってときかな。
入力用にMIDI鍵盤使いたいときにMIDI使うみたいな。

具体的に言うと、照明さんがバーチャルライブでDMX卓使ってリアルと同じようにUE4内のバーチャル空間でも照明操作したいとか。

##UE4的な話
[公式](https://docs.unrealengine.com/4.27/ja/WorkingWithMedia/CommunicatingWithMediaComponents/DMX/)を見た方が正確だしわかりやすいと思うけど一応ざっくりと簡単な説明を。

1.DMXLibrary作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/c461b1da-b285-476b-66d1-f820f4755e7f.png)
2.フィクスチャタイプ(灯体の種類)作成>フィクスチャ内で使うチャンネル(RGBとかPan/Tiltとか)設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/92aa4cae-73eb-ed6c-b7e7-556511840404.png)
3.↑で作ったものを受信したデータのどのチャンネルに割り当てるかの設定。
知らないとちょっとわかりにくいところかも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/7a09ef4b-9401-60b1-e687-283864ea6314.png)
ここがずれるとひどいことにｗ
色を扱う場合に _1:R/2:G/3:B_>_1:none/2:R/3:G_ とかになっちゃったり…
3DCGやってるとアプリによってXYZ軸が入れ替わることとかよくあるけどあんな感じ。

で、上記の設定で受信したデータを取り出してActor内で利用する。
_※↓はRGB chを取得してLinearColorにしてます。_
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/1bde07ca-b878-f5a0-e766-9c96fc05ed5e.png)


##で具体的に何に使うの？
ムービングライトとかは公式のものを見るといいかなと。

https://docs.unrealengine.com/4.27/ja/Resources/Showcases/DMXPrevis/

ボクが最近つくってるものだといわゆるLED Pixel Barのアセットを作ってて、[Resolume Arena](https://resolume.com/)というVJソフトが映像をDMX信号に変換してくれるのでそれでUE4に流し込んで制御してみたり。
バーチャルライブでVJソフト使って電飾をVJ的に制御出来る！

https://twitter.com/xxJulexx/status/1339610627107561472

LightActorのLightColorに割り当てたりも出来るのでアイデア次第で色々出来るかな？
_↓はDMX Pixel Mappingという機能でUE4内でカラーピッカーしちゃってるんだけど外部からDMX流し込めば画的には同じように出来るので参考までに。_

https://twitter.com/xxJulexx/status/1336914414109294593

_↓DMX Pixel Mapping使っちゃってるけど実は外部からDMX流し込んだ方が圧倒的に楽！_

https://twitter.com/xxJulexx/status/1442773487999799300

あとは単純に何かのトリガーとして使うとかも。

普段からDMXに触れてる人じゃないとなかなか使うことはないと思うけど、今後UE4でバーチャルライブ系が広がってくると使う機会も増えてくるんじゃないかな。

照明演出なんかはやはり照明さんの方が圧倒的に知識もセンスもあるけど、なかなかUE4のシーケンサーで打ち込みとか覚えてもらうわけにはいかないし、そもそも専用のDMX卓と比べると出来ることが全然違うし。。。
なのでUE4で仕組みだけ作って演出は照明さんにやってもらうっていうのが個人的には理想かなと。

そっち系に興味がある人はちょっとさわっておいてもいいかなと思います。

##補足
※4.27からDMX入出力周りの設定がDMXライブラリから以下に場所変わっちゃってたのでそれでつまずいてるが人いたら参考に。
_編集>プロジェクト設定>プラグイン>DMXプラグイン_
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/88794d1f-2906-57ee-14db-a1632f722d2c.png)

※映像クリエーターがLED Pixel Barで細かい演出するなら_Aftereffects>NDI>Resolume>DMX>UE4_でプレビューしながら映像ソース作って書き出したのを_Resolume>DMX>UE4_でリアルタイム or UE4のシーケンサーでDMXをRecがたぶん最適解。

※DMX Pixel Mappingは処理がけっこう重いので外部DMX使えるなら実はあまり使いたくない…

※DMXFixtureコンテンツのLightFixtureをMIDIとかOSCで制御したい！ってときはTouchDesignerでMIDI or OSC>DMX(ArtNet)変換すると幸せになれるかも。
MIDIコンとかDAWで制御出来るようになる！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/e5180f8c-68fb-6d47-b013-a2a95a66f20d.png)
↓MIDIの場合はこんな感じでMIDI InとDMX Outを繋ぐだけでいける！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102588/72969926-15f4-ff49-baf0-4d5d99b3ce01.png)