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를 배치해 InputDistance의 출력을 연결합니다.
  2. ModeAttribute Threshold로 두고, AttributeDistToStone를 지정합니다.
  3. Min을 원하는 간격(예: 30~50cm)으로 설정해, 돌에 너무 가까운 포인트를 제거합니다.

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

  1. Transform PointsScale(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로 돌 사이 잔디를 자연스럽게 자동 심을 수 있습니다.

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

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

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