Biome 시스템
PCG Biome 플러그인과 다중 레이어 기반 생태계 시스템으로 다양한 환경을 자동 생성합니다.
PCG Biome 개요
UE 5.6+에서 도입된 생태계 관리 시스템
PCG Biome은 UE 5.6에서 도입된 플러그인으로, 서로 다른 환경(숲, 사막, 설원 등)을 정의하고 자연스럽게 전환하는 시스템을 제공합니다. 볼륨이나 텍스처 마스크로 Biome 영역을 지정하면 PCG가 각 영역에 맞는 식생과 오브젝트를 자동으로 생성합니다.
Biome Definition
각 Biome의 식생 규칙, 밀도, 에셋 세트를 정의하는 데이터 에셋입니다.
Biome Mask
볼륨, 텍스처, 높이 등을 기반으로 각 Biome의 영향력 범위를 정의합니다.
Biome Blending
인접한 Biome 간의 전환 영역에서 자연스러운 혼합을 처리합니다.
Biome Graph
각 Biome에 할당된 PCG Graph로, 해당 생태계의 콘텐츠를 생성합니다.
PCG Biome을 사용하려면 Edit > Plugins에서 "PCG Biome" 플러그인을 별도로 활성화해야 합니다. 기본 PCG Framework 플러그인과는 별개입니다.
다중 레이어 식생 시스템
수관층, 중간층, 지면층 계층적 식생 구성
현실적인 숲을 만들기 위해서는 단일 나무 배치가 아닌 다중 레이어 식생 시스템이 필요합니다. 각 레이어는 독립된 PCG 파이프라인으로 구성되며, 레이어 간 상호작용을 통해 자연스러운 생태계를 만듭니다.
| 레이어 | 밀도 (ppsm) | 에셋 예시 | 특성 |
|---|---|---|---|
| 수관층 (Canopy) | 0.001 ~ 0.01 | 대형 나무 (오크, 소나무) | 가장 희소, Self Pruning 필수 |
| 중간층 (Understory) | 0.01 ~ 0.05 | 중형 나무, 큰 관목 | 수관층 아래에 배치, 거리 기반 밀도 |
| 관목층 (Shrub) | 0.05 ~ 0.2 | 관목, 덤불, 양치류 | 나무 근처 밀도 증가 |
| 지면층 (Ground Cover) | 0.5 ~ 2.0 | 풀, 꽃, 이끼, 버섯 | 가장 밀집, LOD 중요 |
// 다중 레이어 숲 생성 그래프
[Get Landscape Data] → [Surface Sampler] (높은 밀도)
↓
// Layer 1: 수관층
[Density Filter] (0.8~1.0) → [Self Pruning] (넓은 바운드)
→ [Transform] (Scale 0.8~1.5) → [Spawner: 대형 나무]
↓ (수관층 포인트를 Source로 보존)
// Layer 2: 중간층 (수관층과의 거리 고려)
[Distance] (수관층 포인트 기준 거리 계산)
→ [Distance to Density] // 나무 근처 밀도 감소
→ [Density Filter] (0.4~0.8) → [Spawner: 중형 식물]
// Layer 3: 지면층
[Surface Sampler] (2.0 ppsm) → [Spatial Noise]
→ [Density Filter] (0.3~1.0) → [Spawner: 풀/꽃]
Biome 전환과 블렌딩
인접 Biome 간 자연스러운 경계 전환
현실 세계에서 숲과 초원의 경계는 갑작스럽지 않습니다. PCG에서도 Biome 전환 영역을 설정하여 두 환경이 자연스럽게 섞이도록 해야 합니다.
전환 기법
텍스처 마스크 블렌딩
Landscape 페인트 레이어의 가중치를 그라디언트로 사용하여 두 Biome의 밀도를 부드럽게 전환합니다.
Spatial Noise 경계
경계 영역에 노이즈를 추가하여 직선적인 전환 대신 자연스러운 불규칙 경계를 만듭니다.
Distance Falloff
Biome 중심에서의 거리에 따라 밀도가 감소하는 Falloff 커브를 적용합니다.
혼합 식생 존
전환 영역에 양쪽 Biome의 식물을 혼합하여 배치하는 별도의 전환 존을 정의합니다.
// 숲(Forest) ↔ 초원(Grassland) 전환
[Surface Sampler]
↓
[Texture Sampler] // Forest 마스크 읽기
Output: "ForestMask" // 0.0 = 초원, 1.0 = 숲
↓
[Spatial Noise] // 경계에 노이즈 추가
Mode: Add
Cell Size: 2000
Noise Min: -0.15
Noise Max: 0.15
Target Attribute: "ForestMask"
↓
// 완전 숲 영역 (0.7 ~ 1.0)
[Attribute Filter Range] ("ForestMask": 0.7~1.0) → 숲 식생
// 전환 영역 (0.3 ~ 0.7) - 양쪽 혼합
[Attribute Filter Range] ("ForestMask": 0.3~0.7) → 혼합 식생
// 완전 초원 영역 (0.0 ~ 0.3)
[Attribute Filter Range] ("ForestMask": 0.0~0.3) → 초원 식생
Texture Sampler 활용
텍스처 마스크와 노이즈 맵을 활용한 분포 제어
Texture Sampler 노드는 텍스처의 픽셀 값을 포인트의 Attribute로 변환합니다. 아티스트가 그린 마스크 텍스처로 PCG 배치를 직접 제어할 수 있는 강력한 도구입니다.
| 텍스처 용도 | 채널 | 활용 |
|---|---|---|
| Biome 마스크 | R | Biome 영역 정의 (0~1 블렌딩) |
| 밀도 맵 | G | 식생 밀도 직접 제어 |
| 높이 맵 | B | 에셋 높이/크기 변형 |
| 제외 마스크 | A | 배치 금지 영역 (도로, 건물 등) |
하나의 텍스처에 4개 채널(R, G, B, A)을 각각 다른 마스크로 활용하면
텍스처 수를 줄이면서 다양한 제어가 가능합니다.
Texture Sampler에서 Output Attribute를 채널별로 분리하여 사용합니다.
월드 크기 대비 텍스처 해상도가 너무 낮으면 경계가 뭉개집니다. 2048x2048 텍스처로 4km x 4km 영역을 커버하면 약 2m 해상도가 됩니다. 세밀한 제어가 필요하면 텍스처를 분할하거나 해상도를 높이세요.
핵심 요약
- PCG Biome은 UE 5.6+에서 도입된 플러그인으로, 생태계 정의와 전환을 체계적으로 관리한다
- 현실적인 숲은 수관층, 중간층, 관목층, 지면층 4개 레이어로 계층적으로 구성해야 한다
- Biome 전환은 텍스처 마스크 블렌딩과 Spatial Noise를 조합하여 자연스럽게 만든다
- Texture Sampler로 아티스트가 그린 마스크 텍스처를 PCG 배치 제어에 활용할 수 있다
- 하나의 RGBA 텍스처로 Biome 마스크, 밀도, 높이, 제외 영역을 동시에 제어할 수 있다
- Distance 노드로 레이어 간 상호작용(나무 근처 관목 증가 등)을 구현할 수 있다
도전 과제
배운 내용을 직접 실습해보세요
숲(Forest), 초원(Meadow), 사막(Desert) 3가지 바이옴용 PCG Graph를 각각 만드세요. 각 바이옴에 고유한 식생과 지면 오브젝트를 배치하는 서브그래프를 구성하세요.
두 바이옴 경계에서 에셋이 자연스럽게 혼합되는 블렌딩 시스템을 구현하세요. Distance Filter와 Density Gradient로 숲과 초원 경계에서 나무가 점진적으로 줄어들도록 하세요.
Data Asset으로 바이옴 정의(에셋 목록, 밀도, 크기 범위, 분포 규칙)를 외부 데이터화하세요. 새 바이옴을 코드 수정 없이 Data Asset만 추가하여 적용하는 시스템을 C++로 구현하세요.