TECH.ART.FLOW.IO

[번역] 언리얼 엔진 4 (UE4)/UE5 의 밉 - 커스텀 텍스처 그룹 만들기

jplee 2024. 4. 28. 20:42

 

출판인

크리스 맥콜

https://twitter.com/_Sr_Real

 

X의 Chris McCole님(@_Sr_Real)

Indie dev in #Philly. Programmer on Howloween Hero, Sole, Easy Dialogue and more! UE4, Unity, GameDev Posts here: https://t.co/Np0reaSRbi

twitter.com

Mips (Mipmaps)

잘 모르시는 분들을 위해 설명하자면, 밉은 다양한 해상도의 텍스처 모음입니다. 텍스처 임포트 세팅 또는 텍스처 그룹이 밉을 생성하도록 설정되어 있으면 언리얼 엔진 4에서 자동으로 생성됩니다. 
밉맵의 목적은 멀리 떨어져 있는 오브젝트를 렌더링하는 수고를 줄이기 위한 것으로, 해당 오브젝트의 텍스처 데이터를 전체 4K(또는 전체 텍스처 해상도인 2k, 1k 등 어떤 해상도이든) 텍스처 크기로 렌더링할 필요는 없습니다. 
오브젝트가 멀리 떨어져 있으므로 더 낮은 해상도의 텍스처를 사용하여 렌더링 프로세스를 최적화할 수 있습니다.

밉매핑 예시 제공 : https://www.3dgep.com/learning-directx-12-4/

언리얼 에디터의 텍스처 뷰어 창에서 각 텍스처의 밉 레벨을 확인할 수 있습니다. 상단에서 밉 레벨 체크박스에 체크한 다음 원하는 밉 레벨을 선택할 수 있습니다.

 

Enabling/Disabling Mips

Never Stream ( 스트리밍 안함 )

밉 레벨 사용을 비활성화하는 한 가지 방법은 원하는 것보다 낮은 밉 레벨로 로드되는 에셋이 있는 경우 특히 유용합니다. 일반적인 해결책은 텍스처 임포트 설정의 LOD 섹션에서 '스트리밍 안 함' 토글을 선택하는 것입니다. 이렇게 하면 밉 레벨이 스트리밍되지 않으므로 항상 최대 레벨이 사용됩니다.

밉 생성 설정

일반적인 설정은 "텍스처 그룹에서"로 설정되어 있지만, 이를 재정의하려면 드롭다운 상자를 선택하고 "NoMipmaps"를 선택하기만 하면 됩니다.

 

밉맵 생성 설정

밉맵의 생성 세팅 대부분은 해당 애셋의 텍스처 그룹 안에서 처리됩니다. 이러한 세팅은 Config\DefaultDeviceProfiles.ini 파일 내 [/Script/Engine.TextureLODSettings] 헤더에서 확인할 수 있으며, 수정할 수 있습니다.

그룹 이름과 다음과 같은 가능한 속성을 볼 수 있습니다:

  • MinLODSize
    • 렌더링될 최소 밉 크기입니다(2의 거듭제곱, 1 - 8192 사이).
  • MaxLODSize
    • 렌더링될 최대 밉 크기입니다(2의 거듭제곱, 1~8192).
  • LODBias
    • 렌더링을 위해 업로드하기 전에 오프셋할 밉 레벨 수(음수 또는 양수)
  • MinMagFilter
    • 축소 또는 확대 시 텍스처 필터 유형
  • MipFilter
    • 거리 또는 각도에서 두 밉 레벨을 블렌딩할지 여부입니다.
  • NumStreamedMips
    • 최고 해상도에서 최저 해상도로 스트리밍할 수 있는 밉의 개수입니다. -1이면 모든 밉이 됩니다.
  • MipGenSettings
    • 밉을 계산하는 방법에 대한 생성 설정은 모두 임포트 설정의 밉 생성 설정에서 볼 수 있으며, 이 페이지의 열거형을 통해 설정할 수 있습니다.
 

나만의 텍스처 그룹 만들기

