PART 4 · 강의 3/3

룰 기반 배치

조건부 분기, Attribute Partition, 패턴 매칭으로 복잡한 규칙 기반 프로시저럴 배치를 구현합니다.

01

Control Flow 노드

Branch, Select, Switch로 조건부 생성 로직 구성

PCG의 Control Flow 카테고리 노드는 그래프 내에서 조건부 분기를 가능하게 합니다. 파라미터 값이나 Attribute에 따라 다른 생성 경로를 선택합니다.

노드 조건 타입 출력 용도
Branch Boolean Output A / Output B 단순 이진 분기
Select Boolean Attribute 선택된 입력 전달 두 입력 중 하나 선택
Select (Multi) Integer/Enum/String 매칭된 입력 전달 다중 입력 중 선택
Switch Integer/String/Enum 다중 출력 핀 다중 경로 분기
Branch 기반 계절 변형
// Graph Parameter "Season"에 따른 분기 [Graph Parameter] Season: int32 // 0=봄, 1=여름, 2=가을, 3=겨울 [Switch] Selection: Season Output 0 (봄) → 꽃이 핀 나무 + 새싹 Output 1 (여름) → 풍성한 잎 나무 + 키 큰 풀 Output 2 (가을) → 단풍 나무 + 낙엽 Output 3 (겨울) → 앙상한 나무 + 눈 덮인 관목 // 같은 그래프에서 파라미터만 바꿔서 4계절 변형 생성
02

조건부 메시 매핑

Attribute 값에 따라 다른 메시를 배치하는 패턴

DataTable 기반 동적 메시 매핑
// DataTable: BuildingModuleMapping // | ModuleID | MeshPath | IsCorner | Floor | // | 0 | SM_Wall_Plain | false | Any | // | 1 | SM_Wall_Window | false | Upper | // | 2 | SM_Wall_Door | false | Ground| // | 3 | SM_Wall_Corner | true | Any | // | 4 | SM_Wall_CornerWindow | true | Upper | [Create Points Grid] // 건물 벽 포인트 [Add Attribute] ("IsCorner") // 모서리 판별 [Add Attribute] ("Floor") // 층 번호 [Load Data Table] // 모듈 매핑 테이블 [Match And Set Attributes] Match: "IsCorner" + "Floor""MeshPath" 속성이 각 포인트에 매핑됨 [Attribute Partition] ("MeshPath") → 메시별로 분리된 데이터 → 각각 해당 메시 Spawner로
DataTable 활용의 장점

메시 매핑을 DataTable로 외부화하면 그래프를 수정하지 않고 에셋만 교체할 수 있습니다. 레벨 디자이너가 스프레드시트로 쉽게 편집하고, CSV 임포트로 빠르게 반영할 수 있습니다.

03

Loop와 반복 생성

Loop 노드로 데이터별 반복 처리하기

Loop 노드는 입력 데이터의 각 항목에 대해 서브그래프를 반복 실행합니다. 건물의 각 층, 방의 각 벽면 등 요소별 독립 처리에 유용합니다.

프로퍼티 설명
Subgraph 반복 실행할 PCG Graph 에셋
Loop Body Input 각 반복에서 서브그래프에 전달되는 데이터
Loop Index 현재 반복 인덱스 (Get Loop Index 노드로 접근)
층별 반복 건물 생성
// Loop를 활용한 다층 건물 생성 [Create Attribute] NumFloors: 5 // 5층 건물 [Loop] Count: NumFloors Subgraph: SG_BuildFloor // 한 층 생성 서브그래프 // SG_BuildFloor 서브그래프 내부: [Get Loop Index] // 현재 층 번호 [Create Points Grid] // 해당 층의 벽 포인트 Z Offset = LoopIndex * 300 // 층 높이 3m [Branch] (LoopIndex == 0) True → 1층 전용 메시 (문, 상점) False → 일반 층 메시 (창문, 벽)
04

World Ray Hit Query

레이캐스트로 환경 감지 기반 배치

World Ray Hit Query는 각 포인트에서 레이캐스트를 발사하여 물리 환경을 감지합니다. 벽에 붙는 장식, 천장 높이 감지, 지면 타입 판별 등에 활용됩니다.

벽면 장식 자동 배치
// 건물 내부에서 벽 방향으로 레이캐스트하여 장식 배치 [Volume Sampler] // 건물 내부 볼륨에 포인트 [World Ray Hit Query] Direction: (1, 0, 0) // X 방향으로 레이캐스트 Max Distance: 1000 // 10m 최대 거리 Output: "HitDistance", "HitNormal" [Attribute Filter Range] "HitDistance": 50 ~ 200 // 벽에서 0.5~2m 거리 [Transform Points] // 벽 법선 방향으로 회전 [Spawner: 벽 장식 메시]
성능 주의

World Ray Hit Query는 물리 레이캐스트를 수행하므로 포인트 수가 많으면 비용이 높습니다. 반드시 사전 필터링으로 포인트 수를 줄인 후 사용하세요. 런타임에서는 특히 주의가 필요합니다.

SUMMARY

핵심 요약

  • Branch, Select, Switch로 파라미터와 Attribute 기반 조건부 분기를 구현한다
  • DataTable + Match And Set으로 그래프 수정 없이 메시 매핑을 외부에서 관리한다
  • Loop 노드로 층별, 면별 등 요소 단위 반복 처리가 가능하다
  • Get Loop Index로 현재 반복 인덱스를 활용한 층별 차별화가 가능하다
  • World Ray Hit Query로 물리 환경을 감지하여 벽면/천장 기반 배치를 구현한다
  • 복잡한 구조물은 Control Flow + Partition + Loop를 조합하여 규칙 기반 시스템으로 구성한다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 기본 배치 규칙 설정

Exclusion 영역과 Distance Check를 사용하여 건물 주변에 나무가 배치되지 않고, 도로 위에 바위가 나타나지 않는 규칙을 설정하세요. 최소 거리 간격으로 겹침을 방지하세요.

실습 2: 조건부 에셋 선택

포인트의 위치와 Attribute에 따라 다른 메시를 선택하는 규칙을 만드세요. 교차로에는 신호등, 막다른 길에는 표지판, 건물 입구에는 화분이 배치되도록 구현하세요.

심화 과제: Shape Grammar 기반 건물 생성

Shape Grammar 개념을 PCG에 적용하여 건물의 벽, 창문, 문, 지붕을 규칙 기반으로 조립하세요. 파라미터(층수, 폭, 스타일)에 따라 다양한 건물이 자동 생성되는 시스템을 만드세요.