지오메트리 스크립팅은 커스텀 모델링 툴과 워크플로를 제작할 수 있는 블루프린트 및 Python 함수를 제공합니다. 이 가이드에서는 블루프린트를 통해 지오메트리 스크립팅을 사용하는 방법의 기초를 살펴봅니다. 아래 단계는 라이라 샘플 프로젝트를 위해 생성된 지오메트리 툴과 유사하게 레벨 디자인을 위해 프로시저럴 메시 툴을 생성하는 방법을 다룹니다.
이 가이드에서는 다음을 수행하는 방법을 설명합니다.
- 빠른 레벨 블로킹을 위해 프로시저럴 지오메트리를 생성합니다.
- 부울 연산자를 사용하여 메시를 동적으로 자릅니다.
- 스태틱 메시 베이크 함수를 생성합니다.
여기에서는 지오메트리 스크립팅으로 생성할 수 있는 프로시저럴 메시 생성 및 툴에 대한 간단한 샘플을 개발합니다. 고급 예시는 지오메트리 스크립팅을 베이스로 사용하는 프로시저럴 콘텐츠 생성 프레임워크 입니다. 이 툴세트에 대한 자세한 내용은 프로시저럴 콘텐츠 생성 개요를 참고하세요.
프로시저럴 생성 외에 추가로 생성 가능한 워크플로는 다음과 같습니다.
필요한 사전 지식
이 페이지의 콘텐츠를 이해하고 사용하려면 다음 조건을 충족해야 합니다.
- 블루프린트에 대한 기본적인 이해를 갖춰야 합니다.
- 지오메트리 스크립팅, 특히 새롭게 도입된 오브젝트 타입의 기본 사항에 익숙해야 합니다.
이 가이드에서는 삼인칭(Third Person) 템플릿을 사용합니다. 하지만 원하는 프로젝트를 사용하여 따라해도 됩니다.
플러그인 활성화하기
지오메트리 스크립팅을 사용하려면 관련 플러그인이 활성화되어 있어야 합니다.
플러그인을 활성화하거나 이미 활성화되어 있는지 검증하려면 다음 단계를 따릅니다.
-
메뉴 바 에서 편집(Edit) > 플러그인(Plugins) 을 선택합니다.
-
검색창에 'geometry script'를 입력합니다.
- 지오메트리 스크립트(Geometry Script) 플러그인을 활성화하고 대화창이 표시되면 예(Yes) 를 선택합니다.
- 언리얼 엔진을 재시작합니다.
블루프린트 클래스 생성하기
시작하려면 올바른 블루프린트 클래스가 있는지 확인해야 합니다. 레벨 디자인을 위한 프로시저럴 메시를 생성하는 것이 목표이므로 GeneratedDynamicMeshActor 클래스를 사용합니다.
블루프린트 클래스를 선택하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저 에서 우클릭하고 블루프린트 클래스(Blueprint Class) 를 선택합니다.
-
GeneratedDynamicMeshActor 를 검색하여 선택합니다.
- 블루프린트를 BP_ProceduralGen 으로 명명합니다.
GeneratedDynamicMeshActor 가 옵션으로 표시되지 않으면 지오메트리 스크립팅 플러그인이 활성화되지 않은 것입니다.
이벤트 구성
클래스를 생성한 후 툴을 빌드할 때 사용할 다이내믹 메시를 채울 특정 이벤트를 구성해야 합니다.
이벤트를 생성하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저에서 블루프린트 클래스를 더블클릭합니다.
- 이벤트 그래프(Event Graph) 를 엽니다.
-
그래프에서 우클릭하고 'generated mesh'를 입력하여 사용 가능한 노드를 필터링한 후 Event on Rebuild Generated Mesh 를 선택합니다. 이 이벤트는 다이내믹 메시 파라미터를 업데이트할 때마다 트리거되어 메시를 리빌드하게 합니다.
-
핀을 우클릭하고 변수로 승격(Promote to Variable) 을 선택하여 타깃 메시(Target Mesh) 출력을 로컬 변수로 승격합니다.
- 변수를 DynamicMesh 로 명명하고 타입을 다이내믹 메시 로 설정한 후 프라이빗으로 둡니다. 이 변수는 편집하는 다이내믹 메시를 나타냅니다.
지오메트리 빌드하기
블루프린트 클래스 및 이벤트가 생성되면 지오메트리 스크립팅 함수를 추가할 수 있습니다. 이 가이드의 목표는 트랜스폼 조정 및 자르기가 가능한 윤곽 작업 셰이프를 생성하는 것입니다. 이를 위해 먼저 편집할 메시를 생성해야 합니다.
메시를 생성하려면 다음 단계를 따릅니다.
- DynamicMesh 변수 실행 핀에서 드래그하고 Append Box 노드를 검색하여 선택합니다. 그러면 다이내믹 메시에 박스 프리미티브가 추가됩니다.
-
DynamicMesh 변수의 출력 핀을 타깃 메시 입력 핀에 연결합니다.
이러한 몇 개의 노드로 프로시저럴 메시를 생성했습니다. 컴파일하고 블루프린트를 레벨로 드래그하여 테스트할 수 있습니다. 즉시 생성 가능한 다른 셰이프에 대해 알아보려면 지오메트리 스크립팅 레퍼런스 문서의 프리미티브 생성 섹션을 참고하세요.
트랜스포메이션 위젯 추가하기
메시의 트랜스포메이션을 동적으로 조정하려면 인터랙티브 컨트롤을 추가해야 합니다.
인터랙티브 컨트롤을 추가하려면 다음 단계를 따릅니다.
-
BoxSize 라는 새 퍼블릭 변수를 생성하고 타입을 벡터로 설정합니다.
-
이 변수의 디테일(Details) 패널에서 인스턴스 편집 가능(Instance Editable) 및 3D 위젯 표시(Show 3D widget) 를 활성화합니다. 디폴트 값(Default Value) 을 200, 200, 200으로 설정합니다. 3D 위젯을 활성화하면 X, Y, Z 트랜스폼을 인터랙티브하게 제어하기 위한 조작 툴이 생성됩니다.
- 변수에서 드래그하여 Get BoxSize 를 선택합니다.
- 변수를 우클릭하고 구조체 핀 분할(Split Struct Pin) 을 선택합니다. 이렇게 하면 변수의 X, Y, Z 값이 박스의 치수를 구동하게 됩니다.
-
해당되는 X, Y, Z 값을 Append Box 의 각 치수 값에 연결합니다.
- 컴파일(Compile)(Ctrl+Alt)하고 저장(Save)(Ctrl+S)합니다.
이제 큐브 메시를 생성하고 동적으로 치수를 조정할 수 있습니다. 위젯으로 조정하면 메시를 스케일 조절하는 대신 설정된 크기의 새 다이내믹 메시를 생성합니다.

