Google ๋ฐ Binomial ์˜คํ”ˆ ์†Œ์Šค Basis Universal ํ…์Šค์ฒ˜ ์••์ถ• ์‹œ์Šคํ…œ

๊ตฌ๊ธ€๊ณผ ์ดํ•ญ ๊ฐœ์„ค ์›๋ณธ ํ…์ŠคํŠธ ๋ณดํŽธ์  ๊ธฐ์ค€, ํšจ์œจ์ ์ธ ํ…์Šค์ฒ˜ ์••์ถ•์„ ์œ„ํ•œ ์ฝ”๋ฑ๊ณผ ์ด๋ฏธ์ง€ ๋ฐ ๋น„๋””์˜ค ๊ธฐ๋ฐ˜ ํ…์Šค์ฒ˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ด€๋ จ ๋ฒ”์šฉ ".basis" ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ฐธ์กฐ ๊ตฌํ˜„ ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ณต๊ธ‰ Apache 2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Basis Universal์€ ์ด์ „์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ์ถœํŒ Draco 3D ๋ฐ์ดํ„ฐ ์••์ถ• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ GPU์šฉ ํ…์Šค์ฒ˜ ๊ณต๊ธ‰ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœ์ž๋Š” ๊ณ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜์ง€๋งŒ GPU์— ํŠนํ™”๋˜๊ณ  ๋งŽ์€ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ํ•˜์œ„ ์ˆ˜์ค€ ํ˜•์‹๊ณผ ํฌ๊ธฐ ๊ฐ์†Œ๋ฅผ ๋‹ฌ์„ฑํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ๋ฉด์—์„œ GPU ํ…์Šค์ฒ˜์™€ ๊ฒฝ์Ÿํ•  ์ˆ˜ ์—†๋Š” ๊ธฐํƒ€ ํ˜•์‹ ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๋ฐ ์ œํ•œ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Basis Universal ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ GPU ํ…์Šค์ฒ˜์˜ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ์••์ถ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Basis๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ฐ์Šคํฌํ†ฑ ์‹œ์Šคํ…œ๊ณผ ๋ชจ๋ฐ”์ผ ์žฅ์น˜ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก GPU ํ…์Šค์ฒ˜๋ฅผ ๋‹ค์–‘ํ•œ ํ•˜์œ„ ์ˆ˜์ค€ ํ˜•์‹์œผ๋กœ ๋น ๋ฅด๊ฒŒ ํŠธ๋žœ์Šค์ฝ”๋”ฉํ•˜๋Š” ์ค‘๊ฐ„ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ง€์›๋˜๋Š” ํ˜•์‹์€ PVRTC1(4bpp RGB), BC7(6 RGB ๋ชจ๋“œ), BC1-5, ETC1 ๋ฐ ETC2 ํ˜•์‹์ž…๋‹ˆ๋‹ค. ํ–ฅํ›„ ASTC ํ˜•์‹(RGB ๋˜๋Š” RGBA)๊ณผ BC4์˜ ๊ฒฝ์šฐ 5/7 RGBA ๋ชจ๋“œ, PVRTC4์˜ ๊ฒฝ์šฐ 1bpp RGBA์— ๋Œ€ํ•œ ์ง€์›์ด ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

Google ๋ฐ Binomial ์˜คํ”ˆ ์†Œ์Šค Basis Universal ํ…์Šค์ฒ˜ ์••์ถ• ์‹œ์Šคํ…œ

๊ธฐ๋ณธ ํ˜•์‹์˜ ํ…์Šค์ฒ˜๋Š” ๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 6~8๋ฐฐ ์ ๊ฒŒ ์ฐจ์ง€ํ•˜๋ฉฐ JPEG ํ˜•์‹ ๊ธฐ๋ฐ˜์˜ ์ผ๋ฐ˜ ํ…์Šค์ฒ˜๋ณด๋‹ค ์•ฝ ์ ˆ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  RDO ๋ชจ๋“œ์˜ ํ…์Šค์ฒ˜๋ณด๋‹ค 10~25% ์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JPEG ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ 891KB์ด๊ณ  ETC1 ํ…์Šค์ฒ˜๊ฐ€ 1MB์ธ ๊ฒฝ์šฐ Basis ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋Š” ์ตœ๊ณ  ํ’ˆ์งˆ ๋ชจ๋“œ์—์„œ 469KB์ž…๋‹ˆ๋‹ค. ๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ์— ํ…์Šค์ฒ˜๋ฅผ ๋ฐฐ์น˜ํ•  ๋•Œ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋œ JPEG ๋ฐ PNG ํ…์Šค์ฒ˜๋Š” 16MB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•œ ๋ฐ˜๋ฉด,
๊ธฐ๋ณธ์ ์œผ๋กœ BC2, PVRTC1 ๋ฐ ETC1๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด 1MB์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  BC4๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด 7MB์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Google ๋ฐ Binomial ์˜คํ”ˆ ์†Œ์Šค Basis Universal ํ…์Šค์ฒ˜ ์••์ถ• ์‹œ์Šคํ…œ

๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Basis Universal๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ณผ์ •์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” "basisu" ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํ’ˆ์งˆ ์ˆ˜์ค€์„ ์„ ํƒํ•˜์—ฌ ๊ธฐ์กด ํ…์Šค์ฒ˜๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ๋กœ์šด ํ˜•์‹์œผ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ Œ๋”๋ง ์ฝ”๋“œ ์ด์ „์— ์ค‘๊ฐ„ ํ˜•์‹์„ ํ˜„์žฌ GPU์—์„œ ์ง€์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Basisu ํŠธ๋žœ์Šค์ฝ”๋”๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— GPU์— ์••์ถ•๋œ ํ˜•์‹์œผ๋กœ ๋กœ๋“œ๋˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์ „์ฒด ์ฒ˜๋ฆฌ ์ฒด์ธ์˜ ์ด๋ฏธ์ง€๋Š” ์••์ถ•๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. GPU๋Š” ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ์„ ์ œ์ ์œผ๋กœ ํŠธ๋žœ์Šค์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฏธ์ง€์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ข… ํ…์Šค์ฒ˜ ๋ฐฐ์—ด(ํ๋ธŒ๋งต), ์ฒด์  ํ…์Šค์ฒ˜, ํ…์Šค์ฒ˜ ๋ฐฐ์—ด, ๋ฐ‰๋งต ๋ ˆ๋ฒจ, ๋น„๋””์˜ค ์‹œํ€€์Šค ๋˜๋Š” ์ž„์˜ ํ…์Šค์ฒ˜ ์กฐ๊ฐ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ จ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์••์ถ•ํ•˜์—ฌ ์ž‘์€ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋ชจ๋“  ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๊ณตํ†ต ํŒ”๋ ˆํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํ…œํ”Œ๋ฆฟ์„ ์ค‘๋ณต ์ œ๊ฑฐํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…์Šค์ฒ˜๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Basis Universal ์ธ์ฝ”๋” ๊ตฌํ˜„์€ OpenMP๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์Šค์ฝ”๋”๋Š” ํ˜„์žฌ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋‹ค. WebGL ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” WebAssembly ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์šฉ Basis ๋ฒ”์šฉ ๋””์ฝ”๋”์ž…๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ Google์€ ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ Basis Universal์„ ์ง€์›ํ•˜๊ณ  ์ด๋ฅผ WebGL ๋ฐ ํ–ฅํ›„ ์‚ฌ์–‘์„ ์œ„ํ•œ ์ด์‹ ๊ฐ€๋Šฅํ•œ ํ…์Šค์ฒ˜ ํ˜•์‹์œผ๋กœ ํ™๋ณดํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์›น GPU, ๊ฐœ๋…์ ์œผ๋กœ Vulkan, Metal ๋ฐ Direct3D 12 API์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

GPU ์ธก์—์„œ๋งŒ ํ›„์† ์ฒ˜๋ฆฌ์™€ ํ•จ๊ป˜ ๋น„๋””์˜ค๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ธฐ๋Šฅ์€ Basis Universal์„ ์ตœ์†Œํ•œ์˜ CPU ๋ถ€ํ•˜๋กœ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ž‘์€ ๋น„๋””์˜ค๋ฅผ ๋™์‹œ์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” WebAssembly ๋ฐ WebGL์—์„œ ๋™์  ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํฅ๋ฏธ๋กœ์šด ์†”๋ฃจ์…˜์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋ฑ๊ณผ ํ•จ๊ป˜ WebAssembly์—์„œ SIMD ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ด ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์€ ์•„์ง ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ธฐ์กด ๋น„๋””์˜ค๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ์—์„œ๋Š” ํ…์Šค์ฒ˜ ๊ธฐ๋ฐ˜ ๋น„๋””์˜ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ๋น„๋””์˜ค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ตœ์ ํ™”๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ๊ฐ€ ํ˜„์žฌ ๊ฒŒ์‹œ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค. I-ํ”„๋ ˆ์ž„ ๋ฐ P-ํ”„๋ ˆ์ž„ ์ ์‘ํ˜• ํŒจ๋”ฉ(CR) ์ง€์›.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€