Article/Computer Graphics

[Article] HDR과 ACES

김성인 2023. 11. 27. 22:01

[Article] HDR과 ACES

 

작성자 : 김성인


목차

 

톤 매핑이란?

 

톤 매핑과 LUT의 차이점

 

주요 용어

  광도(luminosity)

  노출(exposure)

  다이나믹 레인지(dynamic range)

    - LDR

    - HDR

    - SDR

  칼라 스페이스

    - sRGB

    - 감마 보정

    - 리니어 칼라 스페이스

sRGB, 감마 보정, 리니어

 

감마 보정의 목적 // 번거롭게 왜 이 공정을 거치나요?

 

좀 더 실제에 가까운 색상과 밝기를 표현하기 위해서는?

 

HDR은 왜 사용하나?


이제부터 우리의 게임 개발에서 생각해 보자.

 

게임엔진에서 HDR 사용의 장단점

 

HDR을 올바르게 사용하기 위하여

  - Linear color space의 사용

  - Tone mapping의 사용

 

ACES(Academy Color Encoding System)

 

ACES 워크플로

 

게임 개발에서의 ACES

 

이미지 소스

 

엔진의 설정

 

DCC 툴의 작업물과 엔진에서 최종 결과물이 다른 이유

 

경험적인 워크플로 개선방법

 

참고자료


톤 매핑이란?

  • 이미지의 색상과 강도를 HDR에서 표준 모니터에 표시하기에 적합한 낮은 동적 범위로 매핑하는 데 사용되는 기술

톤 매핑과 LUT의 차이점

  • 컴퓨터 그래픽스에서 톤 매핑은 이미지의 색상과 강도를 조정하여 표준 모니터에 표시하기 적합하게 만드는 사용되는 기술이고, LUT는 하나의 색 영역을 다른 색 영역으로 매칭하는 기술로, 색상 그레이딩에 자주 사용된다.
  • 출력되는 색이 변경되는 부분에서는 동일해 보이지만, 각 기술의 목적과 구현 방식이 다르다.

주요 용어


광도(luminosity)

  • 광원의 밝기

노출(exposure)

  • 카메라 센서나 필름에 도달하는 빛의 양
  • 이미지가 얼마나 밝거나 어둡게 나타날지 결정하는 중요한 요소
  • 정확한 색상, 디테일, 균형 잡힌 색조 범위로 이미지를 캡처하려면 적절한 노출이 필요하다.

DR(dynamic range)

  • 이미지의 가장 어두운 부분과 가장 밝은 부분의 차이, 즉 명암비

LDR(low dynamic range)

  • 제한된 범위의 색상, 밝기 값으로 인코딩된 그래픽이나 이미지

HDR(high dynamic range)

  • LDR 보다 더 넓은 범위의 색상과 밝기 값을 사용하여 더욱 극단적인 대비로 장면을 표현한다.
  • 인간의 눈이 색상, 밝기를 인식하는 방식을 더욱 정확하게 반영한다.

SDR(standard dynamic range)

  • 디지털 이미지는 일반적으로 red, green, blue (RGB) 3채널로 구성되어 있고, 각 채널당 8비트로 표현되어 있어, 0 ~ 255의 밝기로 표현할 수 있다.

칼라 스페이스

  • 일반적으로 3차원 모델로 표현되는 특정 색상 구성으로, 디스플레이 장치에 재현 가능한 색상 범위를 정의한다.
  • 색상을 설명하고 해석하는 표준화된 방법을 제공하여 다양한 장치와 응용 프로그램에서 색상 표현의 일관성을 보장하기 위한 규격이다.

sRGB(standard Red Green Blue)

  • 컴퓨터 그래픽스에서 사용되는 “표준화된 RGB 색 공간”
  • gamma 0.45

감마 보정

  • 빛의 강도를 비선형으로 변형하는 것
  • gamma 2.2

리니어 칼라 스페이스

  • 감마 보정을 하지 않은 선형 칼라 공간
  • 선형적 처리가 감마 보정을 한 것보다 색을 정확하게 나타낼 수 있다.

