UE5 PCG로 “돌 사이 잔디” 자동 심기
홈›블로그›현재 글

UE5 PCG로 “돌 사이 잔디” 자동 심기

카테고리

요약 — 폴리지 모드로 하나하나 찍지 말고 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) 지형 후보 포인트 만들기

  1. 새 그래프 PCG_Grass를 만듭니다.
  2. Get Landscape Data로 현재 레벨의 지형을 참조합니다.
  3. Surface Sampler를 배치하고 Surface 입력에 Get Landscape Data를 연결합니다.
    • 필요하면 Layer/Material 조건으로 “잔디가 자랄 수 있는 토양”만 샘플링.
    • Density 값으로 기본 밀도를 대략 설정(예: 0.6~1.0).

2) 돌과의 거리 계산

  1. 돌 포인트를 가져옵니다: PCG Data 노드에 PCG_Stone의 출력(스폰 전 포인트 또는 Data Asset)을 참조시킵니다.
  2. Distance 노드를 추가해, A 입력에 Surface Sampler의 후보 포인트, B 입력에 PCG Data(돌) 포인트를 연결합니다.
  3. 출력 속성 이름(예: DistToStone)을 지정해 거리를 속성으로 남깁니다.

3) 너무 가까운 포인트 제거(빈 공간만 남기기)

  1. Density Filter를 배치해 Input에 Distance의 출력을 연결합니다.
  2. Mode를 Attribute Threshold로 두고, Attribute에 DistToStone를 지정합니다.
  3. Min을 원하는 간격(예: 30~50cm)으로 설정해, 돌에 너무 가까운 포인트를 제거합니다.

4) 자연스러움 추가 & 스폰

  1. Transform Points로 Scale(0.8~1.2), Rotation 랜덤, Translate 소량 지터를 줍니다.
  2. 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로 돌 사이 잔디를 자연스럽게 자동 심을 수 있습니다.

더 많은 언리얼 엔진 튜토리얼을 원하시나요?

우리 유튜브 채널에서 무료로 제공되는 언리얼 엔진 배경 제작 강의를 확인해보세요. 실무에서 바로 활용할 수 있는 실전 노하우와 최신 기법들을 영상으로 만나보실 수 있습니다.

🎓체계적인 학습 과정
🆓완전 무료 강의
⚡실무 적용 가능한 기법
유튜브 채널 구독하기