프로시저럴 콘텐츠 생성 프레임워크(Procedural Content Generation Framework, PCG)는 언리얼 엔진 내에서 자신만의 프로시저럴 콘텐츠와 툴을 제작할 수 있는 툴세트입니다. PCG는 테크니컬 아티스트, 디자이너, 프로그래머가 건물이나 생물군 생성과 같은 에셋 유틸리티에서 전체 월드에 이르기까지 복잡성에 관계없이 빠른 반복작업 툴과 콘텐츠를 빌드할 수 있도록 지원합니다.
주요 개념 및 용어
- 포인트(Points): PCG 그래프에 의해 생성되며 메시를 스폰하는 데 자주 사용되는 3D 공간상 위치입니다. 포인트에는 트랜스폼, 바운드, 색, 밀도, 경사도, 시드에 대한 정보가 포함됩니다. 포인트에 사용자 정의 어트리뷰트를 할당할 수 있습니다.
- 포인트 밀도(Point Density): 다양한 그래프 노드에 사용되는 값입니다. 디버그 뷰에서는 각 포인트의 그레이디언트로 표현됩니다. 밀도가 0이면 검은색, 밀도가 1이면 흰색입니다.
필수 셋업
프로시저럴 콘텐츠 생성 프레임워크를 사용하려면 프로젝트에서 프로시저럴 콘텐츠 생성 프레임워크(Procedural Content Generation Framework) 플러그인을 활성화해야 합니다. 플러그인 활성화에 대한 자세한 내용은 플러그인으로 작업하기를 참고하세요.
스태틱 메시에서 포인트를 샘플링하려면 프로시저럴 콘텐츠 생성 프레임워크 지오메트리 스크립트 상호운용(Procedural Content Generation Framework Geometry Script Interop) 플러그인이 필요합니다.
프로시저럴 노드 그래프
프로시저럴 노드 그래프(Procedural Node Graph)는 프로시저럴 콘텐츠 생성 프레임워크의 핵심입니다.
머티리얼 에디터와 유사한 포맷을 사용하여 공간 데이터가 레벨의 PCG 컴포넌트에서 그래프로 이동하며, 포인트 생성에 사용됩니다. 포인트는 일련의 노드를 통해 필터링 및 수정되며 출력이 실시간으로 업데이트됩니다. 결과 포인트는 다양한 에셋을 스폰하는 데 사용될 수 있습니다.
PCG 그래프 에셋 생성
PCG 그래프를 생성하려면 다음 단계를 따릅니다.
- 콘텐츠 드로어(Content Drawer) 또는 콘텐츠 브라우저(Content Browser) 에서 우클릭하여 고급 에셋 생성(Create Advanced Asset) > PCG 로 이동한 다음 PCG 그래프(PCG Graph) 를 선택합니다.
- 새 에셋의 이름을 선택하고 Enter 를 누릅니다.
PCG 그래프 편집
PCG 그래프 에디터를 사용하여 PCG 그래프 에셋을 환경설정하고 편집할 수 있습니다. 이 에디터의 사용법은 블루프린트나 머티리얼 에디터와 유사합니다. PCG 전용 툴과 패널도 일부 있습니다.
번호 | 설명 |
---|---|
1 | 노드 팔레트 |
2 | 디버그 드롭다운 |
3 | 뷰포트 |
4 | 디테일 패널 |
5 | 어트리뷰트 목록 |
블루프린트로 작업하는 것과 마찬가지로, 노드 팔레트에서 노드를 뷰포트로 드래그하거나 컨텍스트 메뉴를 사용하여 그래프에 노드를 추가할 수 있습니다.
PCG 그래프가 PCG 컴포넌트에 연결되어 있고 콘텐츠 생성에 사용된 경우, PCG 그래프에 적용된 변경사항은 에디터 뷰포트에서 실시간으로 업데이트됩니다.
PCG 노드
PCG 그래프는 일련의 PCG 노드로 구성되며, 각 노드는 최종 결과물에 영향을 미치는 작업을 수행합니다.
이러한 노드는 다음과 같은 카테고리로 나뉩니다.
카테고리 | 설명 |
---|---|
Blueprint | 블루프린트 관련 노드가 포함됩니다. 여기에는 PCGBlueprintElement 에서 파생된 사용자 블루프린트를 실행하는 일반 노드가 있습니다. |
Color | 포인트 색에 영향을 미치는 노드가 포함됩니다. |
Debug | 디버깅에 도움이 되는 노드가 포함됩니다. |
Density | 포인트 밀도에 영향을 미치는 노드가 포함됩니다. |
Filter | 기준에 따라 또는 포인트별로 데이터를 필터링하는 노드가 포함됩니다. |
IO | 외부 데이터와의 상호작용을 제어하는 노드가 포함됩니다. |
Metadata | 포인트나 어트리뷰트 세트의 어트리뷰트와 상호작용하는 노드가 포함됩니다. |
Params | 액터 또는 블루프린트 변수로부터의 파라미터 획득을 제어하는 노드가 포함됩니다. |
Sampler | 볼륨, 표면, 메시와 같은 공간 데이터 소스에서 포인트를 생성하는 노드가 포함됩니다. |
Spatial | 데이터 간에 공간적 관계를 만들거나, 내부 공간 데이터를 변경하거나, 데이터를 얻는 노드가 포함됩니다. |
Spawner | 새 데이터를 만들거나 지정된 포인트 위치에 액터를 배치하는 노드가 포함됩니다. |
Subgraph | 서브그래프 사용을 처리하는 노드가 포함됩니다. |
Transforms | 포인트의 트랜스폼 정보를 수정하는 노드가 포함됩니다. |
블루프린트와 마찬가지로 코멘트 와 경유 노드 를 추가하여 그래프의 가독성을 향상할 수 있습니다.
PCG 컴포넌트
PCG 컴포넌트 프로시저럴 노드 그래프에서 PCG 컴포넌트를 통해 레벨을 샘플링할 수 있습니다. 이 컴포넌트는 프로시저럴 노드 그래프의 인스턴스를 저장하며 에디터와 런타임 모두에서 프로시저럴 콘텐츠의 생성을 관리합니다. PCG 컴포넌트는 액터에 컴포넌트로 추가되거나, 프로시저럴 콘텐츠를 신속히 설정하는 데 유용한 기본 볼륨인 PCG 볼륨의 일부로 사용됩니다.
PCG 그래프를 PCG 컴포넌트에 연결하려면 다음 단계를 따릅니다.
- 에디터 뷰포트 또는 아웃라이너(Outliner) 에서 연결할 PCG 볼륨 또는 블루프린트 클래스 를 선택합니다.
-
디테일(Details) 패널에서 PCG 컴포넌트(PCG Component) 를 클릭합니다.
-
그래프(Graph) 드롭다운을 클릭하고 사용할 PCG 노드 그래프를 선택합니다.
-
생성(Generate) 버튼을 클릭하여 결과를 확인합니다.
PCG 디버깅
디버깅은 PCG 워크플로에서 필수적인 부분입니다.
각 노드에는 PCG 그래프의 각 단계에서 포인트 데이터를 시각화하는 데 사용할 수 있는 다양한 디버그 옵션이 있습니다.
- 디버그 렌더링
- 노드 활성화/비활성화
- 검사
노드의 디테일(Details) 패널에서 디버그(Debug) 체크박스를 선택하거나 D 를 눌러 각 노드의 디버그 렌더링을 토글합니다.
노드의 디테일(Details) 패널에서 활성화됨(Enabled) 체크박스를 선택하거나 E 를 눌러 각 노드의 활성화 상태를 토글합니다.
노드를 검사하여 해당 노드가 생성하는 모든 포인트를 어트리뷰트(Attributes) 목록에 표시할 수도 있습니다.
디버그 드롭다운 메뉴에서 PCG 컴포넌트를 선택합니다. 그런 다음 뷰포트에서 검사할 노드를 우클릭하고 검사(Inspect) 를 선택합니다. 그 대신 A 를 눌러도 됩니다.
간단한 숲 볼륨 만들기
프로시저럴 생성 툴의 일반적인 사용 사례는 오픈 월드 환경에서 생물군을 생성하는 것입니다.
다음 단계에 따라 기본적인 숲 생물군 생성기를 만들 수 있습니다.
이 샘플에서는 마켓플레이스를 사용하여 다운로드한 Megascans Trees: European Hornbeam 컬렉션의 머티리얼과 스태틱 메시를 사용합니다.
레벨 생성
- 언리얼 엔진에서 새 프로젝트를 생성합니다.
- 기본(Basic) 레벨 템플릿을 사용하여 새 레벨을 생성합니다. 레벨을 저장합니다.
- Floor 스태틱 메시를 삭제하고 랜드스케이프 모드를 사용하여 레벨에 새 랜드스케이프를 추가합니다.
-
스컬프팅 툴을 사용하여 랜드스케이프에 베리에이션을 추가합니다.
PCG 볼륨 생성
- 선택(Selection) 모드로 돌아가서 액터 배치(Place Actors) 창이 보이지 않는 경우 창을 활성화합니다.
-
클래스 검색(Search Classes) 박스를 사용하여 PCG 볼륨(PCGVolume) 을 찾아 레벨에 추가합니다.
- PCG 볼륨의 스케일을 X = 8.0, Y = 8.0, Z = 8.0으로 조절합니다.
PCG 그래프 에셋 생성
- 콘텐츠 드로어(Content Drawer) 또는 콘텐츠 브라우저(Content Browser) 에서 우클릭하고 고급 에셋 생성(Create Advanced Asset) > PCG 로 이동한 다음 PCG 그래프(PCG Graph) 를 선택합니다.
- 새 에셋을 PCG_ForestGen 으로 명명하고 Enter 를 누릅니다.
- PCG_ForestGen 을 더블 클릭하여 PCG 그래프 에디터를 엽니다.
PCG 컴포넌트 연결
- 에디터 뷰포트 또는 아웃라이너(Outliner) 에서 PCG 볼륨(PCG Volume) 을 선택합니다.
- 디테일(Details) 패널에서 PCG 컴포넌트(PCG Component) 를 클릭합니다.
-
그래프(Graph) 드롭다운을 클릭하고 목록에서 PCG_ForestGen 을 선택합니다.
포인트 생성
- PCG 그래프 에디터(PCG Graph Editor) 창에서 Surface Sampler 노드를 그래프에 추가합니다.
-
Input 노드의 아래쪽 화살표를 클릭하여 펼친 다음 Landscape 출력을 Surface Sampler의 Surface 입력에 연결합니다.
- Surface Sampler를 선택하고 D 를 눌러 디버그 렌더링을 토글합니다.
- 에디터 창으로 돌아가서 PCG 볼륨을 선택하고 디테일 패널에서 생성(Generate) 버튼을 클릭합니다.
이제 에디터 뷰포트에서 생성되는 포인트를 확인할 수 있습니다. 포인트는 랜드스케이프의 모양에 맞춰집니다.
베리에이션 추가
- PCG 그래프 에디터에서 Surface Sampler를 선택합니다.
- 디테일 패널에서 Points Per Square Meter, Points Extents, Looseness 프로퍼티를 조정하여 포인트를 더 추가합니다.
- Points Per Square Meter 를 0.15 로 조정하여 공간에 포인트를 더 추가합니다.
- Points Extents 프로퍼티는 각 포인트의 바운드 크기를 제어합니다. X, Y, Z 값을 50 으로 변경합니다.
- Looseness 프로퍼티는 생성되는 포인트를 그리드 셰이프에 얼마나 가깝게 맞출지를 결정합니다. Looseness 값은 1.0 인 상태로 둡니다.
-
다음으로 Transform Points 노드를 추가합니다. 이 노드는 포인트에 일정한 범위의 이동, 회전, 스케일 변화를 추가합니다. Surface Sampler 노드의 Output 핀을 Transform Points 노드의 Input 핀에 연결합니다.
- 디버그 렌더링을 Surface Sampler 노드에서는 비활성화하고 Transform Points 노드에서는 활성화합니다.
-
회전 베리에이션을 추가하려면 Max Rotation 의 Z 값을 360 으로 변경합니다. 그러면 모든 포인트에 0~360도의 랜덤 회전값이 부여됩니다.
- PCG 그래프는 포인트를 스폰하고 랜드스케이프의 노멀 방향을 따라 회전시킵니다. Absolute Rotation 체크박스를 선택하여 이러한 추가적인 회전을 비활성화합니다.
-
크기 베리에이션을 추가하려면 X, Y, Z Scale Min 값을 0.5 로 설정합니다. X, Y, Z Scale Max 값을 1.2 로 변경합니다.
최종 결과물로, 적정량의 베리에이션이 적용된 포인트 세트가 생겼습니다.
스태틱 메시 스폰
-
PCG 그래프 에디터에서 Static Mesh Spawner 노드를 그래프 뷰포트에 추가합니다. Transform Points 노드의 Output 핀을 Static Mesh Spawner의 Input 핀에 연결합니다.
- Static Mesh Spawner를 선택합니다.
- 디테일(Details) 패널에서 Mesh Entries 옵션을 찾아 + 버튼을 클릭하여 스폰할 스태틱 메시를 추가합니다.
- Mesh Entries 옆의 아래쪽 화살표를 클릭하여 배열을 엽니다.
- 인덱스(Index) [0] 옆의 아래쪽 화살표를 클릭합니다.
- Descriptor 옆의 아래쪽 화살표를 클릭합니다.
-
Static Mesh 의 드롭다운 메뉴를 클릭하고 스폰할 나무를 선택합니다. 이 예시에서는 SM_EuropeanHornbeam_Forest_01 을 사용합니다.
스태틱 메시를 더 추가하고 배열의 메시 항목별로 가중치(Weight) 프로퍼티를 사용하여 베리에이션을 조정할 수 있습니다. 언리얼 엔진에서는 모든 스태틱 메시 항목의 가중치 값을 더하고 개별 가중치로 나누어 각 항목의 스폰 확률을 결정합니다.