前回は球によるAOしか対応できませんでしたが今回はちゃんとTLoUと同じように
スケーリングされた球に対応してみました。
具体的な実装方法は以下のような感じにしています
・ジオメトリと最も近い線分の点を用いてAmbient Term
・ライトベクトル方向と最も近い線分の点を用いてDirectional Term
ようするに点と線分の最短距離、ラインと線分の最短距離を求め、その点をAO中心と
して球の時と同じように計算するといった感じになります。
正確にはスケーリングされた球ではなくカプセルのAOになるためTLoUとは実装が
違うと思われます(おそらくTLoUの方が簡略化されている、はず)。
それと正確な手法ではなく、最短距離の点以外からのAOが考慮できていないため、
画像をよく見ると分かりますがAmbient TermとDirectional Termの
つなぎ目部分が若干おかしいです。最短距離の点以外のAOも考慮するために
最短距離の点が線分のどの位置にあたるか調べ、中心になるほど球の半径を大きく
することでそれっぽくなる気がしますが…まだ試していないのでそれっぽくならないかも
しれません笑。
追記:
つなぎ目のズレはDirectional Termの計算が若干おかしいことが原因でした。
ということで、ちゃんと計算した画像も追加(2枚目)。