将 CMYK 颜色 space 绘制为 3D 彩色实体

Plotting CMYK color space as 3D color solid

我正在使用以下 POV-Ray 循环以其他颜色 spaces 绘制 sRGB 坐标。该循环仅沿外表面生成点,然后将它们与三角形连接起来。由于 sRGB space 是一种扭曲的立方体,这意味着 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

这很有效,因为几乎所有颜色 space 都是三维的。这是输出示例:

但是,我想对 CMYK 颜色做同样的事情 space。我遇到的问题是它有 4 个参数而不是 3 个。同样,我只想在最外层表面绘制点并将它们与三角形连接起来。我不认为生成的彩色实体是四维的,但我完全不知道如何进行。有谁知道该怎么做?谢谢

请注意,XYZ 是一种颜色 space。 Link.

这里的主要问题是 CMYK 不是一种合适的颜色 space - 它更像是一种印刷过程,您在坐标上有一个额外的自由度,可以将所有颜色映射到可见颜色。与 100% CMY 相比,使用 K 在肉眼上的区别在于着色剂的化学特性,这些特性无法在成像软件中模拟。 (我尝试 google 以获得关于 CMYK 不是颜色 space 的良好参考 - 尝试一下,您会发现科学支持的文本倾向于将 CMYK 称为 "color model")

无论如何,拥有 4 个坐标会使大多数已知的处理颜色的成像算法无效,这是 GIMP 从来没有也从未考虑过使用内部 CMYK 颜色的主要原因space。 (可以 导出 到此 space,但不能处理它)。

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