[언리얼 페스트 서울 2025] Day1 듀랑고 IP 프로젝트 DX의 성공적인 PCG 활용 사례: PCG로 새로운 듀랑고의 오픈월드 바이옴 구성하기
- PCG는 재활용 가능한 코드 블록을 절차적으로 연결하여 콘텐츠를 생성하는 툴입니다. 🔗
- 듀랑고 프로젝트는 PCG를 활용하여 오픈월드 바이옴의 사실적인 식생 군집화와 절차적 조합형 액터를 구현했습니다. 🌳
- 식생 군집화는 무작위 중심점 주변에 다양한 크기의 식생을 배치하고 노이즈를 추가하여 유기적인 분포를 만듭니다. 🌿
- 절차적 조합형 액터는 블루프린트 액터에 PCG 컴포넌트를 달고 시드값을 조절하여 무한한 조합의 오브젝트를 생성합니다. 🎲
- PCG 최적화를 위해 PCG 볼륨과 그래프를 지역별로 세분화하고, 프로파일링을 통해 연산량이 많은 노드를 식별하여 개선합니다. 🚀
- 무거운 인터섹션 노드는 과감히 폐기하고,
WorldRayHitQuery 노드를 수정하여 초기 서피스 데이터 생성 단계에서 불필요한 영역을 필터링했습니다. 🚫
- 스플라인 샘플러의
Interior Density Falloff 연산은 파티션 그리드 크기가 작을 때 반복 연산이 많아져 계층형 생성을 통해 최적화했습니다. 📈
Projection 노드 사용 시, 불필요하게 넓은 범위에 대한 연산을 피하고 필요한 최소한의 범위에만 적용하여 성능을 개선했습니다. 🎯
PCG.EditorFrameTime 콘솔 변수를 높여 PCG 생성에 에디터 자원을 집중시켜 전체 생성 시간을 단축했습니다. ⚡
- PCG 블루프린트 엘레멘트를 활용하면 C++ 없이도 커스터마이징 가능한 PCG 노드를 만들어 기능을 확장할 수 있습니다. 🛠️
WorldRayHitQuery 노드는 Z축 외 다양한 방향으로 레이를 쏠 수 있어 절벽 덩굴 등 유연한 서피스 데이터 생성이 가능합니다. ⛰️
WorldRayHitQuery에 Ray Occluder 기능을 추가하여 특정 메시 근처에 포인트가 생성되지 않도록 필터링할 수 있습니다 (코드 수정 필요). 🛑
- 포인트 이동 후 바닥에 재투영 시, 의도적으로 부여한 회전값이 초기화되는 문제를 해결하기 위해 '추가 회전값'을 저장하고 재적용하는 복잡한 로직을 사용했습니다. 🔄