새 메시 파티션을 구성하려면 더 높은 수준의 제어를 바탕으로 개발 프로세스를 보다 효율적으로 만들기 위해 함께 작동하는 몇 가지 다른 에셋이 필요합니다. 메시 터레인은 코어 기술 아티스트 또는 리더가 메시 파티션 정의 데이터 에셋, 트랜스포머 파이프라인 데이터 에셋, 머티리얼, 웨이트 채널, 우선순위 레이어 등 여러 파일을 정의한다는 아이디어를 바탕으로 디자인되었습니다. 이 구조는 셰이더 순열, 호환되지 않는 레이어 구조, 불필요한 웨이트 채널 등을 최소화합니다.
명명 규칙 및 표준
| 에셋 | 에셋 타입 | 접두사 |
|---|---|---|
메시 파티션 정의 | 데이터 에셋 | MPD_<Name> |
메시 파티션 트랜스포머 파이프라인 | 데이터 에셋 | TP_Compiled_<Platform>_<Name> TP_Preview_<Platform>_<Name> |
메시 파티션 정의 생성
메시 파티션 정의는 머티리얼, 우선순위 레이어, 웨이트 채널 등 메시 터레인의 다양한 코어 측면을 정의합니다. 여러 메시 파티션에 동일한 정의를 사용할 수 있습니다.
새 데이터 에셋(Data Asset)을 생성하고 메시 파티션 정의(Mesh Partition Definition) 클래스를 선택합니다.
이름을
MPD_<name>(으)로 지정합니다(MPD_는 MeshPartitionDefinition의 약자임).
메시 파티션 정의 구성
생성된 후에는 새 메시 파티션 정의 데이터 에셋을 엽니다. 4개의 메인 섹션이 표시됩니다.
머티리얼(Material)
모디파이어(Modifiers)
빌드(Build)
프리뷰(Preview)
메시 파티션 정의 - 머티리얼
'머티리얼; 세팅에서는 메시 파티션 정의에 사용되는 머티리얼 및 관련 채널을 정의할 수 있습니다.
| 파라미터 | 설명 |
|---|---|
머티리얼 | 메시 파티션 지오메트리에 적용되는 머티리얼입니다. |
채널 텍셀 크기(Channel Texel Size) | 어트리뷰트 채널의 런타임 사용을 위해 베이킹된 텍스처의 해상도를 제어합니다(아래 채널 참고). |
피지컬 머티리얼 채널(Physical Material Channels) | 메시 파티션 액터에 사용 가능한 피지컬 머티리얼 채널을 정의합니다. '피지컬 머티리얼 채널'은 지정된 어트리뷰트 데이터를 가진 영역을 특정 피지컬 머티리얼에 매핑합니다. |
디폴트 피지컬 머티리얼(Default Physical Material) | 메시 파티션에 적용되는 디폴트 피지컬 머티리얼입니다. |
채널(Channels) | 메시 파티션 지오메트리에서 사용할 수 있는 사용자 정의 어트리뷰트입니다. 이러한 채널의 데이터는 다양한 모디파이어 또는 PCG에서 페인팅하거나 주입할 수 있습니다. 모디파이어는 정의에 정의되어 있지 않은 채널을 쓸 수 있지만, 에디터 전용으로 유지되며 런타임에서 컴파일된 섹션의 텍스처로 변환되지 않습니다. 이러한 채널은 이를 읽을 수 있는 다른 모디파이어와 PCG에서도 계속 사용할 수 있습니다. 다양한 용도로 사용할 수 있습니다. 예를 들어 다음과 같습니다.
|
메시 파티션 정의 - 모디파이어
모디파이어 세팅에서 모디파이어가 빌드되는 순서를 정의하는 모디파이어 레이어 우선순위(Modifier Layer Priorities)를 찾을 수 있습니다.
여기서 원하는 우선순위 레이어를 생성합니다.
'인덱스[0](Index[0])'에 할당된 모디파이어가 먼저 빌드됩니다.
'인덱스[1](Index[1])'에 할당된 모디파이어는 두 번째로 빌드되며, 이런 방식으로 계속됩니다.
단일 레이어에 여러 모디파이어를 할당할 수 있습니다.
모디파이어에는 지정된 레이어에서 이펙트의 순서를 수동으로 지정하는 데 사용할 수 있는 하위 우선순위가 있습니다. 자세한 내용은 메시 터레인 제작 문서의 모디파이어 섹션을 참고하세요.
메시 파티션 정의 - 빌드
빌드 세팅을 사용하면 다양한 플랫폼의 컴파일된 섹션에 대한 지오메트리 생성을 구성할 수 있습니다. 컴파일된 섹션은 런타임에서 시리얼라이즈됩니다.
'빌드' 섹션에는 다음이 포함됩니다.
| 컴파일된 섹션 빌드 베리언트(Compiled Sections Build Variants) | |
|---|---|
이름(Name) | 빌드 베리언트의 이름입니다. |
최대 섹션 복잡도(Max Section Complexity) | 섹션별 최대 버텍스 수입니다. |
트랜스포머 파이프라인(Transformer Pipeline) | 여기에서 트랜스포머 파이프라인 데이터 에셋을 선택합니다. 자세한 내용은 아래의 트랜스포머 파이프라인 섹션을 참고하세요. |
| 플랫폼(Platforms) - 플랫폼별 런타임 세팅(Per Platform Runtime Settings) | |
| 디폴트 | |
빌드 베리언트 이름(Build Variant Names) | '컴파일된 섹션 빌드 베리언트' 세팅에 정의된 빌드 베리언트를 디폴트 빌드 베리언트로 선택합니다. 이는 쿠킹된 플랫폼 이름이 아래에 정의된 플랫폼 엔트리와 일치하지 않을 때 사용되는 베리언트입니다. |
| 플랫폼별 | |
이름(Name) | 이 플랫폼 엘리먼트에 이름을 지정합니다. |
빌드 베리언트 이름(Build Variant Names) | 위에 있는 '컴파일된 섹션 빌드 배리언트'에서 정의된 빌드 배리언트를 이 플랫폼에 할당된 빌드 배리언트로 선택합니다. |
메시 파티션 정의(Mesh Partition Definition) - 프리뷰
'프리뷰' 섹션은 에디터 전용이며, 런타임에서 사용되는 컴파일된 섹션과 분리되어 있습니다. '프리뷰' 섹션은 빌드 시간, 무효화 및 반복 작업에 최적화되어 있습니다. 컴파일된 섹션은 타깃 플랫폼용 렌더링에 최적화되어 있습니다.
'프리뷰' 섹션에는 다음이 포함됩니다.
최대 섹션 복잡도(Max Section Complexity) | 섹션별 최대 버텍스 수입니다. |
트랜스포머 파이프라인(Transformer Pipeline) | 여기에서 트랜스포머 파이프라인 데이터 에셋을 선택합니다. 자세한 내용은 아래의 트랜스포머 파이프라인 섹션을 참고하세요. |
트랜스포머 파이프라인
트랜스포머 파이프라인은 프리뷰 섹션과 컴파일된 섹션에 다양한 기능을 생성하고 환경설정하는 방법을 제공하는 데이터 에셋입니다.
이들은 메시 파티션에 대한 메시 데이터가 빌드된 후 발생하는 작업과 영구 데이터(액터 및 컴포넌트)로 변환되는 방식을 정의하는 사용자 프로그래밍 가능 파이프라인을 제공합니다.
트랜스포머 파이프라인은 메시 파티션 정의와는 별도의 에셋이므로 다른 메시 파티션 정의에서 프로젝트 또는 플랫폼 정의 환경설정을 빠르게 재사용하기에 편리합니다.
트랜스포머 파이프라인 에셋을 생성하려면 새 데이터 에셋을 생성하고 트랜스포머 파이프라인(Transformer Pipeline) 클래스를 선택합니다.
트랜스포머 파이프라인 데이터 에셋 내에서 다양한 트랜스포머를 추가할 수 있습니다.
사용 가능한 트랜스포머 타입은 다음과 같습니다.
콜리전 트랜스포머
원거리 필드 트랜스포머
RVT 트랜스포머(RVT = 런타임 버추얼 텍스처(Runtime Virtual Texture))
스커트 트랜스포머
스태틱 메시 트랜스포머
서브 섹션 트랜스포머
WP 액터 프로퍼티 트랜스포머(WP = 월드 파티션(World Partition))
콜리전 트랜스포머
'콜리전 트랜스포머(Collision Transformer)'는 비주얼 메시와 분리된 콜리전 지오메트리 생성을 활성화하고 정의합니다.
콜리전 지오메트리를 단순화해야 하는 경우 '오류 허용치(Error Tolerance)' 세팅을 조정합니다.
원거리 필드 트랜스포머
원거리 필드 트랜스포머(Far Field Transformer)는 원거리 필드에 대한 루멘의 내부 표현에 사용되는 특수한 메시 생성을 활성화하고 정의합니다.
원거리 필드 메시 에지 길이(Far Field Mesh Edge Length) | 생성된 원거리 필드 메시의 타깃 에지 길이입니다. |
RVT 트랜스포머
RVT 트랜스포머(RVT Transformer)는 메시 파티션에 대한 런타임 버추얼 텍스처의 가용성을 제어합니다.
스태틱 메시 트랜스포머
스태틱 메시 트랜스포머(Static Mesh Transformer)는 컴파일된 섹션과 프리뷰 섹션의 스태틱 메시 컴포넌트를 활성화하고 정의합니다. 이를 통해 LOD를 구성하고 나나이트를 활성화할 수 있습니다.
스태틱 메시 트랜스포머는 일부 상황에서 심 또는 크랙을 방지하기 위해 지오메트리에 스커트를 추가하는 옵션도 제공합니다.
서브 섹션 트랜스포머
서브 섹션 트랜스포머(Subsection Transformer)는 섹션을 작은 컴포넌트로 세분화합니다.
서브 섹션 크기(Sub Section Size) | 각 서브 섹션의 타깃 버텍스 수를 나타냅니다. |
스택에서 서브섹션 트랜스포머의 인덱스는 중요하며 다음 트랜스포머(인덱스가 더 높은 트랜스포머)에 영향을 미칩니다.
WP 액터 프로퍼티 트랜스포머
WP 액터 프로퍼티 트랜스포머(WP Actor Properties Transformer)는 메시 파티션의 월드 파티션 런타임 그리드, 데이터 레이어 할당 및 HLOD 레이어를 제어합니다.
스태틱 메시 트랜스포머 단순화 작성 세팅
스태틱 메시 트랜스포머는 파티션 유닛별로 스태틱 메시를 빌드하고, 각 LOD 슬롯마다 소스 지오메트리 사본에 어트리뷰트 인식 단순화 툴을 실행합니다. FMeshPartitionTransformerSimplificationSettings는 해당 단순화 툴의 LOD별 작성 표면입니다. 이 섹션에서는 Mode 셀렉터, ScreenSize 및 PixelError를 차례로 살펴보고, 각 LOD 전략에 대한 예시를 통해 마무리합니다.
워크플로 개요
| 작성할 항목 | 설정할 모드 | ||
|---|---|---|---|
LOD별 지오메트릭 오류 예산(편차 cm) | 오류에서 화면 크기 파생(Derive ScreenSize from Error) |
|
|
각 LOD가 활성화되는 거리/화면상 크기 | 화면 크기에서 타깃 오류 한계치 파생(Derive Target ErrorTolerance from ScreenSize) |
|
|
트라이앵글의 고정된 비율을 유지하기 위한 간단한 노브입니다. | 화면 크기 기준 트라이앵글 수(TriangleCount from ScreenSize) |
|
|
완전 수동 제어 | 커스텀(Custom) | 모든 필드 | 없음 |
자동 페어링을 비활성화해야 할 때만 커스텀을 선택합니다. 세 가지 자동 모드가 존재하는 이유는 드라이버와 파생 값을 수동으로 올바르게 페어링하기 어렵기 때문입니다.
세 가지 모드의 관계
단순화 툴은 다음과 같은 세 가지 독립적인 레버를 기반으로 작동합니다.
ErrorTolerance- 월드 스페이스 지오메트릭 편차 예산(UE 유닛 cm) 단순화된 표면이 원본에서 이 값보다 더 많이 벗어나면 에지 병합을 중지합니다.MaxTrianglesFraction/MinTrianglesFraction- 비율 유지 경계로, 상한으로 사용됩니다(또는 ErrorTolerance가 양수가 아닌 경우 타깃으로 사용).ScreenSize- 런타임이 이 LOD에서 허용 가능한 가장 거친 LOD라고 판단하는 화면상의 투영 지름입니다. LOD가 작을수록 화면 크기가 작아집니다. 값은 단조적으로 감소해야 합니다.
PixelError는 ErrorTolerance와 ScreenSize 사이의 변환 인수입니다. 개념적으로 이 LOD가 활성화되는 카메라 거리에서 허용 가능한 지오메트릭 오류 픽셀 수입니다.
내부적으로 변환은 고정 레퍼런스 투영(1920×1080, HFOV 90°, 엔진 스태틱 메시 에디터 비헤이비어와 일치함)을 사용합니다. 표준 자동 LOD 경로를 미러링하므로, 이러한 모드를 통해 파생된 ErrorTolerance - ScreenSize 쌍은 스태틱 메시 런타임이 LOD를 선택하는 방식과 일치합니다. PixelError = 8은 불투명 렌더링된 터레인 또는 건축 메시의 적절한 디폴트입니다.
조정이 필요한 경우 다음을 수행할 수 있습니다.
LOD가 더 가까이에서 표시될 수 있는 배경/스커트의 경우 늘립니다(예: 16).
LOD가 화면에서 매우 작아질 때까지 편차가 눈에 띄지 않아야 하는 히어로 메시의 경우 낮춥니다(예: 2~4).
모드 예시
오류에서 화면 크기 파생
각 LOD를 소스 기준 최대 편차(예: Xcm 이하)로 표현할 수 있고, LOD의 활성화 화면 크기가 화면 오류 투영 방식에 따라 결정되도록 하려는 경우 이 모드를 사용합니다.
다음을 작성합니다.
ErrorTolerance- 거칠어질수록 LOD당 값이 증가합니다(예: LOD0 = 0.5cm, LOD1 = 2cm, LOD2 = 8cm).PixelError- 동일한 메시의 LOD에서 일관성을 유지합니다.MinTrianglesFraction/MaxTrianglesFraction- 안전 장치입니다.MinTrianglesFraction은 매우 평평한 메시가 트라이앵글로 데시메이트되는 것을 방지합니다.MaxTrianglesFraction은 오류 예산이 모든 것을 유지할 수 있도록 허용하더라도 최소한의 감소를 강제합니다.
ScreenSize를 직접 작성할 필요는 없습니다. 트랜스포머는 단순화 후 달성된 대칭 하우스도르프 편차를 측정하고, PixelError를 통해 화면 크기로 투영하여 LOD 소스 모델에 씁니다. 오류 허용 범위는 직관적인 측정 값(길이)이므로 터레인 및 블록아웃 LOD에 권장되는 디폴트이며, 결과 편차가 화면에서 어떻게 표시될지에 대해 추론할 필요가 없습니다.
조정 루프:
LOD별로
ErrorTolerance를 설정하고ScreenSize = 0으로 둡니다.빌드한 다음 로그를 확인합니다.
ConfigStatic mesh transformer LOD2 simplified: 12345 -> 1234 tris (10.0% retained), ErrorTolerance=2.000000, achieved MaxDeviation symmetric=1.872 one-sided=1.640Static mesh transformer: LOD2 ScreenSize=0.142 (source: auto, ...)LOD가 너무 늦게 또는 일찍 나타나는 경우
PixelError(ErrorTolerance아님)를 변경합니다. 이렇게 하면 단순화 툴을 다시 실행하지 않고도 동일한 지오메트리를 다른 활성화 거리로 다시 매핑할 수 있습니다.달성된 편차가 예산보다 훨씬 작으면 트라이앵글 비율 상한이 바인딩됩니다.
MaxTrianglesFraction을 높여 대신 단순화 툴이 오류 예산을 따르도록 합니다.
화면 크기에서 타깃 오류 한계치 파생(Derive Target ErrorTolerance from ScreenSize)
LOD가 화면 지름의 대략적으로 설정된 비율(예: 30%)에서 활성화되어야 한다는 것을 알고 있고, 해당 타깃에서 오류 허용치를 계산하고 싶을 때 이 모드를 사용합니다.
다음을 작성합니다.
ScreenSize- LOD에 따라 단조 감소해야 합니다(예: LOD0 = 1.0, LOD1 = 0.5, LOD2 = 0.25, LOD3 = 0.1).PixelError- 위와 동일한 일관성 권장 사항이 적용됩니다.MinTrianglesFraction/MaxTrianglesFraction- 동일한 안전 장치 역할을 합니다.
엔진은 ScreenSize * PixelError * 바운드 반지름에서 ErrorTolerance를 도출하며, 이 필드는 회색으로 비활성화됩니다.
엣지 케이스 사례: ScreenSize를 0으로 두면 트랜스포머는 지오메트릭 디폴트 pow(0.75, LODIndex)(1.0, 0.75, 0.5625 등)로 예비 전환되므로 단순화 툴은 여전히 타깃을 갖게 됩니다. 그런 다음 동일한 예비 전환이 LOD의 활성화 화면 크기로 되돌리므로 LOD는 단순화된 크기에서 활성화됩니다. 즉, 슬롯을 비워두어도 정상적인 비헤이비어를 얻을 수 있지만 명시적인 값이 더 명확합니다.
화면 크기 기준 트라이앵글 수(TriangleCount from ScreenSize)
지오메트릭 오류 메트릭을 신뢰하지 않고 단순한 트라이앵글 예산 컨트롤을 원하는 경우 이 모드를 사용합니다.
다음을 작성합니다.
ScreenSize만 해당됩니다. 값은 유지된 트라이앵글의 비율로 재해석되며, [0, 1]로 범위제한됩니다. 예를 들어ScreenSize = 0.25는 트라이앵글의 25%를 유지합니다.
엔진은 오류 예산이 축소되지 않도록 ErrorTolerance = 0으로 설정하고, 유지가 바인딩 기준이 되도록MaxTrianglesFraction = ScreenSize로 설정합니다. PixelError는 사용되지 않습니다.
이 모드에서 ScreenSize는 단순화 툴의 유지 비율 타깃과 LOD의 활성화 화면 크기를 모두 제어하는 두 가지 용도로 사용됩니다. 이는 의도된 것입니다. 단순화 레벨은 LOD의 화면 공간에 따라 스케일 조절됩니다. 예를 들어 트라이앵글 10%로 화면 크기 0.3의 LOD2 활성화를 독립적으로 타기팅할 수 없다는 것을 의미합니다. 이를 위해서는 다른 모드를 선택하세요.
커스텀
모든 필드를 편집할 수 있습니다. 이 모드는 ErrorTolerance와 ScreenSize 간의 페어링을 해제해야 할 때만 사용합니다(예를 들어 달성된 편차를 따르지 않는 LOD 활성화 크기를 명시적으로 선택하면서 한 세트의 컨스트레인트에 대해 단순화 툴을 미세 조정하는 경우). 일반적인 경우에는 '커스텀'보다 자동 모드 중 하나를 사용하는 것이 좋습니다.
LOD 체인 작동(LOD 4개, 터레인 스타일 메시)
LOD0 — bReduceMesh = false (source geometry, ScreenSize defaults to 1.0), or use a conservative ErrorTolerance to get simplification in flat areas for free.
LOD1
Mode = Derive ScreenSize from Error
ErrorTolerance = 4.0
PixelError = 8
MaxTrianglesFraction = 0.5 // force at least 2× reduction
MinTrianglesFraction = 0.05
LOD2
LOD0은 소스입니다. LOD1 및 LOD2 오류 예산을 작성하고 활성화 화면 크기가 달성된 편차에서 벗어나도록 합니다. LOD3은 오류 메트릭을 조정할 가치가 없는 가장 작고 먼 거리의 LOD에 대해 저렴한 유지 전용 모드로 전환됩니다.
기타 필드
EdgeLength- 유지된 에지의 최대 에지 길이를 제한합니다. 이후 패스(라이팅, UV)에 최소 테셀레이션 밀도가 필요한 경우에 유용합니다.ScaleCorrection- 프롭-스케일 에셋의 경우 어트리뷰트 가중치는 디폴트로 설정됩니다. 이 스케일 조절 인수는 터레인의 더 큰 스케일을 고려하며, 그에 따라 어트리뷰트에 더 높은 가중치를 부여합니다. 어트리뷰트 아티팩트가 보이면 더 작은 스케일 메시 쪽으로 감소합니다.MeshRegularization- 작은 양수 값입니다. 평평한 영역에서 노이즈가 있는 병합이 발생하는 경우 값을 늘립니다.Simplification|Advanced가중치 - 특정 어트리뷰트(노멀, UV, 컬러, 웨이트 레이어)가 눈에 띄게 저하되지 않는 한 디폴트로 둡니다. 가중치는 어트리뷰트 인식 2차식을 리밸런싱합니다. 하나를 높이면 지오메트리를 희생하여 해당 어트리뷰트를 더 잘 보존할 수 있습니다.
결과 진단
모든 LOD는 빌드 후 LogMegaMeshEditor에 로깅됩니다. 예를 들어 다음과 같습니다.
LOD1 simplified: 240000 -> 60012 tris (25.0% retained), ErrorTolerance=1.000000, achieved MaxDeviation symmetric=0.974 one-sided=0.812LOD1 ScreenSize=0.512 (source: auto, calculated (from actual geometric deviation and PixelError): 0.512)Achieved MaxDeviation이ErrorTolerance보다 훨씬 작음 - 트라이앵글 비율 상한이 바인딩되었습니다.MaxTrianglesFraction을 높이거나MinTrianglesFraction을 낮춥니다.ErrorTolerance보다 훨씬 큰Achieved MaxDeviation-MaxTrianglesFraction이 예산을 초과하여 병합을 강제하고 있습니다. 수락하거나(명시적으로 트라이앵글 수를 제한한 경우)MaxTrianglesFraction을 늘립니다.대칭이 단방향보다 훨씬 큼 - 한쪽에서 피처가 완전히 제거되었습니다. 어트리뷰트 가중치를 확인하거나 LOD의 축소 강도를 낮춥니다.
auto를 예상한 상황에서 ScreenSize 로그에Source: manual이 표시됨 - 오래된ScreenSize가 설정되어 있고 모드가 이를 오버라이드하지 않습니다. 지우거나AutoScreenSizeFromError로 전환합니다.
메시 파티션 런타임 섹션 빌드하기
메시 파티션 정의 빌드 베리언트가 구성되면 '빌드' 메뉴/'메시 파티션 빌드(Build Mesh Partition)' 옵션에서 컴파일된 섹션을 수동으로 빌드할 수 있습니다.
메시 파티션 컴파일 섹션 표시하기
베이스 및 컴파일된 섹션은 아웃라이너에서 기본적으로 숨겨져 있습니다. 아웃라이너 필터 메뉴에서 표시할 수 있으며, 다음을 토글할 수 있습니다.
메시 파티션 베이스 표시(Show Mesh Partition Bases)
메시 파티션 빌드 섹션 표시(Show Build Mesh Partition Sections)
그런 다음 섹션은 메시 파티션 액터 아래에 표시됩니다.