在Nuke中翻转OpenEXR RgbaOutputFile

狐狸

我一直在尝试从OpenEXR库创建EXR图像,但是该图像倒置进入Nuke中。唯一看起来像我期望的那样渲染图像的是DJV。

我得到一个看起来正确的视觉文件,其中立方体朝向图像底部,光源位于顶部边缘,在DJV中使用DECREASING_Y: DJV_EXR

但是,当我将同一幅图像带入Nuke时,它是将图像上下颠倒地显示,立方体朝向图像的顶部,而光位于底部的边缘: Nuke_EXR

Photoshop似乎也发生了同样的事情。

这是我用来尝试创建图像的代码:

RgbaOutputFile file(filename, width, height, WRITE_RGBA, 1, IMATH_NAMESPACE::V2f(0, 0), 1, DECREASING_Y, Imf_2_3::Compression::ZIPS_COMPRESSION);
file.setFrameBuffer(pixels, 1, width);
file.writePixels(height);

我尝试同时使用INCREASING_Y和DECREASING_Y以及使用许多不同的压缩类型。我不确定在此过程中缺少什么。

有谁知道为什么会这样?有解决办法吗?

狐狸

被告知在DJV中翻转的图像实际上是DJV的一个错误,正在寻找下一个版本:https : //github.com/darbyjohnston/DJV/issues/195

真正的问题是,当从RenderTexture读取图像时,图像颠倒了。

我发现的解决方案是在调用RgbaOutputFile之前使用2D数组进行循环以翻转C ++代码中的像素。

Rgba *flippedPixels = new Rgba[width * height];

for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {
        // Set top scanline of flippedPixels to be bottom scanline of pixels
        flippedPixels[(((height - 1) - i) * width) + j] = pixels[(i * width) + j];
    }
}

RgbaOutputFile file(filename, width, height, WRITE_RGBA, 1, IMATH_NAMESPACE::V2f(0, 0), 1, INCREASING_Y, Imf_2_3::Compression::ZIPS_COMPRESSION);
file.setFrameBuffer(flippedPixels, 1, width); // Use flippedPixels instead of pixels
file.writePixels(height);

delete flippedPixels;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章