언어:
페이지 정보
태그:
엔진 버전:
언리얼 엔진

텍스처 스트리밍 데이터 빌드

언리얼 엔진

4.15 부터 머티리얼 또는 머티리얼 인스턴스를 변경하여 다시 저장할 때마다, 사용된 각 텍스처에 관련된 텍스처 스트리밍 데이터를 재계산합니다. 텍스처 별 데이터에는 UV Channel Index (UV 채널 인덱스) 및 Scale (스케일)이 포함되는데, UV 채널 인덱스는 텍스처를 샘플링하는 데, 스케일은 샘플링 전 채널에 적용하는 배수로 사용됩니다.

그러나 이는 모든 경우에 해당하지 않는데, 샘플링은 월드 포지션, 메시 버텍스 컬러, 또는 다른 UV 채널 조합에 따라 달라질 수 있기 때문입니다. 이로 인해 분석 시 관련 데이터를 찾지 못하게 되고, 엔진에서는 종속성이 UV 채널 0 과 스케일 1 이라 가정합니다.

분석은 여러 단계에서 실행되며, 편집중인 것에 따라 달라집니다:

  1. 머티리얼: 사용자가 변경사항을 적용 또는 저장하면 실행됩니다.

  2. 머티리얼 인스턴스: 머티리얼 인스턴스 에디터를 닫거나, 머티리얼 인스턴스가 들어있는 패키지를 저장하면 실행됩니다.

  3. 레벨: 사용자가 "텍스처 스트리밍 빌드" 명령을 내리면 사용된 모든 머티리얼에 대해 실행됩니다. 모든 머티리얼의 최신 상태를 유지하기 위해서입니다. 머티리얼 최신 상태가 유지되지 않는 이유는 다음과 같습니다:

    • 4.15 이전의 머티리얼에 아무 데이터가 없을 때.

    • 머티리얼 부모가 변경되었는데 인스턴스 데이터가 구버전일 때.

    • 지난 번 머티리얼을 저장한 이후 개선사항이 있었을 때.

    • 버그 픽스가 있을 때.

주어진 프리미티브 컴포넌트에 대해서, 사용되는 각 텍스처의 필요 해상도를 정확히 계산하는 데 필요한 데이터는 다음과 같습니다:

  • 프리미티브의 바운드

  • 메시의 텍스처 좌표 크기

  • 각 텍스처 샘플링을 위한 머티리얼 텍스처 좌표 스케일

이 정보가 없으면, 보수적인 휴리스틱 기법이 사용됩니다.

텍스처 스트리밍 데이터를 빌드하려면:

  1. 툴바빌드 버튼 옆 드롭다운 화살표를 클릭합니다.

  2. 텍스처 스트리밍 빌드

    BuildTextureStreaming.png

    실행시간에 사용될 컴포넌트와 레벨 데이터를 생성합니다.

    BuildingTextureStreaming.png

참고로 이렇게 하면 최고의 퀄리티 레벨과 지원되는 피처 레벨을 사용하여 모든 머티리얼 퀄리티 레벨과 플랫폼 피처 레벨에 사용되는 데이터를 생성합니다.

실행시간에, 컴포넌트가 빌드 프로세스에 사용된 것보다 적은 수의 텍스처를 사용하는 경우, 사용되지 않는 것은 무시됩니다.

Migrating Streaming Data to 4.15

Because any materials edited before 4.15 did not have any texture streaming data stored with the material, it won't have any data until they are modified and resaved. This includes resaving the child instances of a material as well. To migrate the data quickly, you can use the console command BuildMaterialTextureStreamingData.

This will parse all materials currently loaded in memory and generate any missing data. Updated materials will then be marked for resaving.

Inspecting The Material Data

The data that is built can be inspected in the Material Texture Scales viewmode. This viewmode will only show what has been computed successfully and any fallback cases will be shown as undefined. This viewmode shows the accuracy of the material scales and is used to validate changes in the analysis. It also identifies possible culprits when there are quality issues related to texture streaming.

To inspect the material texture streaming data, you can either select a Material from the Content Browser, or select primitives in the scene view. The Texture tab in the main viewport shows where the selection comes from by adding "(Scene Selection)" or "(Content Browser)" to the end of the tab's label.

When using Scene Selection the individual materials can not be selected and the UI will group data from all materials.

NoSelection.png

ContentBrowser.png

SceneSelection.png

Nothing Selected

Material from Content Browser

Scene Selected Actor

Scene Selection

When using Scene Selection, the individual materials cannot be selected and the UI will group data from all materials. When you hover over one of the texture selections from the dropdown you can see in the tooltip all the listed textures.

SingleSelection.png

MultipleSelection.png

Single Object Scene Selection

Multiple Object Scene Selection

