2011年12月10日

水面の表現 その3

昨日の続きです。

とりあえず環境マッピングということで反射/屈折を入れてみました。
反射の方はもう少し工夫すればもっときれいに出るはずです。

GLSLにはreflect関数とrefract関数があるので、入射ベクトルと法線ベクトル、屈折率があれば自分で計算しなくても取得できます。

水中にお魚など別の物体があった場合はまた変わってくるので面倒ですね。

地面の画像は下記サイトのシームレステクスチャを使用させていただいております。
http://www.spiralgraphics.biz/packs/terrain_desert_barren/index.htm

実行結果

水色とテクスチャの色をmixで混ぜて水の透明度?を変化させています。
前回のQ値は1.2にしています。1.0を超えるのは良くないみたいですが。



web拍手 by FC2
posted by シンドラー at 17:40 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

水面の表現 その2

前回の続きです。

ゲルストナー波にしてみました。
xとz方向に少し移動して細い山になるみたいですね。
ジオメトリシェーダを使わずにバーテックスシェーダで頂点移動と法線計算するようにしました。

実行結果



制御パラメータQが0の時はsin波の重ね合わせと同じで、Qを増やしていくと波が細くなります。
前回の参考サイトに法線ベクトルの計算方法も載っていましたので、それにすると200x200のメッシュで30個のsin波の重ね合わせでもリアルタイムで動くようになりました。

見た目はまだ微妙ですが、環境マッピングやスネルの法則で屈折計算等を行えばもっとましになると思います。

次は見た目の改善かFFTかその他の手法を試してみたいと思います。
web拍手 by FC2
posted by シンドラー at 01:05 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2011年12月07日

水面の表現 その1

なぜもう12月に入っていて1週間終わっているんでしょうか。

水面の表現を試してみたいと思います。

参考文献
[1] ttp://www.fun.ac.jp/~sisp/old_report/2007/08/document08_A.pdf

とりあえず単純?なsin波の重ね合わせです。

レンダリングはフレネル反射とフォンシェーディングです。

ジオメトリシェーダを使っていますが良く考えたら頂点シェーダだけでできる気がします。

実行結果



ランダムで作ったsin波20個重ねています。それっぽいような微妙なような。
法線ベクトルの計算の問題かちょっとメッシュの切れ目が見えるのが嫌ですね。

メッシュは150x150の頂点で三角メッシュ作ってます。
もっと細かくすれば切れ目が見えなくなるんですが計算時間が増えてしまいます。

次はゲルストナー波とかFFTとか試してみたいですね。
web拍手 by FC2
posted by シンドラー at 12:36 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする