投稿者 tel | 2012年11月20日

頂点シェーダで草を揺らす

CEDEC2011の「Dragon’s Dogma」のグラフィックス表現の技術解説(http://cedil.cesa.or.jp/session/detail/604)を参考に試してみた。

資料のp37に風で揺らすために以下の式が載っている。

Effectが風による影響度らしいがこれがベクトルなのかスカラーなのかよくわからない。他にもWinForceとWinDirは独立した値なのかどうか。Posは関節位置で頂点に事前に入れておくみたい。

資料には重みによって揺れ幅が変わる、というようなことが書いてあったがこの式には入っていない様子。いろいろわからない部分が多かったので適当にごまかして作ってみた。

草は四角の板ポリゴンにテクスチャを貼り付けてたくさん並べた。頂点を移動させるシェーダは以下のようにした。

vec3 v = windForce * sin(dot(pos.xz, windDir.xz) + elapsedTime) * pos.y;

posは頂点の座標、上のほうがたくさん揺れそうなのでyをかけてみた。実際は草ひとかたまりにつき関節位置を1つ入力するべきなのかもしれないが、面倒だったので頂点座標をそのまま入れた。

WebGLで実装してみた結果
http://jsdo.it/sapphire_al2o3/4hib

資料の動画とは結構動きが違うが、意外と草原っぽい雰囲気はでた。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。