지오메트리 스크립팅은 커스텀 모델링 툴과 워크플로를 제작할 수 있는 블루프린트 및 Python 함수를 제공합니다. 이 가이드에서는 블루프린트를 통해 지오메트리 스크립팅을 사용하는 방법의 기초를 살펴봅니다. 아래 단계는 라이라 샘플 프로젝트를 위해 생성된 지오메트리 툴과 유사하게 레벨 디자인을 위해 프로시저럴 메시 툴을 생성하는 방법을 다룹니다.
이 가이드에서는 다음을 수행하는 방법을 설명합니다.
- 빠른 레벨 블로킹을 위해 프로시저럴 지오메트리를 생성합니다.
- 부울 연산자를 사용하여 메시를 동적으로 자릅니다.
- 스태틱 메시 굽기 함수를 생성합니다.
여기에서는 지오메트리 스크립팅으로 생성할 수 있는 프로시저럴 메시 생성 및 툴에 대한 간단한 샘플을 개발합니다. 고급 예시는 지오메트리 스크립팅을 베이스로 사용하는 프로시저럴 콘텐츠 생성 프레임워크 입니다. 이 툴세트에 대한 자세한 내용은 프로시저럴 콘텐츠 생성 개요를 참고하세요.
프로시저럴 생성 외에 추가로 생성 가능한 워크플로는 다음과 같습니다.
필요한 사전 지식
이 페이지의 콘텐츠를 이해하고 사용하려면 다음 조건을 충족해야 합니다.
- 블루프린트에 대한 기본적인 이해를 갖춰야 합니다.
- 지오메트리 스크립팅, 특히 새롭게 도입된 오브젝트 타입의 기본 사항에 익숙해야 합니다.
이 가이드에서는 삼인칭(Third Person) 템플릿을 사용합니다. 하지만 원하는 프로젝트를 사용하여 따라해도 됩니다.
플러그인 활성화하기
지오메트리 스크립팅을 사용하려면 관련 플러그인이 활성화되어 있어야 합니다.
플러그인을 활성화하거나 이미 활성화되어 있는지 검증하려면 다음 단계를 따릅니다.
-
메뉴 바 에서 편집(Edit) > 플러그인(Plugins) 을 선택합니다.
-
검색창에 'geometry script'를 입력합니다.
- 지오메트리 스크립트(Geometry Script) 플러그인을 활성화하고 대화창이 표시되면 예(Yes) 를 선택합니다.
- 엔진을 재시작합니다.
블루프린트 클래스 생성하기
시작하려면 올바른 블루프린트 클래스가 있는지 확인해야 합니다. 레벨 디자인을 위한 프로시저럴 메시를 생성하는 것이 목표이므로 GeneratedDynamicMeshActor 클래스를 사용해야 합니다.
블루프린트 클래스를 선택하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저(Content Browser) 에서 우클릭하고 블루프린트 클래스(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 Mesh 를 검색하여 선택합니다. 실행 핀을 연결합니다.
- 반환 값 핀에서 드래그하고 Append Cylinder 를 검색하여 선택합니다. 이 노드는 박스 메시에서 빼는 데 사용할 실린더 메시를 추가합니다.
-
타깃 메시 의 출력을 BoolMesh 라는 변수로 승격합니다. 타입을 다이내믹 메시 로 설정하고 프라이빗으로 둡니다.
- BoolMesh 의 실행 핀에서 드래그하고 Apply Mesh Boolean 을 검색하여 선택합니다. 이 노드를 사용하여 메시에 부울 연산을 적용할 것입니다.
- DynamicMesh 변수에서 드래그하여 Apply Mesh Boolean 의 타깃 메시 입력에 연결합니다.
-
BoolMesh 를 Apply Mesh Boolean 의 Tool Mesh(툴 메시) 핀에 연결합니다. 툴 메시 는 부울 작업을 수행할 메시를 나타냅니다. 이 파라미터가 Append Cylinder 노드를 추가한 이유입니다.
- Apply Mesh Boolean 노드의 연산 타입을 빼기(Subtract) 로 설정합니다.
- 필요한 연산을 적용한 뒤에는 메모리를 다시 사용할 수 있도록 임시 메시를 풀로 되돌려야 합니다. Apply Mesh Boolean의 실행 핀을 Release All Compute Meshes에 연결합니다. 이벤트가 트리거되면 풀이 할당한 모든 계산 메시가 해제됩니다.
- 컴파일 하고 저장 합니다.
컴파일하고 레벨 에디터에서 블루프린트를 보면 부울 이펙트가 너무 작아서 안 보일 수도 있습니다. 이펙트를 보려면 부울 메시의 크기를 수동으로 설정하거나 위젯을 사용하여 동적으로 조정해야 합니다.
위젯 추가하기
박스 프리미티브에 위젯을 추가한 것처럼 부울 메시 및 위치에도 똑같이 할 수 있습니다.
위젯을 생성하려면 다음 단계를 따릅니다.
-
변수(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 를 사용하여 다이내믹 메시를 기존 스태틱 메시 대신 새 스태틱 메시에 굽습니다.