技術レビュー

激安DMXコントローラーを使ってUnrealEngineの照明を操作する

 今回はUnrealEngineの照明を外部からコントロールしてみようというお話です。UnrealEngineではその高品質なレンダリングエンジンによりリアルなライティングをライブで操作ができます。そのためスタジオや舞台照明のシミュレーションに使用したり最近ではVTuberバーチャルライブステージに使われたりします。またUnrealEngineから外部のリアルな照明のコントロールもできますのでVRだけでなくXRステージでのライティング表現もこなしてくれます。照明のコントロールには外部ハードウェア/ソフトウェアが使用できますが今回はリアルなフェーダーを持つ照明コントローラー(激安!?)を使ってバーチャルスタジオの照明を操作します。
解説動画のUEバージョンは5.5.3、OpenXR使用のトラッカーを使っています。

 照明のコントロールというと昔は個々のライトへ直に調光器という電圧を変化させる機器が繋がり、明るさを調整していました。普通の撮影スタジオであればこのような単純なシステムでもいいのですがステージや舞台照明など色が変わったり照明自体の向きを変えたり、果てはレーザーや煙を出すという高度な演出をしようとするとそれぞれに独自のコントロール機器が必要で連携して使おうとするとこれまた独自のコントローラーが必要になり大変なものでした。
 それではまずいということでどの照明関連機器に対しても共通のコントロール方式としてDMX512という規格がアメリカ劇場技術研究所によって開発されました。ステージ照明、スタジオ照明などで使われ始めましたが現在ではイルミネーションの制御、建築の照明制御にも使われています。

 DMXの特徴
・EIA-485 (RS-485) を使ったXLR 5ピンまたは3ピン(非標準)のケーブルで転送 最大400mの距離を伝送可能
・コントローラーから各灯体(照明器具)へは数珠繋ぎ、1ラインごとに32灯体が接続可能
・DMXの1出力ごとに512チャンネルの制御が可能(これをUniverseという単位として数えます)

チャンネルの説明ですが灯体が明るさだけの制御を持つなら1チャンネルを使用、明るさのほかに赤緑青と調整できるなら4チャンネルを使うということになります。各灯体には使用する最初のアドレス番号を設定するのですが例えば4チャンネル制御の3灯体を個別に制御するならアドレス番号をそれぞれ1、5、9と被らないように設定、同時に動かすのであればすべて1に設定というようなことになります。どうしてこういうことをするかというとコントローラー側からはどういった機能を持つ照明が繋がっているか把握する術がなく、単純にチャンネルごとに操作した値を送っているだけです。なので照明側にどのチャンネルを使うのか指定する必要があります。これをアドレス指定という言い方をします。制御できるチャンネル数が多い灯体を増やしていくとチャンネル上限に達しやすいのですがその場合はUniverseを増やして対応することになります。

 DMXコントローラーを購入
 まずは調光操作をするDMXコントローラーを手に入れます。価格的にはピンキリあって高級外車が買えるようなものもあれば数万円程度のものもあります。使用する照明の数やチャンネル数、調光メインかエフェクトメインなのか使い勝手などで選ぶのが本道ですが今回は実験要素もあるのでなるべく安いものをAmazonで選びました。

 LIXADAという聞いたこともないメーカー? の製品です。同じような製品が複数の別会社からも発売されていて、元ネタがわからない正規のOEMなのかコピー品なのかもわからないAmazon、アリエクあるあるです。¥7,000くらいで購入しました。DMXコントローラーとしては激安です。あまり大きいもの買って失敗してもなんですのである意味手頃かなと。

 もう一つ購入したのはUSB-DMX変換ケーブルです。DMXはRS-485というシリアル転送規格ですのでそれをUSBに変換、PCと接続してデータ転送させるものです。内部にはFTDI社の変換チップが使われています。シリアル転送では業界標準です。¥2,500くらい?

 と材料が揃ったところでUnrealEngineとの接続ですが、ここでUnrealEngineのDMXに関するドキュメントを見てみると、、

 購入したケーブルが使えないことがわかります。買う前によく読めって感じですよね、、いつのバージョンなら使えるようになるんでしょうか?

 UnrealEngineでDMXの取り扱い
 DMX信号をUnrealEngineで使うことができるのですが規格にある5ピン/3ピンケーブルがそのままつながるのではなくEthernet版DMXであるArt-NetやsACNプロトコルを使うことになります。購入したDMXコントローラーを使うにはArt-NetやsACNプロトコルに変換できるブリッジのようなものが必要ということになります。

DMXコンバーターなるものは存在するのですがしっかりしたメーカー品となると安くても4〜10万円位になるようです。せっかく激安機材を手に入れたのにこの出費は痛いところです。今回はちょっとお試しという感覚なのとコンバーター買ってしまうと話がここで終わってしまうので別な方法を考えてみることにします。

 どちらもEthernetベースのDMXデータ転送プロトコルです。イベントで使う照明デバイスの増加、デバイス自体の多チャンネル化によって従来のDMXでは追いつかなるため考え出されたものです。Art-NetはArtistic License社が開発、ライセンスフリーでリリースしたプロトコルです。sACN(E1.31とも言う)は業界団体であるESTA(Entertainment Services and Technology Association)が策定したものです。どちらも業界標準ではあるのですがsACNは後発のため機材によってはまだ対応していない場合があります。Universeが何百とあるようなシステムならaACNが有利だったりしますがマルチキャスト送信のため適切なネットワーク設計が必要になります。今回はArt-Netを使ってみました。

 DMXデータをArt-Netにブリッジさせるために使用したソフトウェアはQLC+ というものです。QLC+はこれ自体DMXコントロールソフトウェアなのですがその機能の一部としてArt-NetやsACNを含むDMXインターフェースの入出力機能があってUSB-DMXケーブルも対応しています。DMXソフトウェアというよりDMX-ArtNet変換ノードとして使うことにします。

 UnrealEngineのPCにQLC+をインストール。先の捨てずに済んだDMX-USBケーブルでPCとコントローラーを繋ぎ、Art-NetはPC内で自分自身にルーティングすればいいんじゃない? と思っていたのですがWIndows版 QLC+ だとDMX-USBケーブルで使うFDTIドライバの関係上うまく動かないことが判明。

