이 기능은 실험단계이므로, 사용해 보면서 피드백을 제공하고 에픽에서 구상 중인 부분을 살펴볼 수 있습니다. 현재 씬 그래프를 사용하는 프로젝트는 퍼블리싱할 수 없습니다. 실험단계에서 생성된 에셋은 이전 버전과의 호환성이 보장되지 않는다는 점에 유의하세요. 실험단계 기능의 API는 변경될 수 있으며, 에픽게임즈의 재량에 따라 전체 실험단계 기능 또는 특정 기능이 제거될 수도 있습니다. 이 기능으로 작업을 시작하기 전에 알려진 문제 목록을 확인해 보세요.
씬 그래프는 월드의 모든 오브젝트를 연결하는 통합 구조입니다. 메타버스를 위한 경험을 제작할 때 세트 드레싱, 게임플레이 시스템, 오디오, VFX 등에 필요한 모든 툴을 포함하는 툴박스라고 생각하면 됩니다.
씬 그래프를 사용하여 단순한 몇 단계만 거치면 그레이박싱과 월드 제작에서 완성된 플레이 가능 레벨로 빠르게 전환할 수 있습니다.
씬 그래프로 제작한다는 것은 프로젝트의 관련 오브젝트에서 작업을 수행한다는 의미입니다. 그리고 구조물을 제작할 때 씬 그래프를 사용하여 복제와 반복작업을 수행할 수도 있습니다. 심지어 제작한 오브젝트를 재사용 가능한 프리팹으로 바꾸어 다양한 프로젝트에서 사용할 수 있습니다.
씬 그래프는 Verse의 특성을 활용하는 Verse 네이티브 시스템입니다. 이를 통해 커스텀 제작된 인터랙티브 오브젝트와 게임플레이 경험으로 프로젝트를 보다 세부적으로 커스터마이징할 수 있습니다.
Verse가 백그라운드에서 어려운 작업을 모두 처리하여 엔티티가 의도한 대로 작동하도록 하므로, 씬 그래프를 사용하면 프로젝트 안정성이 향상됩니다. 또한 Verse는 씬 엔티티와 컴포넌트의 모든 부분에 심도 있게 액세스할 권한이 있으며, 이는 씬에 더욱 다양성을 더할 수 있다는 것을 의미합니다.
메타버스의 오브젝트
메타버스란 사람들이 3D 월드에서 실시간으로 플레이하고 소통하는 온라인 소셜 엔터테인먼트 경험입니다. 에픽게임즈는 이러한 메타버스 경험 제작을 지원하기 위해 UEFN을 위한 씬 그래프 시스템을 설계하고 있습니다.
씬 그래프 시스템에서는 언리얼 엔진의 액터 분류 없이도 오브젝트를 인스턴싱하고 재사용할 수 있습니다. 씬 그래프의 핵심은 게임을 제작하기 위해서뿐만 아니라 게이밍 환경에서 오브젝트를 렌더링 및 시뮬레이션하기 위해 데이터와 로직을 사용하는 구성 요소 세트입니다.
액터와 엔티티는 서로 교체할 수 없으며, 씬에서 함께 작동하는 서로 다른 시스템입니다.
씬 그래프를 사용하면 모든 디자인 의사 결정과 결과를 뷰포트에서 즉시 확인할 수 있는 3D 리얼타임 시뮬레이션 프레임워크를 구축할 수 있습니다. 디테일 패널 또는 프리팹 에디터에서 편집할 수 있습니다.
직접 제작했거나 팹 등 벤더에게서 구매한 에셋을 임포트하고, 이러한 에셋을 씬 그래프와 함께 사용하여 커스텀 제작 오브젝트 및 프리팹을 만들 수 있습니다.
씬 그래프에서 무엇을 제작하든, 메모리를 적게 소비하면서 여러 번 재사용할 수 있습니다. 씬 그래프 제작 시스템은 콘텐츠 간의 경계를 강화하는 동시에 복잡한 콘텐츠 공유 및 공유 시뮬레이션이 가능하도록 설계되었습니다.
엔티티 및 컴포넌트
엔티티 및 컴포넌트 는 씬 그래프의 근간입니다. 엔티티와 컴포넌트는 오브젝트의 정의 및 비헤이비어를 제어하는 방식으로 작동합니다.
엔티티는 가시적인 정의나 기능을 자체적으로 보유하지 않는 컨테이너입니다. 컴포넌트는 엔티티에 데이터와 비헤이비어를 제공하는 요소입니다. 컴포넌트는 씬에서 엔티티가 해야 할 일을 정의합니다.
컴포넌트에는 편집 가능한 프로퍼티가 있습니다. 이러한 프로퍼티는 스태틱 메시나 파티클 시스템처럼 물리적일 수도 있고, 플랫폼의 움직임을 정의하는 게임플레이 태그나 커스텀 Verse 코드처럼 논리적일 수도 있습니다. 기본적으로 모든 엔티티는 월드에서 엔티티가 존재할 위치를 지정하기 위한 트랜스폼 컴포넌트를 보유합니다.
Verse로 엔티티를 생성해도 트랜스폼 컴포넌트 생성이 자동으로 이루어지지 않습니다.
씬 그래프를 사용하면 메시, 사운드 큐 등으로부터 가져온 물리 데이터를 활용하여 세트 조각과 게임 메카닉을 빠르게 만들 수 있습니다.
메시 컴포넌트(Mesh Component) 를 엔티티에 추가하고 메시가 컴포넌트의 메시 슬롯에서 선택되는 경우, 엔티티는 스태틱 메시의 물리적 구현이 됩니다. 즉, 건물이나 개별적인 세트 조각을 빠르게 모형으로 만들어 씬에서 바로 사용할 수 있습니다.
예를 들어 아래 영상에서는 엔티티가 대나무 군집으로 바뀌고, 사운드 큐를 사운드 컴포넌트 슬롯에 드래그하여 엔티티에 사운드 컴포넌트를 추가합니다.
이 대나무 군집을 직접 프리팹으로 바꾸거나, 추가적인 엔티티와 결합하여 숲 프리팹을 제작할 수 있습니다.
시뮬레이션을 나타내기 위해 하나의 엔티티(시뮬레이션 엔티티)가 프로젝트의 루트에 배치됩니다. 엔티티가 시뮬레이션 엔티티 아래에 중첩될 때 씬이 생성됩니다. 맵에 엔티티를 추가하는 방법으로 시뮬레이션 엔티티의 자손 엔티티를 자동 생성할 수 있습니다.
프리팹의 최상위 엔티티는 해당 프리팹의 루트 엔티티로, 다른 프리팹과 엔티티가 아래에 중첩되어 있습니다. 부모 프리팹은 자손의 룩, 그리고 자손이 씬의 다른 오브젝트와 상호작용하는 비헤이비어를 구성합니다.
-
프리팹 루트 엔티티 → WoodenHouse_Tiny_Prefab
-
자손 프리팹 → WoodenHouse_RoofSmall_Prefab_C_1
-
자손 엔티티 → Building_WIndowCircle_Bright2
-
자손 엔티티 → Building_WIndowCircle_Bright4
-
자손 엔티티 → Building_WIndowCircle_Dark2
-
자손 엔티티 → Building_WIndowCircle_Dark4
-
자손 엔티티 → WoodenHouse_Floor
-
자손 엔티티 → WoodenHouse_RoofCap2
-
자손 엔티티 → WoodenHouse_RoofCap3
-
자손 엔티티 → WoodenHouse_RoofWindow2
-
-
자손 프리팹 → WoodenHouse_SmallFloor_Prefab_C_1
-
자손 엔티티 → WoodenHouse_Floor
-
자손 엔티티 → WoodenHouse_Wall10
-
자손 엔티티 → WoodenHouse_WallDoor_C4
-
-
자손 프리팹 → WoodenHouse_Windows_Prefab_C_3
-
자손 엔티티 → Building_WindowPlane_Bright3
-
자손 엔티티 → Building_WindowPlane_Bright4
-
자손 엔티티 → Building_WindowPlane_Dark3
-
자손 엔티티 → Building_WindowPlane_Dark4
-
자손 엔티티 → WoodenHouse_Windoows_10
-
-
각 자손 프리팹에는 프리팹의 룩과 프리팹이 씬의 다른 프리팹과 정렬되는 방식을 결정하는 컴포넌트가 있습니다. Verse를 사용하여 특정 프리팹 및 엔티티를 대상으로 자손 프리팹을 다른 프리팹과 교환하거나, 심지어 Building_WindowPlane_Bright 및 Building_WindowPlane_Dark entities에 사용되는 컬러를 변경할 수도 있습니다.
부분 또는 전체 엔티티의 작동 방식을 결정하는 컴포넌트 타입은 매우 많습니다. 씬 그래프에서 사용 가능한 다양한 컴포넌트 타입에 대해 자세히 알아보려면 컴포넌트를 참고하세요.
엔티티와 컴포넌트 사용에 대한 자세한 내용은 엔티티 및 컴포넌트 작업하기 문서를 참고하세요.
프리팹
씬 그래프는 하나의 부모 엔티티 아래에서 엔티티를 함께 패키징하여 프리팹을 생성합니다. 선택한 모든 엔티티, 엔티티 계층구조 및 해당 컴포넌트는 프리팹의 엔티티 트리에 즉시 추가됩니다. 프리팹이 있으면 프리팹 에디터에서 해당 프리팹의 모든 인스턴스를 커스터마이징할 수 있습니다.
프리팹의 인스턴스를 생성하려면 콘텐츠 브라우저에서 뷰포트로 프리팹을 드래그합니다. 프리팹 계층구조 내부에서 여러 프리팹을 중첩할 수도 있습니다. 계층구조를 사용하여 계층구조 내 모든 인스턴스와 프리팹에서 변경사항을 적용할 수 있습니다.
프리팹을 업데이트 및 개선하는 경우, 해당 오브젝트의 모든 인스턴스를 개별적으로 각각 업데이트하기 위해 찾을 필요가 없으므로 시간이 절약됩니다.
또한 계층구조에서 하위 조각을 선택한 후 다양한 컴포넌트 값을 오버라이드하여 비슷한 룩을 가진 다수의 오브젝트를 만들 수도 있습니다. 프리팹 에디터에서 편집하면서 오브젝트를 회전하고 여러 프리팹 인스턴스에 새로운 컴포넌트 값을 추가하는 것도 가능합니다.
에디터는 개별 컴포넌트 어트리뷰트의 오버라이드 토글 아이콘으로 디테일 패널에 모든 변경사항을 표시합니다. 또한 컴포넌트 카드 드롭다운 메뉴 버튼에 다양한 컴포넌트 아이콘도 표시합니다.
원본 프리팹 디자인으로 돌아가려면 개별 컴포넌트 오버라이드 토글을 클릭합니다. 그러면 오브젝트가 자동으로 부모 프리팹의 상태로 돌아갑니다. 컴포넌트 카드 드롭다운 메뉴 버튼을 클릭하고 Clear Override 를 선택할 수도 있습니다.
프리팹 수정에 대한 자세한 내용은 프리팹 및 프리팹 인스턴스 문서를 참고하세요.
아래 영상에서 씬 그래프는 2개의 작은 집 프리팹을 만드는 데 사용됩니다.
집은 복제됩니다. 집의 다양한 엘리먼트는 여러 메시를 선택한 후 원본 메시의 부분을 대체하는 방식으로 변경되며, 이 방법으로 새 프리팹을 생성합니다. 작은 마을 모형을 빠르게 만들려면 복사 및 부분 대체를 계속하면 됩니다. 이 방법은 컴포넌트에서도 작동하므로, 마을의 각 집에 다양한 비헤이비어를 추가할 수 있습니다.
프리팹을 편집해도 원본 오브젝트나 그 사본의 안정성 및 메모리에는 영향을 주지 않습니다. 따라서 섬을 위한 커스텀 오브젝트를 제작하기 위한 레벨 레이아웃, 추상 디자인, 아트를 완성할 수 있습니다. 씬 그래프 제작 시스템을 사용하면 여러 프로젝트에서 프리팹을 재사용하여 포트나이트에서 자신만의 게임 유니버스를 만들 수 있습니다.
씬 그래프의 Verse
Verse는 씬 그래프가 월드에서 엔티티를 생성 및 제거하고 커스텀 컴포넌트와 비헤이비어를 생성하기 위해 사용하는 프로그래밍 언어입니다.
Verse를 통해 이전 샘플의 집에서 흔들리던 야외 랜턴을 제작할 수 있습니다. Verse는 랜턴이 움직이는 방식을 결정하기 위해 스윙, 회전, 지속 시간의 프로퍼티를 정의할 방법을 제공합니다.
프로젝트에서 생성하는 프리팹은 프로젝트의 Assets.digest.verse 파일에서 Verse에 클래스로 노출됩니다. 프리팹에서 정의된 엔티티 및 컴포넌트는 프리팹의 GetEntities()
및 GetComponents()
호출을 통해 Verse에서 액세스할 수 있습니다.
씬 그래프에서 Verse 사용을 시작하려면 Verse에서 나만의 컴포넌트 생성하기 문서를 확인하세요.
프로젝트에서 씬 그래프 활성화하기
프로젝트에서 씬 그래프를 사용하는 방법은 다음과 같습니다.
-
툴바에서 프로젝트(Project) > 프로젝트 세팅(Project Settings) 을 선택해 프로젝트 세팅 창을 엽니다.
-
프로젝트 세팅 창의 Experimental Access 에서 Scene Graph System 을 활성화합니다.
- 씬 그래프 기능을 볼 수 있는지 검증하려면, 툴바에서 액터 배치(Place Actors) 를 선택한 후 액터 배치 드롭다운에서 Entities 가 표시되는지 확인합니다.
시작하기
씬 그래프에 대해 자세히 알아보려면 프리팹 템플릿을 엽니다. 이 템플릿은 씬 그래프 기능을 활용한 작업의 기본 개념을 소개하고, 이러한 기초적 워크플로를 바탕으로 만들어 프리팹 및 Verse를 사용한 프로젝트 제작의 강력함을 보여줍니다.
알려진 문제
다음은 프로젝트에서 씬 그래프로 작업할 때 발생하는 알려진 문제입니다. 아래 목록에 없는 피드백이 있거나 문제를 발견한 경우 포럼에서 신고해 주세요.
-
실험단계 기능이므로 예상치 못한 크래시 및 불안정성 문제가 발생할 수 있습니다.
-
프리팹 에디터에서 그리드, 회전 또는 스케일 스냅을 사용할 수 없습니다.
-
프리팹 에디터에서 다중 선택을 수행할 수 없습니다.
-
프리팹 에디터에서 복사 및 붙여넣기나 Alt+드래그 복제를 수행할 수 없습니다.
-
컴포넌트를 복사 및 붙여넣기 할 수 없습니다.
-
프리팹 인스턴스에서 한 번에 모든 오버라이드를 지울 수 없습니다. 오버라이드마다 지워야 합니다.
-
엔티티는 액터당 한 개의 파일 시스템을 사용하지 않으며, 대신 엔티티가 UMAP 에셋 에 저장됩니다. 프로젝트에 URC를 사용하는 경우 지속적으로 메인 레벨을 잠그고 프로젝트에서 협업 기능을 비활성화하게 됩니다.
-
프리팹 에셋에 오버라이드된 프리팹 인스턴스를 저장할 방법이 없습니다.
-
복제된 엔티티가 프리팹 에디터에서 올바르게 명명되지 않습니다.
-
모두 펼침(Expand All) 및 모두 접기(Collapse All) 가 컴포넌트에서 작동하지 않습니다.
-
현재 프리팹에서 오버라이드를 제거할 방법이 없습니다.
-
오버라이드 아이콘을 우클릭하면 좌클릭과 동일한 동작이 발생합니다.
-
부모로 드래그하는 방법으로 자손 엔티티를 디태치할 수 없습니다.
-
Y축 을 따라 스태틱 메시 컴포넌트 회전(Static Mesh Component Rotation) 을 스크럽하면 예상치 못한 이동이 발생합니다.
-
씬 그래프 오브젝트와 충돌하는 경우 예상치 못한 플레이어 비헤이비어가 발생합니다.
-
엔티티 이름을 수동으로 변경한 후에는 엔티티 이름을 변경할 수 없습니다.
-
음의 스케일링이 자손 엔티티에서 회전 시 비정상적인 상호작용을 유발할 수 있습니다.
-
프리팹 에디터에서 트랜스폼 값(Transform Values) 을 드래그하는 경우 위젯에서 값을 변경할 때보다 속도가 느려지고 퍼포먼스가 저하됩니다.
-
Verse 컴포넌트 생성(Create Verse Component) 창이 에디터 옵션(Editor Options) 에서 템플릿을 표시하지 않습니다.
-
프리팹 에디터의 엔티티가 항상 선택 가능하지는 않습니다.
-
프리팹을 삭제하면 라이브 편집 세션에서 '고스트' 프리팹이 생성됩니다.
-
프리팹 에셋에 섬네일이 없습니다.
-
컴포넌트 로직이 편집 모드와 플레이 모드에서 모두 실행됩니다.
-
컴포넌트는 포크리 장치보다 훨씬 일찍 초기화되므로
component.OnBeginSimulation
또는component.OnSimulate
에서 포크리 장치를 가져오려고 하면 작동하지 않습니다. 이 문제를 해결하려면 컴포넌트를 찾을 때까지 루프 및 절전 모드를 사용하거나 포크리 장치의 OnBegin 호출에서 프리팹을 스폰할 수 있습니다. -
레벨에 배치된 엔티티에서 직접
Dispose()
를 호출하는 경우, 표시되는 메시 이펙트 등의 요소가 클라이언트 뷰에서 제거되지 않습니다. Verse 코드를 통해 생성되는 엔티티에서Dispose()
를 호출하는 경우 올바르게 작동합니다. -
레벨 에디터(단축키 H) 및 프리팹 에디터에서 선택된 엔티티를 숨기는 기능이 작동하지 않습니다.
-
프리팹 에디터에서 적용된 변경사항을 저장하지 않는 한 배치된 프리팹 인스턴스로 해당 변경사항이 전파되지 않습니다.
-
Verse 코드가 컴파일되지 않은 상태로 프로젝트를 저장할 경우 프리팹 데이터가 손상될 수 있습니다.