본문 바로가기

에셋 브라우저와 폴더 구조

콘텐츠 브라우저의 폴더·검색·필터·참조 기능을 익히고 프로젝트 규모가 커져도 유지되는 에셋 구조를 설계합니다.

에셋을 가져오는 방법을 익혔다면, 이제 에셋을 오래 관리할 수 있는 구조를 만들 차례입니다. 그 중심에 있는 것이 콘텐츠 브라우저(Content Browser)로, 프로젝트의 모든 에셋을 찾고 만들고 정리하는 곳입니다. 처음에는 평범한 폴더 창처럼 보이지만, 에셋이 수백, 수천 개로 늘어나면 검색과 필터, 참조 확인 같은 기능이 작업 속도를 좌우합니다.

이 글에서는 콘텐츠 브라우저의 화면 구성부터 살펴보고, 프로젝트가 커져도 유지되는 폴더 구조를 설계하는 기준을 정리합니다. 그다음 에셋을 옮기거나 이름을 바꿀 때 참조가 어떻게 이어지는지, 그리고 그때 남는 리디렉터(Redirector)를 어떻게 정리하는지 그림과 함께 따라가 봅니다. 목표는 지금 찾기 쉬운 구조가 아니라 나중에도 유지되는 구조입니다.


콘텐츠 브라우저의 화면 구성

콘텐츠 브라우저는 레이아웃의 원하는 곳에 붙여 둘 수 있는 패널이며, 콘텐츠 드로어(Content Drawer)로 잠깐 열었다 닫을 수도 있습니다. 닫혀 있다면 Window 메뉴의 Content Browser에서 Content Browser 1을 눌러 다시 엽니다. 콘텐츠 브라우저는 여러 개를 함께 열 수 있고 각각 따로 동작하므로, 한쪽에는 텍스처 폴더를, 다른 쪽에는 재질 폴더를 띄워 두고 작업할 수 있습니다.

화면은 크게 세 영역으로 나뉩니다. 왼쪽의 폴더 뷰(Folders View)는 프로젝트의 Content 폴더처럼 켜 둔 콘텐츠 경로를 계층 구조로 보여 줍니다. 여기서 폴더를 고르면 그 폴더의 에셋이 가운데의 에셋 뷰(Asset View)에 나타나는데, 에셋 뷰는 고른 경로의 에셋 가운데 지금의 검색, 필터, 표시 설정에 맞는 것만 보여 줍니다. 에셋은 스태틱 메시, 재질, 블루프린트 같은 종류마다 아이콘 모양이 다릅니다. 에셋 뷰 위쪽에는 필터와 검색 바(Filters & Search Bar)가 있어, 특정 에셋을 찾거나 특정 종류만 보이게 할 수 있습니다.


오래 가는 폴더 구조 설계하기

콘텐츠 브라우저에서 가장 중요한 관리 요소는 체계적인 폴더 구조입니다. 에셋이 수천 개로 늘었는데 폴더 구조가 엉망이라면, 원하는 에셋 하나를 찾느라 많은 시간을 허비하게 됩니다.

폴더 구조의 네 가지 기준

좋은 폴더 구조는 네 가지를 만족합니다. 먼저 누가 보더라도 쉽게 이해할 수 있는 폴더 이름과 계층을 써야 하고, 프로젝트 전체에서 같은 이름 규칙과 구조를 지켜야 합니다. 또 관련된 에셋을 한 폴더 안에 모아 두어, 그 묶음을 통째로 관리하거나 다른 곳에서 다시 쓰기 쉽게 합니다. 마지막으로 프로젝트가 커져도 새 에셋을 넣을 자리가 분명하도록 처음부터 여유 있게 설계합니다.

실제 프로젝트에 가까운 구조 예

에셋 임포트 및 관리에서 본 기본 구조를 실제 프로젝트에 가깝게 더 나눠 보면 다음과 같습니다. 이 구조도 프로젝트 규칙의 한 예입니다.

MainLevel.umap
TutorialLevel.umap
SM_Table_01.uasset
T_Book_D.uasset
M_Wood_Oak.uasset
SK_Player.uasset (스켈레탈 메시)
BP_PlayerCharacter.uasset (캐릭터 블루프린트)
SM_Pistol.uasset
BP_Gun.uasset

이 구조에서 눈여겨볼 곳은 세 군데입니다. Common에는 여러 곳에서 함께 쓰는 재질과 텍스처, UI, 오디오를 모아, 특정 캐릭터나 환경에 묶이지 않는 에셋의 자리를 따로 둡니다. Characters와 Weapons처럼 한 대상을 이루는 에셋은 그 대상의 폴더 안에 메시와 블루프린트, 애니메이션, 재질을 함께 둡니다. 그래서 플레이어 캐릭터를 고칠 때는 Characters/Player 하나만 보면 됩니다.