DefaultDeviceProfiles.ini 파일을 살펴보거나 임포트 설정의 텍스처 그룹 드롭다운 메뉴를 보면 원하는 대로 만들어 사용할 수 있는 15개의 커스텀 텍스처 그룹이 있다는 것을 알 수 있을 것입니다! 이러한 작동 방식을 정의하는 방법은 매우 간단합니다.

먼저 Config 폴더에 있는 DefaultDeviceProfiles.ini 파일을 열어야 합니다. 그런 다음 헤더가 다음과 같은 섹션으로 이동해야 합니다.

[/Script/Engine.TextureLODSettings]

그리고 라인을 찾아보세요 :

+TextureLODGroups=(Group=TEXTUREGROUP_Project01,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=4096,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=4096,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default)

이 줄에는 모든 옵션이 이미 채워져 있으며 위에 정의된 기본 텍스처 그룹에 제공된 것보다 많은 옵션이 추가되어 있습니다. 이러한 설정은 원하는 대로 변경할 수 있으며, 주요 관심 사항은 위의 밉맵 생성 설정 섹션에 표시된 설정입니다.

 

원하는 대로 설정한 후에는 텍스처 그룹을 더 쉽게 참조할 수 있도록 그룹에 이름을 지정해야 합니다. 그러기 위해서는 Config 폴더에 있는 DefaultEngine.ini 파일로 이동해야 합니다. 
안에 들어가면 [EnumRemap] 섹션을 찾고 찾을 수 없으면 간단히 생성하세요! 
생성한 후에는 TEXTUREGROUP_Project01.DisplayName을 원하는 이름으로 리매핑할 수 있습니다:

[EnumRemap]
TEXTUREGROUP_Project01.DisplayName=World Props

이제 엔진을 재시작하고 텍스처 그룹 세팅을 드롭다운하면 이제 월드 프롭을 텍스처 그룹으로 선택할 수 있고, DefaultDeviceProfiles.ini에서 그룹을 변경하면 해당 그룹의 모든 텍스처에 변경 사항이 반영됩니다!

 

 

최대 밉 레벨에서 오브젝트 강제 로드

가끔씩 시퀀스나 선택 화면에서 밉 레벨이 제대로 작동하지 않는 장면이 있을 수 있습니다. 에셋에 밉을 사용하지 않거나 밉을 스트리밍하지 않도록 설정할 수 있지만, 대부분의 게임에서 밉의 이점을 활용하고 싶을 것입니다. 어떻게 해야 하나요? 

언리얼에는 머티리얼 인스턴스에 대한 레퍼런스로 호출할 수 있는 블루프린트 노드가 있으며, 언리얼이 해당 에셋의 밉 레벨을 일시적으로 잊도록 수동으로 강제할 수 있습니다. 

이 블루프린트 노드를 호출합니다: 강제 밉 레벨을 레지던트로 설정합니다.

높은 수준의 밉 강제 적용.

이 노드에는 몇 가지 파라미터가 있지만, 최고 레벨 밉을 강제로 로드하려면 언리얼이 밉 로드 여부에 다른 요소를 고려하지 않도록 제가 선택한 두 개의 부울을 확인해야 합니다. 또한 사용 사례에 따라 더 길거나 짧은 기간을 원할 수도 있습니다. 제가 권장하지 않는 것은 '빠른 응답' 부울을 사용하는 것입니다. 언리얼에서는 사용하지 말라고 하므로 사용하지 않는 것이 좋습니다! 이 파라미터 위에 마우스를 가져가면 위험하고, 크래시를 일으킬 수 있으며, 스트리밍 계산을 어렵게 만든다고 언급하는데, 저는 크래시보다는 저해상도로 보는 편이 낫다고 생각합니다.


원문

https://www.chrismccole.com/blog/mips-in-unreal-engine-4-ue4

 

Mips in Unreal Engine 4 (UE4)/UE5 - Create Custom Texture Groups — Chris McCole

Learn how to change mips, use custom Texture Groups, and force objects to load at their highest resolution, max mip levels.

www.chrismccole.com