« 未知との不遭遇 | トップページ | 機材を大事に »

2009年7月29日 (水)プログラマー的デザイン表現(3)

おはようございます。本日の当番、プログラマーの大川です。

今回は「プログラマー的デザイン表現」第3弾ということで、
水面表現にチャレンジしたいと思います。
何を今更という感がありますが、
私自身あまり経験がなかったのと、お勉強という意味も込めまして
チャレンジしたいと思います。

さて、水面表現といっても色々な手法がありますが、
今回は程々にリアルで、かつ処理速度も軽めの実装を目指したいと思います。

水面を表現する上で欠かせないモノ、それは「水面ポリゴン」です!
というわけで、まずは1枚ポリゴンを張ります。

2009_0728_01

当然のごとく、これじゃ何のこっちゃ判りませんね。

で、次に必要なモノ。まずは「映り込み」です。
大体(?)水面には、景色が反射して映り込んでいます。
ということで、
適当なキューブマップテクスチャを利用した映り込みを追加してみます。

2009_0728_02

ちょっとはリアルになった感がありますが、
景色が映り込み過ぎてテカテカ、まるで水銀です。
しかも解像度は低いし、そもそも映り込んでいる景色が違うじゃない!
という指摘も出てくることでしょう。

まぁ景色が異なるのは、実際の鏡像を使っていないので、当然と言えば当然ですね。
それはさておき、まずは映り込み自体が水銀っぽい現象を解決しましょう。

映り込む度合に関して、フレネル反射を適用してみます。
フレネル反射とは、光の入射角が浅いほど鏡面反射が強まる現象を指します。
入射角が浅い=遠くの水面ほど映り込む度合が高くなります。

で、フレネル反射を実装した結果が、以下になります。

2009_0728_03

以前のものより、落ち着いた感が出てきました。

次に、水面に揺らぎを持たせます。
水面ポリゴンにバンプマッピングを適用し、映り込む角度を適度に変化させます。

2009_0728_04

ここでガラッと変わりました。なかなかイイ感じです。
解像度の低さも気にならなくなりました。
深い水面であれば、こんな感じでOKかと思いますが、
もうちょっと頑張ってみます。

最後に水底を追加します。
水底には、水面ポリゴンで隠れている画像を再利用します。
また、水底にも揺らぎを持たせ、水面っぽさを演出します。
あと、ついでにスペキュラも追加

2009_0728_05

ん~、かなり水面っぽくなったのではないでしょうか!

水底の可視率については、先程説明したフレネル反射を利用しています。
また、水底までの深さに応じて、水自体の色(濁り)が補間されるよう、
ちょっとした味付けを実装しています。

さて、最後に残った課題「映り込んでいる景色が違う」ですが、
今回は割愛します(汗)

鏡像を作り出すこと自体は出来るんですが、
レンダリングに掛かる処理負荷を軽減するためと、
あと適当な画像を貼り付けたにしては、割とそれっぽい雰囲気は出ているので、
省略してもそれほど問題は無い、ということに因ります。

そんなんサボリやん!という意見もあるかと思いますが、
如何にして真面目にやらずに見た目を誤魔化せるかが
ゲームグラフィックスの「肝」だ
と勝手に思っていますので、何卒ご容赦を(汗)

ということで、最後は実際に地形モデルに配置して雰囲気を確認

2009_0728_06

今回はセオリー通りに作ってみましたが、まずまずの出来かと思います。
でも、やっぱり鏡面反射は欲しいかな~。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2009/07/post-43d2.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« 未知との不遭遇 | トップページ | 機材を大事に »

プログラマー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: プログラマー的デザイン表現(3):

« 未知との不遭遇 | トップページ | 機材を大事に »