MacやLinuxだと動作するようなのでMacで試してみると確かに動く、、
 とはいえDMX-ArtNet変換ノードのためにMac1台使うのも勿体無い気がします。そこでQLC+にはRaspberryPiバージョンがあるのでそちらを試してみることにします。

 使ったのはRaspberryPi Zero WH です。数年前に仕事用に購入したものですが長らくほったらかしにしていたものです。当時¥1,500くらいで買った気がします。
 QLC+はオープンソースなのでRaspberryPi用に自分でビルドすることもできますが面倒くさい場合は寄付という形でOSとQLC+が入ったイメージがダウンロードできるのですぐに使うことができます。日本からだと何故か寄付ができないのでオンラインストアから「購入」という形で手に入れることができます。

 最初の設定はディスプレイ、マウス、キーボードを繋いで行いますが、終わればヘッドレスで大丈夫です。何かあればSSH接続で操作したり、QLC+がWebサーバー機能を持つのでブラウザから簡単な操作なら行うこともできます。またRaspberryPi Zeroが小さく、激安DMXコントローラーの中がスカスカなので全て内部に仕込み、電源も同じところから取るようにしました。なので全く外見は変わってません。通信はWiFiで筐体に囲われてますが自身の環境では通信レベルに問題がなく使えています。問題が出れば筐体に穴開けるかRaspberryPi にUSB-Ethernetアダプタつけて有線で通信することもできますね。

 UnrealEngineではプロジェクト設定→プラグイン→DMXの設定を行います。プロトコルタイプ(ART-NETがsACN)、使用するネットワークカードのIPアドレスなどを指定するとDMXデータを受け取れるようになります。コントローラーのフェーダーを動かしてDMXチャンネルモニターの表示が変化していれば成功です。ART-NETの場合使用するIPが 2.xxx.xxx.xxx もしくは 10.xxx.xxx.xxx の範囲を使用するのが規定ですが今回の場合192.168.1.xxx のようなローカルネットワークでも構いません。使用するDMX機材によっては規定のIP範囲内でないと動作しないことがあります。

  DMXコントローラーからの制御ができればUnrealEngine内でフィクスチャを作成しアドレス指定(フィクスチャパッチ)を行います。上記の図はそのワークフローです。フィクスチャのアクタはUEにあるテンプレートを使ったりオリジナルのフィクスチャを作ることもできます。またGDTFやMVRファイルを取り込めるので実在するフィクスチャでのシミュレーションも可能です。今回はテンプレのフィクスチャBPアクタを利用しています。

 ということでUnrealEngine内のライトを制御するためにDMXコントローラーを使いましたがそのレビューになります。

 ・Raspberrypiの起動に30秒ほどかかる
 SDカードからのLinux起動ですからしょうがないのですが、ぼうーっとしていれば30秒なんてすぐです!

 ・安全なシャットダウンがちょっとめんどい
 SDカードに書き込み作業が行われていなければ電源ブチ切りでいいんでしょうけど一応現在はSSH経由のShutdownコマンド打つかQLC+にブラウザでアクセスしてそこでShutdown操作をしています。ラズパイ用に別に電源スイッチ設けるかコントローラー含めたもう少しインテリジェンスな電源回路作るかですがそこまでするかどうかというところです。

 ・ラズパイが高くなってる
 手持ちの古いRaspberryPi Zero W を使ったからいいものの現在では円安なのか後継のZero2Wが ¥3,000- もします。DMX Art-Net変換器を買うよりは安くなりますが最近またAmazonで1万円くらいの変換器を見つけてしまい、大事を取るなら多少高くてもそっちを選んでもいいかもしれません、、

 ・もっとQLC+を活用したい
 せっかく高性能DMXコントロールソフトがインストールされているのにプロトコル変換ノードとしてだけしか使っていません。そもそもRaspberryPi Zero WにGUIでゴリゴリ動かすようなパワーはないので最初から頭になかったのですがDMXコントローラー筐体のスキマからすれば標準サイズの高スペックなラズパイくらいは組み込めそうです。モニタータッチパネルをつければ激安とは思えない高性能DMXコントローラーになるかもしれません。

 ・激安DMX ART-NETコンバーターが存在する
 実は1万円くらいでDMX ART-NETコンバーターが存在するようです。Lixada DMXコントローラーと同じで元ネタがわからないものなので私からは勧めません。あくまで自己責任で!今回使ったWifi接続よりも有線で繋いだほうが安全であることは言うまでもありません。

 ・照明が複雑になるとノイズが発生する
 DMXの話ではないのですが、今回UnrealEngine5.5の新機能MegaLightsを使っています。ほぼ無制限に動的ライトを配置してレイトレーシングをするというとんでもない高機能が備わっているのですがたくさんのライトを瞬時に変えていくとGPUの計算が間に合わずノイズが発生します。動画の最後に照明を変えながらキャラが激しいダンスをする箇所があるのですが見ていただくと残像のようなノイズが発生しているのがわかると思います。さらにキャラの顔はパンスト被ったようなクオリティになり何故か出っ歯っぽくなっています。(私は出っ歯ではありません)これはライトの配置や光らせ方で回避できるようです。