見出し画像

劇団ノーミーツ『むこうのくに』の舞台裏〜照明編〜

劇団ノーミーツで映像演出や配信技術を担当しています、水落です。
この記事では、「むこうのくに」で今回使用した照明の演出について、技術的な部分を紹介していきたいと思います。OBSの配信の仕組みについてはこちらをご覧ください。


どんなシーンで使っていたか

オープニングの、ヘルベチカにログインするシーン。BGMが掛かると同時に、リアルの部屋からCGの世界に取り込まれるように画面が光り出します。

こちらはゆっくりとした変化ですが、物語の後半、主人公の心情に合わせて、徐々に照明が明るくなっていくようになっています。

Hueを使った照明演出

照明の光量や色を調整するために、Philips HueというLED電球を使用しました。IoT界隈では非常に有名な製品ですが、zoom演劇では照明効果をつけるのに十分活用できます。こちらの電球はHue Bridgeという四角い端末とBluetoothで繋がっており、さらにHue BridgeをLANケーブルで家のローカルネットワークに繋げることで、アプリやPCなどから制御できます。

画像1

(Hue 概要図 from Philips Hue developer website)

設定方法

WindowsからもブラウザやAnacondaなどを利用してほとんど同じ方法でできると思いますが、今回はmac でPythonアプリケーションを作成し、Hue Bridgeに対してHTTP通信を行うことでHue Bridgeに繋がった全ての電球をコントロールするようにしました。HTTP通信をブラウザで試したり、pythonで通信する実装はこちらの記事が大変参考になりました。少しひっかかりやすいのが、最初にHue Bridgeをコントロールするユーザーを作成するために、Hue Bridgeの中央のボタンを押してすぐにPOSTを投げないとユーザーが作成されないのが、何度か試す必要がありました。ユーザー名を取得できれば、あとはPython標準モジュールのrequestsなどを利用して電球をコントロールできます。また、Hue BridgeのIPアドレスは、最初に純正のアプリを使ってHueを設定し、右下の「設定」から「Hueブリッジ」を辿っていくとIPアドレスを調べることができます。

Hueはその名の通り、色をコントロールできるようになっており、下の図のような色空間の中でのXYの値を指定することで滑らかに色を動かすことができます。

画像2

例えば、

import requests

username = "********************" # ここに取得したユーザー名を入れます
ip = "192.168.**.**" #Hue  BridgeのIPを入れます

HUE_API = 'http://'+ip+'/api/'+username+'/lights'

jsonData = {"on":True,
            "bri":255,
            "transitiontime":100,
            "xy":[0.35, 0.35]}​

requests.put(HUE_API + '/1/state', json = jsonData)

のような実装で、明るさ、XYの色(ここではほぼ白)、遷移速度を変えることができます。

参考までに公演で使用したPythonアプリのコードはこちらに置いてあります。ユーザー名が書かれていますが、それぞれのローカルでしか動かないコードですので自分のHueハブに接続して取得したユーザー名をここに入れてください。

実運用のためのGUI化とアプリ化

Python環境が全てのPCに入っている訳ではないので、py2appletとTkinterを使用してアプリ化します。これで操作時にコマンド入力する必要はなくなりました!

遠隔でコントロールするための仕組み

今回の公演では、役者がいる場所にアプリが入ったPCを設置し、そのPCにリモートデスクトップ接続することで、遠隔から制御しましたが、アプリケーション上は、リモートデスクトップを使わずに遠隔制御することも可能です。今回はAWS IoTの仕組みを使い、遠隔でアプリケーションに命令を送れることを確認しました。また単純なON/OFF制御だけであれば、Hueの純正アプリケーションでアカウント登録するだけで、外部ネットワークからでも操作可能です。こちらの機能は一般的な自宅外からのON/OFF制御を想定しており、時間制御などはできないので、自前で外部と接続できるようにします。

画像3

AWS IoT Core を使った遠隔制御

AWS IoT Coreの使い勝手がよかったので、ここでは簡単に方法を紹介します。詳細はAWSの公式チュートリアルで手順を追ってみてください。

メインの通信に必要な部分のソースコードはこれぐらいになります。

受信する側(server.py)

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

def customCallback(client, userdata, message):
   print('Received a new message: ')
   print(message.payload)
   print('from topic: ')
   print(message.topic)
   print('--------------\n\n')

myMQTTClient = AWSIoTMQTTClient('myClientID2') # 適当な値でOK
myMQTTClient.configureEndpoint('a********s.iot.us-west-2.amazonaws.com', 8883) # 管理画面で確認
myMQTTClient.configureCredentials('data/rootCA.pem', 'data/*******-private.pem.key', 'data/*******-certificate.pem.crt')
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
myMQTTClient.connect()
print("MQTT connect done")

while 1:
    myMQTTClient.subscribe("myTopic", 1, self.customCallback)

送信する側(client.py)

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

myMQTTClient = AWSIoTMQTTClient('myClientID2') # 適当な値でOK
myMQTTClient.configureEndpoint('a*******p-ats.iot.us-west-2.amazonaws.com', 8883) # 管理画面で確認
myMQTTClient.configureCredentials('data/rootCA.pem', 'data/*******-private.pem.key', 'data/*******-certificate.pem.crt')
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
myMQTTClient.connect()

message = "AWS IoT Core に送る message"
myMQTTClient.publish("myTopic2", json.dumps({'message' : message}), 1)

証明書を取得したりAWS IoT Coreのサービス画面での設定が必要だったりと繋がるまでは心配ですが、一度実行すると2回目からは0.5秒ほどの遅延で遠隔のデバイスにPythonで通信することができ、ある程度の通信回数であれば無料枠もあるため、Hue以外にも様々なケースで使えると思います。


ここまでご覧いただきありがとうございました。

劇団ノーミーツ『むこうのくに』の舞台裏〜なぜタイチは黄色かったのか?(舞台美術編)〜

につづく

この記事が気に入ったらサポートをしてみませんか?