요약 — 폴리지 모드로 하나하나 찍지 말고 PCG로 돌 주변에만 잔디를 자동 심으세요. Get Landscape Data → Surface Sampler로 후보 포인트를 만들고, Distance로 돌과의 거리를 계산한 뒤 Density Filter로 너무 가까운 포인트를 제거하면, 돌 사이에만 잔디가 남습니다. 마지막에 Transform Points → Static Mesh Spawner로 자연스러운 랜덤성을 더해 마무리!
왜 이 방법이 필요한가
- 폴리지 모드로 일일이 클릭하면 시간이 너무 오래 걸립니다.
- 지형/돌 위치가 바뀌면 다시 심기가 필요합니다.
- 돌과 잔디 간 간격을 일정하게 맞추기 어렵습니다.
PCG로 규칙을 만들면, 지형이나 돌이 바뀌어도 재생성 한 번으로 결과가 즉시 갱신됩니다.
핵심 아이디어 한 줄
지형에서 후보 포인트 생성 → 돌과의 거리 계산 → 가까운 포인트 제거 → 랜덤성 부여 → 잔디 스포닝.
준비물 & 권장 세팅
- Unreal Engine 5.x, PCG 플러그인 활성화
- 이전 글에서 만든 PCG_Stone 그래프(돌 포인트를 생성/스폰)
- 잔디용 Static Mesh (여러 종 가능), 필요 시 간단한 LOD
단계별 튜토리얼
1) 지형 후보 포인트 만들기
- 새 그래프 PCG_Grass를 만듭니다.
- Get Landscape Data로 현재 레벨의 지형을 참조합니다.
- Surface Sampler를 배치하고 Surface 입력에 Get Landscape Data를 연결합니다.
- 필요하면 Layer/Material 조건으로 “잔디가 자랄 수 있는 토양”만 샘플링.
- Density 값으로 기본 밀도를 대략 설정(예: 0.6~1.0).
2) 돌과의 거리 계산
- 돌 포인트를 가져옵니다: PCG Data 노드에 PCG_Stone의 출력(스폰 전 포인트 또는 Data Asset)을 참조시킵니다.
- Distance 노드를 추가해, A 입력에 Surface Sampler의 후보 포인트, B 입력에 PCG Data(돌) 포인트를 연결합니다.
- 출력 속성 이름(예:
DistToStone
)을 지정해 거리를 속성으로 남깁니다.
3) 너무 가까운 포인트 제거(빈 공간만 남기기)
- Density Filter를 배치해 Input에 Distance의 출력을 연결합니다.
- Mode를 Attribute Threshold로 두고, Attribute에
DistToStone
를 지정합니다. - Min을 원하는 간격(예: 30~50cm)으로 설정해, 돌에 너무 가까운 포인트를 제거합니다.
4) 자연스러움 추가 & 스폰
- Transform Points로 Scale(0.8~1.2), Rotation 랜덤, Translate 소량 지터를 줍니다.
- Static Mesh Spawner에 잔디 메쉬(여러 종 가능)를 넣고, Probability로 비율을 조정해 다양성을 만듭니다.
Get Landscape Data └─> Surface Sampler (candidate grass points) └─> Distance (A: candidates, B: Stones ⟵ PCG Data: PCG_Stone) └─> Density Filter (Attribute=DistToStone, Min=30~50) └─> Transform Points (scale/rot/jitter) └─> Static Mesh Spawner (Grass)
결과 확인 & 디버깅 체크리스트
- 잔디가 돌 주변을 피해 “사이 공간”에만 배치되는가?
- DistToStone 임계값을 조정하면 빈 공간 폭이 즉시 바뀌는가?
- 지형/돌 변화 후 Regenerate로 결과가 안정적으로 갱신되는가?
문제가 생긴다면 — Distance의 A/B 입력이 바뀌지 않았는지, 돌 포인트가 올바르게 들어오는지(PCG_Stone 참조), Density Filter의 속성명이 일치하는지 확인하세요.
품질을 높이는 실전 팁
- 경사 필터: 가파른 경사에선 잔디를 줄이거나 제거(미끄러짐 방지).
- 고도 범위: 특정 고도에서만 잔디 활성화해 씬 테마 강화.
- 메쉬 다양화: 키/색/종을 2~3개 섞고 확률로 비율 조정.
- 성능: 먼 거리 LOD/밀도 감소, 섹션 분할로 드로우콜 관리.
UMG와의 연결: 클라이언트 프레젠테이션
UMG 슬라이더로 MinDistance(빈 공간 폭), Base Density(밀도), Scale Range를 노출하면 회의 중에도 분위기를 즉시 바꿔볼 수 있습니다.
자주 묻는 질문
Q1. 돌을 나중에 더 추가했더니 잔디가 겹칩니다.
A. PCG_Stone이 출력하는 포인트를 참조 중인지 확인하고, Auto Regenerate를 켜거나 수동으로 Regenerate하세요.
Q2. 빈 공간이 너무 넓/좁습니다.
A. Density Filter의 Min(임계값)을 조절하세요. 값↑ = 돌과의 간격↑.
Q3. 잔디가 공중에 떠 있거나 파묻힙니다.
A. Surface Sampler의 표면 참조(지형)가 맞는지 확인하고, Spawner의 Align to Surface Normal 또는 Transform에서 Z 보정을 소폭 적용하세요.
마무리
“지형 샘플 → 돌 거리 계산 → 가까운 곳 제거 → 랜덤 스폰.” 이 규칙만 세우면, 클릭 대신 PCG로 돌 사이 잔디를 자연스럽게 자동 심을 수 있습니다.
더 많은 언리얼 엔진 튜토리얼을 원하시나요?
우리 유튜브 채널에서 무료로 제공되는 언리얼 엔진 배경 제작 강의를 확인해보세요. 실무에서 바로 활용할 수 있는 실전 노하우와 최신 기법들을 영상으로 만나보실 수 있습니다.