๐ŸŽฎ Unity Study/Unity

[Unity] Texture Compression ๋ฐฉ์‹

ibelieveinme 2023. 4. 13. 13:48
728x90

* Texture ์••์ถ•์ด ํ•„์š”ํ•œ ์ด์œ ?

GPU ์—์„  1Pixel ๋‹น 32Bit ๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.

 

ํ”ํžˆ ์••์ถ•๋ฐฉ์‹์œผ๋กœ PNG๋‚˜ JPG๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š”๋ฐ PNG ๋‚˜ JPG ์ด๋ฏธ์ง€ 1MB ์งœ๋ฆฌ๋ฅผ GPU์— ์˜ฌ๋ฆฌ๋ฉด 32 Bit ๋ผ์„œ 4MB ๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.

-> 4๋ฐฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ.

 

PNG ๋‚˜ JPG ๋Š” ๋””์Šคํฌ ์ €์žฅ๊ณต๊ฐ„์„ ์•„๋ผ๊ธฐ ์œ„ํ•œ ์••์ถ•๋ฐฉ์‹์ด์ง€ GPU ๊ณต๊ฐ„์„ ์•„๋ผ๊ธฐ ์œ„ํ•œ ์••์ถ•๋ฐฉ์‹์ด ์•„๋‹ˆ๋‹ค. GPU ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์••์ถ•๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ GPU ์‚ฌ์šฉ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ๋‹ค.

 

์ฆ‰, ๋น ๋ฅธ ๋””์ฝ”๋”ฉ, ๋žœ๋ค ์•ก์„ธ์Šค, ์ธ์ฝ”๋”ฉ ์ƒํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌ, ์‚ฌ์ด์ฆˆ ์ ˆ์•ฝ(๋ฉ”๋ชจ๋ฆฌ, ์ €์žฅ์žฅ์น˜) ๋“ฑ์„ ์œ„ํ•ด GPU๋ฅผ ์œ„ํ•œ Texture Compression์ด ํ•„์š”ํ•˜๋‹ค.

 

* ๊ฐ€๋ณ€ ๋น„์œจ ์••์ถ• vs ๊ณ ์ • ๋น„์œจ ์••์ถ•

1. ๊ฐ€๋ณ€ ๋น„์œจ ์ธ์ฝ”๋”ฉ //์••์ถ•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€ ๋น„์œจ์ด๋‹ค.

1) RLE(Run-Length Encoding, ์‹คํ–‰ ๊ธธ์ด ์ธ์ฝ”๋”ฉ)

AAAABBBBCCCDDAAAAFFF (20๊ธธ์ด์˜ ๋ฌธ์ž๋ฅผ)

-> 4A4B3C2D4A3F (12๊ธธ์ด๋กœ ์••์ถ•)

 

2. ๊ณ ์ • ๋น„์œจ ์ธ์ฝ”๋”ฉ //Texture์—์„œ๋Š” ๊ณ ์ • ๋น„์œจ ์ธ์ฝ”๋”ฉ์ด ํ•„์š”ํ•˜๋‹ค.

๋žœ๋ค ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด 4:1 8:1 16:1 ๋“ฑ ๊ณ ์ • ๋น„์œจ ์••์ถ•

1) DXT(DirectX Texture): ๋ธ”๋Ÿญ ๊ธฐ๋ฐ˜ ์••์ถ• ๋ฐฉ๋ฒ•

ํ•œ ์žฅ์˜ ์‚ฌ์ง„์„ 4x4 ํ”ฝ์…€๋กœ ๋‚˜๋ˆ”

์ด ์ค‘์— ๋ˆˆ์ชฝ ๋ธ”๋Ÿญ ํ•˜๋‚˜์—์„œ Key Color 2๊ฐœ ๊ฒ€์€์ƒ‰, ๋นจ๊ฐ„์ƒ‰์„ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.

์ด Key Color 2๊ฐœ๋ฅผ ์„ž์„ ๋•Œ DxT1(64 ๋น„ํŠธ)์‚ฌ์šฉ.

DXT1์€ 64 ๋น„ํŠธ๋ฅผ 4x4๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 64 / 4x4 = 4bit (ํ•œ ํ”ฝ์…€ ์‚ฌ์šฉ์— 4bit ๋ฐ–์— ์‚ฌ์šฉ ์•ˆํ•จ)

=> Key Color 2๊ฐœ๋ฅผ ๋ฝ‘์•„์„œ ์กฐํ•ฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ ์ด๋ฏธ์ง€๊ฐ€ ๋ณต์žกํ•˜๋ฉด ๋งŽ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค.

=> DXT๋ฅผ BC๋ผ๋Š” ์šฉ์–ด๋กœ ์‚ฌ์šฉํ•จ

 

* ๋ชจ๋ฐ”์ผ์„ ์œ„ํ•œ Compression ๋ฐฉ์‹๋“ค

1) PVRTC(PVR Texture Compression): iOS์—์„œ ๋งŽ์ด ์”€(์š”์ฆ˜์€ ASTC๋ฅผ iOS/Android ๊ณตํ†ต์œผ๋กœ ์“ฐ๊ธด ํ•จ)

 

