Skip to content
Blog
Go back

頂点属性の補間

·Updated: 

重心座標#

  • HLSLでは、対応していればSV_Barycentricsでシステムから重心座標を取れる
  • 頂点座標とピクセル位置から計算でも求められる
    • 投影後で補間するには、重心座標λi\lambda_iを用いる
      • λ1=uv2−vu2u1v2−v1u2,λ2=u1v−v1uu1v2−v1u2,λ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=xi−x3,vi=yi−y3u_i = x_i - x_3, v_i = y_i - y_3
        • ピクセルの位置:u=x−x3,v=y−y3u = x - x_3, v = y - y_3
      • Mλi=piM \lambda_i = p_iの関係から導かれる
    • 投影前で補間するには、補正した重心座標λi′\lambda'_iを用いる
      • λi′=wwi−1λi\lambda'_i = w w^{-1}_i \lambda_i
        • 補間された属性の補正値:w=(λ1w1−1+λ2w2−1+λ3w3−1)−1w = (\lambda_1 w^{-1}_1 + \lambda_2 w^{-1}_2 + \lambda_3 w^{-1}_3)^{-1}
        • 頂点座標の補正値:wiw_i
      • w−1a=∑iλiwi−1aiw^{-1} a = \sum_i{\lambda_i w_i^{-1} a_i}から導かれる
  • 補間した値はa=∑iλiaia = \sum_i{\lambda_i a_i}で求める

偏微分#

  • 通常のレンダリングではddxとddyで計算できる
  • 頂点座標とピクセル位置から計算でも求められる
    • ∂a∂x=∑i∂λi∂xai,∂a∂y=∑i∂λi∂yai\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}
      • ∂λ1∂x=y2−y3D,∂λ2∂x=y3−y1D,∂λ3∂x=y1−y2D\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}
      • ∂λ1∂y=x3−x2D,∂λ2∂y=x1−x3D,∂λ3∂y=x2−x1D\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=(x1−x3)(y2−y3)−(y1−y3)(x2−x3)D = (x_1 - x_3)(y_2 - y_3) - (y_1 - y_3)(x_2 - x_3)
    • 重心座標の補間がx,yx,yにおいて線形であることを理由に変形した式a=a1+(x−x1)∑i∂λi∂xai+(y−y1)∑i∂λi∂yaia = 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で割る:∂w−1a∂x=∑i∂λi∂xwi−1ai,∂w−1a∂y=∑i∂λi∂ywi−1ai\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}

参考文献#


Share this post:

Previous Post
同時打鍵のしくみ
Next Post
経路探索アルゴリズム