강의 필기/3-1

<1> 디지털 텍스쳐 포맷

YujinK 2020. 4. 5. 07:39

1. 컴퓨터의 데이터


컴퓨터는 모든 정보를 0과 1의 이진법으로 처리합니다. 


예시)


<천공카드>

초창기 컴퓨터의 데이터 처리 매체, 천공카드는 구멍을 뚫음, 뚫지 않음으로 0과 1을 표시했습니다.


이러한 방식은 모니터의 화면 출력에도 동일하게 적용합니다.



2. Bit, 색상과 텍스쳐 포맷 


Bit는 컴퓨터의 데이터를 나타내는 단위입니다. 하나의 Bit는 0 혹은 1의 값을 가질 수 있죠. 



(1) 1 bit (2^1) : 0과1, 2개의 정보를 담을 수 있습니다.


예시)


<다마고치>

위 다마고치는 2가지 색 만으로 표현이 가능합니다. 

0=출력하지 않음(화면을 끈다), 1=출력함(화면을 킨다) 으로 다마고치 캐릭터를 그려낸 것입니다.



(2) 2 bit (2^2) : (0,0) (0,1) (1,0) (1,1) 총 4개의 정보를 담을 수 있습니다. 모니터를 통해 4가지의 색을 나타낼 수 있겠죠.



(3) 4 bit (2^4) : (0,0,0,0) (0,0,0,1) .......1픽셀에 4가지 컬러, 총 16개의 색상 정보를 담을 수 있습니다. 


- 팔레트(palette) : Indexed Color 


색상 정보를 저장합니다. 각 정보값에 색상을 할당하여 색상을 출력할 수 있게 합니다.


예시)


(0,0,0,0)에 0번 컬러 VOID 할당

(0,0,0,1)에 1번 컬러 GRAY 할당

(0,0,1,0)에 2번 컬러 WHITE 할당

.

.

.

(1,1,1,1)에 15번 컬러 CLOUDBLUE 할당



<16개의 색상 팔레트>


- 디더링 (Dithering) : 병치 혼합


적은 컬러로 풍부한 그래픽을 표현하기 위해 사용한 기법입니다. 사용할 수 있는 컬러가 제한된 시기에 적극적으로 활용되었습니다.


<디더링 기법을 사용한 프린세스 메이커1>


(4) 8bit (2^8) : 256가지의 색상을 표현할 수 있습니다. 


여전히 팔레트(인덱스 컬러)와 디더링 기법을 활용합니다. 


예시) 


<8bit, 256가지 컬러를 사용한 스타크래프트> 출처: 대마왕 교수님



(5) 16bit (2^16) : 65,536 가지의 색상을 표현할 수 있습니다. 표현할 수 있는 색상의 수가 매우 다양해지면서, 드디어 팔레트를 버리고 RGB(가산 혼합)의 개념이 등장합니다. 


R(Red) = 5Bit (2^5=32단계) / G(Green) = 6Bit (2^6=64단계) / B(Blue단계) = 5Bit(2^5=32)로 각 채널의 색상을 혼합하여 하나의 색을 표현합니다. (R5,G6,B5)

(여기서 G의 Bit수가 하나 더 많은 이유는 사람의 눈이 초록색에 가장 민감하게 반응하기 때문입니다. G의 범위를 넓힘으로써 더 자연스러운 색을 표현합니다)


<모니터에 빨강, 초록, 파란색의 형광등을 세워 각 색의 강도를 조절, 색을 표현합니다>



(6) 24bit (2^16) : 16,777,16 가지의 색상을 표현할 수 있습니다.  R8 =256, G8=256, B8=256으로, 한 채널 당 256가지의 색상을 나타냅니다. (R8 G8 B8)


포토샵에서는 기본적으로 24Bit를 사용합니다.  24Bit 이미지는 알파 채널을 포함하고 있지 않습니다.



(7) 32bit (2^32) : R8=256, G8=256, B8=256, A8=256 총 4,294,967,296의 색상을 표현할 수 있습니다. (R8 G8 B8 A8)


알파 채널이 포함되어 있습니다.



(8) 64bit (2^64) : R16, G16, B16, A16 으로 채널 당 16Bit를 가지고 있습니다. (채널 당 32Bit도 가능합니다!)


RAW파일, HDR, 인쇄용 원본, LightMap, HeightMap 과 같이 고급 정보가 필요한 곳에 사용합니다. 더욱 많은 정보를 포함, 깊고 자세한 색을 표현합니다. 


파일이 가지고 있는 정보값(컬러)을 하드웨어(모니터)가 따라가지 못했습니다. 최근 와서야 HDR TV의 등장으로 채널 당 16Bit를 출력할 수 있게 되었으나, 현재로썬 16Bit값을 가진 콘텐츠가 부족합니다.




3. 게임용 텍스쳐 포맷


(1) PC용 압축 포맷 DDS 


- DirectX ? : 마이크로소프트에서 제작한 윈도우용 멀티미디어 라이브러리 입니다. 이전에는(DOS시절) 사운드 카드, 마우스, 그래픽카드의 표준이 없어 개발에 어려움이 있었습니다. 

