그리드 기반 생성
Create Points Grid와 Copy Points 패턴으로 모듈러 건축물과 규칙적 구조물을 프로시저럴 생성합니다.
Create Points Grid
규칙적인 3D 그리드 포인트 생성
Create Points Grid는 지정된 간격으로 규칙적인 2D 또는 3D 그리드 포인트를 생성합니다. 건물 바닥, 벽체, 타일 배치 등 구조적 요소의 기반으로 사용됩니다.
| 파라미터 | 설명 | 예시 |
|---|---|---|
Grid Extents |
그리드 영역의 반 크기 (Half Extents) | (1000, 1000, 0) = 20x20m 영역 |
Cell Size |
셀 간격 (cm) | (400, 400, 300) = 4m x 4m x 3m 셀 |
Num Points |
축별 포인트 개수 (Cell Size 대신 사용) | (5, 5, 3) = 5x5x3 그리드 |
// 4m x 4m 모듈로 10x10 건물 바닥 생성
[Create Points Grid]
Grid Extents: (2000, 2000, 0) // 40x40m 영역
Cell Size: (400, 400, 0) // 4m 간격
↓
[Static Mesh Spawner]
Mesh: SM_Floor_Tile_4x4 // 4x4m 바닥 타일
// 결과: 10x10 = 100개의 바닥 타일 배치
모듈러 건축 패턴
바닥, 벽, 지붕을 조합한 프로시저럴 건물
모듈러 건축은 표준화된 모듈(바닥, 벽, 기둥, 지붕)을 그리드 상에 배치하여 건물을 구성합니다. PCG로 각 층과 면을 독립적으로 생성하고 조합합니다.
// 모듈러 빌딩 그래프 구조
// === 바닥 ===
[Create Points Grid] (5x5, Y간격=400)
→ [Spawner: SM_Floor_4x4]
// === 층별 반복 (Duplicate Point) ===
[Create Points Grid] (5x1, X간격=400) // 한 면의 벽
↓
[Duplicate Point]
Amount: 3 // 3층
Offset: (0, 0, 300) // 층 높이 3m
↓
[Transform Points] // 벽 방향 회전
↓
[Static Mesh Spawner]
Entries:
SM_Wall_Plain Weight: 60 // 일반 벽
SM_Wall_Window Weight: 30 // 창문 벽
SM_Wall_Door Weight: 10 // 문 벽 (1층만)
// === 4면 반복 ===
// 위 패턴을 4번 회전하여 4면 벽 생성
// 또는 Copy Points로 한 면을 4방향에 복제
Filter Data By Index 노드로 특정 인덱스의 포인트만 선택할 수 있습니다. 예: 1층(Index 0~4)에만 문 배치, 모서리(Index 0, 4)에 기둥 배치 등 구조적 규칙을 인덱스 기반으로 정밀하게 적용할 수 있습니다.
Copy Points 패턴
소스 패턴을 타겟 위치에 반복 복제하기
Copy Points는 Source 포인트 세트를 각 Target 포인트 위치에 복제합니다. 하나의 모듈 패턴을 여러 위치에 반복 배치하는 패턴에 핵심적입니다.
| 입력 | 역할 | 예시 |
|---|---|---|
Source |
복제할 패턴 (원본 포인트 세트) | 가구 배치 패턴, 장식 세트 |
Target |
복제가 배치될 위치들 | 방 중심 포인트들 |
// 마을 내 건물 반복 배치
// Source: 건물 하나의 구성 요소
[Create Points Grid] // 건물 모듈 포인트
→ [Add Attribute] ("MeshType" = 벽/바닥/지붕)
→ 건물 1채의 완성된 포인트 세트
// Target: 건물이 배치될 위치들
[Surface Sampler]
→ [Attribute Filter] ($Steepness < 0.1) // 평탄한 곳
→ [Self Pruning] (넓은 바운드) // 건물 간 거리
→ [Select Points] (0.3) // 30% 위치 선택
// 조합
[Copy Points]
Source: 건물 모듈
Target: 배치 위치
↓
[Projection] // 지형에 맞춤
↓
[Attribute Partition] ("MeshType")
→ 벽 → [Spawner: 벽 메시]
→ 바닥 → [Spawner: 바닥 메시]
→ 지붕 → [Spawner: 지붕 메시]
Copy Points는 Target 포인트의 Transform(위치, 회전, 스케일)을 Source 포인트에 적용합니다. Target의 회전이 다르면 각 복제된 패턴도 해당 방향으로 회전됩니다. 이를 활용하면 동일 건물을 다양한 방향으로 자연스럽게 배치할 수 있습니다.
그리드 변형과 노이즈
규칙적인 그리드에 자연스러운 변형 추가
순수한 그리드 배치는 인위적으로 보입니다. Offset, 회전 노이즈, 확률적 제거를 추가하여 규칙 속의 자연스러운 변형을 만들어야 합니다.
// 그리드 기반이지만 자연스러운 마을
[Create Points Grid]
Cell Size: (1500, 1500, 0) // 15m 간격
↓
[Transform Points] // 위치 변위
Offset Min: (-300, -300, 0) // +-3m 랜덤 이동
Offset Max: (300, 300, 0)
Rotation Min: (0, 0, -15) // +-15도 랜덤 회전
Rotation Max: (0, 0, 15)
↓
[Select Points] // 80%만 유지 (빈 공터)
Ratio: 0.8
↓
[Projection] // 지형에 맞춤
↓
[Attribute Filter] ($Steepness < 0.15) // 경사면 제외
도시: 그리드 오프셋을 최소화하고, 도로 스플라인에 정렬하여 규칙적 느낌 유지
마을: 큰 오프셋과 회전으로 불규칙한 유기적 배치
폐허: 포인트 일부 제거 + 추가 회전으로 파괴된 느낌
핵심 요약
- Create Points Grid는 규칙적인 2D/3D 그리드 포인트를 생성하며, 건축물의 기반이 된다
- Duplicate Point로 층별 반복, Copy Points로 패턴 복제를 구현한다
- 모듈러 건축은 바닥/벽/기둥/지붕 모듈을 그리드 상에 조합하여 구성한다
- Copy Points는 Source 패턴을 Target 위치에 복제하며 Transform을 상속한다
- 규칙적인 그리드에 랜덤 오프셋, 회전, 확률적 제거를 추가하여 자연스러운 변형을 만든다
- Filter Data By Index로 특정 위치에만 다른 메시를 배치하는 구조적 규칙을 적용한다
도전 과제
배운 내용을 직접 실습해보세요
Grid Sampler를 사용하여 정렬된 그리드 포인트를 생성하세요. Cell Size와 범위를 조정하여 도시 블록, 농장 밭, 주차장 등 규칙적 배치 환경을 만들어보세요.
그리드 포인트에 Noise를 적용하여 불규칙성을 추가하세요. Transform Points로 랜덤 오프셋과 회전을 적용한 뒤, 도로 영역을 비워 자연스러운 마을 레이아웃을 생성하세요.
PCG로 도시 블록을 자동 생성하는 시스템을 구축하세요. 그리드 기반 건물 footprint 배치, 도로 네트워크 연결, 건물 크기/타입의 파라미터 제어를 구현하세요.