はじめに
BlenderでUDP通信してサーバーにCubeの色情報を送ってみましょう
開発環境
- UDPクライアント
- Windows 11 PC
- Blender 3.5.0
- UDPサーバー
- Windows 10 PC
- Python 3.9
導入
1.同一のWiFiに接続しておく
2.UDPサーバー側のプログラムを作成し、実行
サーバーを起動し、BlenderからのCubeの色情報を取得、コンソールに表示します
import socket
# ソケットを作成する
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# サーバーアドレスを設定する
server_address = ('192.168.0.212', 5005) # ipconfigでIPアドレスを確認
sock.bind(server_address)
# データを受信する
while True:
data, address = sock.recvfrom(4096)
if not data:
break
# 受信したデータをパースする
data = data.decode()
r, g, b = data.split(',')
r = float(r)
g = float(g)
b = float(b)
# パースしたデータを表示する
print(f'Color: ({r}, {g}, {b})')
3.Blenderを開き、Scripting->Text->NewからUDPクライアント側のプログラムを作成
Cubeを生成し、色をランダムに変更、サーバーに色情報を送ります
import bpy
import socket
import random
# ソケットを作成する
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# サーバーアドレス
server_address = ('192.168.0.212', 5005)
# 立方体が既に存在するかどうかをチェックする
existing_cube = bpy.data.objects.get("Cube")
if existing_cube is not None:
# 既存の立方体の色をランダムに変更する
mat = existing_cube.data.materials[0]
mat.diffuse_color = (random.uniform(0.0, 1.0), random.uniform(0.0, 1.0), random.uniform(0.0, 1.0), 1.0)
# 変更された色をサーバーに送信する
message = f'{mat.diffuse_color[0]},{mat.diffuse_color[1]},{mat.diffuse_color[2]}'
sock.sendto(message.encode(), server_address)
else:
# 新しい立方体を作成して青色にする
bpy.ops.mesh.primitive_cube_add()
obj = bpy.context.active_object
mat = bpy.data.materials.new(name="Blue")
mat.diffuse_color = (0.0, 0.0, 1.0, 1.0)
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
# 作成された青色の立方体の色をサーバーに送信する
message = f'{mat.diffuse_color[0]},{mat.diffuse_color[1]},{mat.diffuse_color[2]}'
sock.sendto(message.encode(), server_address)
4.Blenderで実行する(ALT+P)とサーバー側で色情報が表示されます
お疲れさまでした。
参考
うまく接続できない場合、ファイアウォールを無効にするか、受診の規則・送信の規則で新しい規則を作成し、ポートを開放するなど試してみてください。あとはルーター側でIPが分けられていて、同一ネットワークにいるように見えても接続できない場合も。