이러한 어려움은 새로운 운영체제인 windows, 그리고 Windows에 곧장 대응하는 DirextX가 등장하면서 해결한 것이죠.


마이크로소프트에서 개발한 것이기 때문에, Windows와 Xbox에서만 작동합니다. 


- 그래서 DDS는? 

DirectX 에 1:1로 대응하는 파일 포맷입니다. DirectX를 지원하는 비디오 카드에서 굉장히 빠르게 사용 가능합니다. 

2의 승수 사이즈만 지원합니다. 텍스쳐 사이즈를 반드시 2의 승수로 맞추어야 합니다. 

타 형식에 비해 손실대비 압축률이 높습니다. 

Mipmap과 CupeMap을 위한 기술이 포함되어 있습니다.


- DDS: DX1 ~ DX5

>DXT1 No Alpha : 알파가 없는 이미지에 사용합니다 (R4G4B4

>DXT1 1bit Alpha : A1R3G3B3. 알파는 단 1비트로 표현합니다. 각 채널의 비트수가 3으로, 비교적 퀄리티가 떨어집니다.

>DXT3 Explicit Alpha : A4R4G4B4, 알파 채널이 있는 이미지에 사용합니다.

>DXT5 Interpolated Alpha : A8R4G4B4 알파가 무려 8비트 입니다. 알파를 부드럽게 표현해야 할 경우 이 포맷을 채택합니다. 퀄리티가 가장 높습니다.


- BC(Block Compression) 포맷

pc에서만 주로 쓰이는 고급 포맷입니다. BC1~BC7까지 존재하며, BC1 혹은 BC3가 요즘 pc에서 주로 쓰입니다.




- 모바일용 AP (Application Processor, Cpu와 Gpu의 기능을 동시 수행합니다)

모바일 기기는 제조사마다 다른 칩셋을 가지고 있고, 각기 다른 특징을 가지고 있습니다.

국내에서 볼 수 있는 대표적인 칩셋은 다음과 같습니다.

Qualcomm "SnapDragon" / Samsung "Exynos" / Apple "A" / Nvidia "Tegra"



- 모바일용 / 안드로이드용 포맷


> 대표적인 모바일 AP (Application Processor, Cpu와 Gpu의 기능을 동시 수행합니다)


PowerVR  계열 (주로 애플 폰. 가끔 안드로이드에도 있습니다) : "PVRTC" 라는 파일 포맷을 이용합니다. 주의할 점..! 정사각형 텍스쳐만 지원합니다. 

퀄컴 Sanpdragon: "ATC" 라는 파일 포맷을 이용합니다.

Nvidia Tegra : "DXT" 파일 포맷을 이용합니다. 


이렇게 각 칩마다 파일 포맷이 다른 문제가 발생합니다. 이러한 문제점을 보완하기 위해 아래 내용과 같은 공통의 파일 포맷이 생겨납니다.


> ETC1 계열: 안드로이드 기기 전 칩에서 사용 가능합니다. 

- RGB만 존재하고 RGBA가 없습니다. 즉, 알파를 지원하지 않습니다.


> ETC2 계열: 안드로이드 기기 전 칩에서 사용 가능합니다. 

- 알파를 지원합니다. 

- OpenGL ES3.0 (2012년 8월 공개 / ios7.0부터 지원, 안드로이드는 4.3부터 지원) 이상에서만 지원합니다. (구형 기기 지원x, 해외 서비스 시 문제가 있을 수 있습니다.)


ETC1과 ETC2, 둘의 퀄리티 차이는 상당합니다. 현재 주로 쓰이는 포맷은 ETC2 입니다. (저사양 게임의 경우 ETC1을 사용하기도 합니다)


<ETC1과 ETC2의 품질 비교>


> ASTC 계열: 안드로이드 / IOS 전 칩에서 사용 가능합니다. 

- OpenGL ES3.2 (2015년 8월 공개) 이상 기기부터 제대로 지원합니다. 즉, 구형 기기는 지원하지 않습니다.

- 압축률 선택 가능합니다.

- 퀄리티가 가장 좋은 파일 포맷이지만, 범용성의 문제가 있습니다.


ETC와 ASTC의 퀄리티 차이 또한 상당합니다.


<ETC와 ASTC의 품질 비교>


> 안드로이드 텍스쳐 포맷 (비압축 포맷)

- 모든 기기에서 사용 가능합니다. RGB16Bit,24Bit / Alpha8Bit / RGBA16Bit,32Bit ...

- 완전 무압축 상태입니다. 사용한 텍스쳐 압축 포맷이 기기에서 지원하지 않을 경우, 자동으로 이 포맷으로 읽어들입니다. 즉, 메모리를 엄청나게 잡아먹게 되겠죠...! 파일 포맷을 반드시 신경써야 하는 이유.



출처

엔진 활용 1강 ppt

https://remonlab.tistory.com/10

https://www.slideshare.net/illustor/display-color-digital-texture-format

https://androidarts.com/palette/16pal.htm

https://hwanggoon.tistory.com/237

https://pineoc.blogspot.com/2017/05/opengl-es-20-30-1.html
https://ozlael.tistory.com/84