こんにちは! ボーンデジタル テクニカルサポートの黒河です。本連載では様々なソフトウェアの深掘りと、クリエイターに役立つテクニカルな情報をお届けします。

今回はMayaプラグイン「Bifrost」生成したパーティクルの座標を、UDP通信を用いてUnityに送信する実験的な連携方法をご紹介します。今回のリアルタイム通信には制限がありますが、BifrostとMayaの構造、Pythonへの理解が深まり、ソフト連携の可能性に目を向けるきっかけになれば嬉しいです。

記事の目次

    黒河 建

    ボーンデジタルのテクニカルサポート担当。前職ではIT企業にて基幹システムの導入に従事。現在はRevitを中心に、建築業界向けのサポート業務を担当している。
    X:@BD_SoftwareDiv

    ※本記事は、月刊『CGWORLD + digital video』vol.325(2025年9月号)掲載の連載「TECH ROOM:このソフト、どこまでやれる?」を再編集したものです。

    Bifrost(バイフロスト)

    Mayaに標準搭載されているノードベースのビジュアルプログラミング環境。パーティクル、煙、液体などのシミュレーションだけでなく、ジオメトリ生成やカスタムツール開発にも対応。複雑な処理をノードグラフで構築でき、プロシージャルな制作フローを可能にする。
    www.borndigital.co.jp/product/maya

    グラフエディタを2つ表示して作業効率アップ!

    はじめに、オートデスクのM&E向け情報サイト「AREA JAPAN」でも紹介されていた、Bifrostの操作に慣れるためのちょっとしたTipsを1つ。

    通常、Bifrostのグラフエディタはエディタメニューから起動すると「Bifrost Graph Editor」ウインドウ1つのみが開きますが、スクリプトエディタで「cmds.vnnCompoundEditor()」を実行することで、もう1つのグラフウインドウ「Compound Editor」を追加表示できます。この2つのエディタを開いておくと、ノード構成を見比べながら作業できるので便利です。

    ▲スクリプトエディタで「cmds.vnnCompoundEditor()」を入力して呼び出すと、「Compound Editor」ウインドウが開きます
    • ▲「Bifrost Graph Editor」ウインドウ
    • ▲「Compound Editor」ウインドウ

    ステップ① Bifrostでのパーティクル生成

    ▲まずはBifrost Graph Editorで「basic_particles_graph」を読み込み、簡単なパーティクルを発生させてみましょう
    ▲パーティクルの数が多すぎると確認しづらいため、デフォルトより抑えるために「kill_influence」ノードを追加しています
    ▲各パーティクルの座標を取得できるように、「output」には座標情報のポート(point_position)を接続しておきます
    ▲Mayaのビューポートでは、Bifrostの出力に「particles」が繋がっていれば、パーティクルの挙動をリアルタイムに確認することも可能です
    ▲ノードエディタ上の「bifrostGraphShape」ノードでは、「Point Position」の出力が確認できます

    ステップ② MayaからUnityへ送信するためのPython & C#構築

    Mayaのスクリプトエディタを開き、Pythonでコードを記載していきます。今回はローカルホスト内でUDP通信を利用し、MayaからUnityにデータ送信を行なっていきます。

    ▲【A】ノードエディタで確認したBifrost Graphのノード名と、outputの座標情報のポート名を指定。「SOCK_DGRAM」を指定しUDP通信を利用します。【B】スクリプトの中では、取得した各パーティクルの座標情報(Floatのリスト)を、Unityで扱いやすいVector型の形式(x, y, z)に整形し、1フレーム分の情報をまとめて送信しています

    Unity側のC#スクリプトでは、Maya側と同じポート番号でリッスンするように設定しておきましょう。

    ▲ここでは、「ListenPort」の値を「9000」と記述し、Mayaの送信スクリプトで指定したものと一致させています。ポート番号が一致しないとUDP通信が確立されないため、データの送受信が行えません

    ステップ③ Unityで座標データを受信し、プレハブを配置

    Unityでは、C#スクリプトを空のゲームオブジェクトにアタッチし、事前にプレハブのモデルとマテリアルを設定しておきます。

    Mayaから送信された座標情報を基にプレハブのモデルを配置するので、どのようなモデルでも構いません。

    ▲今回はわかりやすいように、Sphereに金色のマテリアルを割り当ててみました
    ▲Unityのプレイボタンを押すと、スクリプトがポートを監視し、受信状態になります。コンソールを確認するとUDPの受信が待機中になっていることがわかります
    ▲MayaのPythonスクリプトを実行
    ▲Pythonスクリプトを実行すると、現在のフレームにおけるパーティクル座標(上)が送信され、Unity側で設定したプレハブのオブジェクトがその位置に配置(下)されます。配置するオブジェクトはUnity側で指定しています

    情報が多少欠落しても毎フレームで処理できないか、と思うかもしれませんが、MayaのscriptJobは再生中に動作しないように、仕様で制御されています。そのため、リアルタイム連携をMayaとBifrost単体で完結させるのは現実的ではありません。外部プロセスを介した構成であれば実現の可能性もありますが、それ自体にどれほどのメリットがあるかは目的次第です。

    熟練のテクニカルアーティストであれば既知の制約かもしれませんが、近年ではテクニカルアーティストを志す方やデザイナーの方でも、プロシージャルなアプローチに関心をもつ人が増えています。今回の検証が、そうした方々にとって取り組みの一助となれば幸いです。

    参考:scriptJobの概要
    help.autodesk.com/cloudhelp/JPN/MayaCRE-Tech-Docs/CommandsPython/scriptJob.html

    次回予告|3Dスキャン

    次回はゲストにexAgentの中山智博さんをお招きし、3Dスキャンの撮り方を紹介します。最近はスマホでも手軽に3Dスキャンが行えるようになってきましたが、実践してみると「思い通りにいかない」といった悩みも多いのではないでしょうか?

    どうすれば綺麗にスキャンできるのか、理論も踏まえつつ、初めての方にもわかりやすく解説していきます。ぜひ制作の一部に3Dスキャンを採り入れてもらえればと思います。次回もお楽しみに!

    テクニカルサポートが選ぶ今注目のソフト|openFrameworks

    C++をベースにした、オープンソースのクリエイティブコーディング向けフレームワーク。
    openframeworks.cc/ja

    openFrameworksは、C++で開発されたオープンソースのクリエイティブ・コーディング用フレームワークです。2005年頃から開発が続けられており、今でもアート、デザイン、映像、インスタレーション分野で広く活用されています。映像や音声のリアルタイム処理、インタラクティブな表現、センサー入力を活用した作品制作、プロジェクションマッピングなど、できることは様々です。

    プログラミング初心者の方にとっては少しハードルが高いかもしれませんが、一度触ってみると虜になる不思議な魅力、そして実用性があります。知らなかった方は、ぜひ調べてみてください!

    INFORMATION

    月刊『CGWORLD +digitalvideo』vol.325(2025年9月号)


    特集:セガの現在地
    定価:1,540円(税込)
    判型:A4ワイド
    総ページ数:112
    発売日:2025年8月8日

    詳細・ご購入はこちら

    SUPPORT ROOM

    ■気になるソフトウェアがある方
    製品の購入や導入におけるご質問はこちらからお寄せください。

    ■すでにソフトウェアを活用中の方
    使用におけるお困りごとやご質問はこちらからお寄せください。

    TEXT_黒河 建/Takeru Kurokawa(ボーンデジタル
    EDIT_李 承眞/Seungjin Lee(CGWORLD)