Content Browser Selection

When using the Content Browser selection, the textures are identified by their texture index, the material name (if several Materials are selected), and the texture name. The texture index is an identifier within each material. The displayed accuracy is computed by comparing the GPU value used, with the value computed in the material analysis. in the material analysis.

CB_SingleSelection.png

CB_MultipleSelection.png

Single Material Content Browser Selection

Multiple Material Content Browser Selection

All Textures Mode

In the All Textures mode, the worst cases are shown from all used textures. If the global value is accurate (light gray), then all textures have accurate values. Unfortunately, there is a limitation in this mode; whereas if the same texture is sampled several times with different scales, this will usually show up as over streaming. This is due to the fact that only the scale requiring the most resolution is used, and the scale requiring less resolution gets ignored in the analysis. This limitation doesn't apply in the per-texture view.

빌드 정확도

텍스처 스트리밍 빌드 도중 계산되는 데이터 정확도는 텍스처 스트리밍 정확도 뷰 모드를 살펴보는 것으로 조사할 수 있습니다:

ShowTextureStreamingAccuracies.png

이 뷰 모드에는 다양하게 빌드된 데이터의 정확도가 표시됩니다. 정확도 결과가 너무 낮거나(빨강) 높으면(초록), 가끔은 수동 환경설정 변경 을 통해 데이터를 고치는 것이 가능합니다. 텍스처 스트리밍 빌드는 직접 미세 조정할 필요 없이 최적의 데이터를 생성하는 데 목표를 맞추고 있습니다.

OriginalTextureScene.png

위 그림은 아래 표시된 텍스처 데이터를 빌드하는 데 사용되는 씬을 나타냅니다. 모든 뷰 모드에서 사용되는 범례는 다음과 같습니다:

  • 빨강: 밉 2 배 이상 부족

  • 노랑: 밉 1 개 부족

  • 데이터: 데이터 좋음

  • 청록: 밉 1 개 많음

  • 초록: 밉 2 배 이상 많음

프리미티브 거리 정확도

실제 GPU 거리에 비교해서 스트리머가 계산한 뷰 메시 거리의 정확도를 표시합니다. 스트리머는 시점에서 텍스처 인스턴스 AABB (축 평형 바운딩 박스)까지의 거리를 계산합니다. 이 바운딩 박스는 빌드 프로세스에서 텍스처를 사용하고 있는 컴포넌트 LOD 섹션 AABB 를 더하는 식으로 계산합니다.

시점이 이 AABB 에 매우 가까워지거나 들어서면, 지오메트리가 AABB 에 맞지 않고서는 이 모드에선 항상 2 배 이상인 것으로 표시됩니다. 스트리머 계산 거리는 제로 값이 되는 반면, GPU 거리는 보통 제로 값이 아니기 때문입니다. 그러므로 스트리머 계산 거리와 GPU 거리 사이 비율이 매우 커집니다. 이는 오류가 아니며, 현재 고치려 할 필요가 없습니다.

PrimitiveDistanceAccuracy.png

여기 표시되는 값은 메시 컴포넌트의 Streaming Distance Multiplier (스트리밍 거리 배수)를 변경하는 것으로 조절할 수 있습니다.

StreamingDistanceMultiplier.png

메시 UV 밀도 정확도

이 뷰 모드에는 실제 GPU 값에 비교해서 스트리머가 사용하는 메시 월드 텍스처 좌표(texcoord) 크기의 정확도가 표시됩니다. 이 크기는 월드 스페이스 유닛 단위의 텍스처좌표 베리에이션에 관계가 있습니다. 이는 스트리머가 텍스처의 샘플링에 텍스처좌표가 끼치는 영향력을 평가하는 데 사용됩니다.

UVDensities.png

이 뷰모드는 비교적 시점과 무관하며, 메시에 잘못된 값이 있으면 보통 씬 보다는 메시에 관계된 경우가 많습니다. 즉 메시에 틀린 데이터가 있으면, 그 메시를 사용하는 컴포넌트는 아마 잘못된 데이터가 있을 것입니다. 이 값은 스태틱 메시나 스켈레탈 메시 에디터에서 StreamingDistanceMultiplier (스트리밍 거리 배수) 값을 조정하여 적당한 범위로 조정할 수 있습니다.

머티리얼 텍스처 스케일 정확도

머티리얼에 사용되는 대부분의 텍스처는 Mesh UV Densities (메시 UV 밀도) 중 하나에 스케일을 적용한 값을 사용하여 샘플링됩니다. 텍스처 스트리밍 빌드는 각각의 샘플링된 텍스처에 어떤 스케일과 어느 텍스처 좌표가 사용되었는지 계산을 시도합니다. 이는 여러가지 이유로 실패할 수 있는데, 이 경우 스트리머는 예비로 텍스처좌표 0 과 스케일 1 로 텍스처가 샘플링되었다 가정합니다.

MaterialTexture.png

표준 범례에 추가로, 검정 하양 체크무늬는 빌드가 어떤 이유로 필요한 셰이더를 생성하지 못했음을 나타냅니다. 또한 머티리얼이 샘플링하는 텍스처는 다수이므로, 이 뷰모드에는 모든 샘플링된 텍스처 중 최악의 오차가 표시됩니다. 그 두 개의 (언더 스트리밍 및 오버 스트리밍) 극값은 체크무늬 모양으로 표시되는데, 하나는 최악의 오버샘플링, 다른 하나는 최악의 언더샘플링입니다.

텍스처별 개별 오차는 r.Streaming.AnalysisIndex X 콘솔 명령으로 조사할 수 있는데, X 는 0 에서 31 사이의 값입니다.

필수 텍스처 해상도

이 뷰모드에서는, 현재 스트리밍된 텍스처 해상도와 필수 텍스처 해상도 사이의 관계를 표시할 수 있습니다.

RequiredTextureRes.png

이 뷰모드에는 머티리얼 텍스처 스케일과 몇 가지 유사성이 있으나, 텍스처 스트리밍 데이터 정확도를 표시하기 보다는, 절대적인 방식으로 현재 로드된 텍스처 해상도의 유용성을 표시합니다.

한 텍스처에 대해 일정 시점에서 로드된 해상도는 로직과 척도의 조합으로 결정됩니다. 예를 들어 텍스처를 로드할 공간이 충분치 않아서 해상도가 없을 수도 있고, 텍스처 풀에 앞으로 사용될 것이라는 기대에 상위 밉이 캐시되어 있어서 해상도가 없을 수도 있습니다. 또한, 스트리머는 보통 최고 해상도를 요하는 컴포넌트에 의해 구동되므로, 한 컴포넌트의 텍스처 작동방식을 조사하는 것은 그 컴포넌트가 그 해상도를 구동시킬 경우에만 의미가 있는 것입니다.

이 모든 이유로, 이 뷰모드는 제어된 환경의 텍스처 스트리머 작동방식을 조사할 때 사용하는 것이 좋습니다. 유용한 구성을 위한 설정은 다음과 같습니다:

r.Streaming.DropMips 2

이렇게 하면 스트리머가 보이는 밉만 유지하여, 캐시나 프리페치(미리 가져오기)를 끄도록 합니다. 카메라를 움직여 보면 스트리머가 제 때 올바른 밉을 로드/언로드하는 것이 보일 것입니다.

참고로 텍스처 선택 메뉴에 보면 선택된 컴포넌트 머티리얼에 선택된 텍스처가 32 개 미만인 경우 텍스처 별 선택이 제공됩니다. 이런 식으로 텍스처를 선택하면, 그것을 사용하는 모든 씬 컴포넌트에 표시됩니다.

RequiredRes_TextureSelection.png

한계 & 알려진 문제

  • 분석에 모든 머티리얼이 지원되지 않습니다. 현재 데칼 및 랜드스케이프 머티리얼은 지원되지 않습니다. 엔진에서 분성에 사용되는 셰이더 생성에 실패하는 경우도 있습니다. 이 경우, 프리미티브는 균일한 진회색으로 보입니다. log TextureStreamingBuild level all 명령으로 모든 문제의 자세한 로그를 켤 수 있습니다.

  • 머티리얼 인스턴스에 폐기된 데이터가 있을 수 있습니다. 그 부모를 변경하고 다시 저장했는데 자손 인스턴스는 다시 저장하지 않은 경우입니다. 왜냐하면 텍스처 스트리밍 데이터는 머티리얼에 저장되는데, 부모 머티리얼을 변경해도 자손 머티리얼 인스턴스가 자동으로 다시 저장되지는 않기 때문입니다.

  • 런타임에, 엔진은 텍스처 이름으로 머티리얼 스트리밍 데이터에 접근합니다. 런타임에 애셋 하드 레퍼런스를 방지하면서 퍼포먼스도 높이기 위해서입니다. 즉 하나의 머티리얼에 이름이 같은 다수의 텍스처를 사용하는 경우, 양쪽 데이터에서 오는 필수 해상도는 양쪽 텍스처에 적용된다는 뜻입니다.

  • 머티리얼 텍스처 스케일 뷰모드에 사용되는 셰이더는 지속성이 없으므로, 셰이더 컴파일이나 맵 로드와 같은 특정 작업을 하는 경우 없어지거나 삭제될 수 있습니다. 뷰모드를 다시 선택하면 없어진 셰이더가 재생성됩니다.

태그