sRGB, 감마 보정, 리니어 

  • 가로축은 빛의 세기, 세로축은 빛의 밝기를 나타낸다.
  • 위 그래프를 해석하기 위해서는 먼저 gamma로 표시되어 있는 그래프를 주목하자.  이것은 출력 그래프(보통 모니터)이다.
  • sRGB의 경우 입력 데이터(보통 이미지)의 그래프이다.
  • linear는 sRGB(gamma 0.45)를 gamma(gamma 2.2)로 처리하면 얻을 수 있는 목표 결과값이다.
  • 모니터의 출력은 gamma 2.2 공간에 존재하기 때문에, sRGB의 색상은 gamma 0.45의 공간으로 변환하여 기록하며, 최종적으로 감마 보정을 통하여 gamma 1.0의 선형 공간을 만들어 낸다.

감마 보정의 목적 // 번거롭게 왜 이 공정을 거치나요?

  • 인간의 시각은 베버의 법칙에 따라 밝기에 대해 비선형적으로 반응한다.
  • 선형적으로 빛의 밝기를 나열하게 되면 어두운 영역의 단계가 부드럽게 이어지지 않는 현상이 발생한다.
  • 위의 이유로 어두운 영역에 더 많은 색의 단계를 배치하고, 그만큼 밝은 영역의 단계를 줄인다.
  • 결과적으로 한정된 영역의 색과 밝기를 효율적으로 사용하기 위함이다.

좀 더 실제에 가까운 색상과 밝기를 표현하기 위해서는?

  • HDR(high dynamic range)를 이용한다.
  • Linear color space를 이용한다.

HDR은 왜 사용하나?

  • 현실에서의 실제 밝기는 인간이 인지하는 영역을 넘어서고 있다.  그리고 LDR, SDR은 이 인간의 인지 영역에 미치지 못하기 때문에, 렌더링하는 장면(이미지)는 항상 현실 세계와 다르게 느껴진다.
  • 앞서 이야기하였듯이, HDR은 LDR, SDR보다 더 넓은 색상과 밝기를 담을 수 있기 때문에, 인간이 인지하는 현실 세계 더욱 가깝게 접근할 수 있다.


이제부터 우리의 게임 개발로 접근해 보자.


게임엔진에서 HDR 사용의 장단점

HDR 사용의 장점

  • 밝은 영역에서 컬러 손실이 발생하지 않음.
  • 블룸 및 글로우 효과를 지원
  • 단조로운 조명 영역에서 밴딩 현상(줄무늬)이 감소

HDR 사용의 단점

  • VRAM 사용량이 증가
  • 사용 시 톤 매핑의 계산 부하가 증가
  • 하드웨어 안티앨리어싱이 HDR 렌더링과 호환되지 않음.

HDR을 올바르게 사용하기 위하여

linear color space의 사용

  • 감마 보정 공간과 같은 비선형 색 공간은 높은 동적 범위에서 왜곡이 발생 할 수 있다.
  • 하단의 그래프는 0 ~ 1까지의 감마 보정에 관련된 그래프이다.

  • HDR은 1을 넘는 밝기를 기록하는데, 위 그래프를 HDR에 맞춰서 그리게 된다면 이렇게 된다.

  • 정리하면 비선형 보정들은 모두 1의 값을 넘어서게 되면 명암이 역전되는 현상이 일어날 수 있다.

Tone mapping의 사용

  • SDR은 음영과 색을 0에서 1까지로 나타낼 수 있다.  // 8비트의 경우 RGB 채널 각각 0에서 255까지 표현 가능
  • HDR은 SDR의 범위를 넘어서는 값을 기록한다.
  • 기본적으로 출력용 디스플레이는 SDR과 같이 0에서 1까지만 출력이 가능하다.
  • 즉, HDR은 SDR 보다 더 넓은 범위의 휘도 값을 캡처할 수 있지만 이러한 값은 디스플레이에서 모두 표현이 불가능하기 때문에, 디스플레이에 표현할 수 있는 "제한된 범위"에 매핑되어야 한다.  이 매핑을 하는 기능이 Tone mapping이다.

본격적으로 Tone mapping에 들어가기 전에 다시 한번 몇 가지 정확하게 집고 들어가야 하는 부분을 알아보자.

  1. 현실에서 빛의 “에너지”의 양은 제한이 없다. 그렇기 때문에 휘도 값은 무제한이라고 할 수 있다.
  2. 대부분의 모니터는 0 ~ 255의 RGB 범위 내에서 출력을 한다.
  3. 1, 2의 내용을 연장시켜 보면, RGB 범위 안에 무제한에 가까운 값을 넣어야 하는데, 사실 불가능하다.
  4. 3의 이유로 특정 값을 넘는 높은 휘도의 값은 완전히 손실되며, 아트 쪽에서는 “색이 탄다”, “색이 날아간다”라고 표현한다.

