이 퀵스타트 가이드에서는 카메라 캘리브레이션(Camera Calibration) 플러그인을 사용하여 렌즈 디스토션과 노달 포인트 오프셋을 캘리브레이션하는 방법에 대해 살펴봅니다.
이 가이드의 예시에서는 프로덕션 카메라, 옵티컬 카메라 트래킹 시스템 및 Blackmagic 8k Pro 캡처 카드를 소스 비디오 입력으로 사용합니다.
전제 조건
다음 하드웨어가 있어야 합니다.
- 카메라 및 렌즈(필수)
- 렌즈 초점 길이 및 초점 거리에 대한 지식
- 크롭 인수와 같이 이미지 크기에 미치는 영향을 포함하여 카메라 센서 크기 및 해상도에 대한 지식
- 렌즈 인코딩 시스템, 라이브 링크 호환(권장 사항)
- 렌즈 인코딩 시스템이 없는 경우 렌즈 파라미터를 직접 읽고 버추얼 라이브 링크 서브젝트에 입력할 수 있습니다.
- AJA 또는 Blackmagic과 같은 캡처 카드를 통한 카메라의 SDI 비디오 피드(필수)
- 카메라 트래킹 시스템, 라이브 링크 호환(노달 오프셋 캘리브레이션에 필수)
- 카메라 트래킹 프롭은 카메라 상단에 위치하여 카메라 트래킹 시스템에 보이도록(옵티컬 시스템의 경우) 루트 본과 축 세트가 카메라와 동일한 방향을 향하도록 정렬해야 합니다.
- 노달 오프셋 캘리브레이션에는 카메라 트래킹이 필요하지만 디스토션 캘리브레이션에는 필요하지 않습니다.
- 프린트된 체커보드(필수). 다이본드 또는 폼 보드에 프린트하는 것을 권장합니다. 다양한 초점 거리 또는 초점 길이를 캘리브레이션하려면 다양한 크기의 체커보드가 필요할 수 있습니다. 작은 체커보드는 가까운 초점 거리를 캘리브레이션하는 데 적합하고, 큰 체커보드는 먼 초점 거리를 캘리브레이션하는 데 적합합니다. 마찬가지로 초점 길이의 경우 광각 렌즈로 더 넓은 면적을 커버하려면 큰 체커보드가 더 유용합니다.
언리얼 엔진 프로젝트에서 다음을 구성해야 합니다.
- 카메라 캘리브레이션 플러그인
- 라이브 링크를 통한 카메라 트래킹 및 초점, 조리개, 줌(FIZ) 데이터 스트리밍
- 특히 레벨에는 다음 컴포넌트가 추가된 시네 카메라 액터가 포함되어야 합니다.
- 트래킹 시스템의 트랜스폼 및 트래킹 데이터가 포함된 라이브 링크 컴포넌트 컨트롤러. 트랜스폼 역할로 설정해야 합니다.
- 렌즈 인코딩 데이터를 제공하는 소스가 포함된 라이브 링크 컨트롤러 컴포넌트. 카메라 역할로 설정해야 합니다.
- 렌즈 컴포넌트
일부 카메라 트래킹 시스템은 트랜스폼 및 렌즈 인코딩 데이터가 하나의 카메라 역할로 결합됩니다. 따라서 라이브 링크 컨트롤러 컴포넌트 하나와 렌즈 컴포넌트 하나만 필요합니다.
- 소스 비디오 입력
- (필수) SDI 카메라 피드를 수신할 수 있도록 미디어 소스 또는 미디어 프로파일을 구성합니다.
- (선택 사항) 동기화 제너레이터를 사용하는 경우 미디어 프로파일의 타임코드 및 젠록을 구성합니다. 이를 구성하려면 미디어 프로파일을 참고하세요.
- (선택 사항) 동기화 및 타임코드를 평가하는 방법에 대한 자세한 내용은 시간 데이터 모니터를 참고하세요.
렌즈 파일 에셋 생성
렌즈 파일(Lens File) 에셋은 렌즈 디스토션, 노달 오프셋, 초점 길이 등 렌즈에 대한 캘리브레이션 데이터가 저장되는 컨테이너입니다. 렌즈 파일을 더블클릭하여 데이터를 계산하는 데 유용한 툴인 렌즈 파일 에셋 에디터(Lens File Asset Editor) 를 엽니다. 새 렌즈 파일은 각 렌즈-카메라 바디 조합별로 생성해야 합니다.
프로젝트에서 렌즈 파일 에셋을 생성하려면 다음 단계를 따릅니다.
-
콘텐츠 브라우저 에서 우클릭하여 컨텍스트 메뉴를 열고 기타(Miscellaneous) > 렌즈 파일(Lens File) 을 클릭합니다.
-
렌즈 파일 이름은 'CameraModel_50mm_TrackerA'와 같이 카메라 렌즈 트래커 조합을 설명하는 이름으로 지정합니다.
-
시네 카메라 액터의 렌즈 컴포넌트에 렌즈 파일을 할당합니다.
-
렌즈 파일 에셋을 더블클릭하여 렌즈 파일 에셋 에디터 를 엽니다. 그러면 레벨에 임시 컴포셔 카메라 액터가 생성되고, 렌즈 파일 에디터를 닫으면 제거됩니다.
-
뷰포트 세팅(Viewport Settings) 에서 다음을 수행합니다.
-
카메라(Camera) 를 시네 카메라 액터로 설정합니다.
-
미디어 소스(Media Source) 를 미디어 프로파일 또는 미디어 소스로 설정하고 올바른 비디오 디바이스를 선택합니다. 비디오가 올바르게 수신되면 이제 렌즈 파일 뷰포트에서 컴포짓된 비디오를 볼 수 있습니다.
-
-
렌즈 정보(Lens Information) 에서 다음을 수행합니다.
-
렌즈 모델 이름(Lens Model Name) 과 일련번호(Serial Number) 를 입력합니다. 권장되는 명명 규칙은 카메라 바디 이름과 초점 길이를 조합하는 것입니다. 필수는 아니지만, 이렇게 하면 사용자가 이 메타데이터를 유용하게 활용할 수 있습니다.
-
적합한 렌즈 모델(Lens Model)(구면(Spherical) 또는 애너모픽(Anamorphic))을 설정합니다.
-
크롭 인수 또는 유효 센서 크기를 변경하는 기타 카메라 세팅을 고려하여 카메라의 물리적 센서 크기와 일치하도록 센서 크기(Sensor Dimensions) 를 설정합니다.
-
애너모픽 렌즈의 경우 스퀴즈 인수(Squeeze Factor) 를 설정합니다. 구면 렌즈의 경우 스퀴즈 인수 를 1.0으로 설정해야 합니다.
-
이미지 해상도와 카메라 피드 정보 크기를 적절하게 설정합니다.
카메라 피드 크기는 레코딩 해상도와 전송되는 미디어 소스 해상도 사이의 아웃풋 크기 차이를 고려하기 위한 것입니다. 센서 크기가 이전 단계에서 올바르게 설정되었으면 카메라 피드 크기가 툴에 의해 자동으로 조정되었을 것입니다.
-
-
아웃라이너(Outliner) 에서 시네 카메라 액터를 선택하여 디테일(Details) 패널을 엽니다.
렌즈 파일 에셋 에디터 하단에서 현재 렌즈 파일에 적용된 프로퍼티 요약 정보를 확인할 수 있습니다. 이 단계에서 대부분의 프로퍼티는 공백 또는 'N/A'로 표시됩니다. 이 프로퍼티는 캘리브레이션 프로세스가 진행됨에 따라 업데이트 됩니다. 모든 항목이 올바르게 설정되었으면 언리얼 레벨과 SDI 피드가 컴포짓된 이미지가 표시됩니다. 또한 하단 패널에 해당 FIZ 데이터와 함께 시네 카메라 및 렌즈 컴포넌트 이름이 표시됩니다.
버추얼 체커보드 생성
이 단계에서는 체커보드를 사용하는 일반적인 방법으로 렌즈 디스토션을 계산하는 방법에 대해 살펴봅니다. 리지드 표면에 마운팅 및 프린팅된 체커보드를 사용하여 프로덕션 카메라의 시점으로 보거나 태블릿에 표시된 체커보드 이미지를 사용할 수도 있습니다. 그런 다음 물리적 체커보드의 프로퍼티와 일치하는 체커보드 액터를 언리얼 엔진에서 생성해야 합니다.
체커보드 액터를 생성하려면 다음 단계를 따릅니다.
-
메인 툴바에서 콘텐츠 추가(Add Content) 를 선택하고 버추얼 프로덕션(Virtual Production) > 체커보드(Checkerboard) 를 선택하여 레벨에 CameraCalibrationCheckerboard 액터를 추가합니다.
-
아웃라이너 에서 CameraCalibrationCheckerboard 액터를 선택하여 디테일 패널을 엽니다. 캘리브레이션(Calibration) 아래의 디테일 패널에서 다음을 수행합니다.
-
코너 행 수(Num Corner Rows) 를 체커보드 열의 코너 수로 설정합니다. 이 예시에서 행 코너의 수는 7입니다.
-
코너 열 수(Num Corner Columns) 를 체커보드 행의 코너 수로 설정합니다. 이 예시에서 열의 개수는 11입니다.
-
정사각형 변 길이(Square Side Length) 를 체커보드 한 변의 길이(cm)로 설정합니다. 이 예시에서 각 변의 길이는 4.5cm 입니다.
-
(선택 사항) 두께(Thickness) 를 물리적 체커보드의 두께(cm)로 설정합니다.
-
아래 이미지에서 코너 행과 열은 각 외부 검은색 사각형의 내부로 계산됩니다.
렌즈 캘리브레이션으로 최상의 결과를 얻으려면 트래킹되는 체커보드 액터의 정렬이 가능한 한 정확해야 합니다.
카메라와 동일한 트래킹 시스템과 함께 라이브 링크를 사용하여 체커보드를 트래킹하는 경우 렌즈 디스토션과 노달 오프셋을 동시에 계산할 수 있습니다. 트래킹 시스템에 따라 체커보드에서 적절하게 옵티컬 마커 또는 VIVE 퍽을 배치하면 이를 구현할 수 있습니다. 렌즈 캘리브레이션의 목적은 실제 체커보드와 트래킹된 체커보드 액터 사이의 잘못된 정렬을 캘리브레이션하는 것이지만 위치가 5cm 이내로 떨어져 있고 모든 축에서 각도가 5도 이내로 떨어져 있는 것이 좋습니다.
언리얼에서 체커보드에 트래킹을 적용하려면 라이브 링크 데이터를 수신하는 라이브 링크 컴포넌트가 포함된 액터에 체커보드 액터를 연결합니다.
렌즈 디스토션 및 노달 오프셋 캘리브레이션
렌즈 디스토션 및 노달 오프셋을 동시에 캘리브레이션하려면 다음 단계를 따릅니다.
-
렌즈 파일 에셋 에디터에서 렌즈 디스토션(Lens Distortion) 탭을 클릭합니다.
-
캡처 세팅(Capture settings) 을 클릭하고 다음을 수행합니다.
-
캘리브레이션 패턴(Calibration Pattern) 세팅을 체커보드 로 설정합니다.
-
생성한 CameraCalibrationCheckerboard 액터에 캘리브레이터(Calibrator) 를 설정합니다.
-
캘리브레이터 트래킹됨(Is Calibrator Tracked) 을 활성화합니다.
-
카메라 트래킹됨(Is Camera Tracked) 을 활성화합니다.
-
오버레이 표시(Show Overlay) 를 활성화합니다. 이렇게 하면 데이터 캡처 단계 동안 렌즈 커버 범위를 표시하는 데 도움이 됩니다.
-
-
솔브 세팅(Solve Settings) 에서 다음을 수행합니다.
- 노달 오프셋 솔브(Solve Nodal Offset) 를 활성화합니다.
- 초점 길이 추측(Focal Length Guess) > 값으로 설정(Set to Value) 을 클릭하고 원하는 초점 길이(예: 50mm)로 설정합니다.
-
아래에서와 같이 카메라 앞에 체커보드를 배치합니다.
-
뷰포트를 클릭하여 캘리브레이션 프로세스를 시작하고, 사용할 첫 번째 이미지를 생성합니다.
-
체커보드를 카메라의 필드 오브 뷰 주변으로 이동시키면서 이미지를 계속 클릭하여 더 많은 캘리브레이션 픽처를 캡처합니다. 캘리브레이션의 정확도를 높이려면 서로 다른 방향과 심도에서 오버랩되는 이미지로 필드 오브 뷰를 덮을 수 있도록 체커보드의 위치를 계속 움직여야 합니다.
체커보드만 이동합니다. 카메라는 이동하지 마세요.
-
뷰포트를 클릭하고 데이터 세트에 이미지를 추가할 때 잘못된 캡처(예: 모션 블러가 있는 캡처)를 삭제해야 할 수 있습니다. 이미지를 삭제하려면 목록에서 이미지를 클릭하고 Delete 키를 누릅니다.
이 비디오는 필요한 대략적인 커버리지를 보여줍니다.
-
필드 오브 뷰를 덮을 수 있을 정도로 오버랩 이미지를 충분히 수집했다면 렌즈 캘리브레이션(Calibrate Lens) 을 클릭합니다.
-
메시지와 함께 대화창이 표시됩니다. 재투영 오류는 캘리브레이션의 정확도를 나타냅니다.
-
렌즈 파일 창 하단에서 디스토션(Distortion), 정규화된 카메라 내제(Normalised Camera Intrinsics), 노달 포인트 오프셋(Nodal Point Offset) 이 업데이트되었는지 확인합니다.
대부분의 렌즈는 서로 다른 초점 거리에서 서로 다른 디스토션 값을 갖습니다. 렌즈 디스토션에 최대한 정확한 렌즈 파일을 만들려면 다양한 초점 거리에서 위 프로세스를 반복해야 합니다. 줌 렌즈를 완전히 캘리브레이션하려면 다양한 초점 길이와 다양한 초점 거리로 여러 번 캘리브레이션을 수행해야 합니다.
캘리브레이션 결과 확인
캘리브레이션 후 버추얼 체커보드가 렌즈 파일 뷰포트에 시각적으로 더 잘 정렬된 것처럼 보일 수 있습니다. 하지만 여전히 시각적 정렬이 잘못되었을 수 있습니다. 이는 실제 체커보드와 버추얼 체커보드 간의 정렬 오류가 캘리브레이션 동안 고려되었지만 아직 체커보드에서 정렬이 정확하지 않기 때문에 발생합니다. 이제 렌즈와 노달 오프셋을 캘리브레이션하였으므로 체커보드 정렬을 조정할 수 있습니다.
체커보드 정렬을 조정하려면 다음 단계를 따릅니다.
-
렌즈 파일 에셋 에디터 에서 노달 오프셋(Nodal Offset) 탭으로 이동합니다.
-
노달 오프셋 알고리즘(Nodal Offset Algo) 을 노달 오프셋 체커보드(Nodal Offset Checkerboard) 로 설정합니다.
-
체커보드 를 체커보드 액터로 설정합니다.
-
-
이미지를 클릭하여 캘리브레이션의 코너 데이터를 모두 채웁니다.
-
캘리브레이터에 적용(Apply To Calibrator) 을 클릭합니다. 이렇게 하면 체커보드 액터가 카메라로 이동하여 물리적 체커보드와 일치됩니다.
-
뷰포트 세팅 에서 투명(Transparency) 을 1 미만으로 설정하여 체커보드 액터가 카메라 뷰포트에서 물리적 체커보드와 일치하는지 검증합니다.
다음 비디오는 투명을 사용하여 버추얼 및 비디오 피드를 오버레이하고 트래킹된 체커보드와 캘리브레이션의 정확도를 검증하는 방법을 보여줍니다. 이 예시 중에는 비디오 프레임을 정렬하기 위해 트래킹 데이터도 오프셋합니다.
선택적 캘리브레이션 워크플로
위 단계와 함께 다음 워크플로를 수행하여 프로세스에서 나타나는 차이를 해결할 수 있습니다.
노달 오프셋 없이 렌즈 디스토션 캘리브레이션
이 워크플로는 카메라 트래킹 또는 트래킹된 체커보드가 없거나 노달 오프셋을 별도 단계로 수행하는 것을 선호할 때 유용합니다.
렌즈 디스토션 및 노드 오프셋을 캘리브레이션할 때는 다음과 같은 변경사항을 적용하여 1단계를 수행합니다.
- 캘리브레이션 타입을 디스토션 및 내제(Distortion and Intrinsics) 로 설정합니다.
- 캘리브레이터 트래킹됨 및 카메라 트래킹됨 을 적절하게 설정합니다.
렌즈 디스토션 없이 렌즈 디스토션 캘리브레이션
이 워크플로는 이미 렌즈 디스토션을 캘리브레이션했거나 렌즈가 카메라 바디에 다시 장착되었거나 카메라 트래킹 크라운이 이동한 경우에 유용할 수 있습니다.
렌즈 디스토션 및 노드 오프셋을 캘리브레이션할 때는 다음과 같은 변경사항을 적용하여 1단계를 수행합니다.
- 캘리브레이션 타입을 노달 오프셋 으로 설정합니다.
캘리브레이션 향상 또는 수동 편집
캘리브레이션을 수동으로 미세조정하고 편집할 수 있습니다. 이렇게 하려면 렌즈 파일 패널(Lens File Panel) 탭을 사용합니다.
이 탭에는 오른쪽에 그래프가 있고 왼쪽 상단에 파라미터 목록이 있습니다. 일치하지 않는 부분이 보이도록 실제 카메라의 초점이나 줌을 조정한 후 조정이 필요한 파라미터를 선택합니다. 그런 다음 결과가 만족스러울 때까지 그래프에서 포인트를 편집합니다. 렌즈 파일 뷰포트에서 실시간 업데이트를 보면서 조정할 수 있도록 렌즈 파일 패널을 제거하여 조정하는 것이 도움이 될 수 있습니다.
포인트 간 보간을 조정하면 캘리브레이션 결과를 미세조정할 수도 있습니다.
