증상
원인
ExrCombine 유틸리티는 서로 다른 데이터 창에 있는 이미지를 병합하려고 시도하면 실패합니다.
즉, 병합할 EXR 이미지의 dataWindow 헤더 속성이 일치하지 않으면 오류가 발생하고, 특히 처음 병합된 AOV의 픽셀 데이터 창이 이후에 병합된 AOV보다 작은 경우 오류가 발생합니다.
이 문제를 해결하려면 다음 문제 해결 단계를 시도해 보세요.
- "기본" 렌더 출력이 출력 유형 "원시"로 설정되어 있는지 확인하거나 병합된 출력에 "기본" 패스를 포함하지 마십시오.
- 병합할 모든 AOV에 동일한 dataWindow 속성 값이 있는지 확인하세요.
- "원시" 출력 유형을 사용하거나 exrOptimize를 비활성화하여 렌더링 후 EXR 최적화를 우회합니다.
- Katana 타일 출력을 병합할 수 없으므로 렌더링된 EXR이 타일링되지 않았는지 확인하십시오.
각 제안에 대한 자세한 내용을 읽어보세요.
기본적으로 Katana 이미지 데이터 작업 시 4개의 채널(RGBA)만 읽고 렌더링할 수 있습니다. 하지만 사용자는 Katana 내부 유틸리티인 ExrCombine을 사용하여 여러 이미지를 병합하여 다중 채널 EXR을 생성할 수 있습니다.
ExrCombine 유틸리티는 원래 OpenEXR이 여러 채널을 하나의 EXR 파일에 쓸 때 제한이 있기 때문에 동일한 크기의 픽셀 데이터 창이 있는 이미지를 병합하기 위해 만들어졌습니다.
이미지 픽셀 데이터 윈도우의 크기는 dataWindow EXR 헤더 속성에 저장되며, EXR 파일에는 이러한 속성이 하나만 포함될 수 있습니다. 즉, 모든 채널/AOV는 동일한 dataWindow 속성 값을 공유해야 하며, 병합된 EXR 내에서 자체 값을 유지할 수 없습니다.
따라서 Katana 서로 다른 픽셀 데이터 창 크기를 가진 이미지 병합을 지원하지 않습니다.
선택한 dataWindow 속성 값이 병합되는 모든 AOV의 데이터 윈도우 크기를 포함하지 않으면 렌더링이 실패하거나 Katana 충돌할 수 있습니다. 이는 헤더에 하나의 데이터 윈도우만 저장할 수 있는 OpenEXR의 한계 때문입니다. 즉, 모든 채널/AOV는 동일한 dataWindow 속성 값을 공유해야 하며, 병합된 EXR 내에서 자체 값을 유지할 수 없습니다. 따라서 Katana 픽셀 데이터 윈도우 크기가 서로 다른 이미지 병합을 지원하지 않습니다.
OpenEXR이 동일 파일 내 여러 dataWindow 헤더 속성에 대한 확장 지원을 제공하면 Katana 에서 ExrCombine 기능을 개선해 달라는 기존 기능 요청이 있습니다. 이 요청은 ID 75636 - ExrCombine: 서로 다른 픽셀 데이터 윈도우가 있는 이미지에 대한 지원 개선 으로 기록됩니다.
이에 대한 자세한 내용과 위에서 제안한 해결 방법에 대한 세부 정보를 읽어보세요. 다중 채널 설정에 따라 병합과 관련된 문제가 해결될 수 있을 것입니다.
추가 정보
EXR 데이터 창
각 OpenEXR 파일은 파일 헤더에 있는 속성 목록을 통해 설명됩니다. 샘플 .exr 파일에서 'exrinfo'와 같은 명령을 실행하면 다음과 같이 이러한 속성의 값이 출력됩니다.
> exrinfo image.exr
예를 들어, image.exr의 속성은 다음과 같습니다.
file format version: 2, flags 0x0
channels (type chlist):
B, 16-bit floating-point, sampling 1 1
G, 16-bit floating-point, sampling 1 1
R, 16-bit floating-point, sampling 1 1
compression (type compression): piz
dataWindow (type box2i): (0 0) - (511 511 )
displayWindow (type box2i): (135 125) - (377 409)
lineOrder (type lineOrder): increasing y
pixelAspectRatio (type float): 1
screenWindowCenter (type v2f): (0 0)
screenWindowWidth (type float): 1
이 경우 dataWindow 속성 의 값은 (0 0) - (511 511) 입니다 . 즉, 이미지 파일에 512x512픽셀이 저장되어 있습니다.
displayWindow 는 이미지를 볼 때 표시되는 영역을 나타냅니다. 이 영역은 OpenEXR 파일에 데이터가 있는 영역보다 크거나 작을 수 있습니다.
Katana 에서 "병합" 출력을 위한 dataWindow 정의
"병합" 유형의 렌더 출력을 사용하여 서로 다른 데이터 창이 있는 이미지를 결합하는 경우 RenderOutputDefine 노드의 mergeOutputs 매개변수 드롭다운에서 선택한 첫 번째 입력의 dataWindow 속성 값이 최종 출력의 dataWindow 로 사용됩니다 .
RenderOutputDefine 노드 예시의 이 스크린샷에서 mergeOutputs 매개변수의 첫 번째 선택된 입력은 '기본' 출력입니다. 즉, ExrCombine 유틸리티로 생성된 최종 병합 EXR에는 '기본' 패스의 dataWindow 헤더 속성이 사용됩니다.
이 dataWindow 헤더 속성이 병합하려는 나머지 렌더 출력의 dataWindow 보다 작으면 ExrCombine 병합 프로세스가 실패하여 위에서 언급한 렌더 오류가 발생할 수 있습니다.
Katana 의 Cryptomatte에 대한 알려진 문제
Cryptomatte는 각 Cryptomatte 채널에 대해 EXR 헤더의 cryptomatte/foo/bar 에 저장된 메타데이터를 사용합니다. ExrCombine은 Cryptomatte 메타데이터를 병합하지 않으므로, 병합된 EXR은 Nuke 에서 Cryptomatte 채널을 표시하지 않습니다. Pixar의 exrmerge는 첫 번째 EXR의 Cryptomatte 메타데이터만 복사합니다.
참고: Katana 4.5v6, Katana 5.0v6 및 Katana 6.0v3 부터 모든 Cryptomatte 채널을 하나의 EXR 파일로 결합할 수 있습니다 .
해결 방법
이 문제를 해결하는 데 도움이 될 수 있는 몇 가지 옵션이 있습니다.
"기본" 렌더 출력이 출력 유형 "원시"로 설정되어 있는지 확인하거나 병합된 출력에 "기본" 패스를 포함하지 마십시오.
참고: 전용 RenderOutputDefine 노드를 통해 생성을 요청하든 그렇지 않든 Katana 기본적으로 항상 "기본" 패스를 생성합니다.
"기본" 패스는 mergeOutputs 목록에 첫 번째 항목으로 추가되고, 추가 채널은 여기에 병합됩니다. "기본" 패스 데이터 윈도우가 병합하려는 모든 AOV의 전체 데이터 윈도우 크기를 포함하지 않으면 병합 작업이 실패합니다.
이 문제는 때때로 "기본" 패스에 RenderOutputDefine 노드를 추가하고 유형 매개변수를 "원시"로 설정하여 해결할 수 있습니다 .
기본 패스가 필요하지 않은 경우 RenderOutputDefine 노드의 mergeOutputs 목록에서 명시적으로 비활성화 할 수 있습니다 . 그러면 목록에서 두 번째 패스의 dataWindow가 병합된 EXR에 사용됩니다. 위 스크린샷 예시에서 'primary'가 선택 해제된 경우 사용되는 dataWindow 값은 'diffuse' 패스에서 가져옵니다.
병합할 모든 AOV에 동일한 dataWindow 속성 값이 있는지 확인하세요.
병합할 모든 AOV의 데이터 윈도우 크기가 같으면 병합 작업이 성공적으로 완료됩니다. 또는 먼저 병합되는 출력의 dataWindow 속성 값이 다른 모든 출력을 포함할 만큼 충분히 커야 합니다.
병합 프로세스에서 AOV 순서를 정의할 때 이 점을 염두에 두면 더 넓은 데이터 창을 더 작은 데이터 창에 맞추려고 해서 ExrCombine 렌더링이 실패하는 것을 방지할 수 있습니다.
RenderOutputDefine 노드의 설정을 사용하여 AOV의 데이터 창 크기에 영향을 미치는 두 가지 방법은 다음과 같습니다.
"raw" 출력 유형 및 exrOptimize 설정을 사용하여 렌더링 후 EXR 최적화를 우회합니다.
기본적으로 Katana 렌더링된 색상 출력을 후처리합니다. 이 내부 2D 이미지 처리는 EXR 헤더 속성을 보존하지 않고, 원본 이미지의 관련 속성을 후처리된 이미지로 복사합니다.
이러한 속성은 RenderOutputDefine 노드의 convertSettings 매개변수를 통해 정의됩니다. 이러한 설정에 대한 자세한 내용은 Katana 참조 가이드 - RenderOutputDefine을 참조하세요 .
exrOptimize 매개변수를 "아니요"로 설정합니다.
convertSettings.exrOptimize 매개변수 는 주로 이미지 데이터 창을 최적화하고 가장자리 주변의 픽셀 데이터가 없는 영역을 제거하여 이미지를 '축소 포장'하는 데 사용됩니다.
exrOptimize를 켜고 끈 상태에서 렌더링된 EXR 이미지와 메타데이터 비교( Nuke 에서 확인)
exrOptimize 플래그는 주로 이미지 데이터 창을 최적화하고 가장자리 주변의 중복된 투명 정보를 제거하여 이미지를 '축소 포장'하는 데 사용됩니다. exrOptimize 매개변수를 '아니요'로 설정하면 전체 이미지 데이터 창을 렌더링하여 최적화 단계를 건너뛰고 원본 데이터 창을 강제로 사용합니다. 이렇게 하면 렌더링된 AOV에서 서로 다른 dataWindow 속성 값이 발생하는 것을 방지하여 성공적으로 병합할 수 있습니다 .
exrOptimize 작업은 타일 형태로 이미지를 처리하는 프로그램의 메모리 사용량과 성능을 개선하기 위한 것이므로, 이미지 크기에 따라 이미지 처리 성능이 약간 영향을 받을 수 있습니다.
렌더 출력 유형을 "원시"로 설정합니다.
RenderOutputDefine 노드의 유형을 'raw'로 설정하면 렌더러에서 수신한 이미지를 그대로 렌더링하고 모든 후처리 단계를 건너뛸 수 있습니다. Katana 출력에 색상 변환이나 이미지 최적화를 수행하지 않습니다. 이렇게 하면 렌더러에서 정의한 헤더 속성을 사용하여 파일이 작성되고 Katana 의 내부 이미지 처리로 인해 dataWindow 속성이 변경되는 것을 방지할 수 있습니다.
Katana 타일 출력을 병합할 수 없으므로 렌더링된 EXR이 타일링되지 않았는지 확인하십시오.
이는 Arnold와 같은 일부 렌더러의 기본 설정입니다. 렌더러별 출력 정의 노드(예: ArnoldOutputChannelDefine)를 확인하고 driverParameters.tiled 설정이 비활성화되어 있는지 확인하세요.
도움 받기
이러한 제안으로 문제가 해결되지 않으면 지원 요청을 제출하여 발생한 문제와 지금까지 취한 문제 해결 단계에 대해 자세히 알려주시기 바랍니다.
지원 요청을 여는 방법에 대한 자세한 내용은 다음 문서를 참조하세요. Q100064: 지원 티켓을 제기하는 방법
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요
Katana 에서 여러 개의 AOV를 채널로 하나의 다중 채널 EXR 파일에 병합하려고 할 때 Katana 에서 EXR 이미지를 병합하는 데 사용하는 도구인 ExrCombine에 영향을 미치는 OpenEXR의 알려진 제한으로 인해 렌더링 실패 및 오류가 발생할 수 있습니다.
오류는 다음과 같습니다.
렌더링 실패로 인해 Katana 충돌하고 스택 추적에 다음 오류가 발생할 수도 있습니다.
[INFO python.MainBatch]: *** Error in 'ExrCombine': free(): invalid pointer: 0x0000000000e8f1e0 ***