Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!

log

2014.07.06 C++:The Last of Us的なAOその2

ファイル 446-1.jpgファイル 446-2.jpg

前回は球によるAOしか対応できませんでしたが今回はちゃんとTLoUと同じように
スケーリングされた球に対応してみました。

具体的な実装方法は以下のような感じにしています
・ジオメトリと最も近い線分の点を用いてAmbient Term
・ライトベクトル方向と最も近い線分の点を用いてDirectional Term

ようするに点と線分の最短距離、ラインと線分の最短距離を求め、その点をAO中心と
して球の時と同じように計算するといった感じになります。
正確にはスケーリングされた球ではなくカプセルのAOになるためTLoUとは実装が
違うと思われます(おそらくTLoUの方が簡略化されている、はず)。

それと正確な手法ではなく、最短距離の点以外からのAOが考慮できていないため、
画像をよく見ると分かりますがAmbient TermとDirectional Termの
つなぎ目部分が若干おかしいです。最短距離の点以外のAOも考慮するために
最短距離の点が線分のどの位置にあたるか調べ、中心になるほど球の半径を大きく
することでそれっぽくなる気がしますが…まだ試していないのでそれっぽくならないかも
しれません笑。

追記:
つなぎ目のズレはDirectional Termの計算が若干おかしいことが原因でした。
ということで、ちゃんと計算した画像も追加(2枚目)。

comment