Skip to content

Blender 애드온 • Unity·Unreal 플러그인

Loom

Blender에서 Unity·Unreal로 잇는 라이브 링크

  • Blender
  • Unity
  • Unreal
  • Python
  • C++
  • C#
Blender · source Unity Unreal one binary link · two engines
하나의 Blender 프로듀서(왼쪽)가 단일 바이너리 링크를 통해 두 개의 라이브 엔진 뷰포트, Unity와 Unreal로 스트리밍합니다. 각각 생성된 프로시저럴 머티리얼로 셰이딩되며, 변경된 부분만 와이어를 건너갑니다.

Blender에서 모델링하면서 그 결과를 Unity나 Unreal에서 즉시 확인하세요. Loom은 메시, 리그, 라이트, 카메라, 머티리얼을 직접 바이너리 링크로 엔진 뷰포트에 그대로 스트리밍합니다. 버텍스를 편집하고, 애니메이션을 스크럽하고, 라이트를 조정하면 몇 밀리초 만에 반영됩니다. 익스포트도, FBX 왕복도, 중계 서버도 없습니다. 레벨을 블록아웃하고 임시 오브젝트를 어느 애플리케이션에서든 실제 prefab이나 Blueprint로 교체하세요. 모든 할당은 .blend에 다시 기록되므로, 절반만 교체된 레벨도 두 앱을 다시 시작한 뒤까지 그대로 남습니다. 만족스러우면 세션 전체를 실제 prefab, Blueprint, 에셋으로 베이크하세요. Loom은 프리뷰이자 파이프라인입니다.

  • Blender
  • Unity
  • Unreal
  • Python
  • C#
  • C++

익스포트가 아닌 라이브

Blender에서 편집하면 엔진 뷰포트가 몇 밀리초 만에 갱신됩니다. FBX도, 중계도, 디스크도 없습니다.

두 엔진, 하나의 와이어

하나의 Blender 프로듀서가 Unity(URP)와 Unreal을 동등하게 구동합니다. 둘 다 같은 프로토콜 위에서 동작합니다.

메시뿐 아니라 머티리얼도

20개 이상의 셰이더 노드를 실제 URP 셰이더로 트랜스파일하고, 19가지 Mix 블렌드 모드를 모두 Blender 소스에서 이식했습니다.

장난감이 아닌 파이프라인

그레이박스를 어느 애플리케이션에서든 실제 prefab이나 Blueprint로 교체한 뒤, 세션을 콜라이더와 LOD를 갖춘 실제 에셋으로 베이크합니다.

동기화되는 것

Loom의 폭넓은 범위가 바로 핵심입니다. 라이브 링크는 씬 거의 전체와 그 주변의 오서링 상태까지 실어 나르며, 여기 있는 모든 것이 여러분이 여는 어느 에디터에든 도착합니다.

  • 9가지 Blender 오브젝트 유형: 메시, 커브, 텍스트, 서피스, 메타볼, 아마추어, 라이트, 카메라, 엠프티
  • 1~8개의 모든 UV 채널과 RGBA 버텍스 컬러, 큰 메시를 위한 32비트 인덱스
  • 아마추어와 셰이프 키, 라이브 포즈와 blendshape 웨이트
  • 4가지 라이트 유형, 피사계 심도를 갖춘 원근·직교 카메라
  • 월드 HDRI와 포그
  • 컬렉션, 지오메트리 노드, 파티클 인스턴싱, 링크된 복제본 중복 제거 포함
  • prefab 참조 배치: 오브젝트나 그 메시 데이터에 붙인 키가 두 엔진 모두에서 레지스트리의 실제 prefab이나 Blueprint를 생성
  • 그레이박스 → 최종 교체, Blender에서도 어느 에디터에서도 진행 가능
  • 무엇이 스트리밍되고 있는지 정확히 알려 주는 Tracked Objects 목록, Exclude와 Include 포함
  • 불리언 커터와 SNAP_ / SOCKET_ 마커 엠프티는 자동으로 건너뜀
  • 네 쪽짜리 "How replacement works" 설명서, 세 애플리케이션 모두 같은 내용
  • 콘텐츠 단위로 중복 제거된 텍스처를 갖춘 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에 기록되고 그곳에서 Ctrl+Z로 되돌릴 수 있으므로, 금요일에 절반만 교체한 레벨은 두 애플리케이션을 모두 다시 시작한 월요일에도 같은 레벨입니다. 쓰기는 에디터가 Blender에 요청합니다. 세션에만 존재하는 맵에 담아 두는 것은 없습니다.

키 하나, 배치 90개

