Skip to content
Go back

頂点属性の補間

· Updated:

重心座標

  • HLSLでは、対応していればSV_Barycentricsでシステムから重心座標を取れる
  • 頂点座標とピクセル位置から計算でも求められる
    • 投影後で補間するには、重心座標λi\lambda_iを用いる
      • λ1=uv2vu2u1v2v1u2,λ2=u1vv1uu1v2v1u2,λ3=1λ1λ2\lambda_1 = \frac{u v_2 - v u_2}{u_1 v_2 - v_1 u_2}, \lambda_2 = \frac{u_1 v - v_1 u}{u_1 v_2 - v_1 u_2}, \lambda_3 = 1 - \lambda_1 - \lambda_2
        • 頂点の位置:ui=xix3,vi=yiy3u_i = x_i - x_3, v_i = y_i - y_3
        • ピクセルの位置:u=xx3,v=yy3u = x - x_3, v = y - y_3
      • Mλi=piM \lambda_i = p_iの関係から導かれる
    • 投影前で補間するには、補正した重心座標λi\lambda'_iを用いる
      • λi=wwi1λi\lambda'_i = w w^{-1}_i \lambda_i
        • 補間された属性の補正値:w=(λ1w11+λ2w21+λ3w31)1w = (\lambda_1 w^{-1}_1 + \lambda_2 w^{-1}_2 + \lambda_3 w^{-1}_3)^{-1}
        • 頂点座標の補正値:wiw_i
      • w1a=iλiwi1aiw^{-1} a = \sum_i{\lambda_i w_i^{-1} a_i}から導かれる
  • 補間した値はa=iλiaia = \sum_i{\lambda_i a_i}で求める

偏微分

  • 通常のレンダリングではddxddyで計算できる
  • 頂点座標とピクセル位置から計算でも求められる
    • ax=iλixai,ay=iλiyai\frac{\partial{a}}{\partial x} = \sum_i{\frac{\partial \lambda_i}{\partial x} a_i}, \frac{\partial{a}}{\partial y} = \sum_i{\frac{\partial \lambda_i}{\partial y} a_i}
      • λ1x=y2y3D,λ2x=y3y1D,λ3x=y1y2D\frac{\partial \lambda_1}{\partial x} = \frac{y_2 - y_3}{D}, \frac{\partial \lambda_2}{\partial x} = \frac{y_3 - y_1}{D}, \frac{\partial \lambda_3}{\partial x} = \frac{y_1 - y_2}{D}
      • λ1y=x3x2D,λ2y=x1x3D,λ3y=x2x1D\frac{\partial \lambda_1}{\partial y} = \frac{x_3 - x_2}{D}, \frac{\partial \lambda_2}{\partial y} = \frac{x_1 - x_3}{D}, \frac{\partial \lambda_3}{\partial y} = \frac{x_2 - x_1}{D}
      • D=(x1x3)(y2y3)(y1y3)(x2x3)D = (x_1 - x_3)(y_2 - y_3) - (y_1 - y_3)(x_2 - x_3)
    • 重心座標の補間がx,yx,yにおいて線形であることを理由に変形した式a=a1+(xx1)iλixai+(yy1)iλiyaia = a_1 + (x - x_1)\sum_i{\frac{\partial \lambda_i}{\partial x}a_i} + (y - y_1)\sum_i{\frac{\partial \lambda_i}{\partial y}a_i}から導かれる
    • 補正を含める場合はwwで割る:w1ax=iλixwi1ai,w1ay=iλiywi1ai\frac{\partial{w^{-1}a}}{\partial x} = \sum_i{\frac{\partial \lambda_i}{\partial x} w_i^{-1} a_i}, \frac{\partial{ w^{-1} a}}{\partial y} = \sum_i{\frac{\partial \lambda_i}{\partial y} w_i^{-1} a_i}

参考文献