これは、セルi上にHemi-cube(表面はピクセルに分割)を発生させ、ターゲットとなるセルjをマッピングし、そのピクセル(解析的に形態係数がもとまる)の和を計算する「点体面」のアルゴリズムで、さらに高精度化のためのいろいろバリエーションはある。
ピクセルへのマッピングの際に、すでにピクセルにマッピング済みであったなら、メッシュ距離を使った判定を行い近い方をマッピングし直すことで、メッシュの可視判定を省略することができる。
ということでやってみる。
- 回転行列の計算
セルiからjを見る場合、hemi-cubeを生成する場合には、セルiの法線ベクトルをz軸に一致させるほうが計算が楽なので、そうなるようにセルiの法線ベクトル成分から回転行列を求める。
- セルjの回転
原点がセルiの重心になるよう平行移動のあと、セルjを回転させる。
- ヘミキューブの生成とマッピング
ヘミキューブの5面にピクセルを生成し、原点かあ各ピクセル重心を見る視線ベクトルと、回転後のセルjの辺り判定を行ってピクセルにマッピングする。各ピクセルのデルタフォームファクタは解析的に求まるので、マップされたピクセルのデルタフォームファクタの和を計算すれば良い。
本日はここまでの実装でおしまい。
# 次のステップは、セルjをi以外のすべてのセルとし、マッピングする際にdepth判定を行って、全てのjをiのヘミキューブにマッピングする。