※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

iOS7과 iPhone 5s의 sRGB 대응과 텍스처 포맷

(원문 : iOS7 と iPhone 5s の sRGB 対応とテクスチャフォーマット)

iPhone 5s가 발매되어 OpenGL ES 3.0 대응 단말이 늘어났습니다. OpenGL ES 3.0에 대응하는 입수가능 단말로서는 3종류째의 GPU입니다.

  • Nexus 10 ( Android 4.3 + Mali-T604 )
  • Nexus 7(2013)/Nexus 4 ( Android 4.3 + Adreno 320 )
  • iPhone 5s ( iOS 7 + Apple A7 GPU )

Nexus 10용으로 작성된 OpenGL ES 3.0의 묘화 코드도 iPhone 5s에서 쉽게 동작했습니다. 역시 Adreno 320에서는 아직 문제가 좀 남아있는 것 같습니다.

sRGB

OpenGL ES 3.0를 이용할 수 있는 것은 Apple A7를 탑재한 iPhone 5s 뿐이지만, iOS 7.0로 갱신함으로써 종래 단말에서도 기능확장이 이루어진 듯 합니다. 그 하나가 지난회 기사에서 이야기한 sRGB 대응입니다.

iPhone 5s의 OpenGL ES 3.0에서 sRGB를 다룰수 있게 된 것은 당연하지만, iPad 4나 iPhone 5 등 PowerVR SGX554MP/543MP에서도 extension으로 동등한 상호변환이 지원되게 되었습니다. (아래 페이지도 갱신)

예를 들면 PVRTC에서도 GL_EXT_pvrtc_sRGB에 의해 sRGB에서 리니어로 변환할 수 있게 되어 있습니다.

  • GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
  • GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
  • GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
  • GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT

지난번의 표↓를 갱신했습니다.

          OpenGL ES 3.0 での sRGB 対応
-----------------------------------------
ETC1         가능(ETC2)
ETC2         가능
PVRTC  (v1)  가능         (PowerVR 만)
PVRTC2 (v2)  가능         (PowerVR 만)
ATITC        불가         (Adreno 만)
ASTC         가능
S3TC(DXT1)   가능

iOS에서 대응하는 포맷은 PVRTC (v1)뿐으로 PVRTC2 (v2)는 포함되지 않는 것 같습니다. 또 프레임버퍼에 대해 리니어에서의 변환 GL_EXT_sRGB)도 지원하고 있습니다.

iOS는 원래 Renderbuffer를 직접 만들었으므로, EGL/WGL같은 기능선택은 불필요합니다. 또한 GLK (GLKit)이라면 한줄 바꾸는 것 만으로 대응되므로, Android에서 고생하던 것이 거짓말처럼 간단하게 처리되었습니다.

PowerVR SGX535 (iPhone4)는 미확인이지만, SGX543MP/554MP에서는 iOS 7.0 에서 Apple A7 GPU와 마찬가지로 동작하고 있음이 확인되었습니다.

텍스처 포맷

iOS에서도 OpenGL ES 3.0에서는 Android와 마찬가지로 ETC2/EAC를 이용할 수 있게 되었습니다. Android 등 다른 환경과 호환성을 유지하기 쉽게 되었습니다.

                           ETC1  ETC2/EAC  DXT(S3TC)  PVRTC(v1)  ATITC
----------------------------------------------------------------------
iOS PowerVR        ES 2.0   --     --        --        ◎         --
iOS PowerVR?       ES 3.0   ◎     ◎        --        ◎         --
Android PowerVR    ES 2.0   ◎     --        --        ◎         --
Android Tegra2/3/4 ES 2.0   ◎     --        ◎        --         --
Android Adreno200  ES 2.0   ◎     --        --        --         ◎
Android Adreno300  ES 3.0   ◎     ◎        --        --         ◎
Android Mali400    ES 2.0   ◎     --        --        --         --
Android Mali600    ES 3.0   ◎     ◎        --        --         --

Android의 모든 단말과 iOS ES 3.0 이후는 ETC1의 읽기가 가능합니다.

Android/iOS 구별없이 현 상황의 모든 OpenGL ES 3.0 디바이스에서 ETC2/EAC를 사용할 수 있습니다.

관련글

+ Recent posts