위의 일이 일어나지 않도록 Tone mapping을 사용하여 최대한 해결한다.

  • 최대한이라고 표현하는 것은 현재 컴퓨터 그래픽스에서 완벽하게 해결은 불가능하기 때문이다.

ACES(Academy Color Encoding System)

  • 영화 예술 과학 아카데미(Academy of Motion Picture Arts and Sciences)의 후원 하에 개발된 색상 관리, 이미지 교환 시스템이다.
  • 서로 다른 입력 소스 간의 색 공간을 표준화하는 것을 목표로 한다.
  • 높은 동적 범위, RGB 기반 워크플로 및 전체 스펙트럼 궤적을 포함하는 매우 넓은 색역이 특징이다.

  • 도표에서 볼 수 있듯이 sRGB보다 ACES가 더욱 넓은 색 공간에 대한 색의 영역을 가지고 있다.
  • 중요한 개념이 하나 있는데, ACES는 Color Space가 아니고, Color Management System이다.
    • Color Space는 따로 설정해야 한다.
    • Color Space와 별도로 작동하기 때문에, 독립적이고, 유동적으로 변경이 가능하다.

ACES 워크플로

 

  • 번역 : 입력 장치 변환(IDT): 소스 미디어를 장면 참조, 선형 빛, ACES 색상 공간으로 변환합니다. 각 카메라 유형 또는 이미징 장치는 자체 IDT가 필요합니다.
  • 번역 : 출력 장치 변환(ODT): RRT의 고 다이내믹 레인지 출력을 특정 색 공간과 디스플레이 장치에 대한 디스플레이 기준 값으로 매핑합니다. 각 대상 유형은 자체 ODT를 필요로 합니다.

 

기본적으로 ACES 워크플로는 위의 그림과 같이 총 5개의 공정으로 진행된다.

 1. 입력 데이터

  • sRGB, linear 원시데이터, ACEScg 데이터
  • Gamma Color space, Linear Color space에서 작업된 소스들이 각자의 포맷에 맞춰 혼재되어 있는 상태이다.

 2. 입력 변환

  • 입력된 데이터는 하나의 공간(ACEScg)에서 데이터 가공을 하기 위하여 동일 규격으로 변환한다.
  • Linear Color space로 변환
  • Decoding의 개념

 3. ACEScg 작업공간에서의 데이터 가공

 

 4. 출력 변환

  • 가공된 데이터들이 출력 장치에 맞춰 변환한다.
  • Encoding의 개념

 5. 출력 데이터

 

ACES는 Encoding 시스템이다. 하지만 ACES 워크플로에 대해서 설명에서는 ACEScg 공간에 넣어 가공하고, 다시 출력장치로 보내기 위하여 변환을 거치기 때문에 이렇게 표현하였을 뿐이다.


게임 개발에서의 ACES

 

이미지 소스

3D Texture

  • 포토샵 등의 DCC 툴을 이용하여 제작한 이미지(텍스처)는 sRGB일 경우가 대부분이다. 그렇기 때문에 감마 보정을 거친다는 것을 인지한 상태로 작업을 진행해야 한다.
  • 상용 엔진에서도 기본적으로 이미지(텍스처)는 sRGB 받아들인다.

Linear Texture

  • Normal map, Hight map 등 색을 표현하는 것이 아닌 이미지(텍스처)들은 하나의 데이터로 인식하고 접근하는 것이 좋다.
  • 이 데이터들은 sRGB와 다르게 선형의 데이터로 이루어져 있기 때문에 자주 사용되는 형태들은 상용 엔진에서도 선형 데이터로 입력되기 때문에 특별히 변환을 하지 않아도 된다.
  • 특별한 경우에만 꼭 Linear DATA라고 명시해야 한다.

2D Sprite, UI Sprite

  • 3D texture와 같은 개념

엔진의 설정

Color Space : Linear Color Space

Tonemapping : ACES 

HDR : ON

 

