Q100384:通过 ExrCombine 合并 Katana 中的通道/AOV 时渲染失败

关注
症状

当尝试在Katana中将多个 AOV 作为通道合并到一个多通道 EXR 文件中时,您可能会遇到渲染失败和错误,因为 OpenEXR 的一项已知限制会影响Katana用于合并 EXR 图像的工具 ExrCombine。

错误可能如下所示:

Running command: ExrCombine
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_primary_rgba_square_512_linear.1.exr primary
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_direct_diffuse_direct_diffuse_square_512_linear.1.exr direct_diffuse
/tmp/ katana _tmpdir_7664/sphere_diffuse5_Render_sss_sss_square_512_linear.1.exr
sss /tmp/merge.exr
Render stopped by signal: 6
CommandLineRender Error: doRender problem
Reason = Render stopped by signal: 6
Render error. Time elapsed: 6.33 s
Node 'Render': Render failed with a rendering error: Render stopped by signal: 6

渲染失败甚至可能导致Katana崩溃,堆栈跟踪中出现以下错误:

[INFO python.MainBatch]: *** Error in 'ExrCombine': free(): invalid pointer: 0x0000000000e8f1e0 ***

原因

尝试合并具有不同数据窗口的图像时,ExrCombine 实用程序失败。

这意味着如果要合并的 EXR 图像的 dataWindow 标头属性不匹配,特别是当第一个合并的 AOV 的像素数据窗口比后续合并的 AOV 的像素数据窗口更小时,将会发生错误

要解决此问题,请尝试执行以下故障排除步骤:

  • 确保“主要”渲染输出设置为输出类型“原始”,或者不在合并输出中包含“主要”通道
  • 确保要合并的所有 AOV 具有相同的 dataWindow 属性值
  • 通过使用“原始”输出类型和/或禁用 exrOptimize 绕过渲染后 EXR 优化
  • 确保渲染的 EXR 未平铺,因为Katana无法合并平铺输出

请继续阅读以获取有关每项建议的更多详细信息。

默认情况下, Katana在处理图像数据时只能读取和渲染四个通道 (RGBA)。不过,用户可以通过名为 ExrCombine 的内部Katana实用程序合并多个图像以创建多通道 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

图像.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中定义“合并”输出的数据窗口

当使用“merge”类型的渲染输出将图像与不同的数据窗口组合时, RenderOutputDefine 节点的mergeOutputs参数下拉列表中第一个选定输入的dataWindow属性值将用作最终输出的dataWindow

Pasted_image_0.png

在示例 RenderOutputDefine 节点的屏幕截图中, mergeOutputs参数的第一个选定输入是“主”输出。这意味着对于 ExrCombine 实用程序创建的最终合并 EXR,将使用“主”通道的dataWindow标头属性。

如果此dataWindow标头属性小于要合并的其余渲染输出的dataWindow ,则 ExrCombine 合并过程可能会失败,从而触发上面引用的渲染错误。

Katana中 Cryptomatte 的已知问题

Cryptomatte 使用存储在每个 Cryptomatte 通道的 EXR 标头中的 cryptomatte/foo/bar 中的元数据。 ExrCombine 不会合并 cryptomatte 元数据,因此合并后的 EXR 不会在Nuke中显示 cryptomatte 通道。皮克斯的 exrmerge 仅复制第一个 EXR 的 cryptomatte 元数据。

不过,您现在应该能够在以下和未来的Katana版本中将所有 Cryptomatte 通道合并到一个 EXR 中: Katana 4.5v6Katana 5.0v6Katana 6.0v3。

作为参考,此功能请求记录为: ID 428053 - ExrCombine:支持合并 Cryptomatte 通道

解决方法

有多种方法可供尝试,可能有助于解决此问题。

确保“主要”渲染输出设置为输出类型“原始”,或者不在合并输出中包含“主要”通道

注意:默认情况下, Katana将始终生成“主”通道,无论您是否通过专用 RenderOutputDefine 节点请求创建它。

“主要”通道将作为第一个条目添加到 mergeOutputs 列表中,任何其他通道都将合并到其中。如果“主”通道数据窗口不包含您要合并的所有 AOV 的总体数据窗口大小,则合并操作将会失败。

有时可以通过为“primary”通道添加 RenderOutputDefine 节点并将 type 参数设置为“raw”来解决

如果您不需要主通道,则可以从 RenderOutputDefine 节点上的 mergeOutputs 列表中显式禁用它。列表中第二遍的数据窗口将用于合并的 EXR。在上面的示例屏幕截图中,如果取消选择“primary”,则使用的dataWindow值将来自“diffuse”通道。

确保要合并的所有 AOV 具有相同的 dataWindow 属性值。

当所有要合并的AOV具有相同大小的数据窗口时,合并操作应该成功。或者,首先合并的输出需要具有足够大的 dataWindow 属性值以包含所有其他输出。

如果在合并过程中定义 AOV 的顺序时牢记这一点,则可以避免由于尝试将更宽的数据窗口放入更小的数据窗口而导致 ExrCombine 渲染失败。

下面描述了使用 RenderOutputDefine 节点上的设置影响 AOV 数据窗口大小的两种方法:

使用“原始”输出类型和 exrOptimize 设置绕过渲染后 EXR 优化

默认情况下, Katana对渲染的颜色输出进行后处理。这种内部 2D 图像处理不会保留 EXR 标头属性,而是将相关属性从原始图像复制到后处理图像。

这些属性是通过 RenderOutputDefine 节点的ConvertSettings参数定义的。有关这些设置的更多信息,请参阅Katana在线帮助的 RenderOutputDefine 节点参考

将 exrOptimize 参数设置为“否”

ConvertSettings.exrOptimize参数主要用于优化图像数据窗口,并通过删除边缘周围没有像素数据的任何区域来“收缩”图像

exr优化比较.png

打开和关闭 exrOptimize 渲染的 EXR 图像和元数据的比较(在Nuke中查看)

exrOptimize 标志主要用于优化图像数据窗口并通过删除边缘周围的冗余清晰信息来“收缩”图像。将exrOptimize参数设置为“No”将渲染整个图像数据窗口,跳过优化步骤并强制使用原始数据窗口。这可以避免渲染的 AOV 中存在不同的dataWindow属性值,从而使它们能够成功合并

Pasted_image_0__1_.png

在某些情况下,处理图像时的性能可能会受到轻微影响,具体取决于其大小,因为 exrOptimize 操作旨在提高处理图块中图像的程序的内存使用率和性能。

将渲染输出类型设置为“raw”

将 RenderOutputDefine 节点的类型设置为“raw”将允许渲染从渲染器接收到的图像并绕过任何后处理步骤。 Katana不会对输出执行任何颜色转换或图像优化。这可确保使用渲染器定义的标头属性写入文件,并防止Katana的内部图像处理导致 dataWindow 属性发生任何更改。

Pasted_image_0__2_.png

确保渲染的 EXR 未平铺,因为Katana无法合并平铺输出

这是某些渲染器(例如 Arnold)的默认设置。请检查渲染器特定的输出定义节点,例如 ArnoldOutputChannelDefine,并确保 driverParameters.tiled设置已禁用。

寻求帮助

如果这些建议都不能解决问题,请提出支持请求,并让我们详细了解您遇到的问题以及您迄今为止采取的故障排除步骤。

有关如何提出支持请求的更多信息,请参阅本文: Q100064:如何提出支持请求

    我们很遗憾听到

    请告诉我们