Digital Imaging · 2025-02-27

解读小米Mi-Log-支持ACES了!

摘录一些看到的具体内容。

这次MiLog给出了明确的定义,和接入ACES所需的专用IDT(Input Device Transform),因此我们可以在各种色彩管理软件中建立对它的支持了。

基本

OETF和EOTF定义

这里我们注意到是采用了二次函数混合对数段,这与各大厂商类似。其实这种混合式的Gamma最熟悉的就是HLG,混合一段经典Gamma曲线和对数曲线来压缩高光,以编码更广的动态范围。

色域

看到Rec2020出现嘴角一扬,正如意料之中,这是现在不少微单采用的策略,比如N-log,F-log。

细节处理

阅读IDT之后我们可以留意到MiLog这次在接入ACES还是注意了诸多细节:

#define rec2020_to_xyz make_mat3(make_float3(0.6370f, 0.1446f, 0.1689f), make_float3(0.2627f, 0.6780f, 0.0593f), make_float3(0.0f, 0.0281f, 1.0610f))

#define d65_to_d60_cat02 make_mat3(make_float3(1.0120f, 0.0080f, -0.0158f), make_float3(0.0058f, 1.0014f, -0.0063f), make_float3(-0.0003f, -0.0010f, 0.9276f))

#define xyz_to_acesAP0 make_mat3(make_float3(1.0498f, 0.0f, -0.0001f), make_float3(-0.4959f, 1.3733f, 0.0982f), make_float3(0.0f, 0.0f, 0.9913f))

#define rec2020_to_AP0 mult_f33_f33(xyz_to_acesAP0, mult_f33_f33(d65_to_d60_cat02, rec2020_to_xyz))

IDT中很具体的呈现了力大飞砖的色彩转换过程,而不是纯把整个Rec2020 - ACES AP0打包为一个成品的Matrix

Rec2020采用D65白点,XYZ采用D50白点,ACES采用D60白点,我们注意到白点转换过程采用CIE CAT02色适应变换矩阵实现,这一点与ARRI相同。(看来RED用的Bradford也被抛弃了)

但就是这个多参数来实现EOTF有点看着烦

 const float R_0 = -0.09023729;
    const float R_t = 0.01974185;
    const float a = 0.09271529;
    const float b = 0.01384578;
    const float g = 0.67291850;
    const float c = 18.10531998;
    const float P_t = c * pow((R_t - R_0), 2.0);

    if (x >= P_t) {
        return pow(2.0, (x - g) / a) - b;
    }
    else if (x  P_t && x >= 0.0) {
        return sqrt(x / c) + R_0;
    }
    else {
        return R_0;
    }