PART 4 · 강의 2/3

스플라인 기반 생성

Spline Sampler로 도로, 울타리, 강변 구조물을 경로 기반으로 프로시저럴 생성합니다.

01

Spline Sampler 기초

스플라인 경로를 따라 포인트 생성하기

Spline Sampler는 스플라인 커브를 따라 일정 간격 또는 지정 개수로 포인트를 생성합니다. 도로, 울타리, 가로등, 강변 식생 등 경로 기반 콘텐츠 생성의 핵심 노드입니다.

파라미터 설명 예시 값
Mode Distance: 일정 거리 간격
Number of Samples: 총 개수 지정
Distance
Distance Increment Distance 모드에서 포인트 간 간격 (cm) 300 (3m 간격)
Num Samples Number of Samples 모드에서 총 포인트 수 50
Fill 스플라인 내부 영역을 채울지 여부 도로 표면 생성 시 true
울타리 생성 기본 그래프
// Spline Actor를 따라 울타리 생성 [Get Spline Data] // 레벨의 Spline Actor 참조 [Spline Sampler] Mode: Distance Distance Increment: 300 // 3m 간격 (울타리 패널 폭) [Static Mesh Spawner] Mesh: SM_Fence_Panel // 울타리 패널 메시 // 포인트는 자동으로 스플라인 방향에 맞춰 회전됨 // → 커브를 따라 자연스럽게 울타리가 배치됨
스플라인 방향 자동 정렬

Spline Sampler가 생성한 포인트는 스플라인의 접선 방향으로 자동 회전됩니다. 별도의 회전 처리 없이도 도로 노면, 울타리, 가드레일 등이 경로를 따라 자연스럽게 배치됩니다.

02

도로와 경로 생성

스플라인 기반 도로 시스템 구축

완성 도로 시스템 그래프
// 스플라인 기반 도로 + 가로등 + 가드레일 [Get Spline Data] // === 도로 노면 === [Spline Sampler] Mode: Distance Distance Increment: 400 Fill: true // 내부 채우기 Fill Points Per Sq.Meter: 0.25 [Spawner: SM_Road_Segment] // === 가로등 (한쪽) === [Spline Sampler] Distance Increment: 2000 // 20m 간격 [Transform Points] Offset: (500, 0, 0) // 도로 옆 5m [Projection] // 지형에 맞춤 [Spawner: SM_StreetLight] // === 가드레일 (양쪽) === [Spline Sampler] Distance Increment: 200 [Duplicate Point] Amount: 1 Offset: (600, 0, 0) // 양쪽 복제 [Spawner: SM_GuardRail] // === 도로변 식생 제외 === // 도로 스플라인을 Difference로 다른 PCG에 전달 // → 식생이 도로를 피하도록 설정
스플라인 오프셋 방향

Transform Points의 Offset은 스플라인의 로컬 좌표계로 적용됩니다. X축은 스플라인의 오른쪽(Right), Y축은 스플라인 방향(Forward), Z축은 위(Up)입니다. 따라서 X 오프셋으로 도로 양쪽에 요소를 배치할 수 있습니다.

03

Shape Grammar

UE 5.5+의 규칙 기반 구조물 생성 시스템

Shape Grammar은 UE 5.5에서 도입된 PCG 기법으로, 기하학적 규칙을 정의하여 복잡한 구조물을 자동 생성합니다. 울타리, 벽, 건물 외관 등에 특히 효과적입니다.

Shape Definition

기본 형태(직선, 코너, T자, 십자)를 정의하고 각 형태에 메시를 매핑합니다.

Grammar Rules

연결 규칙을 정의하여 형태가 자동으로 올바른 메시를 선택합니다.

Context Awareness

인접 포인트의 연결 상태를 분석하여 코너, 교차로 등을 자동 판단합니다.

Adaptive Segments

스플라인 곡률에 따라 세그먼트 길이를 자동 조절합니다.