위젯이 표시되려면 선택 모드(Selection Mode) 에 있어야 합니다.
부울로 편집하기
부울 연산은 메시 쌍을 빼거나 더합니다. 메시에 디테일 및 디스플레이스먼트 이펙트를 빠르게 추가할 때 유용합니다. 부울 함수에 대한 두 번째 메시를 생성하기 위해 메시 풀에서 임시 메시를 할당할 수 있습니다. 임시 메시는 에디터에서 불필요한 지오메트리를 방지하여 컴퓨팅 프로세스의 부담을 줄여줍니다.
부울 연산을 생성하려면 다음 단계를 따릅니다.
- 그래프를 우클릭하고 Get Compute Mesh Pool 을 검색하여 선택합니다. 이렇게 하면 부울 연산을 수행할 임시 메시가 할당됩니다.
- Append Box 의 실행 핀을 Get Compute Mesh Pool 에 연결합니다.
- 반환 값(Return Value) 핀에서 드래그하고 Request and Release Mesh 를 검색하여 선택합니다. 실행 핀을 연결합니다.
- 메시(Mesh) 핀에서 드래그하고 Append Cylinder 를 검색하여 선택합니다. 이 노드는 박스 메시에서 빼는 데 사용할 실린더 메시를 추가합니다.
-
타깃 메시 의 출력을 BoolMesh 라는 변수로 승격합니다. 타입을 다이내믹 메시 로 설정하고 프라이빗으로 둡니다.
- BoolMesh 의 실행 핀에서 드래그하고 Apply Mesh Boolean 을 검색하여 선택합니다. 이 노드를 사용하여 메시에 부울 연산을 적용할 것입니다.
- DynamicMesh 변수에서 드래그하여 Apply Mesh Boolean 의 타깃 메시 입력에 연결합니다.
-
BoolMesh 를 Apply Mesh Boolean 의 Tool Mesh(툴 메시) 핀에 연결합니다. 툴 메시 는 부울 작업을 수행할 메시를 나타냅니다. 이 파라미터가 Append Cylinder 노드를 추가한 이유입니다.
- Apply Mesh Boolean 노드의 연산 타입을 빼기(Subtract) 로 설정합니다.
- 컴파일 하고(Ctrl+Alt) 저장 합니다(Ctrl+S).
컴파일하고 레벨 에디터에서 블루프린트를 보면 부울 이펙트가 너무 작아서 안 보일 수도 있습니다. 이펙트를 보려면 부울 메시의 크기를 수동으로 설정하거나 위젯을 사용하여 동적으로 조정해야 합니다.
위젯 추가하기
박스 프리미티브에 위젯을 추가한 것처럼 부울 메시 및 위치에도 똑같이 할 수 있습니다.
위젯을 생성하려면 다음 단계를 따릅니다.
-
변수(Variables) 패널에서 부울 메시의 위치에 대한 퍼블릭 변수를 생성하고 BoolLocation 으로 명명한 다음 타입을 벡터 로 설정합니다.
-
디테일 패널에서 인스턴스 편집 가능 및 3D 위젯 표시 를 활성화합니다.
-
Append Cylinder 노드의 트랜스폼(Transform) 핀을 우클릭하고 구조체 핀 분할 을 선택한 다음 BoolLocation 변수를 트랜스폼 위치(Transform Location) 에 연결합니다.
- 퍼블릭 변수를 하나 더 생성해서 BoolSize 로 명명하고 타입을 벡터로 설정합니다. 이것을 사용하여 부울 메시의 크기를 조정할 수 있습니다.
- 디테일 패널에서 인스턴스 편집 가능 및 3D 위젯 표시 를 활성화한 다음 디폴트 값 을 1, 1, 5로 설정합니다.
- 변수를 그래프로 드래그하고 Get Bool Size 를 선택합니다.
- 핀을 우클릭하고 구조체 핀 분할 을 선택합니다.
-
Bool Size 핀을 Append Cylinder 노드의 해당 트랜스폼 스케일(Transform Scale) 핀에 연결합니다.
- 컴파일 하고 저장 합니다.
이제 동적으로 다른 셰이프로 트랜스폼할 수 있는 메시가 생겼습니다.

