[KOR][100]PCG--Introduction--Use-Cases--and-Produc

https://www.youtube.com/watch?v=TbNZ4GKaTow

Frame at 3.04s
# PCG (Procedural Content Generation) 소개, 활용 사례 및 프로덕션 모범 사례 ## 1. PCG란 무엇인가? PCG는 단순히 "절차적 콘텐츠 생성"이라는 광범위한 개념이 아닌, 언리얼 엔진에 통합된 **특정 프로시저럴 콘텐츠 생성 프레임워크**입니다. * **정의:** * 엔진 내에서 사용 가능한 툴로, **세상을 구축하는 툴을 만들기 위한 툴**입니다. * 5.7 버전부터 **프로덕션 준비 완료 (Production Ready)** 상태이며, 액티브하게 지원됩니다. * **주요 특징:** * 다른 엔진 시스템(인스턴스 액터, 지오메트리 스크립트 등)과 상호 운용됩니다. * 반복 시간을 단축하여 거대 월드 제작을 지원합니다. * 단순한 배치 작업을 넘어선 **일반화된 프레임워크**입니다. * **오프라인 (에디트 타임)** 및 **런타임** 생성이 가능하며, 혼합 사용도 지원됩니다. * 런타임 사용을 위해 **병렬 및 멀티스레딩**으로 설계되었습니다. * 게임 외 분야에서도 활용 가능합니다. * **결정성(Determinism)**, **성능 (캐싱, 멀티스레딩, 병렬 처리, 비동기 실행)** 을 지원합니다. * 새로운 **식물 에디터**와 같은 자체 PCG 툴 구축이 가능합니다. * **계층적 설계**, **디버깅 및 프로파일링** 기능을 제공합니다. * **핵심 가치:** * 향후 워크플로우에서 **머티리얼만큼이나 근본적인 역할**을 할 것으로 기대됩니다. ## 2. PCG 히스토리 PCG 프레임워크는 엔진 버전별로 발전해왔습니다. * **Unreal Engine 5.2 (GDC 2023):** * 실험적인 프로시저럴 콘텐츠 생성 프레임워크 출시 * "Electric Dream" 샘플 공개 (월드 자동 재생성 시연) * 어셈블리 워크플로우 탐구 시작 * **5.4:** * PCG **베타** 출시 * 기본 틀 구축 및 연산 라이브러리 확장 * 그래프 동적 추적 기능 추가 (입력 변경 시 자동 재생성) * 런타임 계층적 생성, 네이티브 PCG 데이터 에셋 익스포터 추가 * 빌더 및 커스터마이징 툴 추가 * "BiomeCore V1" 플러그인 출시 (자연 환경 제작 지원) * **5.5:** * "Cassini" 샘플 공개 * **GPU 기능 추가** (일부 노드 GPU 실행) * **형상 문법 (Shape Grammar)** 기능 추가 (강력한 툴) * 지오메트리 처리, 레이캐스팅, 경로 탐색 기능 추가 * 성능 향상 (예: 전체 소행성 필드 생성 가능) * **5.6:** * UX 안정성 및 성능 개선 * "Witcher 4" 데모에서 GPU 처리 및 인스턴싱 활용 * 메모리 및 성능, 디버깅 개선 * **템플릿 기능** 추가 * PCG 에디터 **뷰포트** 추가 * "BiomeCore V2" 출시 (기능 개선, 로컬 바이옴 액터 및 겹침 기능 추가) * **5.7:** * PCG **프로덕션 준비 완료** (지원 및 안정성 보장) * **GPU 기능 강화**: * 씬 캡처, 텍스처 샘플링, 고속 지오메트리 지원 * GPU에서 노드 네이티브 실행 * **커스텀 타입 지원** (플러그인 개발자 대상) * Polygon 2D 타입 및 관련 연산 추가 * 새로운 에셋 워크플로우 추가 * **Nanite 어셈블리 생성 지원** (실험적) * Epic 내부의 거의 모든 프로젝트에서 PCG 활용 (Fortnite BR, Lego Odyssey 등) ## 3. PCG 워크플로우 기초 일반적인 PCG 워크플로우는 다음과 같은 단계를 거칩니다. 1. **PCG 그래프 생성:** (실행 흐름 그래프와 다름) 2. **PCG 컴포넌트에서 그래프 사용:** * 콘텐츠 브라우저에서 그래프를 드래그하여 월드에 PCG 볼륨 생성 * 생성된 데이터에서 데이터를 추출 3. **그래프 내부 처리:** * **데이터 생성/로딩:** 특정 데이터(예: 풍경)를 가져오거나 생성 * **데이터 처리:** 샘플링, 필터링 등 데이터 가공 * **메타데이터 연산:** 변환(Transform), 경계(Bounds) 등 추가 정보 연산 * **결과물 생성 (Artifacts):** 스태틱 메시 스폰, 액터 배치 등 ### 예시: 잔디가 있는 풍경에 나무 스폰 * **LANDSCAPE DATA** 노드로 풍경 데이터 로드 * **SAMPLE SURFACE** 노드로 표면에서 점(Point) 생성 * **FILTER** 노드로 점의 속성(예: 잔디 비율)에 따라 필터링 * **TRANSFORM** 노드로 점의 스케일, 회전 등 변경 * **SPAWN STATIC MESHES** 노드로 나무 메쉬 스폰 ### 데이터 속성 (Attributes) * 점(Point)은 위치, 회전, 스케일, 경계 등의 **기본 속성**을 가집니다. * `$` 기호가 붙은 속성은 데이터셋에 내장된 속성입니다. * 풍경 샘플링 시, 각 점은 풍경의 **레이어 가중치 (Layer Weights)** 를 속성으로 가집니다 (예: 잔디, 모래 비율). * 이를 활용하여 특정 속성에 따라 필터링할 수 있습니다. ### 디버깅 * 노드를 선택하고 **D** 키를 누르면 디버그 체크박스가 활성화되어 시각적으로 결과를 확인할 수 있습니다. * 디버그 노드를 통해 데이터셋을 직접 연결하여 결과를 확인할 수 있습니다. ### 파라미터 노출 * 그래프의 노드 파라미터를 **노출**하여 PCG 컴포넌트에서 직접 값을 오버라이드할 수 있습니다. * 머티리얼처럼 **PCG 그래프 인스턴스**를 생성하여 파라미터 조절이 가능합니다. ## 4. PCG 에디터 모드 및 고급 기능 * **PCG 에디터 모드:** * 콘텐츠 크리에이터가 직접 툴을 사용하여 월드에 요소(도로, 나무 등)를 쉽게 배치하고 수정할 수 있습니다. * 스플라인 데이터 샘플링, 인스턴스 파라미터 변경 등이 가능합니다. * **어셈블리 워크플로우:** * 레벨 인스턴스를 PCG 데이터 에셋으로 변환하여 활용합니다. * 액터 태그(Actor Tags)를 속성으로 활용하여 다양한 변형 및 제어가 가능합니다. * 예: **Clutter Tag**를 사용하여 특정 비율의 장식 요소만 스폰 * **Intensity: 숫자** 형식으로 속성 값 지정 가능 * **플러그인:** * PCG 프레임워크 자체는 1.0 버전으로 안정화되었으나, 다른 연동 플러그인들은 실험적 또는 베타 상태일 수 있습니다. * **Instance Actors, Fast Geometry:** 해당 엔진 기능 자체가 실험적인 경우 PCG 연동도 실험적입니다. * **Geometry Script:** 필수적으로 사용될 것을 권장합니다. * **BiomeCore:** 강력한 PCG 툴, 프로덕션에서는 엔진 폴더에서 프로젝트로 복사하여 사용하는 것을 권장합니다. * **형상 문법 (Shape Grammar):** * 스플라인을 따라 특정 규칙(문장)에 따라 다양한 메쉬를 배치하는 강력한 기능입니다. * 예: 펜스 끝, 중간 부분에 다른 메쉬를 규칙적으로 배치 * **경로 탐색 (Pathfinding):** * 스플라인을 활용하여 두 지점 간의 경로를 생성하고, 이를 기반으로 길 등을 생성할 수 있습니다. * **서브그래프 (Subgraphs)** 와 연계하여 복잡한 경로 생성 가능 * **Nanite 어셈블리 생성:** * PCG를 사용하여 Nanite 어셈블리를 생성하는 기능 (실험적) * **프로파일링:** * **프로파일링 패널**을 통해 병목 노드를 식별하고 성능 최적화에 활용합니다. * **Is Partitioned 체크박스:** 월드 파티셔닝 시스템과 연계하여 대규모 월드에서 인스턴스를 효율적으로 관리합니다. * **계층적 생성 (Hierarchical Generation):** 높은 레벨에서 시작하여 점차 세부적인 그리드 크기로 데이터를 처리하여 효율성 증대 * **런타임 생성:** * PCG 월드 액터에서 "Use Editor Viewport as Generation Source" 옵션 활성화 필요 * GPU 전용 인스턴스 스폰 가능 (CPU 부하 감소) * 파라미터 변경 시 자동 재생성 (에디터), 수동 트리거 필요 (런타임 POI 생성 등) * 런타임 시 인스턴스 트랜스폼을 디스크에 저장할 필요 없음 * GPU에서 텍스처 샘플링, HLSL 코드 디버깅 가능 (Lumen 씬에는 표시되지 않음) * **고급 생성 개념:** * **생성 시점:** * **On Load (기본값):** 빌드 시점에 생성 * **On Demand:** 특정 시점에 수동으로 생성 (예: "Generate" 버튼 클릭) * **Runtime:** 런타임 시 생성 * **에디터 전용 컴포넌트:** PCG 컴포넌트가 생성 후 필요 없을 경우 에디터 전용으로 설정 가능 * **PCG 빌더 (Builders):** * 커맨드렛을 통해 PCG 생성을 제어하는 에셋 * CI/CD 파이프라인에 통합하여 빌드 프로세스 자동화 * 소스 컨트롤 충돌 방지 ## 5. 프로덕션 모범 사례 * **PCG 시스템의 요구 사항 고려:** * 예술적 제어 수준과 수동 배치 수준을 결정해야 합니다. * 전체 도시를 PCG로 만들 수도, 부분적으로만 사용할 수도 있습니다. * 에디트 타임 또는 런타임 생성을 결정해야 합니다. * 그래프 간의 복잡한 연결 또는 단순한 스태틱 메시 스폰 중 선택합니다. * **가독성 있는 그래프:** * 엔지니어 또는 아티스트가 이해하기 쉬운 그래프 구조를 유지합니다. * **성능 최적화:** * 실시간 피드백 및 쉬운 아티스트 워크플로우를 위해 성능을 주시합니다. * 디버그 옵션을 활용하고, 미리 계산 가능한 부분과 런타임 실행 부분을 구분합니다. * 모든 것을 파티셔닝하고, 필요에 따라 옵트아웃 기능을 제공합니다. * **PCG 빌더 활용:** * 프리뷰 모드를 통해 변경 사항을 확인하고, 빌드 머신에서 대규모 생성을 처리합니다. * HLOD 생성과 연계할 수 있습니다. * **에디터 유틸리티 위젯 (Editor Utility Widgets):** * PCG 그래프 실행 순서를 정의하는 데 유용합니다. * 어셈블리 워크플로우에서 액터 태그 설정을 자동화하여 오류 최소화 * **PCG 구성:** * 캐시 크기, 에디터/런타임 프레임 시간, 최대 루프 수 등을 프로젝트 요구 사항에 맞게 조정합니다. * **블루프린트 대신 PCG 활용:** * 복잡한 인스턴스 생성 시 블루프린트의 Construction Script보다 PCG가 더 효율적일 수 있습니다. * PCG는 인스턴스를 생성하지만, Construction Script는 레벨 로드 시 동적으로 생성하여 부하가 클 수 있습니다. * 블루프린트는 PCG 컴포넌트의 범위(경계 충돌, 스플라인)를 정의하는 데 활용될 수 있습니다. * **명확한 규칙 및 분류 체계:** * 태그, 속성 명명 규칙 등을 일관되게 정의하여 관리합니다. * 사용자가 입력할 수 있는 부분(수동 작업)과 PCG가 처리할 부분을 명확히 구분합니다. ## 6. 활용 사례 * **Electric Dream 샘플:** 계층적 생성, 블루프린트 속성 활용, 어셈블리 워크플로우 * **BiomeCore V2:** 복잡한 PCG 시스템 구축, 그래프 간 통신, 사용자 친화적 인터페이스 제공 (프로덕션에서는 복사 후 사용 권장) * **Cassini 샘플:** 형상 문법, 런타임 생성, 거리 필드 빌딩, 스플라인 메쉬 활용 * **Lego Odyssey:** * 에디터 유틸리티 위젯을 통한 어셈블리 워크플로우 * **Snap to Landscape (STL)** 태그를 활용한 지형 기반 배치 * 포인트 클라우드를 활용한 POI 생성 * 타일 기반 게임, 헥스 타일링 * 오디오 팀의 환경음 배치 활용 * **기타:** * 던전 생성, 레벨/레벨 인스턴스 스폰 * 타일 기반 게임 * 월드 파편 흩뿌리기 * 머신러닝 기반 애플리케이션 (PCG로 머신러닝 모델 학습 데이터 생성, 머신러닝으로 PCG 정보 제공) * 복셀화된 구름 생성 ## 7. 요약 및 향후 정보 * **PCG는 프로덕션 준비 완료**되었으며, 워크플로우를 가속화하기 위해 적극적으로 사용해야 합니다. * 에디터 및 런타임 모두에서 다양한 기능을 활용할 수 있습니다. * 작게 시작하여 점진적으로 복잡성을 늘려가는 것을 권장합니다. * 다양한 시스템 간의 연결성을 고려합니다. ### 추가 정보 * **Witcher 4 Unreal Engine Tech Demo 런타임 PCG:** Hugh의 발표 (8호실) * **Technical Content Grimoire:** Tomislav의 PCG 관련 콘텐츠 * **Nanite Foliage의 미래:** Simon의 발표 (6호실) * **Simon에게 문의:** PCG 관련 질문 **감사의 말:** Camille Kay, Chris Murphy, Jean-Claude Sebastien Kwai의 도움에 감사드립니다. **커뮤니티:** PCG를 사용하는 모든 분들의 노고에 감사하며, 많은 영감을 얻고 있습니다. **추가 자료:** 발표자 링크트리에서 PCG 관련 리소스 및 발표 자료 확인 가능.