게임 텍스처를 게임 내에서 적절하게 렌더링하려면 특정한 요구 사항이 필요합니다. 포트나이트 언리얼 에디터(Unreal Editor for Fortnite, UEFN)에서 임포트된 이미지로 텍스처를 제작하는 경우, 소스 이미지 파일이 높이와 폭에 2의 거듭제곱인 수를 사용해야 합니다. 이를 통해 여러 플랫폼에서 섬의 호환성과 안정성을 향상할 수 있습니다.
그래픽 처리 장치(Graphics Processing Units, GPU)를 위한 압축 파일 포맷은 모든 콘솔, PC, 모바일에서 높이와 너비가 2의 거듭제곱인 텍스처를 사용해야 합니다. 2의 거듭제곱 규칙을 따르지 않는 텍스처는 저사양 플랫폼에서 안정성이 떨어지며, 게임 크래시를 유발할 수 있습니다. 2의 거듭제곱은 저메모리 플랫폼에서 낮은 텍스처 해상도로 텍스처를 스트리밍하는 경우에도 사용됩니다.
텍스처 스트리밍은 다음과 같은 경우 도움이 됩니다.
-
텍스처의 해상도를 변경하는 경우
-
게임 로드 속도를 결정하는 경우
-
게임의 비주얼 퀄리티를 높이려는 경우
-
GPU 메모리를 절약하려는 경우
2의 거듭제곱이란
컴퓨터와 콘솔은 모든 데이터를 한꺼번에 관리 및 처리하는 것이 아니라, 제한된 청크로 관리 및 처리합니다. 이러한 원리는 월드 파티션을 사용하여 배경이 렌더링되는 방식과 유사합니다.
게임 데이터의 청크가 2의 거듭제곱 규칙을 준수하는 경우, 데이터 청크는 미디어에서 하드코딩된 물리적 제한 사항을 설정합니다. 이러한 제한 사항을 준수하지 않으면 게임 엔진은 에셋을 적절하게 렌더링하려고 시도하는 과정에서 리소스를 낭비하게 됩니다.
2의 거듭제곱은 비주얼 경험을 효율적으로 표시하여 게임 데이터를 최적화하고 이미지를 렌더링하는 방법입니다.
허용되는 이미지 크기는 256x256, 512x512 또는 1024x2048 입니다. 2의 거듭제곱을 사용하지 않는 텍스처는 최적화되지 않으며, 불안정성과 섬 퍼포먼스 저하를 모두 초래합니다.
UEFN에서는 2의 거듭제곱 텍스처에 다음과 같은 3가지의 주요 기능을 사용할 수 있습니다.
-
텍스처 압축: 최소한의 비주얼 비용으로 메모리 크기를 약 8배 줄입니다.
-
밉매핑: 저해상도 베리언트가 자동으로 생성됩니다.
-
텍스처 스트리밍: 고해상도 데이터를 메모리에 스트리밍하기 전에 저해상도 베리언트를 먼저 표시합니다.
이러한 기능이 합쳐지면 어떤 플랫폼에서든 고사양 에셋도 4K 텍스처로 렌더링할 수 있습니다. 이는 텍스처가 낮아진 해상도에서 고퀄리티 베리언트를 보유하게 되기 때문입니다.
예를 들어, 알파 레이어가 없는 4000x4000 텍스처에는 64MB의 메모리가 필요합니다. 이러한 텍스처는 한꺼번에 로드되며, 플레이어와 멀리 떨어진 작은 게시판에서 에일리어싱 현상을 유발하더라도 계속해서 4000x4000으로 표시됩니다. 텍스처 크기가 너무 크면 메모리가 충분하지 않은 장치에서 크래시가 발생할 수 있습니다.
이에 대조적으로, 기본 압축을 사용하는 텍스처의 4096x4096 버전은 8MB밖에 소모하지 않으므로 계속해서 스트리밍할 수 있으며 원거리에서 더 적은 에일리어싱 현상을 유발합니다. 텍스처 크기가 너무 크면 패키지 크기도 증가하지만, 이는 게임플레이에서 크래시를 유발하지는 않습니다.
UEFN의 텍스처 크기 조절 요구 사항
모든 섬이 모든 타깃 플랫폼에서 제대로 작동하도록 UEFN에서는 텍스처 에셋에 특정 요구 사항을 적용합니다.
프로젝트에 이러한 요구 사항을 준수하지 않는 텍스처 에셋이 포함된 경우, 해당 텍스처는 유효성 검사에 실패하여 프로젝트 업로드가 차단됩니다.
-
텍스처가 UI 텍스처 그룹에 할당된 경우, 텍스처 치수의 최대 크기는 2048x2048 미만이어야 합니다. 하지만 텍스처 치수가 2의 거듭제곱일 필요는 없습니다. (UI 텍스처는 일반적으로 스트리밍되지 않으므로 항상 가능한 한 선명하게 표시됩니다.)
-
텍스처가 UI 텍스처 그룹에 할당되지 않은 경우, 텍스처 치수의 최대 크기는 4096x4096 미만이어야 합니다. 또한 최소 한계치(1024x1024, 즉 1048576)보다 더 많은 픽셀이 포함되어 있는 경우 스트리밍 가능해야 합니다. 이것이 의미하는 바는 다음과 같습니다.
-
각 텍스처의 치수는 2의 거듭제곱이어야 합니다(예: 256x256, 512x512, 1024x1024 등).
이미지의 각 치수가 2의 거듭제곱이기만 하다면 이미지가 정사각형일 필요는 없습니다. 예를 들면 256x512, 512x1024, 256x1024 등도 가능합니다.
-
-
스트리밍 안 함(Never Stream) 프로퍼티는 비활성화해야 합니다.
-
밉맵을 생성하도록 설정해야 합니다.
-
프로젝트 내 모든 비스트리밍 텍스처의 총 메모리 비용은 사전에 설정된 최대 예산 미만이어야 합니다. 프로젝트의 메모리 비용은 스트리밍 안 함 프로퍼티가 활성화된 모든 텍스처의 메모리 비용을 더해서 결정됩니다. 여기에는 다음이 포함됩니다.
-
치수가 2의 거듭제곱이 아니며, 패딩 및 크기 조절 프로퍼티를 사용하여 2의 거듭제곱으로 패딩되거나 늘어나지 않은 모든 텍스처. 스트리밍 안 함 프로퍼티는 이러한 텍스처에서 항상 자동으로 활성화됩니다.
-
스트리밍 안 함 프로퍼티를 수동으로 활성화한 다른 모든 텍스처.
-
모든 텍스처에는 예상되는 사용 사례를 나타내는 텍스처 그룹 세팅이 있습니다. 콘텐츠 브라우저에서 텍스처 에셋을 더블클릭하여 텍스처 에디터를 열어 이 그룹 및 위에 언급된 다른 텍스처 프로퍼티를 설정할 수 있습니다.
텍스처 크기 조절하기
UEFN에서는 치수가 균일하지 않거나 지나치게 크기가 큰 기존 임포트 텍스처를 2의 거듭제곱으로 스케일 조절할 수 있습니다. 사용할 수 없는 텍스처를 찾아 수정하려면 다음 단계를 따릅니다.
-
콘텐츠 드로어(Content Drawer) 또는 콘텐츠 브라우저(Content Browser) 를 열고, 좌측의 파일 트리 패널에서 FortniteGame 에 위치한 프로젝트의 루트 콘텐츠 폴더 를 선택합니다.
-
All 아래에서 이름이 YourProjectName Content 인 폴더를 찾습니다.
-
콘텐츠 드로어 상단의 검색창에
NeverStream==true&&TextureGroup!=UI
라고 입력합니다. 그러면 쿼리가 실행되어 영향을 받는 모든 에셋을 식별합니다.
필터링된 뷰에 표시되는 모든 에셋은 영향을 받은 에셋입니다. 수정하는 데 어느 정도의 시간이 소요되기는 하지만, 이를 통해 레벨의 퍼포먼스를 향상할 수 있습니다.
UI 그룹에 해당하지 않지만 영향을 받은 텍스처를 업데이트하는 방법은 두 가지입니다.
옵션 A 는 UEFN의 벌크 편집 기능으로 텍스처를 그룹화하여 한 번에 편집하는 것입니다. 올바른 종횡비로 패딩하여 텍스처를 자동으로 수정하는 가장 빠른 방법이지만, 이 패딩으로 인해 불필요한 메모리 사용이 발생할 수 있습니다.
옵션 B 는 시간이 조금 더 걸리지만, 영향을 받은 텍스처를 여러 개 해결해야 하는 경우 메모리 예산을 가장 잘 활용할 수 있습니다. 이 옵션을 사용하면 불필요한 패딩을 피하기 위해 텍스처를 편집하고 다시 업로드합니다.
옵션 A
-
콘텐츠 브라우저(Content Browser) 에서 검색창 옆 햄버거 메뉴 를 클릭하고 텍스처(Textures) 를 선택합니다. 모든 텍스처가 콘텐츠 브라우저에 분리됩니다.
-
세팅 아이콘을 클릭하고 열(Columns) 을 켭니다. 이제 모든 텍스처가 콘텐츠 브라우저의 열에 목록으로 나타납니다.
-
치수(Dimensions) 열에서 2의 거듭제곱 크기를 사용하지 않는 에셋을 찾습니다.
-
2의 거듭제곱 규칙을 따르지 않는 모든 텍스처를 선택합니다.
-
콘텐츠 브라우저 를 우클릭하고 에셋 액션(Asset Actions) > 프로퍼티 매트릭스에서 선택 편집(Edit Selection in Property Matrix) 을 선택합니다. 이렇게 하면 컴포넌트 에디터 탭에 선택된 모든 텍스처가 항목화된 벌크 에디터 툴이 열립니다.
-
루트(Root) 섹션에서 텍스처 파일 이름 을 모두 선택합니다.
-
고정된 열(Pinned Columns) 탭에서 텍스처(Texture) 옵션을 엽니다.
-
2의 거듭제곱 모드(Power Of Two Mode) 드롭다운 메뉴에서 2의 거듭제곱으로 패딩(Pad to Power Of Two) 을 선택합니다. 에디터 창 하단에 프로그레스 바가 나타납니다.
텍스처가 모두 2의 거듭제곱으로 변환되어 여러 플랫폼에서 작동할 수 있게 됩니다.
옵션 B
-
텍스처를 더블클릭하여 텍스처 에디터 를 엽니다.
-
디테일(Details) 패널 상단의 검색창에서 소스 파일 이름을 입력합니다. 검색 결과, 텍스처의 원본 소스 파일로 사용될 PC의 파일 경로가 표시됩니다.
-
GIMP나 Paint.NET 5 등의 이미지 에디터를 사용하여 텍스처 크기를 가장 가까운 2의 거듭제곱으로 조절합니다. 텍스처에 알파 레이어가 없는 경우 그림판도 사용 가능합니다.
-
2의 거듭제곱 크기에는 256, 512, 1024 등이 있습니다.
-
예를 들어 500x500 텍스처는 512x512, 600x256 텍스처는 512x256이 되어야 합니다.
-
종횡비를 변경하더라도 섬에 부정적인 영향을 미쳐서는 안 됩니다.
-
-
콘텐츠 브라우저 에서 텍스처를 우클릭하고 리임포트(Reimport) 를 선택합니다.
원본 텍스처 이미지가 파일에서 누락된 경우 다음을 수행합니다.
-
콘텐츠 브라우저 에서 텍스처를 클릭한 후 에셋 액션 > 익스포트(Export) 를 선택하여 새 사본을 얻습니다.
-
가장 가까운 2의 거듭제곱 크기로 텍스처 크기를 조절합니다. 그런 다음 콘텐츠 브라우저 에서 텍스처를 우클릭하고 새 파일로 리임포트(Reimport With New File) 를 선택합니다. 파일이 임포트되면 텍스처를 더블클릭하여 텍스처 에디터 를 엽니다.
-
디테일 패널의 검색창에 Never Stream 이라고 입력한 후 옵션을 False 로 설정합니다. False 로 설정할 수 없는 경우, 상단의 임포트됨(Imported) 사양에 이미지가 2의 거듭제곱 크기로 표시되는지 확인합니다.
-
디테일 패널에서 밉 생성 세팅(Mip Gen Settings) 옵션을 검색합니다. 그런 다음 드롭다운 메뉴의 텍스처 그룹에서(From Texture Group) 를 선택합니다.
-
디테일 패널에서 압축 세팅(Compression Settings) 옵션을 검색한 후 드롭다운 메뉴에서 디폴트(DXT1/5)(Default (DXT1/5)) 를 선택합니다.
이 단계를 완료한 후, 콘텐츠 브라우저 검색창에 NeverStream==true&&TextureGroup!=UI
를 다시 검색하여 제한된 텍스처가 성공적으로 제거되었는지 확인합니다. 업데이트된 에셋은 더 이상 표시되지 않습니다.
개별 텍스처 변경
2의 거듭제곱 규칙을 따르지 않는 텍스처가 1개뿐인 경우, 다음 방법을 사용합니다.
-
텍스처를 더블클릭하여 텍스처 에디터 를 엽니다.
-
디테일 패널의 검색창에 *Power of Two Mode 라고 입력합니다. 그런 다음 패딩 및 크기 조절(Padding and Resizing) 드롭다운 메뉴에서 정사각형으로 패딩(Pad to Square)** 을 선택합니다.
-
Never Stream 옵션을 찾아 False 로 설정합니다.
-
밉 생성 세팅(Mip Gen Settings) 옵션을 검색합니다. 그런 다음 드롭다운 메뉴에서 텍스처 그룹에서 를 선택합니다.
-
압축 세팅 옵션을 검색한 후, 드롭다운 메뉴에서 디폴트(DXT1/5) 를 선택합니다.
이 단계를 완료한 후, 콘텐츠 브라우저 검색창에 NeverStream==true&&TextureGroup!=UI
를 검색하여 제한된 텍스처가 성공적으로 제거되었는지 확인합니다. 업데이트된 에셋은 더 이상 목록에 표시되지 않습니다.
유효하지 않은 텍스처 찾기
위에 제시된 요구 사항을 준수하지 않는 텍스처 에셋은 콘텐츠 브라우저에 오류 아이콘으로 표시됩니다. 해당 에셋에 마우스 커서를 올리면 툴팁 상단에 특정 문제에 대한 자세한 내용이 표시됩니다.
유효하지 않은 텍스처 맞추기
외부 파일에서 임포트한 유효하지 않은 텍스처를 수정하는 가장 좋은 방법은 해당 텍스처를 만드는 데 사용한 원래의 애플리케이션에서 편집한 다음, 에셋을 리임포트하는 것입니다. 또한, 또 다른 전용 이미지 편집 애플리케이션을 사용하여 텍스처를 편집한 후 UEFN에 리임포트해도 됩니다.
각 이미지의 치수가 위에 명시된 최대 치수 미만이어야 합니다. UI용 이미지를 사용하고 있지 않는 경우 이미지의 너비와 높이를 모두 2의 거듭제곱으로 만듭니다. 이미지의 각 치수가 2의 거듭제곱이기만 하다면 이미지가 정사각형일 필요는 없습니다.
대안으로 UEFN에서는 텍스처 크기를 UEFN 요구 사항에 자동으로 맞추는 기본적인 방법을 제공합니다. 수동으로 퍼블리싱하려면 다음 단계를 따릅니다.
-
콘텐츠 브라우저 에서 하나 이상의 유효하지 않은 텍스처를 선택합니다.
-
텍스처 섬네일을 우클릭하고 컨텍스트 메뉴에서 텍스처 맞추기(Conform Texture) 를 선택합니다.
에디터는 유효성 검사 문제를 방지하기 위해 선택한 텍스처의 프로퍼티를 조정하려 시도하고, 출력 로그에 그 결과를 작성합니다.
이 작업은 다음과 같은 효과가 있습니다.
-
텍스처가 UI 텍스처 그룹에 속하며 텍스처 치수가 허용된 최대 크기보다 큰 경우, 텍스처의 압축(Compression) > 고급(Advanced) > 최대 텍스처 크기(Maximum Texture Size) 세팅이 런타임 시 로드 가능한 텍스처의 최대 해상도를 제한하도록 조정됩니다.
-
텍스처가 UI 텍스처 그룹에 속하지 않으며 텍스처 치수가 허용된 최대 크기보다 큰 경우, 텍스처의 최대 밉맵이 폐기되도록 텍스처의 LOD 바이어스(LOD Bias) 세팅이 조정됩니다. 이는 런타임 시 로드 가능한 텍스처의 최대 해상도를 효과적으로 제한합니다.
-
텍스처가 UI 텍스처 그룹에 속하지 않으며 텍스처 치수가 2의 거듭제곱이 아닌 경우, 텍스처의 패딩 및 크기 조절(Padding and Resizing) 세팅이 Stretch To Power of Two 로 설정됩니다.
-
텍스처가 UI 텍스처 그룹에 속하지 않는 경우 스트리밍 안 함 세팅이 비활성화됩니다.