iOS/macOS ๊ฐ๋ฐ์๊ฐ Metal ๊ธฐ๋ฐ์ Swift ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Harbeth๋ฅผ ๊ฐ๋ฐํด GPU ๊ฐ์ ๋ ๋๋ง๊ณผ ์ง๊ด์ API๋ก ์ค์๊ฐ ์ฒ๋ฆฌ ๊ตฌํ
๐ Harbeth: High-Performance Swift Image Processing Library
AI ์์ฝ
Context
๊ธฐ์กด ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์๋ฃจ์ ๋ค์ ์ฑ๋ฅ ๋ถ์กฑ์ด๊ฑฐ๋ ๋ณต์กํ API๋ฅผ ์ ๊ณตํ์ผ๋ฉฐ, Metal์ ๊ฐ๋ ฅํจ์ ํ์ฉํ๋ฉด์๋ iOS/macOS/tvOS/watchOS ๊ฐ ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ๊ธฐ ์ด๋ ค์ ๋ค. ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ๋ชจ๋ฆฌ ์คํ์ดํฌ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ ๋ณต์ก์ฑ์ผ๋ก ์ธํ ์ฑ๋ฅ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋ค.
Technical Solution
- Metal ๊ธฐ๋ฐ ๊ณ์ธตํ ์ํคํ ์ฒ ๊ตฌํ: C7RenderPipeline ํด๋์ค๋ก ๋ ๋ ํจ์ค ๋์คํฌ๋ฆฝํฐ, ์ปค๋งจ๋ ๋ฒํผ, ๋ ๋ ์ปค๋งจ๋ ์ธ์ฝ๋ฉ์ ํตํฉ ๊ด๋ฆฌ
- ํ ์ค์ฒ ํ ์์คํ ๋์ : TexturePool ํด๋์ค๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค๋ฒํค๋๋ฅผ ๊ฐ์์ํค๊ณ ํ ์ค์ฒ๋ฅผ ์บ์ํ์ฌ ์ฌ์ฌ์ฉ
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์์คํ ๋ด์ฅ: Device.setEnablePerformanceMonitor()๋ก ์ด ์ฒ๋ฆฌ ์๊ฐ๊ณผ GPU ์๊ฐ์ ์ค์๊ฐ ์ถ์
- ์ปค์คํ ํํฐ ์์ฑ ์ง์: C7FilterProtocol๊ณผ Metal ์ ฐ์ด๋๋ฅผ ์กฐํฉํด ์ฌ์ฉ์ ์ ์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ปค๋ ๊ตฌํ ๊ฐ๋ฅ
- 3๊ฐ์ง API ์ธํฐํ์ด์ค ์ ๊ณต: HarbethIO ์ธ์คํด์ค ๋ฐฉ์, ์ง์ ํ์ฅ ๋ฉ์๋, ์ฐ์ฐ์ ์ฒด์ด๋(>>)์ผ๋ก ์ ์ฐํ ํํฐ ์ ์ฉ
- ์ค์๊ฐ ์นด๋ฉ๋ผ ์ฒ๋ฆฌ: C7CollectorCamera๋ก 1280x720 ํด์๋์์ 60 FPS ์นด๋ฉ๋ผ ํผ๋์ ํํฐ ์ ์ฉ
- ๋ณตํฉ ํํฐ ์ฒด์ธ ๊ตฌ์ฑ: ์ฌ๋ฌ ํํฐ(C7Brightness, C7Contrast, C7Saturation ๋ฑ)๋ฅผ ๋ฐฐ์ด๋ก ์กฐํฉํ์ฌ ๋ณต์กํ ์ด๋ฏธ์ง ํจ๊ณผ ์์ฑ
Impact
์ํฐํด์ ์ ๋์ ์ฑ๋ฅ ์์น๊ฐ ๋ช ์๋์ง ์์๋ค.
Key Takeaway
Metal์ ์ ์์ค ๋ณต์ก์ฑ์ Swift ๋ํผ๋ก ์ถ์ํํ๋ฉด์ ํ ์ค์ฒ ํ๋ง๊ณผ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ํต์ฌ ์ธํ๋ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ด ์ค์๊ฐ GPU ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๋์์ ํ๋ณดํ๋ ์ด์ ์ด๋ค.
์ค์ฒ ํฌ์ธํธ
Swift ๊ธฐ๋ฐ iOS/macOS ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ํ์์ TexturePool์ ํตํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ๊ณผ PerformanceMonitor๋ฅผ ํตํ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ ์ ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์คํ์ดํฌ๋ฅผ ๋ฐฉ์งํ๊ณ 60 FPS ์นด๋ฉ๋ผ ์ฒ๋ฆฌ ๊ฐ์ ๊ณ ์ฑ๋ฅ ์ค์๊ฐ ์์ ์ ์์ ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ค.