Blender アドオン • Unity・Unreal プラグイン
Loom
Blender から Unity・Unreal へのライブリンク
- Blender
- Unity
- Unreal
- Python
- C++
- C#
Blender でモデリングしながら、その結果を Unity や Unreal で即座に確認できます。Loom はメッシュ、リグ、ライト、カメラ、マテリアルを直接のバイナリリンクでエンジンのビューポートへそのまま配信します。頂点を編集し、アニメーションをスクラブし、ライトを調整すれば、数ミリ秒で反映されます。エクスポートも、FBX の往復も、中継サーバーも不要です。レベルをブロックアウトし、仮置きのオブジェクトを、どちらのアプリケーションからでも実際の prefab や Blueprint へ置き換えられます。割り当てはすべて .blend に書き戻されるため、半分だけ置き換えたレベルも両アプリの再起動を乗り越えます。納得できたら、セッション全体を実際の prefab、Blueprint、アセットへベイクします。Loom はプレビューであり、パイプラインです。
- Blender
- Unity
- Unreal
- Python
- C#
- C++
エクスポートではなくライブ
Blender で編集すると、エンジンのビューポートが数ミリ秒で更新されます。FBX も、中継も、ディスクもありません。
2 つのエンジン、1 本のワイヤー
1 つの Blender プロデューサーが Unity(URP)と Unreal を同等に駆動します。どちらも同じプロトコル上で動きます。
メッシュだけでなくマテリアルも
20 以上のシェーダーノードを実際の URP シェーダーへトランスパイルし、19 種類すべての Mix ブレンドモードを Blender のソースから移植しています。
おもちゃではなくパイプライン
グレイボックスを、どちらのアプリケーションからでも実際の prefab や Blueprint へ差し替え、そのままセッションをコライダーと LOD 付きの実際のアセットへベイクします。
同期される内容
Loom の守備範囲の広さこそが要点です。ライブリンクはシーンのほぼ全体と、その周りのオーサリング状態を運び、ここに挙げたものはすべて、開いたどちらのエディタにも届きます。
- 9 種類の Blender オブジェクト:メッシュ、カーブ、テキスト、サーフェス、メタボール、アーマチュア、ライト、カメラ、エンプティ
- 1〜8 のすべての UV チャンネルに加え、RGBA 頂点カラー。大きなメッシュ向けに 32 ビットインデックスに対応
- アーマチュアとシェイプキー。ライブなポーズとブレンドシェイプのウェイトも
- 4 種類のライト、被写界深度を備えた透視投影・平行投影カメラ
- ワールドの HDRI とフォグ
- コレクション、ジオメトリノード、パーティクルのインスタンシング。リンク複製の重複排除付き
- prefab 参照による配置:オブジェクトまたはそのメッシュデータに付けたキーが、どちらのエンジンでもレジストリから実際の prefab や Blueprint を生成します
- グレイボックス → 最終形の置き換え。Blender からでも、どちらのエディタからでも操作できます
- 何が配信されているかを正確に示す Tracked Objects リスト。Exclude と Include 付き
- ブーリアンのカッターと SNAP_ / SOCKET_ のマーカーエンプティは自動的にスキップ
- 4 ページの「How replacement works」解説。3 つのアプリケーションすべてで同じページ
- コンテンツ単位で重複排除されたテクスチャを備えた Principled マテリアル
- 20 以上のシェーダーノードを実際の URP シェーダーへトランスパイル、19 種類すべての Mix ブレンドモード
- ライブなコライダー、LOD グループ、ゲーム向けのレイヤー・タグ・static ルーティング
- アタッチポイント:共通タグを持つソケットとプラグを Blender でスナップし、両エンジンへ届けます。コライダープロキシと LOD チェーンを作るジェネレーターも付属
- リジッドボディ:Blender の Rigid Body 設定が、どちらのエンジンでも本物の物理ボディになります。Blender 自身のシミュレーションと突き合わせて計測済みです
- タイルテスト:キットピースの周囲にコピーを並べ、エンジンのライティングで継ぎ目を確認できます。コピーはどのベイクにも含まれません
- ワンコマンドのヘッドレスベイク(blender -c loom_bake)。エディタを一切開かずに .blend から prefab または Blueprint を作れます。CI 向け
グレイボックス → 最終形
Blender でレベルをブロックアウトし、仮置きのオブジェクトを実際の prefab や Blueprint へ差し替えます。割り当ては Blender の N パネルの Set Prefab Key… から、または Unity や Unreal のウィンドウの REPLACE GREYBOX から行います。割り当てはすべて .blend に書き込まれ、Blender 側の Ctrl+Z で取り消せます。金曜に半分だけ置き換えたレベルは、両方のアプリケーションを再起動しても、月曜には同じレベルのままです。書き込みはエディタが Blender に依頼します。セッション限りのマップに保持されるものは何もありません。
1 つのキー、90 個の配置
オブジェクトに付けたキーは 1 つの配置を置き換えます。メッシュデータに付けたキーは、それを共有するリンク複製すべてを置き換えるため、Alt+D で作った 90 個のコピーが 1 回の割り当てに追従します。パネルは何かを押す前に、その影響範囲を明示します。
名前で選ぶバリアント
レジストリのキーは、ベースとなる prefab とそのバリアントを保持します。番号ではなく欲しいピースの名前を指定するため、プールに 1 行挿入しても、すべての配置の表示が知らないうちに変わることはありません。
シードから Scatter pool…
1 本の柱を 90 個コピーして、そのすべてが同じバリアントではレベルになりません。シードからプールをすべての配置へ配ります。選ばれた結果は .blend に書き込まれ、同じ配置に同じシードを使えば、Blender でも両エンジンでも同じレイアウトになります。
ブロックアウトと、残りの数
仮置きをブロックアウトとしてマークすると、3 つのアプリケーションすべてが 210 個中 62 個という同じ進捗を表示します。Clear to greybox でいつでも戻せます。
PREFAB CHECK
シーン内のキーごとに 1 行、その配置数とプールのサイズを示し、未マッピングのキー、プールに存在しないバリアント名、プールの末尾を超えるインデックスを指摘します。もっともらしい何かを黙って代わりに使うことはありません。
「How replacement works」
4 ページの解説が、疑問の生じる場所ならどこでも ? の背後に控えており、Unity では Window ▸ Loom Guide、Unreal では Tools ▸ Loom Guide から開けます。説明するだけで、動作することはありません。
2 つのエンジン、1 本のリンク
Loom は Blender のプロデューサーであり、2 つの一級のコンシューマーを持ちます。どちらも同じバイト列(ワイヤープロトコル v40)と、同じゴールデンフィクスチャを解釈するため、あらゆる機能がどちらのエディタにも届きます。Unreal では、各 Unity の概念に対して慣用的な対応先を使うだけです。
| Unity では | Unreal では | |
|---|---|---|
| ライブメッシュ | MeshFilter + MeshRenderer / SkinnedMeshRenderer | UDynamicMeshComponent(CPU 線形ブレンドスキニング) |
| マテリアル | 生成された URP シェーダー / URP Lit | Custom ノードに移植した HLSL を持つ LoomLit UMaterial |
| インスタンシング | RenderMeshInstanced による散布 | UInstancedStaticMeshComponent(インスタンスごとのデータ) |
| ライトとカメラ | Light / Camera(+ 被写界深度) | U*LightComponent / UCineCameraComponent |
| LOD | LODGroup + 子メッシュ | 1 つのマルチ LOD な UStaticMesh |
| アニメーション | .anim AnimationClip | UAnimSequence(+ モーフターゲットカーブ) |
| リジッドボディ | Rigidbody + コライダー + 物理マテリアル | オブジェクト自身のコンポーネント上でシミュレートされるボディ |
| ベイク | prefab(.prefab) | 保存済みアセット上に再利用可能な BP_LoomBake Blueprint |
| マテリアルの上書き | Material Overrides アセットで固定した Material | Loom の UDataAsset で指定した UMaterialInterface |
| prefab のレジストリ | Loom › Prefab Registry アセット | LoomPrefabRegistry データアセット |
| 配置先 | 選んだ Target scene の中の Root object | 選んだ Target level の中の Root actor |
| 解説 | Window ▸ Loom Guide | Tools ▸ Loom Guide |
マテリアルとシェーダー
多くのライブブリッジはジオメトリで止まります。Loom は Blender のシェーダーノードグラフを、実際にコンパイルされるシェーダー、Unity では URP の .shader、Unreal では LoomLit マテリアル内の移植された HLSL へトランスパイルします。平坦な近似ではありません。プロシージャルノードは Blender 5.1 自身のソースから移植しているため、生成されたシェーダーは Blender の見た目を推測するのではなく再現します。
20 以上のノードを実際のシェーダーへトランスパイル
- Noise(厳密な Perlin fBM)
- Voronoi(厳密な PCG ハッシュ)
- Mix Color(全 19 モード)
- ColorRamp
- Math
- Vector Math
- Map Range
- Mapping
- Image Texture
- Bump
- Normal Map
- Fresnel
- Layer Weight
- Gradient
- Checker
- Wave
- Magic
- Separate / Combine
- Object Info
- Color Attribute
- Texture Coordinate
- 実際にコンパイルされるシェーダーで、プレビュー用のごまかしではありません。生成されたシェーダーは Forward と Deferred、シャドウ、深度プリパス、SSAO に対応します。
- 忠実なフォールバック。非対応のグラフは正確な Principled マテリアルへ縮退し、オフラインの事前スキャンが接続前に該当ノードを名指しします。
- グラフが手に負えないときはテクスチャへベイク。マテリアルごとにオプトインすると、Cycles がマップへベイクし、それが通常のテクスチャとして配信されます。
- 自分のマテリアルを固定。任意の Blender マテリアルやオブジェクトを自分のエンジンマテリアルで上書きでき、再同期のたびに保持されます。
- スタイライズドやトゥーンのマテリアルはテクスチャを保ちます。Principled でないグラフには変換すべき PBR のファクターがないため、見た目を偽るのではなく、Loom はそのマテリアルの名前付きテクスチャを転送し、自前のトゥーンシェーダーで使えるようにします。
- テクスチャを正しく処理。コンテンツ単位で重複排除し、エンジンのマップスロット(メタリックとグロス、ノーマルと強度、オクルージョン)へパックし、HDR を保持します。
高速な理由
Loom は GPU がそのまま扱えるバイトを、変更があった分だけ送ります。同期経路では、テキストへのシリアライズもディスクへの書き込みも行いません。
- 直接のバイナリリンク。生の float32 と uint32 バッファが Blender の numpy からエンジンへ直行します。JSON も、中継も、ディスクもありません。
- 変更分だけ。オブジェクトを動かすと 40 バイトのトランスフォームパケットを送ります。スカルプトやアニメーションは位置だけをストリーミングし、シーン全体を送ることはありません。
- ノンブロッキング。ソケット I/O はワーカースレッドで動くため、どちらのエディタもカクつきません。
- 自己修復。スクリプトの再コンパイルや切断を乗り越え、再接続するとシーン全体を再同期します。
ピクセル忠実、しかも証明可能
守備範囲の広さは、結果が正しくてこそ意味を持ちます。Loom は見た目が一致し、一致し続けるように作られています。
- 目測ではなくソースから移植。プロシージャルテクスチャと 19 種類すべての Mix モードは、Blender 5.1 自身のシェーダーソースから、厳密な Perlin と PCG ハッシュに至るまで移植しています。
- 1 本のワイヤー、3 つの実装、バイト単位で一致を証明。Python のプロデューサーと C# および C++ のコンシューマーは、同じゴールデンなワイヤーバイトのフィクスチャで検証されます。
- エディタを閉じたままエンドツーエンドでテスト。ヘッドレスの Blender と Unity のスイートが、実際のシリアライズ、ソケット、再構築、ベイクの経路を CI で駆動します。.blend から .prefab への完全なビルドも含みます。
プレビューから本番へ
ライブプレビューは行き止まりではありません。実際のプロジェクトアセットへと巣立ちます。
Bake to Prefab… / Bake Scene…
共有メッシュと生成マテリアルは単一アセットへ重複排除され、ノードグラフシェーダーは実際のファイルとして残り、ツリー上に prefab または BP_LoomBake Blueprint が保存されます。
Bake Selected…
選んだ同期オブジェクトだけを、そのトランスフォームを保つために必要な親も含めてベイクし、それ以外はすべて除外します。
ベイク時点でゲーム対応
ベイクしたアセットにライトマップ UV と static GI フラグ、LOD グループ、コライダーを生成します。
AnimationClip へベイク
ボーンとブレンドシェイプのアニメーションのフレーム範囲を、Unity の .anim クリップや Unreal の UAnimSequence に取り込みます。
記録と再生
ライブストリームを .loomcache ファイルへ記録し、同じビルダーで再生して、オフラインレビューや回帰テスト用フィクスチャに使えます。
ヘッドレス / CI ベイク
blender -c loom_bake の 1 コマンドで、エディタを開かずに .blend を Unity の prefab か Unreal の Blueprint へベイクします。エンジンもバッチモードで自動起動し、終了コードは 0 か 1 なので、机に向かうアーティストだけでなく、スタジオのビルドシステムでも Loom を使えます。
制御、安全性、手ざわり
- スコープ。最初の接続では選択中のものだけを配信し、何が同期され何が除外されるかをその場で数えて示すため、複雑なシーンを不意にまるごと送ってしまうことはありません。Whole scene と Collection はワンクリックで切り替えられます。
- 追跡対象のセット。Selected only では、オブジェクトを選ぶとそれが追跡対象になります。選択を外しても配信は続き、再接続や Blender の再起動を乗り越え、Untrack するまでエディタから消えません。Exclude と Include はどのスコープでも使えます。Track the whole model(既定でオン)では、クリックしたオブジェクトの親ツリー全体が対象になるので、キャラクターの髪をクリックすればキャラクター全体が届きます。一部だけを外すには Exclude を使います。まだ何も同期されない状態では、Blender が What do you want to send? と尋ね、シーン全体やコレクションをワンクリックで選べます。
- Tracked Objects。実際に何が配信されているかのリストで、Streaming、Excluded、Blockouts、All でフィルタでき、行ごとに選択・フリーズ・除外・追跡解除ができます。数字は「いくつ」かを教えますが、こちらは「どれ」かを教えます。数がおかしいときに実際に知りたいのは後者です。
- 補助オブジェクトは入ってきません。ブーリアンのカッターと SNAP_ / SOCKET_ のマーカーエンプティは自動的にスキップされ、オブジェクトごとのステータスが、そのスキップを解除する設定項目を名指しします。
- 既定は一方向、手編集の保護付き。エンジン側で同期オブジェクトを少し動かしても、解放するまでは上書きされず一時停止されます。
- オプトインの双方向編集、ただし Blender の流儀で。トランスフォームや選択を押し戻したり、非対応グラフのマテリアルをエンジン側からマップへオンデマンドでベイクしたりできます。Accept property edits from the editor は Blender 側の設定で、書き込まれるのは Loom 自身のオーサリングプロパティだけです。ジオメトリが書き換わることはなく、書き込みのたびに Undo ステップが積まれます。
- 配置先を指定。同期されたオブジェクトは Unity では Root object、Unreal では Root actor の下に並び、ツリー全体を別の開いている保存済みの Target scene や、ロード済みの Target level へ送れます。
- オブジェクトごとの状態をひと目で把握。Unity の Hierarchy の行にはステータスドット、Unreal のアクタには Loom.Paused タグが付きます。Unity ではドットを右クリックして Pause Loom sync (protect from Blender) や Resume Loom sync を選べば、ウィンドウを開かずに済みます。Unreal ではアクタを選択し、Loom タブの Pause selected を押します。
- カラーブロッキング。Global Material を 1 つ固定し、Override all synced materials を有効にすると、マテリアルではなくレベルそのものを見られます。prefab 参照は自前のマテリアルを保ち、ベイクでは必ず本来のものが使われます。
- プレイモード中の同期。ライブ編集は実行中のセッションへ配信され、ドメインリロードを乗り越えます。プレイ中であることを示す明確なインジケーター付きです。
- 気づかぬうちに失われないスタンドイン。Loom が配置するオブジェクトはライブプレビューで、シーンには保存されません。切断後はどちらのエディタもバナーでそれを伝え、Bake Scene…、Clear Synced Objects、Keep for now を示します。
- 英語と韓国語。Blender アドオン、両エディタのウィンドウ、アプリ内ガイドが両方に対応し、エディタはリンク越しに Blender の言語設定に従います。
- ストリーミングの一時停止。Disconnect の隣の Pause は接続を保ったまますべての変更を保留し、Resume で変更分を送ります。どちらのエディタにも Blender が一時停止中だと表示されるので、止まったビューポートに首をかしげることはありません。
- localhost では設定不要。Connecting、Reconnecting、Waiting for the editor… のステータスに加え、スループット、キューの深さ、まとめられたフレーム、最も重いオブジェクトをライブ HUD で表示します。
対応環境
- Blender 5.0 以降(5.0、5.1、5.2 でテスト済み)
- Unity 2021.3 LTS 以降(Unity 6 で開発)
- Unreal Engine 5.6(5.6 で開発・ビルド・テスト。他の 5.x は未検証)、C++ プロジェクト、Win64
- レンダーパイプライン:Unity では URP(生成されるシェーダーが必要とします)、Unreal では標準の UE マテリアル(エディタビルドでマテリアルごとに Custom HLSL のマスターを作成)
- 同一マシン上でエディタ間をループバック TCP で接続(既定は 127.0.0.1:8787)
- ワイヤープロトコル v40。どちらのコンシューマーでも同じバイト列です
提供状況
Loom 0.10.0 は 1.0 のリリース候補です。現在はテスターの手元にあり、まだ販売していません。0.10.0 では、Blender 自身のシミュレーションと突き合わせて計測したリジッドボディ物理に加え、キットピース用のタイルテスト、ストリーミングの一時停止、ワンコマンドのヘッドレスベイクが加わりました。1.0 に予定していた機能はすべて両エンジンに実装済みで、継続的にテストされています。1.0 までに残っているのは、パネルと初回起動の実機確認と、ストアのリスティングです。リリースにはサンプルシーンが付属します。地面、ボックスコライダー付きの木箱、ノードでテクスチャを付けた球、モディファイア付きの金属のモンキー、太陽とワールドからなる小さなジオラマで、最初の接続からすぐに結果を確認できます。Blender アドオンは無料で MIT ライセンス、Unity と Unreal のコンシューマープラグインは商用で、1.0 で Unity Asset Store と Fab に出品します。最新情報や早期アクセスをご希望ですか?下記からご連絡ください。
サポート
リリース候補版についての質問、バグ報告、機能リクエストはありますか?メールでご連絡いただければ返信します。
インストール手順、アーキテクチャの解説、ロードマップは ドキュメント でもご覧いただけます。