PCG 그래프와 컴포넌트
PCG Graph의 구조, PCG Component의 설정, PCG Volume의 활용법을 체계적으로 학습합니다.
PCG Graph 구조
노드 기반 그래프 에디터와 데이터 연결
PCG Graph(UPCGGraph)는 PCG 프레임워크의 핵심 에셋입니다.
Content Browser에서 우클릭 > PCG > PCG Graph로 생성하며, 더블클릭으로 그래프 에디터를 엽니다.
그래프 에디터 구성
| 영역 | 설명 |
|---|---|
| 그래프 캔버스 | 노드를 배치하고 연결하는 메인 작업 영역. 우클릭으로 노드 추가 |
| Details 패널 | 선택한 노드의 파라미터를 편집. 각 노드별 고유 설정 표시 |
| Palette | 사용 가능한 노드 카탈로그. 카테고리별 정리 및 검색 지원 |
| Attributes 패널 | 선택한 노드의 출력 데이터에 포함된 Attribute 목록 표시 |
핀(Pin) 시스템
노드 간 데이터는 핀을 통해 연결됩니다. 핀 색상은 데이터 타입을 나타냅니다.
| 핀 타입 | 설명 | 예시 노드 |
|---|---|---|
| Spatial (파란색) | Point, Spline, Surface 등 공간 데이터 | Surface Sampler의 출력 |
| Param (주황색) | Attribute Set, 파라미터 데이터 | Get Actor Property 출력 |
| Concrete (보라색) | 특정 타입으로 제한된 데이터 | Point 전용 입력 |
그래프에서 노드를 선택한 후 D 키를 누르면 해당 노드를 비활성화할 수 있습니다. 비활성화된 노드는 실행에서 제외되어 디버깅에 유용합니다.
PCG Component 상세
그래프 실행을 관리하는 핵심 컴포넌트
PCGComponent(UPCGComponent)는 어떤 Actor에든 추가할 수 있는 컴포넌트로,
PCG Graph의 인스턴스를 실행하고 결과를 관리합니다.
주요 프로퍼티
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
Graph |
UPCGGraphInterface* |
실행할 PCG Graph 또는 Graph Instance 에셋 |
Generation Trigger |
EPCGComponentGenerationTrigger |
생성 트리거 모드 (Generate On Load, Generate On Demand, Generate at Runtime) |
Is Partitioned |
bool |
Partitioned Generation 활성화 여부. World Partition 통합에 필수 |
Seed |
int32 |
랜덤 시드 값. 동일 시드는 동일 결과를 보장 (결정적 생성) |
Input Type |
EPCGComponentInput |
입력 소스 (Actor, Landscape, 또는 두 가지 모두) |
Generation Trigger 모드
Generate On Load
레벨이 로드될 때 자동으로 PCG를 실행합니다. 에디터에서 저장 시 결과가 레벨에 포함됩니다.
Generate On Demand
수동으로 Generate 버튼을 눌러야 실행됩니다. 무거운 그래프에서 유용합니다.
Generate at Runtime
게임 실행 중 동적으로 생성합니다. 런타임 PCG 생성에 필수입니다.
// Blueprint 또는 C++에서 PCGComponent 접근
UPCGComponent* PCGComp = MyActor->FindComponentByClass<UPCGComponent>();
if (PCGComp)
{
// 시드 변경
PCGComp->Seed = 42;
// 수동 재생성 트리거
PCGComp->Generate();
// 생성 결과 정리
PCGComp->Cleanup();
}
PCG Volume과 PCG Actor
다양한 PCG 호스트 Actor 활용법
PCG Volume (APCGVolume)
PCG Volume은 PCGComponent가 미리 내장된 Volume Actor입니다. 볼륨의 크기가 PCG 생성 범위를 결정하며, 가장 빠르게 PCG를 시작할 수 있는 방법입니다.
| 호스트 타입 | 입력 범위 | 적합한 용도 |
|---|---|---|
| PCG Volume | 볼륨 바운드 영역 | 넓은 영역의 환경 생성 (숲, 초원, 도시 블록) |
| 일반 Actor + PCGComponent | Actor 위치 기준 | 특정 위치 기반 생성 (건물 주변 장식, 오브젝트 세트) |
| Spline Actor + PCGComponent | 스플라인 경로 | 경로 기반 생성 (도로, 울타리, 강변 식생) |
| Landscape + PCGComponent | Landscape 전체 | 지형 전체에 걸친 대규모 환경 생성 |
PCG Volume 스케일링
// Volume 크기 설정 팁
[소규모] 100x100m → 정원, 소규모 장식 영역
[중규모] 500x500m → 마을, 숲 구역
[대규모] 2000x2000m → 오픈 월드 지역 (Partitioned 권장)
[초대형] 전체 Landscape → World Partition + Hierarchical 필수
// 대규모에서는 반드시 Is Partitioned = true 설정
// PCGWorldActor의 Partition Grid Size를 적절히 조정
비파티셔닝 모드에서 매우 큰 Volume을 사용하면 모든 메시가 하나의 Actor에 생성되어 메모리와 렌더링 성능에 심각한 영향을 줍니다. 대규모 영역에서는 반드시 Partitioned Generation을 활성화하세요.
Graph Instance와 Parameters
그래프 재사용과 파라미터 오버라이드 시스템
PCG Graph Instance
Graph Instance는 머티리얼 인스턴스와 유사한 개념입니다. 원본 그래프의 로직을 공유하면서 파라미터만 다르게 설정할 수 있어, 하나의 그래프로 다양한 변형을 만들 수 있습니다.
// Content Browser에서:
// 1. 우클릭 > PCG > PCG Graph Instance
// 2. Parent Graph 선택
// 3. 오버라이드할 파라미터만 수정
// 또는 기존 그래프에서:
// PCG Graph 에셋 우클릭 > Create Graph Instance
Graph Parameters
PCG Graph에 사용자 정의 파라미터를 추가하면 외부에서 값을 오버라이드할 수 있습니다.
| 파라미터 타입 | 용도 | 예시 |
|---|---|---|
Float |
밀도, 스케일, 거리 등 연속적 값 | TreeDensity = 0.5 |
Int32 |
카운트, 인덱스 | MaxTrees = 100 |
Bool |
기능 토글 | bSpawnRocks = true |
Vector |
위치, 크기 범위 | ScaleRange = (0.8, 1.2, 1.0) |
SoftObjectPath |
에셋 참조 | TreeMesh = SM_Oak_01 |
하나의 "ForestGenerator" 그래프를 만들고, TreeDensity, TreeType, UnderGrowthEnabled 등의 파라미터를 노출하면 침엽수림, 활엽수림, 혼합림 등 다양한 변형을 Graph Instance로 만들 수 있습니다.
핵심 요약
- PCG Graph는 노드를 연결하여 프로시저럴 로직을 정의하는 에셋이며, 핀 색상으로 데이터 타입을 구분한다
- PCG Component는 Actor에 부착되어 그래프를 실행하며, Generation Trigger로 실행 시점을 제어한다
- Generation Trigger는 On Load(자동), On Demand(수동), At Runtime(게임 중) 세 가지 모드가 있다
- PCG Volume은 PCGComponent가 내장된 간편 Actor로, 볼륨 크기가 생성 범위를 결정한다
- 대규모 영역에서는 반드시 Is Partitioned를 활성화하여 그리드 기반 분할 생성을 사용해야 한다
- Graph Instance와 Parameters를 활용하면 하나의 그래프를 다양한 상황에 재사용할 수 있다
도전 과제
배운 내용을 직접 실습해보세요
Get Landscape Data → Surface Sampler → Density Filter → Static Mesh Spawner 파이프라인을 구성하세요. 각 노드의 출력을 Debug 노드로 확인하며 데이터 흐름을 이해하세요.
PCG Component의 Generate On Load, Generation Trigger, Is Partitioned 등 주요 프로퍼티를 변경하며 동작 차이를 관찰하세요. 수동/자동 Generate를 비교하세요.
하나의 Actor에 여러 PCG Component를 구성하세요. 부모 PCG가 대지형을, 자식 PCG들이 세부 식생/바위/소품을 추가하는 계층적 생성 파이프라인을 설계하고 구현하세요.