내용 정리
텍스쳐 포맷
- bit에 대해
- 분류
게임 내 텍스쳐 포맷
- PC용
- 모바일용
1. 텍스쳐 포맷
1-1. bit란 무엇인가
데이터를 나타내는 최소 단위.
컴퓨터에서는 0과 1의 조합으로 0 또는 1이 하나의 비트가 된다.
0과 1에 색상 정보가 직접 들어있는게 아니라
1bit로는 0(꺼짐), 1(켜짐)의 두 가지 상태로 표현함
1-2. 종류 분류
1bit
꺼짐과 켜짐으로 나타내 시각적으로 2가지 색을 표현할 수 있다.
전등과 비교하면 이해하기 쉬움
다양한 색을 표현하기 위해 위에 셀로판지를 붙였다고 한다.
2bit
gray 칼라로 4단계를 나타낼 수 있어서 더 부드러운 명암 표현이 가능하다.
4bit
16색을 사용할 수 있게 되어 팔레트(Indexed Color)를 이용해 작업하게 되었다.
색이 한정되어있기 때문에 빛과 명암을 주로 나타내는 색, 묘사 방식이 정해져 있는 것을 알 수 있다.
디더링을 이용해 부족한 색을 표현하거나 세밀한 묘사가 가능하다.
8bit
256색을 사용할 수 있게 되었다. 표현 범위가 더 늘어났으며 팔레트의 색 변경을 통한 팔레트 애니메이션도 이용되었다.
사진 자료로 캐주얼과 실사를 가져와봤는데, 두 그래픽의 차이에는 개발 시기나 해상도도 관련이있을 것 같습니다.
16bit
65,536색으로 RGB 서브픽셀의 가산 혼합 방식을 이용해 나타내기 시작했다.
RGB
16bit로는 각 색마다 R5 G6 B5 비율로 밝기 정도를 배분했다. 녹색이 더 많은 이유는 사람의 눈이 녹색에 더 민감하기 때문.
알파까지 포함하면 4-4-4-4로도 사용 가능하다. 그러나 알파는 더 잘 깨져 보이기 때문에 높은 비율로 배분해준다.
알파를 사용하지 않는 텍스쳐에 알파 채널까지 사용하면 필요없는 용량만 늘어나게된다.
아래 이미지의 위에서부터 RGBA/A/R/G/B
나같은 사람은 여전히 전등의 밝기 조절이라고 보면 이해하기 편하다. RGB도 흑백으로 보면 더 이해하기 쉽다.
24bit
16,777,216색. 위의 4-4-4-4 대신 알파에 더 많은 비중을 둔 5-6-5-8이나 8-8-8으로 사용된다.
32bit
4,294,967,296색... RGB32나 8-8-8-8으로 사용할 수 있다.
64bit
각 채널당 16bit 이상 배분할 수 있다. RAW, HDR 이미지로 사용된다.
게임에서는 하이트맵, 스카이박스에 사용되는 HDRI 이미지 등으로 흔하게 사용된다.
30bit는 RGB 각 10bit씩
2. 게임의 텍스쳐 포맷
유니티 내에서 알아서 변환해줘서 그동안 신경 안 쓰던 것들
블록식 압축 이용은 2의 승수 사이즈만 가능하다.
어차피 압축할 거 작업 시 파일은 TGA파일로 손실없이 저장하는게 좋음
2-1. PC용
DDS
Direct drew surface의 약자. Nvidia에서 개발된 포맷 방식.
DXT는 DirectX Texture의 약자.
손실대비 압축률이 좋고, 호환성도 좋아 대부분의 게임에서 사용.
DXT1 | (4R4G4B) | No Alpha | 알파 값이 없는 이미지 |
DXT1 | (1A3R3G3B) | 1bit Alpha | 1bit로 간단하게 알파값이 들어가는 이미지(444보다 질이 떨어짐) |
DXT3 | (4A4R4G4B) | Explicit Alpha | 알파 채널이 들어가는 이미지 |
DXT5 | (8A4R4G4B) | Interpolated Alpha | 알파값을 부드럽게 표현 해야하는 이미지 |
BC(Block Compression)
PC에서만 주로 쓰이는 고급 포맷. 블록식 압축 방식
BC1 | RGB,ARGB(5-6-5,1bit Alpha) | Direct3D 9.1 |
BC2 | ARGB(5-6-5, 4bit Alpha) | Direct3D 9.1 |
BC3 | ARGB(5-6-5, 8bit Alpha) | Direct3D 9.1 |
BC4 | 1채널 (8bit) | Direct3D 10 |
BC5 | 2채널 (8-8) | Direct3D 10 |
BC6H | HDR RBG(16-16-16) | Direct3D 11 |
BC7 | RGB,ARGB(채널당 4~7, 0~8bit Alpha) | Direct3D 11 |
2-2. 모바일용
안드로이드 텍스쳐 포맷
압축포맷
- ETC계열
- 안드로이드 기기 전 칩에서 사용 가능 (RGB만 존재)
- ETC계열2
- 안드로이드 기기 전 칩에서 사용 가능 (OpenGL ES3.0 이상에서만 지원)
- ASTC 계열
- 안드로이드 기기, IOS전 칩에서 사용 가능 (OpenGL ES3.2 이상부터 제대로 지원)
- PowerVR계열
- 주로 애플, 가끔 안드로이드
- 퀄컴 스냅드래곤 -ATC
- Nvidia Tagar 칩- DXT
비압축포맷
- RGB16bit
- RGB24bit
- Alpha8bit
- RGBA12bit
- RGBA32bit
모든 기기에서 사용가능
비압축은 주로 보이게 될 UI에만 사용해야 할 듯
IOS 텍스쳐 포맷
압축포맷
- PowerVR계열
- A 시리즈
- PVRTC 계열
- ETC계열2
- 안드로이드 기기 전 칩에서 사용 가능 (모든 Metal, OpenGL ES3.0 이상에서만 지원)
- ASTC 계열
- 안드로이드 기기, IOS전 칩에서 사용 가능 (모든 Metal, OpenGL ES3.2 이상부터 제대로 지원)
비압축포맷
- RGB16bit
- RGB24bit
- Alpha8bit
- RGBA12bit
- RGBA32bit
후기
머리가 빙글뱅글 돌아가서 정리하는데 한참 걸렸다. 아래 링크의 색깔 놀이도 하고 오니까 RGB쪽 이해에 더 도움이 됨.
이어지는 색깔 놀이
'Unity3D > shader_스터디' 카테고리의 다른 글
[Unity 쉐이더] properties 추가 (2) | 2021.03.06 |
---|---|
[쉐이더] 버텍스 컬러 활용 (0) | 2021.02.12 |
[쉐이더]UV와 UV 애니메이션 (0) | 2021.01.30 |
[쉐이더]색깔 놀이2_Lerp (0) | 2021.01.23 |
[쉐이더] Float과 색깔 놀이 (0) | 2021.01.16 |