PART 2 · 강의 3/3

Attribute 시스템

Dynamic Attribute 생성, 수학 연산, Attribute Noise, Partition 등 메타데이터 파이프라인을 마스터합니다.

01

Dynamic Attribute 생성

사용자 정의 속성을 포인트에 부여하기

Static Attribute($접두사) 외에도 사용자가 직접 Dynamic Attribute를 정의할 수 있습니다. 이를 통해 Biome 타입, 에셋 인덱스, 커스텀 가중치 등 프로젝트별 데이터를 포인트에 부여합니다.

Attribute 생성 노드

노드 기능 입력 타입
Add Attribute 기존 데이터에 새 속성 추가. 상수 또는 다른 속성 기반 계산 Point, Attribute Set
Create Attribute 새 Attribute Set을 생성하며 속성 추가 없음 (독립 생성)
Copy Attribute 기존 속성을 새 이름으로 복사 Point, Attribute Set
Attribute Rename 속성 이름 변경 Point, Attribute Set
Delete Attributes 불필요한 속성 제거 (메모리 절약) Point, Attribute Set
Dynamic Attribute 활용 예시
// 높이 기반 Biome 타입 부여 워크플로우 [Surface Sampler] [Add Attribute] Output Attribute: "BiomeType" Input Source: "$Position.Z" // Z 높이 기반 Operation: Custom Expression // BiomeType 값: // Z < 500 → 0 (평원) // Z 500~1500 → 1 (산림) // Z > 1500 → 2 (설산) [Attribute Partition] Partition Attribute: "BiomeType" // BiomeType별로 분리된 데이터 → 각각 다른 메시 스포너로
02

수학 연산 노드

Attribute 값에 대한 사칙연산, 비교, 벡터 연산

PCG는 풍부한 수학 연산 노드를 제공합니다. Attribute 값을 기반으로 새로운 값을 계산하고, 조건을 평가하며, 벡터/회전 연산을 수행할 수 있습니다.

기본 수학 연산

카테고리 주요 노드 용도 예시
산술 Add, Subtract, Multiply, Divide, Modulo 밀도 조절, 스케일 계산
범위 Clamp, Min, Max, Lerp, Abs 값 제한, 보간
비교 Equal, Greater, Less, GreaterOrEqual 조건 분기용 Boolean 생성
삼각함수 Sin, Cos, Atan2, DegToRad 원형 배치, 방향 계산
벡터 Cross, Dot, Distance, Normalize, Length 방향 판단, 거리 기반 필터
Reduce Average, Min, Max (전체 데이터) 통계값 계산, 정규화 기준
거리 기반 스케일 계산
// 중심점에서 멀어질수록 크기가 작아지는 패턴 [Surface Sampler] [Distance] // 중심점(0,0,0)까지 거리 계산 Source: Surface Sampler 출력 Target: [Create Points] (0,0,0) Output Attribute: "DistToCenter" [Divide] // 정규화 (최대 거리로 나누기) Input A: "DistToCenter" Input B: 5000 // 최대 거리 Output: "NormDist" [One Minus] // 반전 (가까울수록 값이 큼) Input: "NormDist" Output: "ScaleFactor" [Clamp] // 0.3 ~ 1.0 범위로 제한 Input: "ScaleFactor" Min: 0.3 Max: 1.0
03

Attribute Noise

노이즈 함수로 속성 값에 자연스러운 변이 추가

Attribute Noise(Density Noise)는 Perlin, Simplex 등의 노이즈 함수를 사용하여 Attribute 값에 공간적으로 일관된 변이를 추가합니다. 자연스러운 분포 패턴 생성의 핵심 도구입니다.

파라미터 설명 효과
Mode Set, Add, Multiply 기존 값에 노이즈를 적용하는 방식
Noise Min/Max 노이즈 출력 범위 밀도 범위 제어
Cell Size 노이즈 셀 크기 (cm) 작으면 세밀한 변화, 크면 넓은 영역 변화
Voronoi Voronoi 노이즈 사용 셀 기반 패턴 (군집 효과)
Spatial Noise vs Attribute Noise