2) DXT์™€์˜ ์ฐจ์ด์ ์€ ์ข€ ๋” ๋ธ”๋Ÿฌ ์ฒ˜๋ฆฌ ๋œ๋‹ค๋Š” ๊ฒƒ. -> ํ…Œ๋‘๋ฆฌ๊ฐ€ ๋ญ‰๊ฐœ์ ธ์„œ ๋””์ž์ด๋„ˆ๋“ค์ด ์ข‹์•„ํ•˜์ง€๋Š” ์•Š์Œใ…Ž

3) ETC(Edison Texture Compression): Android ์—์„œ ๋งŽ์ด ์”€

: ์‚ฌ๋žŒ์˜ ๋ˆˆ์ด ์ฑ„๋„๋ณ€ํ™”์— ๋‘”๊ฐํ•˜๊ณ  ๋ฐ๊ธฐ๋ณ€ํ™”์— ๋ฏผ๊ฐํ•œ ๊ฒƒ์— ์ฐฉ์•ˆํ•ด์„œ ์ฑ„๋„๋Š” ์ €ํ•ด์ƒ๋„, ๋ฐ๊ธฐ๋Š” ๊ณ ํ•ด์ƒ๋„๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ.

ex. ETC1(4bpp), ETC2(4, 8bpp) -> ETC2๊ฐ€ 8bpp ๋‹ˆ๊นŒ ๋” ์„ฑ๋Šฅ์ด ์ข‹์Œ.

: ETC ํฌ๋งท์€ Unity ์—์„œ Crunched ๋ชจ๋“œ๊ฐ€ ์žˆ์Œ. ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์•„๋‹ˆ๊ณ  ๋””์Šคํฌ ์ ˆ์•ฝ์„ ์œ„ํ•ด. ๋กœ๋”ฉ ๋•Œ ์••์ถ•ํ‘ธ๋Š” ๊ณผ์ •์ด ํ•œ๋ฒˆ ๋” ๋“ค์–ด๊ฐ.

 

3) ASTC(Aductive, Scalable Texture Compression): Android, iOS ๋ชจ๋‘ ์ง€์›. ํ†ต์ผ !

: Block ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ. ์•ž์˜ ํฌ๋งท์€ 4x4๋กœ ๊ณ ์ •์ž„.

: 4x4 -> 12x12๋กœ ๊ฐˆ์ˆ˜๋ก ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง. ์ด๋ฏธ์ง€๋Š” 4x4, ํŒŒํ‹ฐํด์€ 12x12๋กœ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์—… ๊ฐ€๋Šฅ.

ASTC 4x4๋Š” ์›๋ณธ์ด๋ž‘ ๊ฑฐ์˜ ๋™์ผํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

ETC์™€ ASTC 6x6์ด ์„ฑ๋Šฅ์ด ๋น„์Šทํ•œ๋ฐ ์šฉ๋Ÿ‰์ฐจ์ด๊ฐ€ ํฌ๊ฒŒ ๋‚œ๋‹ค.

์ง€์›๋˜๋Š” Google Paly ๊ธฐ๊ธฐ์˜ ๋น„์œจ 77%.

๋™๋‚จ์•„๊นŒ์ง€ ๊ฑฐ์˜ ์ปค๋ฒ„๊ฐ€๋Šฅํ•œ ์ •๋„์ด๊ธฐ์— ์‹ ํฅ๊ตญ์˜ ํƒ€๊ฒŸ์‹œ์žฅ์„ ์ œ์™ธํ•˜๊ณค ๋‹ค ASTC๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์„ฑ๋Šฅ ๋น„๊ตํ•œ ํ‘œ! ๋น„์Šทํ•œ๊ฑธ๋กœ ์šฉ๋Ÿ‰ ๋น„๊ตํ•ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค.


* ์ฐธ๊ณ ์˜์ƒ

https://youtu.be/BeEjoTa9sSo

 

* Unity Documentation

https://docs.unity3d.com/kr/2023.2/Manual/class-TextureImporterOverride.html

 

ํ”Œ๋žซํผ๋ณ„ ๊ถŒ์žฅ, ๊ธฐ๋ณธ ๋ฐ ์ง€์› ํ…์Šค์ฒ˜ ํฌ๋งท - Unity ๋งค๋‰ด์–ผ

์ด ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

docs.unity3d.com

 

* ์ž˜ ์ •๋ฆฌํ•ด ๋†“์€ Tistroy

https://drehzr.tistory.com/1573?category=362808 

 

Unity) Texture Format (ํ”Œ๋žซํผ ๋ณ„ ํšจ์œจ์ ์ธ ํ…์Šค์ฒ˜ ์••์ถ• ํฌ๋งท)

Texture Format (ํ”Œ๋žซํผ ๋ณ„ ํšจ์œจ์ ์ธ ํ…์Šค์ฒ˜ ์••์ถ• ํฌ๋งท) Unity ๋ฌธ์„œ์—๋ณด๋ฉด ํ”Œ๋žซํผ๋ณ„ ๊ธฐ๋ณธ ํ…์Šค์ณ ์••์ถ• ํฌ๋งท์ด ์กด์žฌํ•œ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ์„œ ์••์ถ• ํฌ๋งท์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ์ข€๋” ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

drehzr.tistory.com

728x90