Shape Grammar 울타리 예시
// Shape Grammar 기반 울타리 생성 // Epic Games 공식 튜토리얼 기반 [Get Spline Data] [Spline Sampler] (Distance: 300) // 각 포인트의 연결 관계 분석 [Point Neighborhood] Radius: 350 // 이웃 탐색 범위 // 연결 수에 따라 메시 타입 결정 [Add Attribute] "ConnectionCount" = Neighborhood Count [Attribute Partition] ("ConnectionCount") 0 connections → [Spawner: SM_Fence_EndPost] // 끝 기둥 1 connection → [Spawner: SM_Fence_EndPost] // 끝 기둥 2 connections → [Spawner: SM_Fence_Straight] // 직선 패널 3 connections → [Spawner: SM_Fence_T_Joint] // T자 교차 4 connections → [Spawner: SM_Fence_Cross] // 십자 교차
Shape Grammar 확장

Epic Games의 공식 PCG Development Guide에서 "Creating a Fence Generator Using Shape Grammar" 튜토리얼을 제공합니다. 이를 기반으로 벽, 도로, 파이프라인 등 다양한 구조물로 확장할 수 있습니다.

04

Spline Intersection과 Split

UE 5.7의 스플라인 교차 및 분할 노드

UE 5.7에서 도입된 Spline IntersectionSplit Splines 노드는 스플라인 간의 교차점 감지와 분할을 지원하여 교차로, 분기점 등의 복잡한 네트워크 생성을 가능하게 합니다.

노드 기능 활용
Spline Intersection 두 스플라인의 3D 교차점을 감지 교차로 위치 자동 검출
Split Splines 조건에 따라 스플라인을 분할 교차점에서 도로 세그먼트 분리
Clip Paths Polygon2D로 스플라인을 클리핑 영역 내부의 도로만 남기기
교차로 자동 생성
// 두 도로 스플라인의 교차점에 교차로 배치 [Get Spline Data] (Road_A) [Get Spline Data] (Road_B) [Spline Intersection] → 교차점 포인트 출력 [Spawn Actor] Template: BP_Intersection // 교차로 블루프린트 // 교차점에서 도로 세그먼트 분리 [Split Splines] → 분할된 도로 세그먼트별 개별 처리 가능
SUMMARY

핵심 요약

  • Spline Sampler는 스플라인 경로를 따라 일정 간격으로 포인트를 생성하며, 자동 방향 정렬을 지원한다
  • 도로 시스템은 Spline Sampler + Fill + 양쪽 오프셋으로 노면, 가드레일, 가로등을 통합 생성한다
  • Shape Grammar(UE 5.5+)은 연결 규칙으로 울타리의 직선/코너/교차 메시를 자동 선택한다
  • UE 5.7의 Spline IntersectionSplit Splines로 교차로 자동 감지가 가능하다
  • 스플라인 오프셋은 로컬 좌표계(X=오른쪽, Y=전진, Z=위)로 적용된다
  • 도로 스플라인을 다른 PCG의 Difference 입력으로 전달하여 식생 제외 영역을 설정한다
PRACTICE

도전 과제

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

실습 1: 스플라인 따라 배치

Spline Component에 PCG를 연결하고, 스플라인을 따라 가로등, 울타리, 전봇대를 일정 간격으로 배치하세요. Distance Between Points로 배치 간격을 제어하세요.

실습 2: 스플라인 기반 도로 생성

스플라인을 따라 도로 메시를 배치하고, 양쪽에 가드레일과 가로수를 자동 배치하는 그래프를 만드세요. 커브 구간에서 Tangent 방향을 따라 자연스럽게 회전하도록 하세요.

심화 과제: 절차적 강/하천 생성기

스플라인을 따라 강을 생성하는 시스템을 구현하세요. 강폭에 따라 물 메시를 스케일하고, 강변에 자갈/바위/식생을 자동 배치하며, 합류점 처리까지 포함한 파이프라인을 구축하세요.