glsl」タグアーカイブ

バイラテラルフィルタ

シェーダネタ2
テスト週間の現実逃避にバイラテラルフィルタを実装してました.

バイラテラルフィルタは簡単にいうと画像のエッジは残しつつ,平滑化を行うフィルタです.
実装はt-potさんのページを参考に,いろいろいじりながら作りました.

下のような元画像に対して,デプス値によるエッジを考慮しながらガウシアンフィルタをかけます.
 

下の画像がフィルタ結果です.左がσr=1.0, 右がσr=0.2です.
σrはデプス値による重みの分散で,小さいほどエッジを残そうとします.
結果は,σr=1.0ではポットの輪郭がぼけているのに対して,σr=0.2では輪郭は残しつつポットの領域をぼかすことができています.
 

効果がわかり辛いため,チェック模様に対してフィルタをかけてみました.
左から,元画像,σd = 1.0, σd = 0.2です.σd=0.2のほうが輪郭部分で元の模様が強くでています.
  

前回作ったSSAOは遮蔽度のサンプリング数が少ないとレンダリング結果が汚くなるので,このバイラテラルフィルタをかけてやるといいらしいです.

実行ファイルソース

ssao

最近シェーダ触ってないなぁ,と思ったのでシェーダネタ
SSAO(Screen Space Ambient Occlusion)を実装して遊んでみました.

一般的なライティングでは環境光を定数とおいてしまうため,直接光のあたらない陰の部分の細かなディテールを描写することができません.SSAOは,シーンのデプス値から各ピクセルの遮蔽度を画面座標系で計算して,擬似的に環境光の遮蔽度を求めて陰の部分のディテールまで描画します.

ようするに薄暗いところまで細かく描画するよって感じです.
くわしくはぐぐってください.

まず,SSAOなしのウサギちゃんです.
首周りや脚の下側など,環境光が支配的な部分のディテールが潰れています.

SSAOありのウサギちゃんです.
陰部分の細かなディテールが描画されています.
2枚目は強めに効果をかけたものです.なんか重いですね.
 

sponzaでも試してみました.
むりやり面を三角形に変換したため,法線が少し乱れています.
  

派手な効果は得られませんが,CGでは得られにくいぼやっとした陰影がえられるためとても好きな技法です.