GLSLで影付け中


非常に今更なのですが、最近OpenGLでシェーディングをあれこれいじっています。以前やっていた力学シミュレーションもほっぽりだしたままで、いいかげんな状態なのですがorz 一応趣味だし、気が向いたときということで(適当)


話を戻してシェーディング。もっと広げると、「シェーダ」の類を利用して、巷では優秀な人がいろんなことを試しています。異方性ライティングや、もっと進むと大域照明、果てはGPGPUなどと、枚挙に暇がありません。学術的に見ても、非常に難解な数式の数々が出てくるのもあって、読むだけで自分のような人間は頭がパンクしますorz ただし、ここで忘れてはならないというか、最初に明らかにしておかないといけないのは、


「これができたら何が嬉しいか?」


ということ。別に趣味なので商売にする必要は全然ないのですが、自分的に面白くない目標に向かって難解なことをする必要も無いので。


というわけで、自分的な目標としてまずは「シェーディングとシャドウイングを同一に扱いたい」ということにしようかなと。別にうれしくない?これは失礼orz
3DCG関係のプログラミングをした方であれば実感があると思いますが、現在のポリゴンベースのハードウェアでは、「シェーディング」、つまり遮蔽されてできる影でなく、光のあたり具合で変化する陰影のみを扱っています。「シャドウイング」は、これに対して付加的な形で実装されており、使用目的に応じてさまざまな方式が選択されています。
「ステンシルシャドウ」「シャドウマッピング」「シャドウバッファ」などが現在使われている物の代表的な例です。


が、光源が複数あって影も複数つくような状況になると、破綻を防ぐために制限が必要になるなど、どうしても対症療法的な実装が必要になってきます。もちろん、工夫次第でそれは適宜解消できるのですが、趣味的に見ると決して気持ちのいいものではありません(我尽)


というわけで「陰」と「影」を一緒に扱うという手法を思いつくままに試してみました。強いて言うと、シャドウマッピングの一種になります。この「ライティング処理」だけで、陰影と影が同時に出せそうなことは分かりました。が、まだまだ実装が片手落ち状態ですorz
紹介できるくらいまとまったら、追い追い解説していきたいものです。


#紹介するほどのものか?という疑問もありますが、
#そこは個人日記だからご容赦、ということで(^^;;)