일렉트릭 드림즈(Electric Dreams) 환경 은 프로시저럴 콘텐츠 생성(Procedural Content Generation, PCG) 프레임워크를 사용하여 언리얼 엔진에서 기존 및 프로시저럴 워크플로를 직접 통합합니다. 이 페이지에서는 이 샘플에서 찾을 수 있는 다음과 같은 중요한 요소들을 다루고 일렉트릭 드림즈 데모의 컨텍스트에서 PCG 프레임워크에 대해 살펴봅니다.
언리얼 엔진의 프로시저럴 생성 프레임워크에 대한 자세한 내용은 프로시저럴 콘텐츠 생성 프레임워크 문서를 참고하세요.
용어집
일렉트릭 드림즈 환경 샘플 프로젝트는 프로시저럴 콘텐츠 생성 프레임워크에서 사용되는 서로 다른 구조를 몇 가지 전문 용어로 지칭합니다. 이 섹션에서는 앞으로 사용할 용어에 익숙해지도록 이러한 전문 용어의 정의와 추가적인 정보를 다룹니다.
-
[PARAM:Term]
PCG 그래프 는 PCG의 핵심입니다. 이 그래프는 데이터 플로 그래프의 형태로 수행되는 일련의 연산을 통해 작업을 나타냅니다. PCG 그래프는 다른 그래프 내에서 서브그래프로 사용될 수 있습니다.
PCG 그래프(PCG Graph)
[/PARAM]-
[PARAM:Term]
PCG 엘리먼트 는 PCG 그래프 내에서 사용되는 노드입니다. 엘리먼트는 C++ 코드를 통해 또는 PCG 블루프린트 엘리먼트 클래스를 사용하여 데이터로 생성될 수 있습니다.
PCG 엘리먼트(PCG Element)
[/PARAM]-
[PARAM:Term]
PCG 세팅 은 노드의 클래스 설정된 프로퍼티를 포함하는 노드 세팅입니다.
PCG 세팅(PCG Settings)
[/PARAM]-
[PARAM:Term]
공간 데이터 는 공간에 존재하며 다음을 표시할 수 있습니다.
- 3차원(3D) 볼륨
- 2차원(2D) 표면(하이트필드 및 텍스처 등)
- 1차원(1D) 선(스플라인 및 포인트 클라우드 등)
공간 데이터(Spatial Data)
[/PARAM]-
[PARAM:Term]
포인트 데이터 는 연관된 바운드, 정의된 프로퍼티 및 어트리뷰트를 사용하여 3D 공간 내에서 포인트를 나타냅니다. 연산에서 가장 흔히 사용되는 PCG 데이터 타입입니다.
포인트 데이터(Point Data)
[/PARAM]-
[PARAM:Term]
포인트 프로퍼티 는 PCG 포인트 데이터의 모든 데이터에서 찾을 수 있는 사전에 정의된 프로퍼티 세트입니다. 프로퍼티는 어트리뷰트 연산에서 사용될 수 있습니다. 프로퍼티는
$Density,$Position.x,$Rotation.forward와 같이 달러 기호($) 접두사를 붙여 표시해야 합니다.이러한 프로퍼티에는 다음이 포함됩니다.
- Transforms: 위치(vec3), 회전(Rotator) 및 스케일(vec3)로 구성된 트랜스폼입니다.
- Density(float): 범위가 0~1인 포인트 밀도 함수 최대 값입니다. 이 값은 차이, 유니온, 노이즈 및 필터링 같은 여러 연산에서 사용됩니다.
- BoundsMin/Max(vec3): 포인트 바운딩 볼륨의 최소 값/최대 값입니다.
- Color(vec4): 포인트 컬러 값입니다.
- Steepness(float): 포인트 밀도 함수의 기울기를 0~1로 나타내는 값입니다. 경사도 1에서 밀도 함수는 포인트의 바운드 내에서는 최대 밀도를 반환하며, 바깥에서는 0을 반환합니다. 경사도가 1보다 작으면 밀도 함수는 포인트의 바운드 최소/최대를 중심으로 0까지 선형 보간된 최대 밀도 값을 반환합니다.
- Seed(int64): 포인트 위치, 노드 시드 및 컴포넌트 시드로부터 계산된 포인트 시드입니다.
프로퍼티(Properties)
[/PARAM]-
[PARAM:Term]
어트리뷰트(Attribute)
[/PARAM]-
[PARAM:Term]
어셈블리 는 단일 에셋으로 결합되는 액터 및 비주얼의 그룹입니다. 일렉트릭 드림즈에서의 어셈블리는 레벨 인스턴스에서 결합된 퀵셀 에셋 또는 레벨 주위에서 수동으로 생성 및 배치되는 패킹된 레벨 액터를 사용합니다. 어셈블리는 PCG로 레벨 익스포트 에셋 유틸리티(Level to PCG Asset Utility)를 통해 PCG 그래프 및 PCG 어셈블리에서 소스 콘텐츠로 사용됩니다.
어셈블리(Assembly)
[/PARAM]-
[PARAM:Term]
PCG 어셈블리 는 PCG 프레임워크를 사용하여 프로시저럴 방식으로 생성되는 어셈블리입니다. PCG 어셈블리는 PCG 그래프에서 일련의 연산을 통해 다양한 방식으로 생성될 수 있으며, 컴포넌트 또는 노출된 파라미터 같은 입력을 변경하여 커스터마이징할 수 있습니다. 이러한 연산은 개별 메시 및 액터 스폰부터 완전한 수동 어셈블리까지 다양합니다.
PCG 어셈블리(PCG Assembly)
[/PARAM]툴
이 섹션에서는 일렉트릭 드림즈 환경 데모의 프로시저럴 콘텐츠 제작에 사용된 툴을 살펴봅니다.
PCG로 레벨 익스포트 에셋 유틸리티
설명
PCG로 레벨 익스포트 에셋 유틸리티(Level to PCG Asset Utility) 는 선택된 레벨 내의 모든 스태틱 메시, 계층형 인스턴스드 스태틱 메시(Hierarchical Instanced Static Mesh, HISM) 및 인스턴스드 스태틱 메시(Instanced Static Mesh, ISM)를 PCG 세팅 에셋으로 익스포트합니다. 데이터는 PCG 포인트 데이터로 저장됩니다. 특히, 이 데이터는 익스포트된 모든 비주얼의 포인트 클라우드이며 트랜스폼, 메시 및 머티리얼 소프트 오브젝트 경로, 액터 태그, 액터 씬 계층구조 정보를 어트리뷰트로 갖추고 있습니다.
그 결과물인 PCG 세팅 에셋은 모든 PCG 그래프에서 인스턴스드 노드로 추가할 수 있습니다. 그런 다음 이 PCG 포인트 데이터를 원하는 프로시저럴 규칙(PCG 그래프)에 따라 처리하여 증강 및/또는 스폰할 수 있습니다.
구성
블루프린트 에셋 유틸리티는 PCG 플러그인과 함께 배포되며, 플러그인 콘텐츠 표시(Show Plugin Content) 를 활성화한 후 여기에서 액세스할 수 있습니다.
PCG로 레벨 익스포트 에셋 유틸리티의 콘텐츠 파일 경로는 /PCG/Utilities/PCGUtility_LevelToPCG 입니다.
일렉트릭 드림즈의 모든 PCG 세팅 및 해당 소스 레벨의 콘텐츠 파일 경로는 /PCG/Assets/PCGAssemblies 입니다.
사용법
PCG로 레벨 익스포트 에셋 유틸리티 워크플로를 사용하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저 에서 레벨을 선택합니다.
-
우클릭 후 스크립팅된 에셋 액션(Scripted Asset Action) > PCG - PCG로 레벨 익스포트 세팅(PCG - Level To PCG Settings) 을 선택합니다.
이미지를 클릭하면 확대됩니다.
선택된 레벨이 월드 파티션되었거나 액터당 한 개의 파일(One File Per Actor, OFPA)인 경우, 먼저 에디터에서 열고 해당 콘텐츠를 로드해야 합니다. OFPA 외 레벨의 경우, 레벨을 에디터에서 열 필요 없이 콘텐츠 브라우저에서 바로 수행할 수 있습니다.
- 이전 단계에서는 레벨명에 '_PCG' 접미사를 붙인 이름으로 선택된 레벨 파일 옆에 PCG 세팅 에셋을 생성합니다. 이 이름의 PCG 세팅 에셋이 이미 있는 경우에는 새 에셋을 생성하는 대신 기존 에셋을 업데이트합니다.
- 콘텐츠 브라우저 에서 PCG 세팅 파일을 PCG 그래프 에 인스턴스드 노드로 드래그 앤 드롭 합니다.
-
PCG 그래프 에서 에셋 노드의 Points 출력을 Copy Points 노드의 소스 입력에 연결하고, 이 소스 포인트가 복사되어야 하는 포인트 세트를 타기팅합니다.
Copy Points 노드에서는 가능하다면 'Attribute Inheritance'를 'Source Only'로 설정하여 프로세스 속도를 높이세요.
-
Copy Points 출력을 Static Mesh Spawner 노드에 연결하고 Mesh Selector Type 은 'PCGMeshSelectorByAttribute'로, Attribute Name 은 'Mesh'로 설정합니다.
이미지를 클릭하면 확대됩니다.
'By Attribute Material Overrides'는 익스포트된 비주얼에 머티리얼 오버라이드가 사용되었을 경우 'Material'을 Index0 값으로 사용하여 활성화할 수 있습니다.
또한 PCG 그래프의 Point Filter 노드를 사용하는 포인트는 익스포트된 액터 태그(Actor Tags) 어트리뷰트로 필터링할 수도 있습니다. 태그 필터링 사용 사례는 다음과 같습니다.
- NoCol: 콜리전 요구 사항을 기반으로 포인트를 필터링하고 이에 따라 스폰합니다.
- Clutter: 랜덤 노이즈와 파라미터화된 밀도를 추가하여 어셈블리를 증강합니다.
- Helper: 규칙상 특정 목적이 있지만 스폰되어서는 안 되는 포인트를 필터링합니다.
액터 태거 에디터 유틸리티 위젯
설명
액터 태거 에디터 유틸리티 위젯(Actor Tagger Editor Utility Widget) 으로는 레벨 내 에셋에 액터 태그를 작성할 수 있습니다. 이 유틸리티 위젯은 PCG 세팅 에셋으로 익스포트하려는 레벨의 태그 워크플로 속도를 높여줍니다.
언리얼 엔진에는 에셋에 액터 태그를 추가, 편집 및 제거하는 데 검증된 워크플로가 있지만 현재로서는 대규모 편집 작업에 적합하지 않습니다. 그 예로는 여러 액터를 선택하고 서로 다른 액터 태그를 적용하려는 경우가 있습니다. 이렇게 하면 디테일(Details) 패널에서 액터 태그가 복잡해집니다.
액터 태거 에디터 유틸리티 위젯은 이러한 현재 에디터 액터 태그 행동의 단점을 줄이기 위해 만들어졌으며, 사용자가 3D 뷰포트에서 태그를 구성하는 데 집중할 수 있도록 현지화된 액션 팔레트도 제공합니다.
구성
액터 태거 에디터 유틸리티 위젯의 콘텐츠 파일 경로는 /Game/PCG/Utilities/ActorTagger/EUW_ActorTagger 입니다.
사용법
액터 태거를 실행하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저 에서 액터 태거 를 선택합니다.
- 액터 태거 를 우클릭한 후 에디터 유틸리티 위젯 실행(Run Editor Utility Widget) 을 선택합니다.
기능
태그 선택
로드된 레벨에서 태그 선택(Select Tag) 필드에 입력된 태그를 가진 액터를 모두 선택합니다. 현재 '아웃라이너(Outliner)'에서의 선택 항목이 결과로 대체됩니다.
태그 제거
태그 제거(Remove Tag) 필드에 입력한 태그로 현재 선택된 모든 액터를 검색합니다. 액터에 태그가 지정되어 있는 경우 해당 태그는 제거됩니다.
태그 추가
태그 추가(Add Tag) 필드에 태그를 입력하면 현재 선택된 모든 액터에 추가됩니다. 선택된 액터에 태그가 이미 지정되어 있는 경우 중복 추가되지는 않습니다.
숨기기
현재 선택된 액터를 모두 숨깁니다. 현재 선택된 액터가 없는 경우 이전에 숨겨진 액터가 모두 표시됩니다.
언릿/라이팅포함
뷰포트 라이팅 모드의 상태를 '라이팅포함(Lit)'/'언릿(Unlit)'으로 토글합니다.
툴 섹션
레벨 태그 출력
로드된 레벨에 있는 모든 고유한 태그가 출력 로그에 프린트됩니다. 로드된 레벨의 모든 액터 태그에 대한 간략한 개요를 제공합니다.
태그를 고유하게 만들기
이 기능은 현재 로드된 레벨의 모든 액터에 대해 실행되며, 액터별로 중복된 태그를 단일 태그 항목으로 줄입니다.
레퍼런스 레벨
이 기능은 지정된 레퍼런스 레벨을 로드/언로드합니다. 여기에는 PCG 세팅 에셋으로 익스포트할 레벨을 생성하는 데 도움이 되는 라이팅 및 레퍼런스 오브젝트도 포함될 수 있습니다.
에디터 유틸리티 위젯이 실행될 때는 디폴트 레퍼런스 레벨이 할당됩니다. 디폴트 레퍼런스 레벨은 /Game/PCG/Utilities/ActorTagger/ActorTagger_ReferenceLevel 에서 찾을 수 있습니다.
이 디폴트 값은 위젯 컨스트럭션 스크립트에서 할당된 레벨을 변경하여 커스터마이징할 수 있습니다.
이미지를 클릭하면 확대됩니다.
레퍼런스 레벨 설정
이 기능으로는 로드/언로드할 자체 레퍼런스 레벨을 할당할 수 있습니다. 자체 레퍼런스 레벨을 할당하려면 콘텐츠 브라우저 에서 월드 파티션 외의 레벨을 선택한 후 이 버튼을 선택하면 됩니다. 할당된 레퍼런스는 위젯에 저장되지 않으며 위젯을 실행할 때마다 다시 할당해야 합니다.
커스텀 노드 및 서브그래프
이 섹션에서는 일렉트릭 드림즈 환경의 PCG 그래프에서 특정 목적으로 생성된 PCG 커스텀 노드 및 서브그래프에 대해 살펴봅니다.
SG_CopyPointsWithHierarchy 및 ApplyHierarchy
설명
SG_CopyPointsWithHierarchy 및 ApplyHierarchy 노드는 PCG로 레벨 익스포트 에셋 유틸리티를 사용하여 생성된 PCG 세팅 에셋과 함께 사용됩니다.
이러한 노드를 사용하면 레벨의 액터 계층구조와 비슷한 방식으로 포인트 계층구조를 조작할 수 있습니다. 포인트는 부모 포인트의 트랜스포메이션을 상속할 수 있습니다. 예를 들어 이 기능을 사용하면 나무 줄기를 나타내는 포인트를 랜덤으로 회전 및 스케일 조절할 수 있습니다. 나뭇가지를 표시하는 자손 포인트는 부모 줄기의 트랜스폼을 따르면서, 자체 랜덤 회전 또는 스케일 조정을 부모 줄기 트랜스폼에 추가합니다.
포인트는 포인트 필터 연산자를 사용하여 제거할 수 있으며, 자손 포인트를 자동으로 제거할 수도 있습니다. 이는 복잡한 포인트 구성에 랜덤 베리에이션을 추가하는 데 유용합니다.
구성
SG_CopyPointsWithHierarchy 및 ApplyHierarchy 노드는 일렉트릭 드림즈 환경 샘플 프로젝트의 노드 팔레트(Node Palette) 에 있습니다. 또한 그래프 영역의 PCG 에디터(PCG Editor) 컨텍스트 메뉴를 통해서도 액세스할 수 있습니다.
SG_CopyPointsWithHierarchy 서브그래프의 콘텐츠 파일 경로는 /Game/PCG/Assets/PCGCustomNodes/SG_CopyPointsWithHierarchy 입니다.
ApplyHierarchy 커스텀 노드의 콘텐츠 파일 경로는 /Game/PCG/Assets/PCGCustomNodes/ApplyHierarchy 입니다.
다음 PCG 그래프가 이러한 노드를 사용합니다.
/Game/PCG/Graphs/Ditch/PCGDemo_DitchBP/Game/PCG/Graphs/Ground/PCGDemo_GroundBP/Game/PCG/Assets/BP_PCG_LargeAssembly/Game/Levels/PCG/Breakdown_Levels/ElectricDreams_PCGSplineExample
사용법
PCG 그래프에서 계층구조 노드의 일반적인 사용법입니다. (이미지를 클릭하면 확대됩니다.)
PCG 그래프에서 계층구조 노드의 일반적인 사용 단계는 다음과 같습니다.
- PCG로 레벨 익스포트 에셋 유틸리티 는 레벨을 PCG 세팅 에셋으로 변환하며, 이 에셋에는 PCG 포인트와 메타데이터 어트리뷰트가 저장된 관련 씬 계층구조 정보가 포함되어 있습니다.
- SG_CopyPointsWithHierarchy 서브그래프는 타깃 포인트 트랜스폼을 사용하여 여러 위치의 PCG 세팅 에셋을 복제하며, 이것은 Copy Points 노드의 역할과 유사하면서도 계층구조 어트리뷰트 값을 유지 및 오프셋하여 원본 에셋의 각 포인트 사본마다 부모 정보가 고유하도록 합니다.
- Point Filter 노드는 어트리뷰트별로 포인트를 선택합니다.
- ApplyToAttributes 옵션을 갖춘 Transform Points 노드는 선택된 포인트를 상대적 트랜스폼 어트리뷰트로 트랜스폼합니다.
- Merge 노드는 모든 포인트를 동일한 데이터 스트림 내 동일 계층구조에 재결합합니다.
- ApplyHierarchy 노드는 부모 트랜스폼과 결합된 상대적 트랜스폼 어트리뷰트를 포인트에 적용합니다.
PCG 세팅 노드로 만들어진 계층구조 어트리뷰트
FallenTree PCG 세팅 에셋의 계층구조 어트리뷰트의 뷰입니다. (이미지를 클릭하면 확대됩니다.)
레벨 액터를 PCG 세팅 에셋에 익스포트할 때 소스 레벨 내 액터 계층구조 정보는 메타데이터 어트리뷰트 를 사용하여 각 PCG 포인트에 연결됩니다. 이 메타데이터 어트리뷰트는 다음과 같습니다.
| 메타데이터 어트리뷰트 | 타입 | 설명 |
|---|---|---|
| ActorIndex | int | 포인트의 고유 식별자입니다. |
| ParentActorIndex | int | 포인트의 부모 포인트의 고유 식별자입니다. |
| HierarchyDepth | int | 부모 계층구조에서 해당 포인트의 깊이, 즉 포인트가 자신과 루트 포인트 사이에 얼마나 많은 부모를 가졌는지를 나타냅니다. |
| RelativeTransform | transform | PCG 세팅 에셋의 소스 레벨에서 포인트와 해당 부모 사이의 오프셋 트랜스폼입니다. |
더미 포인트는 다음 메타데이터 어트리뷰트를 갖춘 계층구조 루트 포인트를 나타냅니다.
- ActorIndex: 0
- ParentActorIndex: -1
- HierarchyDepth: 0
- RelativeTransform: Unit Transform
소스 레벨 계층구조에서 부모가 지정되지 않은 모든 포인트는 오펀 또는 루트 포인트 같은 특수한 경우를 처리하지 않도록 이 루트 포인트에 의해 부모가 됩니다.
SG_CopyPointsWithHierarchy로 트랜스폼된 계층구조 어트리뷰트
SG_CopyPointsWithHierarchy로 생성된 각 PCG 에셋 사본별로 생성된 액터 및 부모 인덱스입니다. 루트 포인트 ActorIndex 값 6개가 서로 다르다는 점에 유의하세요. (이미지를 클릭하면 확대됩니다.)
SG_CopyPointsWithHierarchy 서브그래프입니다. (이미지를 클릭하면 확대됩니다.)
계층구조 인덱스를 처리하려면 Copy Points 노드의 커스텀 버전이 필요합니다. 그 역할은 포인트가 부모 포인트를 찾을 때 두 포인트 모두와 리졸브된 부모가 동일한 사본 또는 Copy Points 노드에 의해 생성된 포인트 세트에 속하도록 하는 것입니다.
이 커스텀 Copy Points 노드는 다음을 포함하는 서브그래프 형태로 구현됩니다.
- 일반 Copy Points 노드
- PostCopyPoints-OffsetIndices 블루프린트 노드. 원본 인덱스, 사본 번호 및 고유 작업 ID에서 계산된 각 사본에 고유 ID 세트를 할당하는 역할을 합니다.
- Two Create Attributes 노드. IgnoreParentRotation 및 IgnoreParentScale 부울 어트리뷰트를 'false'로 초기화하는 데 사용됩니다.
계층구조 내 포인트 조작
SG_CopyPointsWithHierarchy 타깃 포인트에 의해 지정된 위치에 포인트가 복사되면 Point Filter 노드를 사용하여 PCG 세팅 에셋에 있는 어트리뷰트로 결과 포인트를 필터링할 수 있습니다.
PCGDemo_Ditch의 포인트 필터링으로, Clutter 어트리뷰트를 사용하여 계층구조에서 포인트를 랜덤으로 제거합니다.
PCGDemo_Ditch의 포인트 필터링으로, RotZ 어트리뷰트를 사용하여 계층구조에서 포인트를 랜덤으로 회전합니다.
위의 두 이미지에서 포인트는 태그별로 선택되어 필터링 또는 회전된 후 다시 Point Filter 에 의해 선택되지 않은 포인트와 병합됩니다. 이 병합 작업은 트랜스폼 여부에 상관없이 모든 포인트를 동일한 데이터 스트림에 유지시켜 주기 때문에 중요하며, 나중에 최종 포인트 트랜스폼을 적용할 때 함께 처리할 수 있습니다.
이미지를 클릭하면 확대됩니다.
계층구조에서 Transform Points 노드를 사용할 때는 트랜스폼이 포인트의 Transform에 직접 적용되면 안 되고 RelativeTransform 어트리뷰트에 적용되어야 한다는 점에 유의해야 합니다. 이렇게 하려면 Apply To Attribute 옵션의 Attribute Name 에 'RelativeTransform'을 사용하세요. 또는 부모 포인트 트랜스폼에서 부분적으로 상속하려면 IgnoreParentRotation 및/또는 IgnoreParentScale 어트리뷰트를 true로 설정할 수도 있습니다.
마지막으로, ApplyHierarchy 노드는 Static Mesh Spawner 노드를 사용하여 메시를 스폰하기 직전에 사용됩니다. ApplyHierarchy 노드의 역할은 다음과 같습니다.
- 기존의 모든 계층구조 레벨을 오름차순으로 반복작업합니다(계층구조 뎁스 포인트 어트리뷰트에서 리졸브됨).
- 최종 포인트 트랜스폼을 해당 부모 트랜스폼 및 RelativeTransform 어트리뷰트 값에서 계산합니다.
- 부모가 버려진 포인트를 제거합니다.
플랫 영역 디텍터
설명
플랫 영역 디텍터(Flat Area Detector) 서브그래프는 지정된 크기의 포인트를 배치할 수 있을 만큼 표면이 평평한지 확인하여, 에셋이 부분적으로 지면 위로 뜨는 등 잘못 배치되는 것을 방지하는 데 사용됩니다. 플랫 영역 디텍터는 각 소스 포인트 주변 4개 위치에서 표면을 샘플링하여 평평한 표면이나 경사진 표면에서 작동합니다. 4개의 샘플 위치 중 하나라도 입력 포인트 위치 및 방향에 의해 정의된 평면과 교차하지 않는 경우 입력 포인트가 버려집니다. 이러한 평면은 위 이미지에서와 같이 파란색 와이어프레임으로 표시됩니다. 4개의 샘플링 위치 중 하나라도 표면 방향이 입력 포인트 방향과 다를 경우에도 입력 포인트는 버려집니다.
이 서브그래프는 다음 그래프에서 사용됩니다.
- PCGDemo_Ground
- 플랫 영역 디텍터는 이 그래프에서 거친 바위투성이 메시 표면에 클로버 패치를 배치하는 데 사용됩니다.
- 이 그래프의 콘텐츠 파일 경로는
/Game/PCG/Graphs/Ground/PCGDemo_Ground입니다.
- PCGDemo_Forest
- 플랫 영역 디텍터는 이 그래프에서 커다랗고 평평한 암석 패치와 주요 암석 어셈블리를 랜드스케이프에 배치하는 데 사용됩니다.
- 이 그래프의 콘텐츠 파일 경로는
/Game/PCG/Graphs/Forest/PCGDemo_Forest입니다.


