개요
이 문서는 지정된 카메라로 캡처하기 위해 LED 월에서 콘텐츠 디스플레이를 캘리브레이션하는 단계를 다룹니다. 아래에서 더 자세히 다룰 단계는 다음과 같습니다.
- 씬에서 이미시브 언릿 텍스처를 사용하여 UE에서 알려진 RGB 값으로 차트를 표시합니다.
- 모든 카메라 관련 파라미터를 끄고 OpenColorIO(OCIO)가 PQ 인코딩만 갖게 합니다.
- Brompton이 PQ 인코딩된 RGB 신호를 수신하고 이를 PQ Achievable로 해석하도록 설정합니다. 또한 월 재생성을 Achievable로 설정합니다.
- 월의 움직임을 카메라로 캡처합니다.
- 캘리브레이션 단계 도중 카메라의 화이트 밸런스를 6500으로 설정하고 월의 밝은 흰색 패치를 쉽게 캡처할 수 있는 값으로 노출을 설정합니다.
- 표준 방법을 사용하여 카메라 영상을 선형화한 다음 카메라 인코딩 컬러 스페이스에서 UE 카메라 검증 컬러 스페이스(아래에서 사용됨)로 변환합니다.
- 알려진 RGB에서 선형화된 검증 스페이스 RGB로의 변환 매트릭스를 찾습니다. 매트릭스를 반전시켜 카메라 캘리브레이션 매트릭스(camera calibration matrix) 를 만듭니다.
- 차트를 UE에서 다시 표시합니다. 이제 작업 컬러 스페이스에 있는 것으로 추정됩니다.
- OCIO 소스를 작업 컬러 스페이스로 설정하고 대상을 다음 3단계를 포함하는 스페이스로 설정합니다.
- 레퍼런스에서 카메라 검증 스페이스로의 매트릭스 변환.
- 계산된 카메라 캘리브레이션 매트릭스 애플리케이션.
- 선형에서 PQ 인코딩.
- OCIO 소스를 작업 컬러 스페이스로 설정하고 대상을 다음 3단계를 포함하는 스페이스로 설정합니다.
- 차트를 다시 캡처하고 영상을 작업 컬러 스페이스로 선형화합니다. 차트를 선형화된 영상과 비교합니다. 가능하면 선형 콘텐츠를 통해 분석적으로 수행되어야 하지만 양쪽에 동일한 룩 lut를 적용하여 눈으로 수행할 수도 있습니다.
인카메라 VFX용 컬러 파이프라인
위 개요는 카메라/LED 월 조합을 위한 캘리브레이션에 사용되는 단계를 간단히 보여줍니다. 이 요약은 UE에서 LED 프로세서로의 적절한 컬러 파이프라인 구성을 설명하기 위해 제공됐습니다.
언리얼 엔진의 작업 컬러 스페이스(Working Color Space) 는 명시적이지 않습니다. 묵시적으로 선형 Rec709(선형 sRGB)입니다. 즉, 인코딩이 선형이며 컬러 스페이스는 Rec709 프라이머리 및 화이트 포인트입니다. 다른 컬러 스페이스에서 텍스처 및 머티리얼을 제공하는 것이 가능하며, 이는 작업 컬러 스페이스가 Rec709가 아님을 엔진에 암시합니다. 일반적인 대안 스페이스는 많은 VFX 스튜디오에서 사용하는 ACEScg 입니다.
중요한 점은 가상 씬이 선형이며 이러한 선형 값의 목적은 LED 월에 표현되는 것이라는 사실입니다. 이를 위해 포스트 프로세싱 체인의 일부가 비활성화(또는 0으로 설정)되어 일반 UE '카메라 이펙트'가 가상 콘텐츠에 적용되지 않아야 합니다.
블룸 강도(Bloom Intensity) 및 비녜트 강도(Vignette Intensity) 는 일반적으로 LED 월의 출력에 바람직하지 않으므로 0.0 으로 설정되어야 합니다. 또한 색 공간 확장(Expand Gamut) 값과 톤 커브(Tone Curve) 양을 0.0 으로 설정해야 합니다. OCIO가 활성화되면 톤 커브 양은 자동으로 0으로 설정되지만 색 공간 확장 값은 사용자가 제어합니다.
OCIO 변환에는 로컬 OCIO 환경설정 파일을 레퍼런스하는 OCIO 환경설정 에셋이 필요합니다. 또한 이 에셋에는 OCIO 환경설정의 컬러스페이스 허용 목록이 있으며, 이를 UE에서 사용할 수 있습니다. 특정 소스 및 대상 컬러스페이스를 nDisplay 출력 뷰포트에 연결하는 방법에 대한 정보는 이 페이지를 참고하세요.
- 선형에서 신호 값으로의 OCIO 변환.
- 소스 컬러 스페이스: 선형 작업 컬러 스페이스
- 소스 스페이스를 OCIO 레퍼런스 스페이스로 변환합니다.
- 대상 컬러 스페이스: PQ 인코딩된 신호 컬러 스페이스
- OCIO 레퍼런스 스페이스를 대상 스페이스로 변환합니다.
- OCIO 레퍼런스에서 선형 카메라 캘리브레이션 컬러 스페이스로 변환합니다.
- 카메라 캘리브레이션 매트릭스
- 선형에서 PQ 변환
- 소스 컬러 스페이스: 선형 작업 컬러 스페이스
포스트 프로세스 머티리얼(Post Process Material, PPM) 을 사용할 수 있지만, OCIO가 활성화된 경우 톤매핑 이후 인코딩된 데이터에서 작동하게 됩니다. 이는 예상치 못한 결과를 제공할 수 있습니다. PPM에서 이용 가능한 모든 값은 출력 신호 컬러스페이스 및 컬러 인코딩에 있기 때문입니다.
PPM을 사용하여 씬을 변경하려면 톤매핑 이전에 사용하는 것이 좋습니다. 그러면 머티리얼이 선형 값에서 작동합니다. 예를 들어 자체 색 보정 제어를 제공하려는 경우, 이는 그러한 작업에 적합합니다.
OCIO 변환 디테일
OCIO 변환의 목적은 UE의 작업 컬러 스페이스를 LED 프로세서용 출력 신호로 변환하는 것입니다.
아래의 카메라 캘리브레이션 단계는 캘리브레이션이 타깃과 일치하는지 판정하기 위해 특정 컬러 스페이스를 추정합니다. 이를 카메라 캘리브레이션 컬러 스페이스(Camera Calibration Color Space) 라고 합니다. 작업 컬러 스페이스(Working Color Space) 와 동일할 수도 있지만 유연성을 위해 여기서는 별개로 칭합니다.
config.ocio 파일에서 PQ 인코딩된 신호 컬러 스페이스의 타깃 스페이스는 다음 세 가지 단계와 연관됩니다.
-
첫째, OCIO 레퍼런스에서 선형 카메라 캘리브레이션 컬러 스페이스로 변환합니다.
-
둘째, 카메라 캘리브레이션 매트릭스가 적용되어 선형 카메라 캘리브레이션 컬러 스페이스를 선형 신호 컬러 스페이스로 변환합니다. 신호 컬러 스페이스는 프라이머리를 사용하여 정의되지 않고 캘리브레이션 프로세스를 통해 정의된다는 점에 유의하세요.
-
세 번째 단계는 선형에서 PQ로 인코딩하는 것입니다.
단계의 시퀀스를 구성하기 위해 일부 개별 OCIO 컬러 스페이스를 정의해야 합니다. 첫째는 선형 카메라 캘리브레이션 컬러 스페이스로, 아래 예시에서 선형 sRGB(선형 Rec709라고도 함)이며 'Gamut sRGB'로 명명되어 있습니다. 또 한 가지 필수 변환은 선형에서 PQ로의 단순 변환입니다. 이 변환은 선형 값 1.0에 니트 값 100이 있다고 추정하고 표준 0~10000을 0~1 인코딩된 값으로 변환합니다.
- !<ColorSpace>
name: Gamut - sRGB
family: Gamut
equalitygroup: ""
bitdepth: 32f
description: |
"BT.709 / sRGB" colorspace primaries and "D65" whitepoint as per "IEC 61966-2-1:1999".
isdata: false
allocation: lg2
allocationvars: [-8, 7, 0.00390625]
- !<ColorSpace>
name: CCTF - PQ
family: CCTF
equalitygroup: ""
bitdepth: 32f
description: |
"PQ" color component transfer function as per "SMPTE ST 2084". Assumes scene value of 1.0 corresponds to 100 nits.
isdata: false
allocation: uniform
allocationvars: [0, 1]
to_reference: !<GroupTransform>
children:
- !<FileTransform> {src: Dolby_PQ_10000_to_linear.spi1d, interpolation: linear}
- !<CDLTransform> {slope: [100, 100, 100], direction: inverse}
이 예시에서 OCIO 선형 레퍼런스 스페이스는 선형 카메라 캘리브레이션 스페이스와 동일하므로 색 공간 sRGB 스페이스에서는 컬러 변환이 필요하지 않습니다.
여기서 보시는 바와 같이 실제 타깃 컬러 스페이스는 인코딩된 신호 컬러 스페이스로 변환됩니다. 이 변환에는 컬러 매트릭스가 포함되며, 이어서 선형에서 PQ로 인코딩됩니다. 이 컬러 매트릭스의 유도는 나중에 설명하겠습니다. 아래 매트릭스 트랜스폼의 값은 예시일 뿐입니다. 사용하는 특정 LED 및 카메라를 위해 수행한 캘리브레이션으로 이 값을 대체해야 합니다.
- !<ColorSpace>
name: View - Camera on LED Walls - PQ
family: View
equalitygroup: ""
bitdepth: 32f
description: |
View for content on LED Walls (via camera calibration calcs) assuming input in OCIO Reference, then encoding to PQ "ST 2084" HDR color component \ transfer function. Assumes scene value 1.0 corresponds to 100 nits.
isdata: false
allocation: uniform
allocationvars: [0, 1]
from_reference: !<GroupTransform>
children:
- !<MatrixTransform> {matrix: [0.80252942, 0.12102891, 0.07644168, 0, 0.05176983, 0.89236679, 0.05488673, 0, 0.01495024, 0.07238952, 0.88267732, 0, 0, 0, 0, 1]}
- !<ColorSpaceTransform> {src: Gamut - sRGB, dst: CCTF - PQ}
씬 노출
선형 값은 PQ로 인코딩되고 이 값은 표준 0~10000니트 범위에서 해석되므로 씬 노출은 OCIO 변환 이전에 조정되어야 합니다. 이는 시네카메라 또는 포스트프로세스 볼륨에서 노출 컨트롤을 통해 수행할 수 있습니다. 여기서 중요한 점은 가상 씬 휘도와 LED 월의 최종 밝기를 서로 대응하게 만드는 것입니다.
일반적으로 선형 씬은 HDR 값을 포함합니다. 대부분의 씬 값은 100니트 안팎의 휘도 값이지만 일부분은 훨씬 밝을 수 있으며, 일부 픽셀은 2000~3000니트까지 높아질 수도 있습니다. 대부분의 LED 월에서 이러한 밝기는 LED 패널의 능력 밖입니다. 월의 결과물은 픽셀에서 동일한 밝기여도 씬에서는 다를 수 있습니다. LED에서 최대로 표시 가능한 값은 1500~1800니트 정도이기 때문입니다. 예를 들어 LED의 최대 밝기가 1600니트 정도라면, 이는 노출 캘리브레이션 후 씬 선형 값 16.0에 해당합니다.
카메라 캘리브레이션 매트릭스
카메라 캘리브레이션 매트릭스의 목적은 가상 씬 선형 컬러와 카메라 영상 선형화로 생성된 컬러를 일치시키는 것입니다.
참고로 카메라에는 고유한 스펙트럴 반응 세트가 있으며, 이는 카메라 브랜드별로 다르고 사람 눈마다 다릅니다. LED에는 아주 좁은 스펙트럴 분포가 있기 때문에, 카메라 반응의 미세한 차이로 인해 촬영된 LED가 다른 카메라의 결과 영상에서는 다르게 보일 수 있습니다. 이 문제를 완화하려면 LED 월 픽셀을 약간 변경하여 특정 카메라의 선형화된 영상이 씬에 표현된 값과 일치하게 해야 합니다.
매트릭스를 생성하려면 UE에 의해 최소 4개 컬러 값이 표시되어야 합니다. 그 4개 값은 월의 결과 픽셀이 카메라에 의해 캡처되는 빨간색, 녹색, 파란색, 흰색 패치입니다. 이것에 제대로 작동하려면 LED 프로세서가 월에 네이티브 컬러를 생성하도록 구성되어야 합니다. Brompton 프로세서의 경우 이를 달성 가능이라고 합니다. 다른 벤더는 이를 네이티브라고 합니다. 이 컬러 스페이스를 사용하는 목적은 캘리브레이션이 컬러 값 클리핑 없이 월의 전체 기능을 사용하려는 것입니다. 또한 컬러 인코딩은 최종 촬영에 사용될 컬러 인코딩과 동일하게 설정되어야 합니다. 이 Brompton 구성의 경우 PQ 인코딩을 사용했습니다.
실제 사례에서는 전체 행동을 예상대로 만들기 위해 패치를 더 많이 사용했습니다. 그러나 캘리브레이션 계산에는 4개 패치만 필요합니다.
다음은 카메라 캘리브레이션 매트릭스를 만들기 위한 기본 방법입니다. 우려 사항과 잠재적 문제가 있다는 점에 유의하세요. 이에 대해서는 이후에 다룰 것입니다.
씬 선형 차트 표시
UE에서 지오메트릭 평면 오브젝트와 언릿 모드에서 패치 값을 표시하는 셰이더를 사용하여 씬 선형 차트를 표시합니다. 이 값은 알려진 텍스처 파일 또는 평면의 셰이더 머티리얼 내 수학에서 풀링될 수 있습니다.
차트는 알려진 씬 밝기 값을 갖는 빨간색, 녹색, 파란색, 하얀색 패치를 포함합니다. 가장 단순한 예시는 빨간색의 경우 (1.0, 0.0, 0.0)이며 나머지 패치의 값도 비슷합니다. 차트는 UE 노출 조정을 통해 LED 월의 특정 타깃 밝기를 갖도록 표시되어야 합니다. 밝기는 월의 최대 값에 근접해야 하지만 그보다는 약간 낮아야 클리핑으로 인해 발생하는 컬러 시프트를 피할 수 있습니다.
차트는 최종 영상에서 각 패치의 샘플링이 쉽게 가능할 정도로 충분히 커야 하지만, 그와 동시에 렌즈 비녜트로 인해 발생하는 감쇠 영역을 피할 수 있을 정도로 중앙 정렬되고 작아야 합니다.
OCIO 변환은 차트가 표시될 때 활성화되어야 합니다. 사용된 변환은 최종 목표 변환과 유사해야 하지만 캘리브레이션 매트릭스 없이 선형에서 PQ로의 변환만 가능합니다. 이 단계를 통해 캘리브레이션 매트릭스를 만들고 있기 때문입니다.
벤더를 위한 영상 선형화
영상은 특정 벤더를 위한 표준 방법을 사용하여 선형화되어야 합니다. 예를 들어 Sony Venice의 경우 영상은 Sony XOCN F55 ST 코덱으로 선형화되어야 합니다. 데이터는 SGamut3-시네 컬러 스페이스에서 인코딩된 SLog3입니다. 이 간단한 예시에서는 Nuke12의 Read 노드를 사용하여 Rec709 색 공간으로 선형화했습니다.
영상 선형화에 사용된 메서드를 알아두고 결과가 정말 선형인지 확인하는 것이 중요합니다. 이 예시에서는 Rec709로 선형화했습니다. 이 용어는 오해를 유발할 수 있습니다. 보통 콘텐츠에 룩 lut가 적용된 Rec709 카메라 출력에 대해 이야기하는 사용자가 많기 때문입니다. 이 캘리브레이션에서 목표는 룩이 적용되지 않은 네이티브 카메라 포맷으로 캡처하고 이를 표준 방법을 사용하여 변환하는 것입니다.
카메라가 6500K 화이트 밸런스로 설정됐다고 가정할 때 하얀색 패치는 가장 중립입니다. 하얀색 패치에 색조가 강하게 있는 경우 진행하기 전에 해결해야 하는 문제가 있을 수 있습니다.
매트릭스 생성 수학
다음 세그먼트는 R, G, B, W 샘플 데이터에서 매트릭스가 생성되는 수학입니다.
우선 3x3 매트릭스가 빨간색, 녹색, 파란색 패치 샘플에서 만들어집니다.
| RR | GR | BR | ||
| F | = | RG | GG | BG |
| RB | GB | BB |
이 행렬의 반전을 사용하고 가장 높은 값이 1.0으로 정규화된 하얀색 샘플을 곱합니다.
계산된 스케일 인수를 사용하여 F 매트릭스를 스케일 조절한 다음 그 반전을 계산합니다.
| SR | 0 | 0 | ||||
| F | = | 0 | SG | 0 | x | F |
| 0 | 0 | SB |
OCIO 변환에 캘리브레이션 매트릭스 배치
앞서 봤듯이 결과로 생성된 캘리브레이션 매트릭스를 월/카메라 조합을 위해 OCIO 변환에 넣어야 합니다. 매트릭스는 9개의 숫자로 표현되며 매트릭스의 첫 행이 먼저 주어지고 다음으로 두 번째, 세 번째 행이 주어집니다.
위 예시에서 OCIO 레퍼런스 컬러 스페이스는 Rec709였습니다. 이는 캘리브레이션 도중 선형화에 사용된 컬러 스페이스에 매칭됐습니다. 다른 OCIO 레퍼런스 컬러 스페이스를 선택하는 경우 캘리브레이션 매트릭스가 레퍼런스 컬러 스페이스에서 카메라 영상 선형화에 사용된 Rec709 스페이스로의 변환을 포함해야 합니다. 이는 위 개요에서 '레퍼런스에서 카메라 검증 스페이스로의 매트릭스 변환'으로 다뤄졌습니다.
캘리브레이션 검증
카메라 캘리브레이션 매트릭스가 활성화되었고 제대로 작동하는지 확인하는 것이 좋습니다. 그렇게 하려면 초기 캡처에 사용된 것과 동일한 방법을 사용하여 알려진 패치를 표시합니다. 컬러 스페이스 타깃이 새로 생성된 캘리브레이션 매트릭스를 포함해야 한다는 점만 다릅니다.
목표는 씬 선형 스페이스의 알려진 패치 값이 동일한 작업 공간으로의 선형화 이후 영상에서 발견된 값과 일치하는 것입니다.
앞서 필수 패치는 단순히 R, G, B, W였습니다. 검증의 경우 0~1 사이 알려진 위치에 있는 값을 포함하는 것이 좋습니다. 이 이미지는 0.25 간격으로 나뉘어 선형 스페이스에서 샘플의 간격이 균등한 패치의 5x5x5 컬렉션을 보여줍니다.
RGBW 이상의 샘플을 포함하는 이유는 이 이미지의 선형화된 영상이 밝기로 인한 클리핑(또는 기타 우려 사항) 유무를 확인하는 데 도움이 되기 때문입니다.