
개요
언리얼에서 에셋 브라우저 반복 작업을 자동화하기 위한 방법을 알아본다.
블루프린트로도 구성이 가능해 로직을 짜기 쉽고 유용하다.
방법
1. Editor Utility Blueprint 생성
에셋 브라우저 우클릭 후, 아래 그림과 같이 생성
블루프린트 섹션에 있는게 아님에 주의!


2. 클래스 기본값 설정
이를 설정하는 이유는,
만약 MI용이라면 MI를 선택했을 때만 해당 액션이 표시되도록 설정하기 위함이다.
아래 그림 절차대로 진행 후, 디테일 창에서 설정하면 된다.


3. 동작 추가

4. 에셋 브라우저 최종 확인
스크립팅된 액션 확인해보면 해당 함수 이름이 뜨는 것을 확인해볼 수 있음
참고영상
이 영상은 언리얼 엔진의 에디터 유틸리티(Editor Utilities)를 활용하여 반복적인 작업을 자동화하고 에디터 내 워크플로우를 가속화하는 방법을 다루는 튜토리얼입니다.
Epic Games의 시니어 개발자 관계 테크니컬 아티스트인 Matt Ostay가 GDC 2024에서 발표한 내용으로, 수천 개의 머티리얼 인스턴스에 나나이트(Nanite) 테셀레이션(Tessellation)을 적용해야 하는 실제 사례를 바탕으로 에디터 유틸리티의 강력한 기능과 활용법을 단계별로 상세하게 설명합니다.
블루프린트 기반의 스크립팅을 통해 아티스트와 코딩에 익숙하지 않은 사용자도 쉽게 에디터 자체의 기능을 확장하고, 애셋 관리, UI 커스터마이징, 비동기 처리 등 복잡한 작업을 효율적으로 처리하는 방법을 배울 수 있습니다.
타임라인별 상세 요약
- [00:01] 소개 및 문제 제기: 발표자 Matt Ostay는 자신을 소개하며, GDC가 끝나기 전에 수천 개의 머티리얼 인스턴스에 나나이트 테셀레이션을 적용하라는 아트 디렉터의 어려운 과제를 해결하기 위해 에디터 유틸리티를 사용하게 된 배경을 설명합니다. 그는 테크 아티스트로서 반복적인 작업을 자동화하려는 동기가 이 발표의 시작점임을 강조합니다.
- [00:50] 에디터 유틸리티란?: 에디터 유틸리티는 단순히 게임 로직이 아닌, 언리얼 에디터 자체를 스크립팅하기 위한 블루프린트 기반 시스템이라고 간략하게 정의합니다. 이를 통해 아티스트나 코드를 직접 작성하는 것을 선호하지 않는 사용자들도 쉽게 에디터의 기능을 확장할 수 있다는 장점을 강조합니다.
- [01:22] 발표 내용 소개: Matt은 세션에서 다룰 주요 주제들을 다음과 같이 간략하게 소개합니다.
- [01:52] 라이브 데모 환경: 그는 이 발표 전체가 자신이 직접 개발한 에디터 유틸리티를 사용하여 에디터 내에서 실시간으로 진행되고 있음을 보여줍니다. 발표자 노트를 보고 내비게이션을 제어할 수 있는 프리젠터 뷰를 시연하며 에디터 유틸리티의 실제 활용 가능성을 보여줍니다 [02:00].
- [02:29] 에셋 액션 유틸리티: Matt은 블루프린트로 정의되어 컨텍스트 메뉴에 나타나는 함수인 에셋 액션 유틸리티에 대해 자세히 설명하기 시작합니다. 그는 다음의 과정을 시연합니다.
- [05:29] 실행 취소(Undo) 시스템 구현: 그는 에디터 유틸리티 작업에 실행 취소 기능을 만드는 것의 중요성을 강조합니다. Begin Transaction, Transact Object, End Transaction 노드를 사용하여 작업이 실행 취소 시스템에 기록되도록 하는 방법을 설명하고 [05:43], 로드된 애셋을 체크아웃하고 저장하는 기능을 포함하여 머티리얼 인스턴스의 "부모 변경(Change Parent)" 함수를 시연합니다 [06:00].
- [07:29] 사용자 입력 노출: 함수 입력 핀을 함수 입력 노드로 드래그하여 함수의 입력을 모달 대화 상자를 통해 사용자에게 직접 노출하는 "재미있는 트릭"을 보여줍니다 [07:49]. 이를 통해 유틸리티 실행 시 사용자에게 상호작용 가능한 프롬프트가 생성되는 것을 시연합니다 [08:29].
- [08:48] 에디터 유틸리티 위젯: 더 복잡한 UI 상호작용을 위해 에디터 유틸리티 위젯으로 주제를 전환합니다. 그는 에디터 유틸리티 서브메뉴에서 위젯을 올바르게 생성하는 방법을 명확히 설명하고 [09:05], 방향성 광원을 켜고 끄는 간단한 위젯을 보여줍니다 [09:29].
- [10:07] PIE(Play In Editor)에서 위젯 활성화: 클래스 설정에서 "Is Enabled in PIE"를 설정하여 에디터 유틸리티 위젯이 PIE 모드에서도 작동하도록 활성화하는 방법을 시연합니다 [10:16].
- [10:51] 툴바 버튼으로 위젯 노출: 에디터 유틸리티 위젯을 툴바를 통해 접근할 수 있도록 만드는 방법을 설명하며, 자신이 파이썬(Python)을 사용하여 커스텀 버튼을 추가했음을 언급합니다 [11:06]. 위젯 버튼을 등록하기 위한 파이썬 시작 스크립트를 보여주고 [11:19], 더 복잡한 통합을 위한 또 다른 옵션으로 C++를 간략하게 언급합니다 [11:45].
- [12:34] 서브시스템으로 기능 확장: 그는 에디터 유틸리티 작업을 한 단계 더 발전시키기 위해 C++를 사용하는 것의 이점, 특히 프로젝트 설정과 서브시스템의 유용성을 강조합니다. 서브시스템은 엔진을 수정하거나 런타임 클래스에 불필요한 코드를 추가하지 않고도 C++ 기능을 블루프린트에 노출하는 방법이라고 설명합니다 [13:18]. 블루프린트에 직접 노출되지 않는 머티리얼의 테셀레이션을 활성화하고 디스플레이스먼트 파라미터를 설정하기 위해 커스텀 에디터 서브시스템을 사용하는 예를 보여줍니다 [13:35].
- [14:10] 에디터 유틸리티 태스크 (비동기 처리): Matt은 에디터를 멈추지 않고 많은 수의 애셋을 일괄 처리하기 위한 해결책으로 에디터 유틸리티 태스크를 소개합니다. 그는 다음의 과정을 시연합니다.
- [17:29] 테셀레이션 적용 태스크 구현: Begin Transaction과 Get Selected Assets으로 테셀레이션 적용 태스크 빌드를 시작합니다.
- [17:58] 에디터 유틸리티 함수 라이브러리 (UE 5.4 기능): Matt은 언리얼 엔진 5.4의 새로운 기능인 에디터 유틸리티 함수 라이브러리를 소개합니다. 이 기능을 통해 트랜잭션 관리와 같은 공통된 에디터 관련 블루프린트 함수들을 재사용 가능한 라이브러리로 묶을 수 있음을 설명하며, 미리 만들어진 라이브러리를 사용하는 방법을 시연합니다 [18:05].
- [18:58] 취소 가능한 루프 및 머티리얼 수정: 사용자가 작업을 취소할 수 있도록 For Each Loop with Break를 구현하고, 각 반복마다 Was Cancel Requested를 확인합니다 [19:04]. 루프 안에서 머티리얼로 캐스팅하고, 객체를 트랜잭션 처리한 후, 커스텀 C++ 서브시스템을 사용하여 다음을 수행합니다.
- [21:58] 태스크 마무리: 루프가 끝난 후, 유틸리티 라이브러리의 Checkout Save and End Transaction 함수를 사용하고 Finish Executing Task를 호출합니다 [21:58].
- [22:16] 테셀레이션 태스크 시연: Matt은 단일 머티리얼에 테셀레이션 유틸리티를 실행하여 디테일과 디스플레이스먼트로 인한 셀프 섀도잉이 추가되는 즉각적인 효과를 보여줍니다 [22:25].
- [22:47] 일괄 적용 및 결론: 그는 이 예제가 단순화되었지만, 사용자들이 더 복잡하고 프로젝트에 특화된 테셀레이션 툴을 구축하는 기반을 제공한다고 말합니다 [22:54]. 그런 다음 여러 머티리얼에 테셀레이션을 적용하는 유틸리티의 최종 시연을 보여주며, 배운 내용을 요약하며 발표를 마무리합니다 [23:21].
'이펙트 (FX) > 이펙트 팁 : Unreal' 카테고리의 다른 글
| [Unreal/Houdini] 상호작용 VAT 관련 아티클 소개 (Vertex Animation Texture) (0) | 2025.08.19 |
|---|---|
| [Unreal] 텍스처 익스포트 기능 만들기 (스크립팅된 에셋 액션) (1) | 2025.08.15 |
| [Unreal/Niagara] 시퀀서에서 나이아가라 Collision 모듈 충돌 오류 해결법 (2) | 2025.08.14 |
| [Unreal/Houdini] Fluid VAT 사용법 (Vertex Animation Texture, Dynamic Remeshing) (0) | 2025.08.12 |
| [Unreal/Niagara] 나이아가라에서 메시 파티클 충돌 후 회전 멈춤 구현하기 (튜토리얼 소개) (0) | 2025.08.11 |
댓글