<Types of Texture Files>
-Source File : psd, ai 등의 원본 파일을 말함. Uncompressed.
-Raw Textures : Source file의 여러 레이어나 마스 등을 하나로 flatten하여 하나의 이미지로 만든 것들이다. 주로 TGA나 PNG 형식을 쓰는데 이것들을 작지만 고퀄리티고 RGBA 채널도 있기 때문임. 그러나 소스파일보다는 작지만 압축되진 않음. 만약 adjust하고 싶으면 Raw를 건드리지 말고 Source 파일에서 수정해서 다시 export하기!
-In-Game Texture : Raw를 게임 엔진으로 import하면 DDS(Direct Draw Surface / DirecX에서 쓰임. Window나 Xbox) 파일로 자동 변환된다. GPU에서 씀. Raw을 압축함.
-Source File이나 Raw Texture의 크기는 전혀 상관없다. 이것들을 게임엔진에서 이용되지 않는 것들임! 최적화를 하고 싶으면 DDS 파일의 크기만 확인해주면 됌. tga나 png의 크기는 전혀 상관없는 것
-언리얼에서 In-Game Texture (DDS 등)의 크기 확인하는 법 : 콘텐츠 브라우저에서 그냥 텍스처파일 더블클릭해서 열어보면 디테일 창에 Resource Size가 있음. 이게 진짜 게임에서의 텍스처 사이즈임.
<Texture Compression>
*Compression Type
-DXT1 → RGBA로 갈수록 압축이 안된 것
-DXT1 : Support 3 Channels
-DXT5 : Support 4 Channels
-BC7 : Support 3 OR 4 Channels
-R (1채널), RGB(3채널), RGBA(4채널)는 Uncompressed Texture Format
-Table에 있는 숫자는 KB임 (1,000KB = 1MB)
-Dropping 1 resolution의 의미는 4096 → 2048과 같은 의미. 이게 메모리를 4배 줄여준다는 것.
-압축되지 않은 R, RGB, RGBA 텍스처들은 4k보다는 낮은 화질의 텍스처를 이용해야 할 필요가 있다. 512x512 추천
-알파 채널을 추가하게 되면 메모리가 거의 2배가 된다. Table에서 1024x1024의 DXT1(3채널)와 DXT5(4채널)의 메모리를 비교해보면 알 수 있다
-그냥 텍스처 더블클릭해서 열면 나오는 창
-Compression 탭에 Maximun Texture Size가 기본으로 0으로 되어있음
-얘를 2048 등으로 바꾸면 위에 Resource Size가 줄어드는 것을 볼 수 있음. 그리고 Imported는 임포트 된 사이즈이고 Displayed가 2048로 줄어든 것을 확인할 수 있다.
-만약 Alpha 채널을 사용하지 않는데 DXT5(4)로 되어있다면 Compress Without Alpha 버튼에 체크하여 DXT1으로 변경 것을 확인할 수 있다.
-Compression Settings에서 RGBA, DXT1/5 등 여러 가지로 바꿀 수 있다. 만약 Uncompressed 버전을 이용하고 싶어서 UserInterface2D(RGBA)로 바꾸면 Format : B8G8R8A8 라고 되어있음. 이건 4개의 각 채널 당 8비트를 사용한다는 의미
-채널을 1개만 쓰고 싶으면 Grayscale로 (Format : G8). 그러나 얘는 compressed되진 않음.
-sRGB : Base Color나 Albedo같은 Color 텍스처의 경우 sRGB를 켜줘야 함. sRGB가 Gamma Correction임. 그리고 나머지는 거의 sRGB를 꺼줘야 함.
-Roughess나 AO, Specular같이 1채널만 이용하는 흑백 이미지는 Compression Settings에서 Masks(no sRGB) 추천. 만약 많이 깨진다면 Grayscale로
-만약 RGBA에 각각 AO, Roughess, Metalic, Specular이 들어있는 텍스처의 경우 자동으로 DXT5로 해놓음 +sRGB 체크 꺼짐
-NormalMap의 경우 Compression Settings에 특별히 NormalMap(BC5)이 따로 있다
<Maps>
*Mipmaps
-게임 엔진은 텍스처를 import할 때 DDS를 생성하는 것 외에도 다른 한가지 일을 더 한다. Mip Maps을 만든다.
-Mip Maps : series of progressively smaller version of texture. 각 텍스처들의 크기는 이전 버전의 보다 가로세로 2배씩 줄어든다. 그리고 이것 모두가 원본 텍스처와 함께 하나의 파일로 저장된다. Mipmap은 임포트할 때 자동으로 생성된다.
-만약 셰이더가 sample of texture을 물어볼 때 graphic hardware는 텍스처가 스크린에서 얼마나 큰지, 폴리곤과 카메라 사이의 각도는 어떤지 등의 요소들을 포함해서 어떤 버전의 mip level을 샘플한건지 정한다. 예를 들어 텍스처가 사진에서 첫번째 가장 큰 이미지정도의 크기라면, 그래픽 하드웨어는 the highest level mipmap을 샘플할것임.
-Mip map이 없다면 texture sampler는 항상 가장 큰 버전의 텍스처를 샘플해야함. 스크린에서 작게 보인다던지 스크린에서 텍스처가 필요 이상으로 멀어질 때도 가장 큰 텍스처 이용하기 때문에, texture pixels > screen pixels가 되어버림. 이렇게 되면 pixel이 빛나고 자글자글하게 될 것임.
-게임 엔진은 mipmap을 grapics memory에서 필요에 따라 dynamically load and unload할 수 있다. 게임하다 보면 처음에는 blurry하게 보이다가 시간이 조금 지나면 선명해지는 이유가 이것 때문인 것. 처음에는 lower resolution의 mipmap을 로드하다가 higher resolution으로 바꾼 건데 이게 느려서 그런 것임.
-Mip map은 텍스처 필터링과 엔진의 텍스처 메모리 관리에 중요하기 때문에 텍스처는 mipmap을 가지고 있어야 함. 그러나 이건 엔진에서 자동으로 실행된다!
'Shader' 카테고리의 다른 글
커널(Kernal)과 컨볼루션(Convolution) (0) | 2024.01.05 |
---|---|
툰셰이더 외곽선 만들기 - Depth Edge Detection, Normal Edge Detection 이용 + 라플라시안 필터 (0) | 2023.09.22 |
Tone Mapping과 Temporal Anti-Aliasing (0) | 2023.09.22 |
Scene Depth와 Custom Depth (0) | 2023.09.22 |
[Shader Graph Basics] Dot Product Node (Episode 7) (1) | 2023.08.09 |