여담으로 Unreal 엔진의 경우 위의 설정이 기본이다.  Unity의 경우에 한하여 변경해 주어야 한다.

Unity의 경우 HDRP를 제외하고 변경해 주어야 한다.


DCC 툴의 작업물과 엔진에서 최종 결과물이 다른 이유

이것은 개발 환경에 따라서 많은 변수들이 존재하지만, 대체적으로 엔진과 DCC 툴의 차이점에서 비롯된다.  이것들에 대해서 알아보자.


게임엔진의 Color space와 DCC 툴의 Color space가 대부분 다르다.

  • DCC 툴들은 대부분 sRGB, Gamma2.2의 작업 공간이다.

Aseprite의 Color space 설정 화면
서브스턴스 페인터 화면

게임엔진에서는 DCC 툴과 다르게 Tonemapping이 작동한다.

  • DCC 툴 중에서 서브 스탠스 페인터의 경우 이 차이를 좁힐 수 있는 LUT 기능이 존재한다. 그 외의 툴은 아직 확인하지 못하였다.

게임엔진과 DCC 툴은 각각 셰이더와 라이팅 세팅, 계산이 다르게 적용되고 있다.

  • DCC 툴의 경우 고유의 라이팅 모델 등을 제공하기 리소스를 게임엔진에 넣게 되면 너무나 당연하게 때깔이 다르게 나온다.

게임에서 UI와 UI가 아닌 공간이 존재한다.

  •  3D 공간의 오브젝트와, 2D 공간의 UI는 다른 공간에 존재하기 때문에 특별한 설정을 하지 않는 이상 UI는 색이 변경되지 않는다.
  • UI의 경우 오버레이 카메라의 개념이다.

경험적인 워크플로 개선 방법

  • 최종 결과물은 DCC 툴(대표적으로 맥스, 서브스턴스 페인터) 보다, 실제 인게임과 같은 테스트 환경을 조성 후 확인하도록 하자.
  • sRGB에서 작업할 때, 암부에 있어서 너무 어둡거나, 명암의 차이를 좁게 사용하지 않도록 하자. 이 부분에 있어서 인 게임에 넣게 되면 분명 명암의 차이가 사라지거나 검은색으로만 보일 수 있다.
  • DCC 툴에 LUT를 적용할 수 있다면 최대한 ACES tonemapping에 맞출 수 있는 컬러 그레이딩을 적용하자.
  • ACEScg 환경의 색으로 이미지 자체를 변경해 주는 툴이 존재하는데, 이 툴을 통하여 이미지 자체를 가공해버리게 되면, 게임엔진에 넣었을 경우, 두 번 ACES tonemapping을 거친 것과 같게 된다. 심지어 변경한 이미지의 색이 열화 되었다면 돌이킬 수 없으니 주의하자.

Color Space 변경시 주의사항

  • DCC 툴과 툴 사이에서도 Color Sapce를 다르게 설정하면, 다른 색, 다른 명도의 이미지로 보이기 때문에 혼돈에 빠질 수 있다.
  • 포토샵에서 동일한 이미지를 다른 Color Space에서 저장하였을 경우 하단의 이미지처럼 색과 명도가 다르게 저장된다.


참고자료

https://en.wikipedia.org/wiki/Luma_(video)

https://64.github.io/tonemapping/

https://imdoingitwrong.wordpress.com/2010/08/19/why-reinhard-desaturates-my-blacks-3/#comment-3

http://filmicworlds.com/blog/filmic-tonemapping-with-piecewise-power-curves/

https://www.indigorenderer.com/documentation/manual/rendering-with-indigo/camera/tone-mapping

https://seenaburns.com/dynamic-range/

https://garagefarm.net/ko-blog/what-is-color-space-and-why-you-should-use-aces

https://acescolorspace.com/

https://docs.unrealengine.com/5.3/ko/color-grading-and-the-filmic-tonemapper-in-unreal-engine/

 

'Article > Computer Graphics' 카테고리의 다른 글

[HARDWARE] Mobile Device의 특징  (0) 2023.12.14
GPGPU  (0) 2023.12.14
[HARDWARE] CPU와 GPU의 비교  (0) 2023.12.14
[HARDWARE] GPU의 구조와 작동  (0) 2023.12.14
[HARDWARE] CPU의 구조와 작동  (0) 2023.12.14