Search code examples
graphics3dcomputer-vision

Conic Opacity in Gaussian Splatting?


In this line of the Gaussian Splatting author's code, it talks about "conic opacity." The code cites the Surface Splatting paper for the idea of conic opacity. However, when I search Surface Splatting for the word "conic," I find nothing. I understand "conic" (a cone) and "opacity" (how much light can pass through), but put the words together, and I don't understand what "conic opacity" is. Would someone be willing to help me to understand, please?

Here is the block of code I am trying to understand:

            // Resample using conic matrix (cf. "Surface 
            // Splatting" by Zwicker et al., 2001)
            float2 xy = collected_xy[j];
            float2 d = { xy.x - pixf.x, xy.y - pixf.y };
            float4 con_o = collected_conic_opacity[j];
            float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;
            if (power > 0.0f)
                continue;```

Solution

  • It's not really stated anywhere, but in the CUDA code the conic_opacity contains values of the inverse of covariance matrix and density of the corresponding gaussian. Moreover, due to symmetricity not the whole 2x2 matrix is stored in this variable, but only 3 values. Thus conic_opacity = [S_11, S_12, S_22, alpha_gaussian]

    You may verify this by looking at how it is used further:

    float4 con_o = collected_conic_opacity[j];
    float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;
    float alpha = min(0.99f, con_o.w * exp(power));
    

    alpha is exactly the same alpha which is used in equations 2,3 in the original gaussian splatting paper