最近DirectX11を用いたディファードレンダリングに手を出しているのですが、影の生成の所で頭を悩ませております。
大量のポイントライトを用いてライティング処理を行う訳ですが、
それぞれの光源からライティング計算をするピクセルに向けて計算する際、
そのピクセルに到達するまでの間に遮蔽物があれば計算を行わない処理をしたい訳です。
以前、フォワードレンダリングをしていた時は、光源が少なかった為光源毎にシャドウマップを生成して遮蔽物の判定を行っておりましたが、
それをディファードレンダリングで行うとシャドウマップの量もジオメトリ負荷もかかってしまい、そもそものディファードレンダリングの意味が無くなってしまいます。
ディファードレンダリングにおける、光源からの遮蔽物の判定はどの様に行っているのかの、ヒントや資料等が御座いましたら教えて頂けないでしょうか?
ディファードレンダリングにおける影生成について
Re: ディファードレンダリングにおける影生成について
こんばんは。
影の生成がしたいのかライティングがしたいのかがちょっとわからないのですが、
文章的にライティングがしたい…でいいのでしょうか?
遮蔽物にさえぎられた部分は明るくならない、であれば
DirectXやインテルなどにサンプルがあるはずです。
コンピュートシェーダ使いますが…(ピクセルシェーダ版もあったような…)
概念としては
・深度値と変換行列でビュー座標位置を逆算
・求めた位置がポイントライトで照らせる範囲にあるか判定
以上です。
深度値で求めることからわかる通り、画面上しかやる必要はないです。
ディファードであればこの処理に対して材質を与えれば
材質にあわせた色付けも可能でしょう。
なんならUnityやUnrealエンジンなどはシェーダ―ソースも豊富なので、
そういうところを見ると勉強になりますよ。
影を落としたいのであればもうちょっと面倒です。
影の生成がしたいのかライティングがしたいのかがちょっとわからないのですが、
文章的にライティングがしたい…でいいのでしょうか?
遮蔽物にさえぎられた部分は明るくならない、であれば
DirectXやインテルなどにサンプルがあるはずです。
コンピュートシェーダ使いますが…(ピクセルシェーダ版もあったような…)
概念としては
・深度値と変換行列でビュー座標位置を逆算
・求めた位置がポイントライトで照らせる範囲にあるか判定
以上です。
深度値で求めることからわかる通り、画面上しかやる必要はないです。
ディファードであればこの処理に対して材質を与えれば
材質にあわせた色付けも可能でしょう。
なんならUnityやUnrealエンジンなどはシェーダ―ソースも豊富なので、
そういうところを見ると勉強になりますよ。
影を落としたいのであればもうちょっと面倒です。