맨 위의 _Developers는 개발자마다 개인 실험을 하는 공간입니다. 이 이름은 이 예에서 임의로 정한 것으로, 엔진이 제공하는 Developers 폴더 기능과는 다릅니다. 이런 실험 공간을 둘 때는 두 가지를 지킵니다. 공유 에셋이 실험 폴더의 에셋을 참조하지 않게 하고, 실험 에셋이 빌드에 들어가지 않아야 한다면 프로젝트 설정의 Packaging에 있는 Directories to never cook에 그 폴더를 명시합니다.

폴더 만들고 에셋 옮기기

새 폴더는 콘텐츠 브라우저의 빈 곳을 오른쪽 클릭하고 New Folder를 골라 만듭니다. 폴더나 에셋의 이름은 선택한 뒤 F2 키를 눌러 바꿉니다. 에셋을 다른 폴더로 옮길 때는 에셋을 마우스 왼쪽 버튼으로 끌어 대상 폴더에 놓습니다.

여기서 지켜야 할 규칙이 하나 있습니다. 에셋은 반드시 에디터 안에서 옮기고, 운영체제의 파일 탐색기에서 .uasset 파일만 옮기지 않습니다. 에디터에서 옮기면 다른 에셋이 이 에셋을 계속 찾을 수 있도록 엔진이 참조를 이어 주지만, 탐색기에서 옮기면 엔진은 에셋이 사라졌다고 판단해 참조가 깨집니다. 엔진이 참조를 어떻게 이어 주는지는 아래에서 그림으로 봅니다.


에셋을 빠르게 찾기

검색과 필터

에셋 뷰 위쪽의 검색 바에 에셋 이름을 입력하면, 이름의 일부만 맞아도 찾아 줍니다. Filters 버튼을 누르면 스태틱 메시, 재질, 블루프린트, 텍스처 같은 종류가 나오고, 원하는 종류를 체크하면 그 종류의 에셋만 보입니다.

자주 찾던 에셋이 갑자기 보이지 않을 때는, 지워졌다고 단정하기 전에 검색어를 지우고 종류 필터와 지금 보고 있는 폴더의 범위를 확인합니다. 예를 들어 Textures 폴더를 보면서 Static Mesh 필터를 켜 두었다면, 프로젝트 어딘가에 있는 메시도 그 범위에서는 보이지 않습니다.

컬렉션

컬렉션(Collection)은 자주 쓰는 에셋을 묶어 두는 기능입니다. 파일을 옮기거나 복제하지 않고 여러 폴더에 흩어진 에셋을 한곳에서 볼 수 있어서, 예를 들어 레벨 하나에 쓰는 소품들을 폴더 구조와 상관없이 모아 볼 수 있습니다. 컬렉션은 공유 범위에 따라 나뉩니다. 로컬 컬렉션(Local Collection)은 지금 컴퓨터에만 저장되는 개인 컬렉션이고, 공유 컬렉션(Shared Collection)은 팀원과 함께 보는 컬렉션으로 버전 관리 시스템을 통해 공유됩니다. 이 밖에 소스 관리에 저장되지만 본인에게만 보이는 비공개 컬렉션(Private Collection)도 있습니다.

미리 보기와 편집기

에셋 아이콘 위에 마우스를 올리면 경로와 종류, 크기 같은 간단한 정보가 툴팁으로 나타납니다. 에셋을 더블클릭하면 그 에셋에 맞는 편집기가 열리는데, 스태틱 메시라면 스태틱 메시 에디터가, 재질이라면 재질 에디터가, 블루프린트라면 블루프린트 에디터가 열립니다.


오른쪽 클릭 메뉴의 에셋 작업

콘텐츠 브라우저에서 에셋을 오른쪽 클릭하면 그 에셋에 할 수 있는 작업 목록이 나타납니다. 이동(Move), 복사(Copy), 삭제(Delete) 같은 기본 파일 관리와, F2 키와 같은 이름 바꾸기(Rename)가 있습니다. 재질을 오른쪽 클릭해 그 재질의 재질 인스턴스를 만드는 것처럼, 고른 에셋을 바탕으로 새 에셋을 만드는 항목도 있습니다.

