将CMYK颜色空间绘制为3D颜色实体

时间:2017-03-31 02:27:51

标签: color-space cmyk povray

我正在使用以下POV-Ray循环在其他颜色空间中绘制sRGB坐标。循环仅沿外表面生成点,然后将它们与三角形连接。由于sRGB空间是一种扭曲的立方体,这意味着6个外表面和8个顶点。

#macro cie_calc_gamut_xyz_srgb()
    #for (i, 0, cie_sample_count_srgb)
        #for (j, 0, cie_sample_count_srgb)
            // side 0 & 3
            #local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,0>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[0][i][j] = cooXYZ;
            #local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,1>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[3][i][j] = cooXYZ;
            // side 1 & 4
            #local cooRGB = <i/cie_sample_count_srgb,0,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[1][i][j] = cooXYZ;
            #local cooRGB = <i/cie_sample_count_srgb,1,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[4][i][j] = cooXYZ;
            // side 2 & 5
            #local cooRGB = <0,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[2][i][j] = cooXYZ;
            #local cooRGB = <1,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[5][i][j] = cooXYZ;
        #end
    #end
#end

这很有效,因为几乎所有的色彩空间都是三维的。以下是输出的示例:

enter image description here

但是,我想对CMYK色彩空间做同样的事情。我遇到的问题是它有4个参数而不是3.再次,我只想绘制最外层表面上的点并用三角形连接它们。我不认为最终的颜色是四维的,但我完全不知道如何继续。有没有人知道该怎么办?感谢。

请注意,XYZ是一个色彩空间。 Link

1 个答案:

答案 0 :(得分:1)

这里的主要问题是CMYK不是一个合适的色彩空间 - 它更像是一个印刷过程,你在坐标上有一个额外的自由度,可以将所有颜色都映射到可见颜色。使用K与100%CMY不同的是使用无法在成像软件中模拟的着色剂的化学特性。 (我试图在谷歌上找到一个关于CMYK不是色彩空间的好参考 - 尝试一下,你会看到科学支持的文本倾向于将CMYK称为“颜色模型”而不是)

无论如何,有4个坐标渲染无效的大多数处理颜色的已知成像算法,这是GIMP从未考虑过的主要原因,从未考虑过具有内部CMYK颜色空间。 (可以导出到这个空间,但不能正常工作)。

总而言之,您应该做的是采用固定的K值,并使用不同的CMY渲染您的立方体。如果需要,重复多余的立方体。