구성
플랫 영역 디텍터 서브그래프의 콘텐츠 파일 경로는 /Game/PCG/Graphs/Forest/DiscardPointsInBumpyAreas 입니다.
사용법
플랫 영역 디텍터를 PCG 그래프에서 노드로 사용하려면 콘텐츠 브라우저 에서 PCG 그래프 에디터로 이 그래프를 드래그 앤 드롭합니다.
이미지를 클릭하면 확대됩니다.
노드 핀 설명
DiscardPointsInBumpyAreas 노드에는 다음과 같은 핀과 설명이 있습니다.
| 핀 | 타입 | 설명 |
|---|---|---|
| In | 포인트 | ProjectionTarget 표면에 대해 테스트되는 입력 포인트입니다. |
| InNoProjection | 포인트 | (선택 사항) 이 핀은 최적화 핀이며, 입력 포인트가 이미 표면에 있는 경우 입력 포인트 피드에 'In' 핀 대신 사용할 수 있습니다. |
| ProjectionTarget | 표면 | 평탄도를 평가하려는 표면에 연결하는 핀입니다. Get Landscape Data 또는 World Ray Hit 노드에서 생성된 표면일 수 있습니다. |
| SampleDistance | 어트리뷰트 세트 - 더블 | 이 핀은 Create Attribute 노드 등에서 제공되는 플로트 또는 더블 타입의 어트리뷰트 입력을 취합니다. 이 핀은 각 소스 포인트와 표면 프로브에 사용되는 샘플 포인트 간의 거리를 제어합니다. 이러한 포인트는 시각적으로 위 이미지에서와 같이 파란색 와이어프레임의 X-Y 크기로 표시됩니다. |
| HeightThreshold | 어트리뷰트 세트 - 더블 | 이 핀은 Create Attribute 노드 등에서 제공되는 플로트 또는 더블 타입의 어트리뷰트 입력을 취합니다. 파란색 와이어프레임 표면에서의 거리가 이 값보다 큰 샘플 포인트는 평면에서 벗어난 것으로 간주하여 입력 포인트를 버리는 데 사용됩니다. 평면에서 벗어난 포인트는 위 이미지에서와 같이 빨간색 박스로 표시됩니다. |
| NormalThreshold | 어트리뷰트 세트 - 더블 | 이 핀은 Create Attribute 노드 등에서 제공되는 플로트 또는 더블 타입의 어트리뷰트 입력을 취합니다. 이 핀은 샘플 포인트의 업 벡터가 입력 포인트를 버리기 전에 입력 포인트의 업 벡터에서 달라질 수 있는 정도를 제어합니다. 이 값은 음수여야 합니다. 이 값이 0에 가까울 수록 더 많은 포인트가 버려집니다. |
| Out | 포인트 | HeightThreshold 및 NormalThreshold 테스트를 통과한 나머지 포인트의 세트입니다. |
서브그래프 개요
이미지를 클릭하면 확대됩니다.
이 섹션에서는 플랫 영역 디텍터 서브그래프의 작동 방식에 대한 개요를 제공합니다.
샘플 포인트 생성
Attribute Math 연산과 Transform Points 노드는 다음과 같은 4개 샘플 포인트를 생성합니다:
- 샘플 포인트는 각 입력 포인트 주변 2D 박스에 배치됩니다.
- 이 박스의 크기는 Sample Distance 어트리뷰트에 의해 결정됩니다.
- 각 샘플 포인트의 바운드는 Height Threshold 어트리뷰트에 의해 결정됩니다.
평면 빌드
위 이미지에서 파란색 와이어프레임으로 표시되는 평탄화된 포인트는 Attribute Math 연산을 사용하여 Sample Distance에서 빌드되었습니다.
표면에 샘플 포인트 투영
4개의 샘플 포인트는 위치와 방향을 고려하여 표면에 투영됩니다. 그런 다음 각 투영 포인트 및 파란색 와이어프레임의 차이를 계산합니다. 이 차이 노드는 평면 밖의 포인트를 출력합니다.
이 3개 노드의 디버그 상태를 활성화하면 위 이미지에서와 같이 와이어프레임은 파란색, 4개의 샘플 포인트는 초록색, 그리고 파란색 평면 (시각적으로는 파란 와이어프레임)과 교차하지 않는 샘플 포인트는 빨간색으로 표시됩니다.
샘플 포인트 방향의 분산 추정
이미지를 클릭하면 확대됩니다.
다음으로는, 샘플 포인트 방향의 분산을 추정합니다. 포인트는 입력 포인트에서 생성되어 노멀 한계치 값에 의해 업 벡터를 따라 음수로 이동됩니다. 이것은 아래 이미지에서와 같이 파란색 평면으로 표시됩니다. 이 포인트와 표면 노멀 벡터에 정렬된 평탄화된 샘플 포인트 간의 교차가 계산됩니다. 이것은 아래 이미지에서와 같이 파란색 와이어프레임으로 표시됩니다.


