プログラマー的デザイン表現(3)
おはようございます。本日の当番、プログラマーの大川です。
今回は「プログラマー的デザイン表現」第3弾ということで、
水面表現にチャレンジしたいと思います。
何を今更という感がありますが、
私自身あまり経験がなかったのと、お勉強という意味も込めまして
チャレンジしたいと思います。
さて、水面表現といっても色々な手法がありますが、
今回は程々にリアルで、かつ処理速度も軽めの実装を目指したいと思います。
水面を表現する上で欠かせないモノ、それは「水面ポリゴン」です!
というわけで、まずは1枚ポリゴンを張ります。
当然のごとく、これじゃ何のこっちゃ判りませんね。
で、次に必要なモノ。まずは「映り込み」です。
大体(?)水面には、景色が反射して映り込んでいます。
ということで、
適当なキューブマップテクスチャを利用した映り込みを追加してみます。
ちょっとはリアルになった感がありますが、
景色が映り込み過ぎてテカテカ、まるで水銀です。
しかも解像度は低いし、そもそも映り込んでいる景色が違うじゃない!
という指摘も出てくることでしょう。
まぁ景色が異なるのは、実際の鏡像を使っていないので、当然と言えば当然ですね。
それはさておき、まずは映り込み自体が水銀っぽい現象を解決しましょう。
映り込む度合に関して、フレネル反射を適用してみます。
フレネル反射とは、光の入射角が浅いほど鏡面反射が強まる現象を指します。
入射角が浅い=遠くの水面ほど映り込む度合が高くなります。
で、フレネル反射を実装した結果が、以下になります。
以前のものより、落ち着いた感が出てきました。
次に、水面に揺らぎを持たせます。
水面ポリゴンにバンプマッピングを適用し、映り込む角度を適度に変化させます。
ここでガラッと変わりました。なかなかイイ感じです。
解像度の低さも気にならなくなりました。
深い水面であれば、こんな感じでOKかと思いますが、
もうちょっと頑張ってみます。
最後に水底を追加します。
水底には、水面ポリゴンで隠れている画像を再利用します。
また、水底にも揺らぎを持たせ、水面っぽさを演出します。
あと、ついでにスペキュラも追加。
ん~、かなり水面っぽくなったのではないでしょうか!
水底の可視率については、先程説明したフレネル反射を利用しています。
また、水底までの深さに応じて、水自体の色(濁り)が補間されるよう、
ちょっとした味付けを実装しています。
さて、最後に残った課題「映り込んでいる景色が違う」ですが、
今回は割愛します(汗)
鏡像を作り出すこと自体は出来るんですが、
レンダリングに掛かる処理負荷を軽減するためと、
あと適当な画像を貼り付けたにしては、割とそれっぽい雰囲気は出ているので、
省略してもそれほど問題は無い、ということに因ります。
そんなんサボリやん!という意見もあるかと思いますが、
如何にして真面目にやらずに見た目を誤魔化せるかが
ゲームグラフィックスの「肝」だと勝手に思っていますので、何卒ご容赦を(汗)
ということで、最後は実際に地形モデルに配置して雰囲気を確認。
今回はセオリー通りに作ってみましたが、まずまずの出来かと思います。
でも、やっぱり鏡面反射は欲しいかな~。
| 固定リンク
「プログラマー」カテゴリの記事
- 懐古って言うほどでもないゲー(2010.08.31)
- 懐古ゲー(2010.08.30)
- 小一時間問い詰めたい。自分を(2010.08.27)
- ワタシ、ハズ、ガンバッタ、キット(2010.08.26)
- いつかの運動のその後とPCのメンテナンス(2010.08.25)









コメント