콘텐츠로 이동

색과 HDR

This content is for v0.4. Switch to the latest version for up-to-date documentation.

alpha2는 명확히 정의된 하나의 색 공간에서 렌더링하고 SDR로 export합니다. 이 페이지에서는 소스 종류별로 그 공간에 들어오는 방식, 엔진이 HDR 비디오를 다루는 방식, 블렌딩과 그라디언트의 동작을 설명합니다. 다 읽고 나면 export에서 어떤 색이 나올지 알 수 있고, 색 태그가 잘못된 소스를 바로잡을 수 있습니다.

엔진은 디스플레이 기준(display-referred)의 **BT.709 원색 선형 광(linear light)**에서 합성하며, 1.0이 SDR 화이트(100니트)입니다. 합성은 항상 premultiplied로 합니다.

모든 export는 SDR BT.709입니다. 브라우저에서는 export 프레임이 BT.709, limited range의 planar I420으로 돌아옵니다. 네이티브에서는 alpha2-host가 선택한 코덱으로 8비트로 인코딩합니다.

소스 읽는 방식
SDR 비디오 sRGB EOTF로 디코딩합니다. 광색역 원색은 BT.709로 변환합니다.
정지 이미지 항상 sRGB 코드 값으로 읽습니다.
HDR 비디오(PQ 또는 HLG) settings.color에 따라, 선형화하고 BT.709로 변환한 뒤 SDR로 톤 매핑하거나, 거부합니다.
OpenEXR(확장 소스) 파일의 원색, 또는 소스가 지정한 primaries(bt709, bt2020, p3_d65, aces_ap0, aces_ap1)의 선형 광 RGB입니다.
문서 안의 색(채우기, 텍스트, 레이아웃) straight(premultiplied가 아닌) sRGB. 0..1 범위의 { red, green, blue, alpha } 또는 CSS hex로 씁니다.

브라우저에서 uploadRgbaImage는 premultiplied sRGB RGBA8 픽셀을 받고, uploadYuvFrame은 프로젝트의 색 파이프라인(톤 매핑을 제어)으로 planar YUV를 변환하며, alpha2/hdr-frames는 planar와 HDR VideoFrame을 업로드합니다.

HDR 소스를 어떻게 다룰지는 settings.color가 정합니다.

{
"width": 1920,
"height": 1080,
"frame_rate": { "num": 30, "den": 1 },
"sample_rate": 48000,
"color": { "hdr": "tone_map", "hdr_peak_nits": 1000 },
"blend_space": "linear_light"
}
  • hdr: tone_map(기본값)은 HDR 소스를 SDR 작업 공간으로 가져옵니다. reject는 렌더링을 거부합니다.
  • hdr_peak_nits: HDR 소스의 최대 휘도로 간주하는 값입니다. 기본값은 1000이고 100부터 10,000까지 지정할 수 있습니다. PQ는 이 값을 넘는 부분이 잘리고, HLG는 이 휘도로 표시되며, 톤 매핑은 이 값을 SDR 화이트로 가져옵니다.

톤 매핑은 ITU-R BT.2390 EETF이며, 색상(hue)을 유지하도록 각 픽셀의 가장 큰 성분에 적용합니다.

hdr이 reject이면 린터가 각 HDR 소스를 hdr_source로 알려 주므로, export가 실패하기 전에 미리 알 수 있습니다.

비디오의 색 정보는 보통 스트림과 프레임의 태그에서 옵니다. 태그가 없거나 잘못되었다면 소스에 color_metadata를 지정하세요. 이 값은 모든 호스트에서 프레임과 스트림의 태그를 덮어쓰므로, 모든 대상 환경이 소스를 같은 방식으로 읽습니다.

{
"id": "drone",
"kind": "video",
"locator": "file:///media/drone-hlg.mov",
"color_metadata": {
"primaries": "bt2020",
"transfer": "hlg",
"matrix": "bt2020_ncl",
"range": "limited",
"dynamic_range": "hdr"
}
}
필드 값
primaries bt601, bt709, bt2020
transfer bt709, srgb, pq, hlg
matrix bt601, bt709, bt2020_ncl, rgb(이미 RGB)
range limited, full
dynamic_range sdr 또는 hdr. transfer가 pq나 hlg일 때만 정확히 hdr

정지 이미지는 이 값을 무시합니다. 정지 이미지는 항상 sRGB로 읽습니다.

settings.blend_space는 블렌드 모드를 계산하는 공간을 고릅니다.

  • linear_light(기본값): 물리적으로 의미 있는 블렌딩.
  • srgb_encoded: 디자인 도구와 CSS처럼 sRGB로 인코딩된 값에서 블렌딩합니다. overlay나 soft-light 같은 대비 모드는 이 공간에서만 디자인 도구와 일치합니다.

그라디언트는 premultiplied 정지점을 선형 광에서 보간하므로, 두 색 사이의 그라디언트는 두 색의 물리적 혼합을 지나갑니다. 이펙트의 color 파라미터는 색 선택기에 보이는 그대로의 straight(premultiplied가 아닌) sRGB RGBA입니다.