왼쪽 이미지는 -300의 노멀 한계치 값이 업 벡터를 따라 파란색 평면을 아래로 밀어내는 모습을 보여줍니다. 오른쪽 이미지는 -10의 노멀 한계치를 보여줍니다. 이 값을 사용하면 이제 교차는 빨간색 축 삼각대로 표시되는 포인트를 출력합니다. 이것은 노멀 한계치 값을 사용하여 샘플 포인트 방향의 분산을 기반으로 교차의 출력을 제어하는 방식을 보여줍니다.
평행 샘플 포인트/평면은 노멀 한계치 값이 0일 때 파란색 포인트와만 교차합니다.
최종 포인트 필터링
이미지를 클릭하면 확대됩니다.
마지막으로, 이 두 가지 테스트의 결과 포인트는 필터링할 입력 포인트에 대한 차이로 확장 및 사용됩니다. 그러면 DiscardPointsInBumpyAreas 노드의 입력 핀에 제공된 파라미터를 따르는 포인트만 남게 됩니다.
LookAt
설명
LookAt 노드는 포인트를 vector3 어트리뷰트로 제공된 타깃을 가리킵니다. 이 어트리뷰트는 Attribute Math 연산 및 Distance 노드를 통해 생성할 수 있습니다.
이 노드는 일렉트릭 드림즈에서 다음과 같이 사용되었습니다.
- 강바닥에서 원하는 비주얼을 얻기 위해 대규모 어셈블리 스플라인에 대해 포인트의 방향을 변경하는 기본 규칙
- 안개 카드와 숲 그래프 모두에서 안개 카드가 영역의 중앙을 향하도록 회전
구성
LookAt 커스텀 노드의 콘텐츠 파일 경로는 /Game/PCG/Assets/PCGCustomNodes/LookAt 입니다.
사용법
LookAt 노드는 단일 포인트 데이터 입력을 반복작업하고 vector3 어트리뷰트를 포인트별 룩 앳 타깃 좌표로 예상합니다.
이미지를 클릭하면 확대됩니다.
LookAt 노드를 사용하려면 다음 단계를 따릅니다.
- 포인트 데이터를 생성합니다.
- From Source Param 으로 설정된 AddAttribute 를 사용하여 새 LookAt 어트리뷰트를 포인트 데이터에 추가합니다.
- 다음 중 원하는 옵션으로 Attributes 를 오버라이드합니다.
- 벡터 타입의 Create Attribute 노드와 룩 앳 좌표
- 커스터마이징을 위해 노출 가능한 블루프린트 vector3 변수의 Get Actor Property
- 그래프 세팅(Graph Settings) 에서 PCG vector3 그래프 파라미터를 생성하고 '파라미터 이름'을 구합니다. 이 이름은 모든 그래프 인스턴스에서 노출되며 PCG 컴포넌트별로 편집할 수 있습니다.
- LookAt 노드 세팅을 설정합니다:
- 사용할 어트리뷰트 이름으로 LookAt Target 을 설정합니다.
- 2D LookAt 세팅은 Z 컴포넌트를 무시합니다.
- Forward X 는 LookAt 에 대해 Y축 대신 X축을 사용합니다.