오브젝트에 붙인 키는 배치 하나를 교체합니다. 메시 데이터에 붙인 키는 그것을 공유하는 링크된 복제본 전부를 교체하므로, Alt+D로 만든 복제본 90개가 할당 한 번을 따라갑니다. 패널은 무엇이든 누르기 전에 그 영향 범위를 먼저 알려 줍니다.

이름으로 고르는 배리언트

레지스트리 키는 기본 prefab과 그 배리언트를 함께 담습니다. 번호가 아니라 원하는 조각의 이름을 지정하므로, 풀에 한 줄을 끼워 넣어도 모든 배치가 보여 주는 것이 조용히 바뀌지 않습니다.

시드로 돌리는 Scatter pool…

기둥 하나를 90개 복제해 전부 같은 배리언트를 보여 준다면 레벨이라 할 수 없습니다. 시드에서 출발해 풀을 모든 배치에 나눠 주고, 선택 결과는 .blend에 기록됩니다. 같은 배치에 같은 시드를 쓰면 Blender에서도 두 엔진에서도 같은 레이아웃이 나옵니다.

블록아웃, 그리고 남은 것

임시 오브젝트를 블록아웃으로 표시하면 세 애플리케이션 모두 210개 중 62개라는 같은 진행 상황을 보여 줍니다. Clear to greybox는 언제나 되돌아가는 길입니다.

PREFAB CHECK

씬의 키마다 한 줄씩 배치 수와 풀 크기를 보여 주며, 매핑되지 않은 키, 풀에 없는 배리언트 이름, 풀 끝을 넘어선 인덱스를 짚어 줍니다. 그럴듯한 무언가를 조용히 대신 넣는 일은 없습니다.

"How replacement works"

네 쪽짜리 설명서가 의문이 생기는 자리마다 ? 뒤에 있고, Unity에서는 Window ▸ Loom Guide, Unreal에서는 Tools ▸ Loom Guide에 있습니다. 설명할 뿐, 어떤 동작도 하지 않습니다.

두 엔진, 하나의 링크

Loom은 Blender 프로듀서이며 두 개의 일급 컨슈머를 갖습니다. 둘 다 같은 바이트, 즉 와이어 프로토콜 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 + 자식 메시 하나의 멀티 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 해시까지 옮겼습니다.
  • 하나의 와이어, 세 가지 구현, 바이트 단위로 동일함을 증명. Python 프로듀서와 C#, C++ 컨슈머를 같은 골든 와이어 바이트 픽스처로 검증합니다.
  • 에디터를 닫은 채 엔드투엔드로 테스트. 헤드리스 Blender와 Unity 스위트가 실제 직렬화, 소켓, 재구축, 베이크 경로를 CI에서 구동하며, .blend에서 .prefab까지의 완전한 빌드도 포함합니다.

프리뷰에서 프로덕션으로

라이브 프리뷰는 막다른 길이 아닙니다. 실제 프로젝트 에셋으로 나아갑니다.

Bake to Prefab… / Bake Scene…

공유 메시와 생성 머티리얼은 단일 에셋으로 중복 제거되고, 노드 그래프 셰이더는 실제 파일로 남으며, 트리 위에 prefab 또는 BP_LoomBake Blueprint가 저장됩니다.

Bake Selected…

고른 동기화 오브젝트만, 그리고 그 트랜스폼을 유지하는 데 필요한 상위 오브젝트까지만 베이크하고 나머지는 모두 뺍니다.

베이크 시점에 게임 대응

베이크된 에셋에 라이트맵 UV와 static GI 플래그, LOD 그룹, 콜라이더를 생성합니다.

AnimationClip으로 베이크

본과 blendshape 애니메이션의 프레임 범위를 Unity .anim 클립이나 Unreal UAnimSequence로 캡처합니다.

기록과 재생

라이브 스트림을 .loomcache 파일로 기록하고 같은 빌더로 재생하여 오프라인 리뷰나 회귀 테스트 픽스처로 씁니다.

헤드리스 / CI 베이크

blender -c loom_bake 명령 하나로 에디터를 열지 않고 .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 자신의 오서링 프로퍼티뿐입니다. 지오메트리는 절대 건드리지 않고, 기록할 때마다 실행 취소 단계가 쌓입니다.
  • 어디에 놓일지 지정. 동기화된 오브젝트는 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 하나를 고정하고 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에 출시됩니다. 업데이트나 얼리 액세스를 원하시나요? 아래로 연락 주세요.

지원

릴리스 후보 버전에 대한 질문, 버그 신고, 기능 요청이 있으신가요? 이메일로 연락 주시면 답변드리겠습니다.

설치 절차, 아키텍처 노트, 로드맵은 문서 에서도 살펴볼 수 있습니다.