스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
HDR로 앱에서 동적 이미지 경험 제공하기
앱에서 HDR 이미지를 읽고 쓰는 방법, HDR 콘텐츠를 처리하는 방법을 알아보세요. 새롭게 지원되는 HDR 이미지 형식과 HDR 이미지를 표시하는 앞선 방식을 소개합니다. HDR 콘텐츠가 사용자 인터페이스와 병존할 수 있게 만드는 방법과 앱에 HDR 이미지 지원을 추가할 때 유의해야 할 점에 대해 설명합니다.
챕터
- 0:00 - Introduction
- 1:10 - HDR concepts and technologies
- 9:38 - Adaptive HDR
- 18:24 - Read HDR images
- 20:51 - Edit strategies
- 26:48 - Display tone mapping
- 31:37 - Saving images
리소스
관련 비디오
WWDC23
WWDC22
-
다운로드
안녕하세요 저는 Davide입니다 이 프레젠테이션은 작년에 진행되었던 세션 ‘앱에서 HDR 이미지 지원하기’의 후속입니다 올해는 HDR 이미지와 관련된 뛰어난 기술들이 개발되어 이 자리에서 여러분께 소개해 드리고자 합니다 이 비디오에서는 먼저 헤드룸과 톤 매핑의 개념을 소개합니다 그런 다음 적응형 HDR이라는 SDR 애플리케이션, 디코더 디스플레이와 역호환되는 새로운 기술을 설명드리겠습니다 그리고 David가 파일에서 적응형 HDR 이미지를 읽는 법을 설명합니다 HDR 콘텐츠를 보존하면서 이미지를 편집하는 과정을 설명할 것입니다 새로운 API를 채택하게 되면 배경과 전경 사이를 전환하는 등 운영 체제 및 다른 앱과 원활하게 통합할 수 있음을 배우게 되실 것입니다 그런 다음 파일에 HDR 이미지를 작성하는 권장 방법으로 마무리합니다
먼저 HDR 개념과 기술부터 살펴보겠습니다 먼저 High Dynamic Range란 무엇일까요? HDR의 핵심은 우리 주변의 시각적 세계를 보다 충실하게 표현하기 위해 만들어진 일련의 기술입니다
이를 통해 현실에서 발견되는 더 넓은 범위의 빛 강도를 포착하고 표시할 수 있습니다 표준 명암 대비, SDR에 비해 더 깊은 범위의 색상을 표시할 수 있습니다 또한 HDR 화면에서 더 밝고 깊은 콘텐츠를 표시할 수 있는 일련의 규칙 또는 변환을 정의합니다 이러한 변환을 톤 매핑이라고 합니다 톤 매핑이란 무엇일까요? 이를 이해하기 위해서는 먼저 헤드룸의 개념을 이해해야 합니다
그리고 헤드룸을 이해하려면 사진에서의 다이내믹 레인지에 대해 이야기해야 합니다 인간 시각계의 놀라운 특성 중 하나는 광범위한 입력 자극에 적응할 수 있는 능력입니다 밤하늘의 희미한 별빛부터 극도로 밝은 햇빛까지 모두 적응 가능하죠
다이내믹 레인지라는 용어는 이미지의 가장 밝은 톤과 가장 어두운 톤 사이의 대비를 의미합니다 SDR 디스플레이에서는 실제 빛 범위의 일부만을 정확하게 표현할 수 있습니다 이미지가 괜찮게 보이더라도 이미지의 범위에 대한 톤 압축이 일어나고 있습니다 반면에 HDR 디스플레이는 SDR보다 덜 압축하면서 어두운 톤과 밝은 톤을 더 잘 표현할 수 있습니다 예를 들어 반사 하이라이트나 빛을 뿜는 물체에서 나오는 빛이 더 잘 보존됩니다 이제 슬라이드 하단의 그래프를 자세히 살펴봅시다
살펴본 바와 같이 HDR이 표현할 수 있는 최대 밝기는 SDR 최대치보다 훨씬 높을 수 있습니다 ISO 이미지 표준에 따르면 가장 밝은 SDR 신호는 기준 백색이라고도 부릅니다 기준 백색은 대략적으로 실내 환경에서 책 페이지의 밝기나 Keynote 프레젠테이션의 흰색 배경과 비슷합니다
반면에 HDR 디스플레이는 기준 백색보다 더 밝은 반사 하이라이트나 발광 물체의 빛을 렌더링할 수 있게 합니다
이 추가적인 밝기를 헤드룸이라고 합니다
수학적 의미에서 헤드룸은 HDR 최대치와 기준 백색 사이의 비율입니다 헤드룸은 이 값의 로그로도 표현될 수 있습니다 Log 형태인 경우 헤드룸이 기준 백색보다 1스탑 또는 2스탑 위라는 표현으로 HDR이 2배 또는 4배 밝다는 것을 나타냅니다 이제 헤드룸의 개념을 이해했으니 나중에 유용하게 쓰일 수 있도록 근본적인 구분을 하는 것이 중요합니다
파일이 기준 백색보다 밝은 수준의 밝기 데이터를 포함하도록 인코딩된 경우 이를 콘텐츠 헤드룸이라고 합니다 디스플레이가 기준 백색보다 밝은 수준의 밝기를 표시할 수 있는 능력은 디스플레이 헤드룸이라고 합니다 이 둘의 차이를 더 자세히 살펴보겠습니다
위의 예시에서 HDR 버전의 아름다운 풍경을 볼 수 있습니다 히스토그램은 콘텐츠가 기준 백색 이상으로 약 2스탑의 헤드룸을 포함하고 있음을 보여 줍니다 이제 에디터 또는 iPhone 같은 촬영 기기에서 더 밝은 이미지를 만들 수 있습니다 위의 예에서는 약 3스톱을 보여 줍니다
동시에 이미지를 다양한 화면에 표시할 수 있습니다 디스플레이 헤드룸의 성능이 충분하면 이미지가 디코딩되어 정확도 높게 렌더링됩니다 위의 예에서는 디스플레이에 3스톱의 헤드룸이 있으며 콘텐츠 헤드룸의 3스톱을 모두 표시할 수 있습니다 그러나 디스플레이가 전체 콘텐츠 헤드룸을 표시하지 못할 수도 있습니다 예를 들어 현재 화면 밝기 설정 때문인 경우입니다 동영상 뒷부분에서 디스플레이 헤드룸이 줄어드는 다른 원인에 대해 살펴보겠습니다 이 경우 제작자의 의도를 보존하고 잘림을 방지하기 위해 먼저 데이터를 조작해야 합니다 어떻게 할까요?
톤 매핑이라는 기술을 사용합니다 톤 매핑은 이미지 밝기와 색상 값을 매체나 디스플레이가 처리 가능한 범위 내에 맞게 조정하여 이미지를 정확하게 표현합니다 디지털 사진의 톤 매핑은 사진을 촬영하거나 편집할 때와 이미지를 디코딩하여 표시할 때 발생할 수 있습니다 첫 번째 단계는 일반적으로 예술적 또는 창의적 조정이라고 합니다 예를 들어 아티스트는 Apple ProRAW 애셋과 같은 이미지를 가져와서 참조 디스플레이와 감상 환경에서 분석을 한 다음 SDR 또는 정의된 HDR 헤드룸에 창작 의도에 따라 매핑을 합니다 iPhone과 같은 촬영 기기는 이미지를 파일에 저장하기 전에 머신 러닝 기술을 사용하여 자동으로 톤 매핑을 결정할 수도 있습니다
두 번째 단계는 일반적으로 디스플레이 조정이라고 합니다 디코딩된 후의 HDR 이미지는 헤드룸이 제한적인 일부 기기를 포함하여 다양한 기기에서 보여질 수 있습니다
또한 각 기기가 있는 물리적 환경이 다양할 수 있습니다
이러한 각각의 경우 디스플레이는 상황에 따라 이미지 렌더링을 조정해야 합니다
콘텐츠 조정이 발생하는 이유는 다음과 같습니다
디스플레이 성능 또는 하드웨어가 물리적으로 표시 가능한 니트 수에 따라 발생합니다 현재 화면 밝기 설정과 그에 따라 사용 가능한 헤드룸을 기준으로 발생합니다 기기의 남은 배터리 사용 시간에 따라 발생합니다 배터리가 부족한 경우 전력을 절약하고 기기 작동 유지를 위해 디스플레이를 어둡게 해야 할 수 있습니다
공존으로 인해 발생합니다 예를 들어, 운영 체제는 전경의 이미지를 HDR로 톤 맵을 배경의 SDR 이미지로 승격합니다 또는 개발자로서 여러분이 사진의 HDR 효과를 다른 방식으로 제시하고 싶은 경우도 있습니다 이제 헤드룸과 톤 매핑을 소개해 드렸으니 비디오의 다음 섹션에서는 세 가지 기술과 각각의 기준을 설명하겠습니다 모두 새로운 기능과 API의 기반이 되는 기술들입니다 첫 번째는 작년에 도입된 ISO HDR이라고 합니다 ISO HDR 표준은 HDR 사진을 위한 최초의 표준입니다 Apple은 이 표준 개발에 적극적인 역할을 했으며 2023년에 발표되었습니다 ISO HDR 이미지는 작년부터 Apple 생태계에서 지원되고 있습니다
ISO HDR의 주요 측면은 10비트 인지 시각 양자화와 하이브리드 로그 감마 인코딩을 저장할 수 있는 능력입니다 HDR 참조 디스플레이에 대한 규정 그리고 제작자의 예술적 의도 유지에 필요한 메타데이터입니다 ISO HDR 이미지는 다양한 파일 형식, 예를 들어 HEIF, AVIF, PNG, JPEG XL 등으로 저장할 수 있습니다 자세한 정보는 위의 문서 번호를 참고하세요
ISO HDR 파일은 SDR 디스플레이에서 볼 때 SDR로 조정되어야 한다는 점을 유의해야 합니다 이 작업은 일반적으로 기본 톤 매핑 연산자로 수행되는데 ITU 규격 2408, 2446, 2390에 설명된 연산자 등을 사용합니다 ITU 톤 매퍼에 대해서는 후반부에 다시 언급하겠습니다 HDR 이미지를 위한 두 번째 기술은 올해 새롭게 등장한 기술로 적응형 HDR이라고 부릅니다 이미 ISO HDR이 있는데 왜 새로운 표준이 필요할까요? 적응형 HDR은 ISO HDR을 기반으로 세 가지 주요 영역이 더 발전했습니다
첫 번째는 SDR 시스템 디코더, 애플리케이션과의 역호환성입니다 두 번째는 HDR과 SDR의 최적화된 표현을 단일 파일에 저장할 수 있는 기능입니다 세 번째는 사용 가능한 디스플레이 헤드룸에 맞게 HDR과 SDR 간의 톤 맵을 쉽게 조정할 수 있는 기능입니다 적응형 HDR이 이 세 가지를 모두 구현하는 방법을 보겠습니다
적응형 HDR 기술의 기본적인 아이디어는 이미지의 완벽하게 하위호환되는 SDR 기준 표현을 파일에 저장하는 것입니다 특정한 메타데이터와 맵과 함께 장면의 밝은 영역의 공간적 위치를 보존하는 것입니다 이 맵은 일반적으로 게인 맵이라고 부르는데 SDR 이미지의 일부를 게인하여 밝게 만들 수 있기 때문입니다 게인 맵을 기준 렌더링에 적용하면 아름다운 HDR 결과물이 만들어집니다 위 슬라이드에서 특이한 점을 눈치채신 분도 있을 것입니다 제목이 Adaptive HDR이 아니라 Apple Gain Map입니다 이것은 실수가 아닙니다 2020년부터 iPhone 카메라는 이미지를 시각적으로 개선하기 위해 게인 맵이 내장된 이미지를 촬영하고 있습니다 이 포맷으로 촬영된 이미지가 1조 장이 넘습니다!
Apple Gain Map에 대한 자세한 내용은 Apple Developer 포털에서 확인할 수 있습니다
올해에 새로워진 점은 게인 맵 기술을 표준화하기 위한 노력을 추진하고 있다는 것입니다 게인 맵을 생성하고 기준 SDR에 적용하기 위한 수학적 공식을 표준화하고 있습니다 적응형 HDR은 HDR과 SDR 신호 사이의 비율의 로그로 게인 맵을 인코딩합니다 또한 새로운 메타데이터와 새로운 정보를 HEIF, JPEG와 같은 일반적인 파일 포맷에 저장하는 방법을 정의합니다
적응형 HDR은 현재 ISO에서 위원회안 단계에 있으며 최종 단계인 국제 규격안 절차를 위해 노력하고 있습니다 자세한 내용이 궁금하며 ISO 회원이신 경우 이 슬라이드에 문서 번호가 나와 있습니다 이 표준은 소프트웨어와 하드웨어 플랫폼 전반에서 일관된 경험을 보장하며 이미징 업계에서 널리 채택될 것으로 기대합니다 이제 적응형 HDR이 앞서 설명한 ISO HDR에 비해 개선된 세 가지 부분을 설명하겠습니다 첫째, 이전 버전과의 호환성입니다 파일에 SDR 기준선이 포함되어 구형 시스템이나 SDR 전용 앱에서도 완전히 디코딩할 수 있습니다 둘째, 파일에 SDR과 HDR의 듀얼 렌더링이 완전하게 포함됩니다 이는 이미지의 각 픽셀 정보가 게인 맵에 포함되기 때문입니다 셋째, 게인 맵은 SDR과 HDR의 비율로 정의되어 디스플레이 헤드룸에 따라 입력 콘텐츠를 쉽게 톤 매핑할 수 있습니다
실제로 원하는 출력 헤드룸은 SDR 입력에 1 미만의 가중치를 곱하기만 해도 달성할 수 있습니다 매우 간단하죠
주목할 만한 점은 적응형 HDR이 게인 맵 신호의 표현을 향상시킨다는 것입니다 RGB 3채널 맵이 될 수 있으며 이미지가 보이는 방식을 더 세밀하게 제어할 수 있습니다
이 표준은 또한 대칭적 변환을 허용합니다 즉 기준 렌더링이 HDR일 수 있고 게인 맵에는 SDR로의 톤 매핑을 위한 정보가 포함될 수 있는 것입니다
iOS 18이 출시되면서 저희는 적응형 HDR 게인 맵과 관련 메타데이터로 전환 중입니다 이 새로운 세대는 최신 초안을 기반으로 합니다
iPhone 15와 15 Pro는 적응형 HDR을 준수하는 HDR 이미지를 촬영할 것입니다
이제 새로운 적응형 HDR 파일의 구조를 살펴보겠습니다 iOS 18에서 촬영된 새로운 HEIC 파일에는 여전히 하나의 이미지만 포함됩니다 사실 CGImageSource에서 CGImageSourceGetCount를 호출하면 1을 반환하지만 개발자는 이제 이미지의 다른 버전을 요청할 수 있습니다 기본적으로 이미지는 표준 명암 대비 버전으로 디코딩됩니다 이는 우리에게 익숙한 이전 버전과 호환되는 모습입니다 이 경우 SDR 표현에 필요한 메타데이터만 보고되고 파일의 다른 추가 정보는 무시됩니다 앱이 요청하면 다르게 표현된 이미지 또는 HDR 버전을 얻을 수 있습니다 이 경우 게인 맵을 포함한 파일의 추가 정보가 사용되고 앱에 보고됩니다
HEIF 용어로 이 표현을 TMAP 대체 또는 톤 매핑된 이미지라고 합니다 여기서 중요한 점은 파일에 HDR 이미지가 포함되어 있지 않다는 것입니다 대신 일련의 재료와 레시피가 포함되어 있어 함께 HDR 이미지를 만듭니다
우리는 MPEG 기구와 협력하여 HEIF용 적응형 HDR 파일 형식을 공식화하고 표준화하고 있습니다 이는 현재 HEIF 사양의 두 번째 수정안 초안에 포함되어 있습니다 또한 국제컬러협회와 협력하여 ICC 프로파일의 일부로 적응형 HDR을 홍보하고 있습니다
JPEG 파일도 적응형 HDR를 완벽하게 지원합니다 HEIF와 약간 다른 구문을 사용해서요 자세한 내용은 적응형 HDR 표준 초안에서 확인하실 수 있습니다
ProRAW 파일도 적응형 HDR을 지원합니다 전체 크기 축소판에 게인 맵과 새로운 메타데이터를 포함시키는 방식이죠
말씀드린 대로 iPhone 15와 iPhone 15 Pro는 iOS 18부터 새로운 적응형 HDR로 전환됩니다 위 표의 모든 세부 사항을 검토하지는 않겠지만 비디오를 일시 정지하고 전체 변경 사항 목록과 이러한 변경의 영향을 확인하실 수 있습니다 이제 HDR 전문가가 되셨으니 보너스 주제를 살펴보겠습니다 운영 체제가 형식에 따라 HDR 이미지를 렌더링하는 방법에 대한 내용입니다
입력 콘텐츠에 따라 HDR을 SDR로 또는 더 낮은 디스플레이 헤드룸으로 톤 매핑하는 방법에는 두 가지가 있습니다 ISO HDR 이미지의 경우 iOS 17 및 macOS 14부터 운영 체제에서 ITU 기본 글로벌 톤 매핑 기술을 사용해 HDR에서 더 낮은 헤드룸으로 조정할 수 있습니다
올해 Apple은 기본값보다 출력 품질을 더 잘 보존하는 Reference White Tone Mapping Operator를 새롭게 개발했습니다 하이라이트 클리핑이 크게 줄어들고 색상 재현이 더욱 잘 유지됩니다 이 새로운 글로벌 톤 매퍼는 새로운 iOS, macOS tvOS, watchOS, visionOS의 ISO HDR 파일에 사용됩니다 반면 적응형 HDR 이미지는 디스플레이의 헤드룸에 맞게 파일의 게인 맵에 따라 최적화된 커브를 사용하여 조정됩니다
David가 새 API를 공유하기 전에 곧 출시될 기술을 활용하기 위해 올해 업데이트한 시스템 앱을 소개해 드리고자 합니다 iOS 17, macOS 14에서는 사진 앱이 전체 디스플레이 헤드룸을 사용하여 HDR 이미지를 렌더링할 수 있는 유일한 앱이었습니다
iOS 18과 macOS 15에서는 여기에 메시지 앱 훑어보기, 미리보기를 추가 중입니다 이 새로운 API를 전부 사용할 수 있게 사진 앱도 변경하였습니다 David, 이제 당신 차례입니다! 훌륭한 개요 설명 감사합니다, Davide 이제 이러한 개념을 애플리케이션에서 코드로 변환하는 법을 알아보겠습니다 HDR 이미지로 작업할 때 앱이 지원할 가능성이 높은 일반적인 작업들이 있습니다
전체 HDR 파이프라인에는 이미지 읽기, 편집, 표시, 쓰기가 포함됩니다 이 비디오에서 모두 설명해 드리겠습니다 하지만 첫 번째 단계는 파일을 메모리로 읽어들이는 것입니다
적응형 HDR 파일의 놀라운 점은 바로 유연성입니다 게인 맵과 관련 메타데이터 덕분에 이미지를 SDR 이미지로 로드하여 이전 버전과의 호환성을 극대화하거나 HDR 이미지로 로드해 정확성을 극대화할 수 있습니다 기본적으로 게인 맵 이미지를 읽으면 SDR 표현이 메모리에 로드됩니다 URL 또는 데이터로 CIImage 객체를 초기화하기만 하면 됩니다 하지만 이미지를 제대로 나타내려면 HDR로 보는 것이 좋습니다
작년에 우리는 CIImage 옵션 expandToHDR을 도입하여 Apple Gain Map 이미지 형식을 지원하고자 했습니다 이제 동일한 API로 적응형 HDR 파일을 읽을 수 있습니다 CIImage를 초기화할 때 이 옵션을 제공하기만 하면 됩니다
이 옵션은 ImageIO API kCGImageSourceDecodeToHDR을 통해서도 사용할 수 있습니다 앞서 Davide가 말씀드렸듯이 이미지 객체에 연관된 콘텐츠 헤드룸 속성이 있는 것이 중요합니다 이 속성은 HDR 이미지의 후속 디스플레이에 필요합니다 올해에는 주요 시스템 이미지 클래스에 이 속성을 추가했습니다
CIImage의 헤드룸을 쿼리하는 것은 새로운 contentHeadroom 속성 읽기처럼 간단합니다 일반 SDR 이미지의 경우 반환되는 헤드룸은 1에 불과합니다 iPhone HDR 사진의 경우 장면 콘텐츠에 따라 1보다 크고 최대 8까지 값이 반환됩니다 일부 이미지의 경우 헤드룸을 알 수 없음을 나타내기 위해 속성이 0을 반환할 수 있습니다
마찬가지로 CGImageRef가 주어지면 해당 헤드룸을 가져오는 새로운 CGImageGetContentHeadroom API가 있습니다
IOSurfaces에도 동등한 속성이 있으며 CVPixelBuffer에서 헤드룸을 쉽게 가져오려면 여기서 CIImage를 생성하고 그 콘텐츠 헤드룸을 가져옵니다 다음으로 적응형 HDR 이미지를 편집하는 방법에 대한 추천입니다 적응형 HDR 이미지 파일의 유연성을 고려해 이러한 이미지를 편집, 표시 저장할 때 선택할 수 있는 여러 전략이 있습니다 아마 가장 명확한 방법은 파일을 SDR 이미지로 취급하는 것입니다 이 방식은 이미 잘 알고 계실 테니 오늘은 다루지 않겠습니다
아니면 파일을 HDR로 취급할 수 있습니다 작년 세션에서 설명드린 방식으로요 SDR 이미지와 연결된 게인 맵 이미지로 취급할 수도 있습니다 마지막으로, 앱에서 파일을 이미지 두 개로 취급할 수 있습니다 하나는 SDR, 다른 하나는 HDR로요 이 비디오의 나머지 부분에서 이 세 가지 전략을 다루겠습니다
HDR 접근 방식을 사용하려면 이미지를 로드할 때 expandToHDR 옵션을 사용해 HDR 이미지를 바로 만듭니다
그리고 HDR 범위를 보존하는 필터로 HDR 이미지를 편집할 수 있습니다 ‘앱에서 HDR 이미지 지원하기’ 세션에서 HDR을 보존하는 CIFilters에 대해 자세히 알아볼 수 있습니다 고려해야 할 점 하나는 이미지 편집이 콘텐츠 헤드룸 속성을 어떻게 변경하는지 입니다 특정한 수정의 경우 Core Image는 헤드룸이 변경되지 않음을 알고 있습니다 예를 들어 크기 조정, 크롭, 왜곡 또는 특정 합성곱 적용 시 해당됩니다 다른 수정의 경우 Core Image는 헤드룸에 어떤 영향이 생길지 모릅니다 이 경우 결과 헤드룸 속성은 알 수 없음을 나타내기 위해 0이 됩니다
SDR 및 게인 접근 방식을 사용하려면 파일의 SDR 및 게인 맵 구성 요소를 두 개의 메모리 내 이미지 객체로 로드합니다 auxiliaryHDRGainMap 옵션을 사용해 파일에서 게인 맵을 CIImage 객체로 로드합니다
기본 이미지가 SDR이므로 콘텐츠 헤드룸은 1이 됩니다
SDR 이미지를 편집할 때 해당되는 경우 유사한 편집이 게인 맵에도 적용됩니다 예를 들어 SDR 이미지를 크롭하면 게인 맵 이미지도 크롭됩니다 게인 이미지는 일반적으로 SDR 이미지의 절반 크기이므로 편집을 할 때 크기 차이를 고려해야 합니다
SDR 및 HDR 접근법을 사용하려면 다음과 같은 코드를 사용하여 파일의 두 가지 표현을 모두 이미지 객체로 읽습니다
SDR 이미지 헤드룸은 1이 되고 HDR 이미지 헤드룸은 1보다 크다는 점을 기억하세요
SDR 이미지 편집 시 HDR 이미지에도 유사한 편집 내용이 적용됩니다 편집 내용이 HDR을 지원하기만 한다면 두 이미지 모두에 적용할 수 있습니다 이 세 가지 전략에는 각각 장단점이 있습니다 HDR 전략은 구현이 더 간단합니다 코드가 하나의 이미지만 추적하면 되기 때문입니다 이 전략의 또 다른 장점은 게인 맵이 없는 ISO HDR 이미지로 작업할 수 있다는 것입니다
단점은 일부 편집 작업, 특히 일부 사진 블렌드 모드는 HDR을 지원하지 않으므로 대안을 사용해야 한다는 것입니다 내장된 CIF필터가 HDR을 지원하는지 필터 속성 카테고리를 통해 확인할 수 있습니다
또한 HDR로 편집을 적용하면 원본 게인 맵을 더 이상 SDR 또는 다른 디스플레이 헤드룸으로 톤 매핑하는 데 사용할 수 없습니다
SDR 및 게인 전략의 장점은 원본 게인 맵을 보존할 수 있다는 것입니다 톤 매핑을 하거나 이전 버전과의 호환성이 가장 좋은 이미지를 저장할 때 편리합니다 이 전략은 회전, 왜곡, 크롭 등 간단한 편집을 할 때 가장 효과적입니다 SDR만 지원하는 편집 작업에도 사용할 수 있습니다
단점은 일부 유형의 편집을 게인 맵에 적용할 수 없다는 것입니다 예를 들어 SDR 이미지의 밝기를 강하게 변경하는 필터는 게인 맵에 적용하면 해당 효과를 얻을 수 없습니다
SDR 및 HDR 전략의 장점은 앱에서 편집을 조정하여 SDR과 HDR을 모두 최적화할 수 있다는 것입니다 또한 SDR 및 HDR 편집은 모두 게인 맵을 다시 계산하여 이미지 파일을 최대한 유연하게 저장할 수 있습니다
단점으로는 두 이미지를 편집하고 SDR과 HDR 편집본이 모두 모두 괜찮게 보이도록 해야 하는 복잡성이 더해진다는 점입니다
다음은 HDR 편집 전략을 사용하는 코드의 예시입니다 먼저 .expandToHDR 옵션을 요청하는 이미지를 로드한 다음 이 예시에서는 HDR 콘텐츠를 완벽하게 지원하는 vignetteEffectFilter를 적용하도록 선택했습니다 그런 다음 이 코드는 이미지에 필터를 적용하여 편집된 새 이미지를 생성합니다
다음은 SDR 및 게인 편집 전략을 사용하는 코드의 예시입니다 먼저 SDR 이미지를 얻기 위한 옵션 없는 이미지를 로드하고 auxiliaryHDRGainMap 옵션으로 이미지를 다시 로드하여 게인 맵을 CIImage로 구합니다 기본 SDR 이미지의 크기와 일치하도록 이 이미지 크기를 조정해야 합니다
다음으로 이 예시에서는 stretchCropFilter를 적용하겠습니다 이 필터는 이미지를 왜곡하므로 SDR 게인 이미지 모두에 적용해야 합니다
여기서 코드는 SDR 이미지에 필터를 적용하여 편집된 SDR 이미지를 생성합니다 마지막으로 게인 이미지에 필터를 적용하여 편집된 게인 이미지를 생성합니다 이제 적응형 HDR 이미지 로드 및 편집 방법을 이해했으니 디스플레이용 톤 맵을 만드는 방법을 알아보겠습니다
HDR 이미지를 표시할 때 중요한 문제 중 하나는 다양한 디스플레이와 환경을 고려하여 이미지의 톤 맵을 만들어야 한다는 것입니다 이를 최적의 방법으로 진행하려면 이미지 헤드룸과 디스플레이 헤드룸을 모두 알아야 합니다 새로운 시스템 톤 매핑 API가 올해 추가되어 애플리케이션 전반에서 이미지를 멋지고 일관성 있게 표시할 수 있습니다
좋은 소식은 UIImageView 또는 SwiftUI 뷰를 사용하는 애플리케이션의 경우 이 톤 매핑은 자동이라는 것입니다 다음 코드에서 설명하겠습니다
URL을 통해 액세스할 수 있는 적응형 HDR 이미지 파일이 있고 SwiftUI로 이를 표시하려고 합니다 UIImageReader로 UIImage를 생성하기만 하면 됩니다 이 리더는 다양한 HDR 파일 형식을 올바르게 지원합니다 그런 다음 SwiftUI 이미지 뷰를 생성하고 allowedDynamicRange 한정자를 지정해 파일의 다이내믹 레인지를 얼마나 표시할지 결정할 수 있습니다 정말 간단합니다!
앱에서 UIKit을 사용한다면 비슷하게 UIImage로 UIImageView를 만들 수 있습니다 그리고 preferredImageDynamicRange 속성을 설정해 표시할 다이나믹 레인지를 지정합니다
앱에 UIImage가 제공하는 것 이상의 성능이나 제어가 필요한 경우 Core Image와 Metal을 사용해 표시할 수 있습니다 이는 이미지를 상호작용식으로 변경하려는 경우 적합합니다 Core Image로 적응형 HDR 이미지를 표시할 때 가장 좋은 방법은 사용한 편집 전략에 따라 달라집니다
어떤 종류의 전략이든 목표는 이미지 콘텐츠 헤드룸과 디스플레이 헤드룸을 사용하여 현재 디스플레이 상태에 최적화된 톤 매핑을 하는 것입니다
앱이 HDR 편집 전략을 사용한다면 표시 전에 새로운 toneMapHeadroomFilter를 사용하세요 ISO HDR 파일이라면 새로운 Reference White Tone Mapping Operator가 사용될 것입니다 적응형 HDR 파일이라면 필터는 파일의 고유한 게인 맵에 따라 최적화된 맞춤형 톤 맵 함수를 적용할 것입니다 이것은 toneMapHeadroomFilter를 사용하고 결과를 MTKView에 표시하는 코드 예시입니다 첫 단계로 MTKView를 확장된 레인지 콘텐츠용으로 설정합니다 다음으로 CIFilters를 적용하여 편집된 CIImage를 만듭니다 그리고 뷰의 현재 디스플레이 헤드룸 상태를 가져온 후 새로운 CIToneMapHeadroom 필터를 적용합니다
그런 다음 결과로 나온 톤 매핑된 이미지를 CIRenderDestination API로 렌더링합니다 ‘Core Image, Metal 및 SwiftUI로 EDR 콘텐츠 표시’ 세션에서 MTKView에서 CIImages를 효율적으로 표시하는 방법을 다루고 있습니다
앱에서 SDR 및 게인 편집 전략을 선택할 수도 있습니다 이 경우 표시할 때가 되면 두 가지를 결합하여 톤 매핑해야 합니다 이 작업은 새로운 imageByApplyingGainMap:headroom API로 작업 한 번으로 해낼 수 있습니다 이것은 SDR과 게인 맵 이미지를 개별적으로 편집하고 결합된 결과를 MTKView에 표시하는 코드의 예시입니다 MTKView를 설정하는 코드는 앞에서 본 예시와 동일합니다 그런 다음 CIFilters를 적용하여 편집된 CIImage를 생성하고 적절한 필터를 적용하여 편집된 게인 이미지를 생성합니다 그런 다음 뷰의 현재 디스플레이 헤드룸을 가져오고 applyGainMap API를 사용해 두 이미지를 결합합니다 톤이 매핑된 결과물인 CIImage는 마찬가지로 CIRenderDestination을 사용해 렌더링할 수 있습니다
원한다면 코드에서 HDR CGImage를 EDR CGBitmapContext로 렌더링할 수 있습니다 첫 단계는 ImageIO를 사용해 kCGImageSourceDecodeToHDR 옵션으로 적응형 HDR 파일을 읽는 것입니다 필요하면 CGImageGetContentHeadroom API를 사용할 수 있습니다 이를 알고 싶은 경우의 예로 컨텍스트에 둘 이상의 이미지를 렌더링하는 경우가 있습니다 다음으로 RGBA 하프 플로트 픽셀과 확장된 색 공간으로 확장된 범위의 CGContext를 생성합니다 그런 다음 CGContextSetEDRTargetHeadroom으로 사용할 컨텍스트 범위를 CoreGraphics에 알려줄 수 있습니다 마지막 단계는 이미지를 컨텍스트에 렌더링하는 것입니다 마지막으로 HDR 이미지를 파일로 저장하는 추천 방법입니다 저장을 위한 모범 사례는 로딩과 편집에 사용한 전략에 따라 달라집니다 먼저 이미지를 HDR로 로드하고 편집했다면 가장 최신 방법은 PQ 색 공간의 10비트 HEIF 파일로 저장하는 것입니다 이렇게 하면 이미지를 최상의 정밀도와 레인지로 저장할 수 있습니다 또는 이미지를 SDR 및 HDR로 로드하고 편집했다면 가장 호환성 있는 방법은 적응형 HDR 파일로 저장하는 것입니다 이를 위해서는 두 개의 CIImage로 writeHEIFRepresentation을 호출해야 합니다 첫 단계는 편집된 SDR 이미지와 색 공간을 제공하는 것입니다 편집된 HDR 이미지는 새로운 HDRImage 옵션을 사용하여 전달됩니다 Core Image는 이 두 이미지에서 게인 맵을 계산하고 이를 기본 SDR 이미지와 함께 보조 이미지로 포함시킬 것입니다
SDR과 게인 편집 전략을 사용한다면 두 이미지를 모두 저장하기 위해 writeHEIFRepresentation을 호출해야 합니다 SDR 이미지와 색 공간을 전달하세요 HDRGainMapImage 옵션을 사용해 편집된 게인 이미지도 제공합니다 게인 맵 이미지에 로드 시의 원본 메타데이터 속성이 있다면 적응형 HDR 파일로 저장할 때 이 속성을 사용할 것입니다 ImageIO을 사용해 SDR CGImage와 게인 맵 데이터를 저장할 수도 있습니다 먼저 SDR CGColorSpace를 가진 SDR CGImage로 CGImageDestinationAddImage를 호출합니다 그 다음 게인 맵을 설명하는 딕셔너리를 만듭니다 여기에는 게인 맵의 실제 픽셀 데이터 해당 데이터의 높이, 너비 형식을 설명하는 하위 딕셔너리 그리고 픽셀 데이터를 선형 게인 값으로 변환하는 방법을 설명하는 CGImageMetadata를 포함해야 합니다 대부분의 경우 소스 파일의 CGImageMetadata를 재사용할 수 있습니다 그런 다음 CGImageDestinationAddAuxiliaryDataInfo를 호출하고 새로운 kCGImageAuxiliaryDataTypeISOGainMap 키와 정보 딕셔너리를 전달하기만 하면 됩니다 이것으로 적응형 HDR 파일 형식 설명을 마치겠습니다 이 새로운 형식의 특징과 원리 그리고 여러분의 애플리케이션에서 이를 지원할 수 있게 하는 API와 전략들에 대해 자세히 논의했습니다 이 비디오와 관련 주제의 다른 비디오들이 여러분의 앱이 놀라운 HDR 사진을 제공하는 데 도움이 되길 바랍니다
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.