스태틱 메시에 베이크 함수
이제 동적으로 생성된 메시가 있으므로 빠른 레벨 디자인을 위해 이를 기존 스태틱 메시에 적용할 수 있습니다. 이렇게 하려면 베이크 함수를 생성하고 레벨 에디터의 디테일 패널에 노출해야 합니다.
함수를 생성하려면 다음 단계를 따릅니다.
-
Bake Static Mesh 라는 새 함수를 생성합니다.
-
함수의 디테일 패널에서 에디터에서 호출(Call in Editor) 을 활성화하여 레벨 에디터에서 이벤트를 활성화합니다.
- 함수의 실행 핀에서 드래그하고 Get Dynamic Mesh 를 검색하여 선택합니다. 이 함수는 현재 사용 중인 다이내믹 메시를 풀링합니다.
-
Get Dynamic Mesh 실행 핀에서 드래그하고 Copy Mesh to Static Mesh 를 검색하여 선택합니다. 또한 반환 값 을 From Dynamic Mesh 에 연결합니다. 함수가 실행될 때 다이내믹 메시가 선택된 스태틱 메시로 베이킹됩니다.
- 베이킹할 스태틱 메시를 선택하려면 파라미터를 에디터에 노출해야 합니다. 퍼블릭 변수를 생성하고 TargetMesh 로 명명한 다음 타입을 스태틱 메시 로 설정합니다.
- 변수를 그래프로 드래그하고 Get TargetMesh 를 선택합니다.
- 변수 핀을 우클릭하고 Convert to Validated Get 을 선택합니다. 이 변환은 메시를 선택했을 때만 코드를 실행하도록 함수를 구성합니다.
-
타깃 메시 핀을 To Static Mesh Asset 에 연결합니다.
최종 베이크 스크립트
- 컴파일 하고 저장 합니다.
-
이제 스태틱 메시에 베이킹(Bake to Static Mesh) 버튼이 레벨 에디터의 디테일 패널에 표시됩니다. 버튼을 사용하기 전에 타깃 메시 를 베이킹할 스태틱 메시로 업데이트합니다.
최종 결과 검토하기
Bake Static Mesh 함수와 프로시저럴 메시 스크립트를 통해 다이내믹 메시를 사용하여 레벨 내 스태틱 메시를 지속적으로 업데이트할 수 있습니다.
최종 프로시저럴 메시 스크립트입니다. 클릭하면 확대됩니다.
직접 해보기
배운 내용을 활용하여 직접 다음과 같이 조정해 봅니다.
- 박스 메시를 스피어로 변경합니다.
- 추가적인 모델링 제어를 위해 두 번째 부울 메시를 추가합니다.
- Create New Static Mesh Asset From Mesh 노드를 사용하여 다이내믹 메시를 기존 스태틱 메시 대신 새 스태틱 메시에 베이킹합니다.