참조와 관련된 항목도 여기 있습니다. 레퍼런스 뷰어(Reference Viewer)는 고른 에셋을 어디서 참조하는지, 그리고 이 에셋이 어떤 에셋을 참조하는지를 그래프로 보여 줍니다. 에셋을 지우기 전이나 복잡한 에셋 관계를 파악할 때 먼저 여는 도구입니다. 다만 결과는 도구의 종류와 필터, 탐색 깊이에 따라 달라지고, 코드에 문자열 경로로 적어 둔 참조처럼 에셋 관계에 잡히지 않는 사용은 따로 확인해야 합니다.


옮긴 에셋의 참조는 어떻게 이어지나

에디터에서 에셋을 옮기거나 이름을 바꾸면, 원래 경로에 리디렉터(Redirector)라는 작은 에셋이 남습니다. 리디렉터는 이전 경로로 이 에셋을 찾는 참조를 새 경로로 넘겨주는 안내판 역할을 합니다. 레벨이나 다른 에셋은 저장할 때 참조할 에셋의 경로를 함께 저장해 두는데, 에셋을 옮긴 순간 그 경로들을 모두 고쳐 다시 저장할 수는 없기 때문입니다.

이동 후 참조와 Redirector 정리

이동 직후 이전 Redirector 경유 참조가 Fix Up 후 새 경로 직접 참조로 바뀐다. 패키지 재저장 성공이 제거 조건이다.

ASSET PATH · BEFORE / AFTER

Fix Up은 참조 패키지를 새 경로로 다시 저장합니다

에디터에서 에셋을 이동하면 이전 경로의 Redirector가 아직 갱신되지 않은 참조를 연결합니다. 정리 후에는 새 에셋을 직접 참조합니다.

참조 경로 변경 전후위는 아직 갱신되지 않은 패키지가 이전 경로의 Redirector를 통해 새 에셋을 참조하는 상태다. 아래는 Fix Up으로 해당 패키지를 다시 저장해 새 경로를 직접 참조하는 상태다.이동 직후 · 아직 갱신되지 않은 참조참조 패키지이전 경로Redirector새 경로이동한 에셋Fix Up 후 · 참조 패키지 재저장참조 패키지새 경로이동한 에셋
참조 경로 변경 전후위의 이동 직후에는 참조 패키지가 이전 경로 Redirector를 거쳐 새 에셋으로 연결된다. 아래의 Fix Up 후에는 패키지를 재저장해 새 에셋으로 직접 연결한다. 두 상태는 시간 순서의 비교이며 각 화살표는 참조 방향이다.이동 직후 · 참조 미갱신참조 패키지아직 이전 경로를 참조이전 경로Redirector새 경로이동한 에셋Fix Up 후 · 패키지 재저장참조 패키지새 경로를 직접 참조새 경로이동한 에셋직접 참조

Redirector 제거 조건

참조하는 패키지를 모두 재저장할 수 있어야 제거됩니다. 체크아웃·저장 권한과 처리 결과를 확인합니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
에셋 이동

옛 경로 참조가 Redirector를 통해 새 에셋에 닿는다.

  • 옛 경로: Redirector
  • 대상: 새 경로 에셋
  • 참조 패키지가 아직 이전 경로를 보관할 수 있다.
Fix Up

참조 패키지의 대상을 새 경로로 갱신한다.

  • 참조: 새 경로 직접 연결
  • 작업: 패키지 재저장
  • 참조 변경을 저장해야 옛 경유 경로가 필요 없어질 수 있다.
정리 조건

참조 패키지 재저장 성공 뒤 Redirector를 정리한다.

  • 필수 조건: 참조 재저장 성공
  • 실패 때: 경유 구조 유지 가능
  • 삭제만 먼저 해도 모든 참조가 고쳐진다고 가정하지 않는다.

이동 후 참조와 Redirector 정리

이동 직후 이전 Redirector 경유 참조가 Fix Up 후 새 경로 직접 참조로 바뀐다. 패키지 재저장 성공이 제거 조건이다.

ASSET PATH · BEFORE / AFTER

Fix Up은 참조 패키지를 새 경로로 다시 저장합니다

에디터에서 에셋을 이동하면 이전 경로의 Redirector가 아직 갱신되지 않은 참조를 연결합니다. 정리 후에는 새 에셋을 직접 참조합니다.

