Untitled

Untitled

设置近远平面是因为变换到标准立方体之后的精度。

Z-buffer 处理半透明?

单纯用 Z-buffer 肯定是不行的。

考虑颜色混合模型如下(注意 alpha 和颜色分开存储):

$$ \boldsymbol a = [r_A, g_A, b_A]^{\rm T} \\ \boldsymbol b = [r_B, g_B, b_B]^{\rm T} \\ \boldsymbol c_{ab} = \alpha_A \boldsymbol a + (1-\alpha_A)\alpha_B \boldsymbol b, \ \ \ \ \ \alpha_{C_{ab}} = \alpha_A + (1-\alpha_A)\alpha_B \\ \boldsymbol c_{ba} = \alpha_B \boldsymbol b + (1-\alpha_B)\alpha_A \boldsymbol a, \ \ \ \ \ \alpha_{C_{ba}} = \alpha_B + (1-\alpha_B)\alpha_A

$$

可以发现颜色依赖于顺序。

考虑一个预乘模型:

$$ \boldsymbol a = [\alpha_A r_A, \alpha_A g_A, \alpha_A b_A, \alpha_A] \\ \boldsymbol b = [\alpha_B r_B, \alpha_B g_B, \alpha_B b_B, \alpha_B] \\

\boldsymbol c_{ba} = \boldsymbol b + (1-\alpha_B) \boldsymbol a $$

Untitled

上采样:如放大图像,生成插值。

非预乘可能带来的影响:边缘发黑。

Untitled

Z-buffer + 不透明物体

① Z-buffer test + update 开始渲染各个不透明对象。

② 关掉 Z-buffer update 但仍然做 test,从后往前逐个渲染半透明表面,如果被不透明对象遮挡住了,就不参与绘制。

Untitled

光栅化流程

  1. Transform triangle vertices into camera space (modeling and camera transform)

    Untitled