Spatial Noise는 별도 노드로, 포인트 위치 기반의 다층 노이즈 값을 새 Attribute로 생성합니다. Attribute Noise는 기존 Attribute 값을 수정합니다. 복잡한 분포에는 Spatial Noise로 값을 생성한 뒤 수학 노드로 가공하는 것이 더 유연합니다.

04

Attribute Partition

속성 값에 따라 데이터를 분리하기

Attribute Partition은 지정된 Attribute의 고유 값에 따라 데이터를 여러 그룹으로 분할합니다. 각 그룹은 별도의 출력으로 전달되어 독립적으로 처리할 수 있습니다.

Partition을 활용한 다중 에셋 배치
// Attribute Partition으로 식생 타입별 분리 처리 [Surface Sampler] [Add Attribute] // "VegetationType" = Hash($Seed) % 3 [Attribute Partition] Partition Attribute: "VegetationType" // 결과: 3개의 독립 데이터 스트림 // // VegetationType=0 → [Transform] → [Spawner: 활엽수] // VegetationType=1 → [Transform] → [Spawner: 침엽수] // VegetationType=2 → [Transform] → [Spawner: 관목]

Match And Set Attributes

Match And Set은 Lookup Table 패턴으로, 하나의 Attribute 값을 기준으로 다른 Attribute Set에서 매칭되는 값을 찾아 복사합니다.

Match And Set 활용
// DataTable 기반 에셋 매핑 [Load Data Table] // BiomeAssetMapping 테이블 // | BiomeID | MeshPath | ScaleMin | ScaleMax | // | 0 | SM_GrassClump_01 | 0.5 | 1.0 | // | 1 | SM_OakTree_01 | 0.8 | 1.2 | // | 2 | SM_PineTree_01 | 0.9 | 1.5 | [Match And Set Attributes] Match Attribute: "BiomeType" // 포인트의 BiomeType으로 Index Attribute: "BiomeID" // DataTable의 BiomeID와 매칭 // → MeshPath, ScaleMin, ScaleMax가 포인트에 복사됨
성능 고려사항

Attribute Partition은 데이터를 복제하지 않고 참조로 분할합니다. 하지만 파티션 수가 많으면 후속 노드가 여러 번 실행되므로, 불필요하게 세분화하지 않도록 주의하세요.

SUMMARY

핵심 요약

  • Dynamic Attribute는 Add Attribute 노드로 포인트에 사용자 정의 속성을 부여한다
  • PCG는 산술, 비교, 삼각함수, 벡터 등 풍부한 수학 연산 노드를 제공한다
  • Attribute NoiseSpatial Noise로 공간적으로 일관된 자연스러운 변이를 만든다
  • Attribute Partition은 속성 값 기반으로 데이터를 그룹 분할하여 독립 처리할 수 있다
  • Match And Set으로 DataTable을 Lookup Table처럼 활용하여 에셋을 매핑할 수 있다
  • 불필요한 Attribute는 Delete Attributes로 제거하여 메모리를 절약한다
PRACTICE

도전 과제

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

실습 1: Attribute 생성 및 활용

Create Attribute 노드로 커스텀 float Attribute(TreeAge, MoistureLevel)를 생성하세요. Attribute Noise를 적용한 뒤 메시 스케일과 머티리얼 파라미터를 변경하세요.

실습 2: Attribute 기반 조건 분기

Attribute Operation으로 속성 값을 연산하고, Attribute Filter로 특정 조건(TreeAge > 50)을 만족하는 포인트만 선택하세요. 오래된 나무는 크게, 어린 나무는 작게 배치하세요.

심화 과제: Attribute 기반 생태계 시뮬레이션

습도, 일조량, 토양 3가지 Attribute를 지형에서 파생하고, 이 속성 조합으로 식물 종류를 결정하는 PCG 생태계를 구현하세요. 성장 단계도 Attribute로 표현하세요.