참조 경로 변경 전후위는 아직 갱신되지 않은 패키지가 이전 경로의 Redirector를 통해 새 에셋을 참조하는 상태다. 아래는 Fix Up으로 해당 패키지를 다시 저장해 새 경로를 직접 참조하는 상태다.이동 직후 · 아직 갱신되지 않은 참조참조 패키지이전 경로Redirector새 경로이동한 에셋Fix Up 후 · 참조 패키지 재저장참조 패키지새 경로이동한 에셋
참조 경로 변경 전후위의 이동 직후에는 참조 패키지가 이전 경로 Redirector를 거쳐 새 에셋으로 연결된다. 아래의 Fix Up 후에는 패키지를 재저장해 새 에셋으로 직접 연결한다. 두 상태는 시간 순서의 비교이며 각 화살표는 참조 방향이다.이동 직후 · 참조 미갱신참조 패키지아직 이전 경로를 참조이전 경로Redirector새 경로이동한 에셋Fix Up 후 · 패키지 재저장참조 패키지새 경로를 직접 참조새 경로이동한 에셋직접 참조

Redirector 제거 조건

참조하는 패키지를 모두 재저장할 수 있어야 제거됩니다. 체크아웃·저장 권한과 처리 결과를 확인합니다.

이 예의 조건

  • 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
  • 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
에셋 이동

옛 경로 참조가 Redirector를 통해 새 에셋에 닿는다.

  • 옛 경로: Redirector
  • 대상: 새 경로 에셋
  • 참조 패키지가 아직 이전 경로를 보관할 수 있다.
Fix Up

참조 패키지의 대상을 새 경로로 갱신한다.

  • 참조: 새 경로 직접 연결
  • 작업: 패키지 재저장
  • 참조 변경을 저장해야 옛 경유 경로가 필요 없어질 수 있다.
정리 조건

참조 패키지 재저장 성공 뒤 Redirector를 정리한다.

  • 필수 조건: 참조 재저장 성공
  • 실패 때: 경유 구조 유지 가능
  • 삭제만 먼저 해도 모든 참조가 고쳐진다고 가정하지 않는다.

위 그림은 에셋을 옮긴 직후와 정리한 뒤의 참조 경로를 위아래로 비교합니다. 위쪽은 에셋을 옮긴 직후의 상태입니다. 이 에셋을 쓰는 참조 패키지는 아직 이전 경로를 가리키고 있고, 그 경로에 남은 리디렉터가 새 경로의 이동한 에셋으로 연결해 줍니다. 그래서 참조가 갱신되지 않았어도 에셋은 계속 제대로 보입니다.

아래쪽은 리디렉터를 정리하는 Fix Up을 실행한 뒤의 상태입니다. Fix Up은 참조 패키지를 새 경로로 다시 저장하므로, 이제 참조 패키지가 리디렉터를 거치지 않고 새 에셋을 직접 가리킵니다. 그림 아래의 설명처럼 리디렉터가 지워지는 조건은 이것을 참조하는 패키지를 모두 다시 저장하는 데 성공하는 것입니다. 그래서 소스 관리에서 파일을 체크아웃할 수 있는지, 저장 권한이 있는지, 처리 결과가 어떻게 나왔는지를 함께 확인합니다.

리디렉터는 콘텐츠 브라우저에서 평소에 보이지 않습니다. Filters 메뉴의 Other Filters에서 Show Redirectors를 켜면 다른 에셋과 함께 보입니다. 리디렉터 하나를 오른쪽 클릭해 Fix Up을 고르거나, 폴더를 오른쪽 클릭해 그 폴더의 리디렉터를 한꺼번에 정리할 수 있으며, 폴더 메뉴의 항목 이름은 버전에 따라 조금 다를 수 있습니다.

작은 테스트 프로젝트에서 직접 해 보면 흐름이 분명해집니다. 메시 하나를 에디터에서 다른 폴더로 옮긴 뒤, 이전 폴더에서 Show Redirectors를 켜 리디렉터가 남았는지 확인합니다. 그 메시를 쓰는 테스트 레벨을 저장한 다음 Fix Up을 실행하고, 리디렉터가 사라졌는지와 레벨을 다시 열었을 때 메시가 그대로인지를 함께 확인합니다. 정리가 끝났다고 판단하는 기준은 버튼을 눌렀다는 사실이 아니라, 참조 패키지가 저장에 성공했다는 결과입니다.


콘텐츠 브라우저 표시 설정

콘텐츠 브라우저의 Settings 메뉴에서는 화면에 무엇을 어떻게 보여 줄지를 정합니다. 버튼의 위치는 에디터 버전에 따라 다릅니다.

