본문 바로가기

Unity3D/shader_스터디

[쉐이더] 초보자가 알아보는 텍스쳐 포맷

내용 정리

 

텍스쳐 포맷

  • bit에 대해
  • 분류

게임 내 텍스쳐 포맷

  • PC용
  • 모바일용

1. 텍스쳐 포맷

 

1-1. bit란 무엇인가

데이터를 나타내는 최소 단위.

 

컴퓨터에서는 0과 1의 조합으로 0 또는 1이 하나의 비트가 된다. 

 

0과 1에 색상 정보가 직접 들어있는게 아니라

1bit로는 0(꺼짐), 1(켜짐)의 두 가지 상태로 표현함

 

 

1-2. 종류 분류

 

1bit

꺼짐과 켜짐으로 나타내 시각적으로 2가지 색을 표현할 수 있다.

전등과 비교하면 이해하기 쉬움

퐁, 스페이스인베이더

다양한 색을 표현하기 위해 위에 셀로판지를 붙였다고 한다. 

 

 

2bit

gray 칼라로 4단계를 나타낼 수 있어서 더 부드러운 명암 표현이 가능하다. 

슈퍼 마리오 랜드2

 

4bit

16색을 사용할 수 있게 되어 팔레트(Indexed Color)를 이용해 작업하게 되었다.

이 세상의 끝에서 사랑을 노래하는 소녀

색이 한정되어있기 때문에 빛과 명암을 주로 나타내는 색, 묘사 방식이 정해져 있는 것을 알 수 있다.

디더링을 이용해 부족한 색을 표현하거나 세밀한 묘사가 가능하다.

 

 

8bit

256색을 사용할 수 있게 되었다. 표현 범위가 더 늘어났으며 팔레트의 색 변경을 통한 팔레트 애니메이션도 이용되었다.

 

SFC판 드래곤퀘스트1
스타크래프트

사진 자료로 캐주얼과 실사를 가져와봤는데, 두 그래픽의 차이에는 개발 시기나 해상도도 관련이있을 것 같습니다.

 

 

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 알파값을 부드럽게 표현 해야하는 이미지 

DXT1/ DXT5

 

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쪽 이해에 더 도움이 됨. 

 

이어지는 색깔 놀이

sunsimu1018.tistory.com/3

 

'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