썸네일 크기(Thumbnail Size)를 조절하면 한 화면에 더 많은 에셋을 보거나, 반대로 더 크게 미리 볼 수 있습니다. 목록 보기로 바꿨을 때는 컬럼(Columns)에서 어떤 정보를 열로 보여 줄지 고릅니다. 또 엔진 콘텐츠와 플러그인 콘텐츠, 개발자 콘텐츠를 보일지도 여기서 정합니다. 그래서 엔진에 들어 있는 기본 에셋이 검색되지 않는다면, 경로와 필터를 확인한 다음 이 표시 설정도 확인합니다.


정리

  • 콘텐츠 브라우저는 폴더 뷰, 에셋 뷰, 필터와 검색 바로 나뉘며, 여러 개를 함께 열 수 있습니다.
  • 좋은 폴더 구조는 이해하기 쉽고, 일관되고, 관련 에셋을 묶고, 늘어날 자리가 있는 구조이며, 공용 에셋과 대상별 에셋의 자리를 나눕니다.
  • 개인 실험 폴더는 공유 에셋이 참조하지 않게 하고, 빌드에서 빼려면 Directories to never cook에 명시합니다.
  • 에셋은 에디터에서 옮기고, 운영체제 탐색기에서 .uasset만 옮기지 않습니다.
  • 에셋이 보이지 않으면 검색어, 종류 필터, 폴더 범위, 표시 설정을 먼저 확인하며, 컬렉션으로 흩어진 에셋을 모아 봅니다.
  • 옮기거나 이름을 바꾼 에셋의 이전 경로에는 리디렉터가 남고, Fix Up은 참조 패키지를 다시 저장해 새 경로를 직접 가리키게 하며, 모두 저장에 성공해야 리디렉터가 지워집니다.

연습 문제

1. 저장에 실패한 Fix Up

메시를 옮긴 뒤 Fix Up을 실행했는데, 그 메시를 참조하는 레벨 하나가 읽기 전용이라 저장에 실패했습니다. 리디렉터가 정리되었다고 볼 수 있을까요? 리디렉터를 탐색기에서 직접 지우면 어떻게 될까요?

해설 보기

정리되었다고 볼 수 없습니다. 리디렉터는 참조하는 패키지를 모두 다시 저장해야 지워지는데, 레벨 하나가 저장되지 않았으므로 그 레벨은 여전히 이전 경로를 가리킵니다.

먼저 소스 관리에서 체크아웃하거나 저장 권한을 해결한 뒤 다시 Fix Up을 실행하고 결과를 확인합니다. 리디렉터를 탐색기에서 지우면, 이전 경로를 가리키던 그 레벨이 에셋을 찾지 못해 참조가 깨집니다. 문제를 숨기는 대신 오히려 깨뜨리는 셈입니다.

2. 탐색기로 옮긴 텍스처

텍스처 몇 개를 정리하려고 Windows 탐색기에서 Content/Textures 폴더의 .uasset 파일을 Content/Common/Textures로 옮겼습니다. 에디터를 다시 열었더니 그 텍스처를 쓰던 재질들이 깨져 보입니다. 왜 그럴까요?

해설 보기

탐색기에서 파일을 옮기면 엔진은 에셋이 옮겨졌다는 사실을 모르므로, 이전 경로에 리디렉터를 남기지도 않고 재질의 참조를 갱신하지도 않습니다. 재질은 여전히 이전 경로에서 텍스처를 찾다가 찾지 못해 깨집니다.

파일을 원래 자리로 되돌린 뒤 에디터 안에서 끌어 옮기면, 리디렉터가 남아 참조가 이어지고, 이후 Fix Up으로 정리할 수 있습니다.

3. 사라진 것처럼 보이는 메시

어제까지 찾던 SM_Table_01이 오늘 검색해도 보이지 않습니다. 지워졌다고 판단하기 전에 무엇을 차례로 확인해야 할까요?

해설 보기

먼저 검색 바에 다른 검색어가 남아 있지 않은지 확인하고, 종류 필터에 Static Mesh가 빠져 있거나 다른 종류만 켜져 있지 않은지 봅니다. 다음으로 지금 보고 있는 폴더가 SM_Table_01이 있는 폴더를 포함하는지 확인합니다.

그래도 없다면 누군가 옮기거나 이름을 바꿨을 수 있으므로, Show Redirectors를 켜 원래 위치에 리디렉터가 남았는지 봅니다. 리디렉터가 있다면 그것이 가리키는 새 경로에서 메시를 찾을 수 있습니다.

리디렉터의 동작과 정리 방법은 Epic의 에셋 리디렉터 안내에서 확인할 수 있습니다.

다음 글 에셋의 버전 관리에서는 에셋의 변경 이력을 남기고 여러 사람이 같은 에셋을 다룰 때의 충돌을 피하는 버전 관리 방법을 다룹니다.