« ○○の秋 | トップページ | Outlier of the Everywhere »

2009年10月13日 (火)プログラマー的デザイン表現(4)

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

自らにプレッシャーを与える「プログラマー的デザイン表現」第4弾です。
今回は「アルファブレンディング」について考えてみます。

前回にも増して「今更感」がありますが、実は半透明描画は結構厄介です。
「こうすればよかったかなぁ~」という挑戦もありますので、地味な話題ですが
お付き合い下さい。

さて、アルファブレンディングといえば、
例えば「窓ガラス」や「煙」「髪の毛」等によく使われていますが…、
さぁここで出てきました「髪の毛」!コレが今回の肝です!

昔から思っていた事なんですが、
これを何とか不透明描画で表現出来ないものなのか!?

こう思う理由は色々とありまして、例えばソートの問題です。
半透明同士のソートは非常に厄介です。
物体間の距離が離れているのであれば、そう難しくない事なのですが、
髪の毛は互いが密接しているので、ソートはほぼ不可能です。

また、ソートするということは、
それなりにメッシュを細分化する必要も出てきますので、
データが冗長になりやすく、レンダリングの効率もそれなりに落ちてしまいます。

あと、半透明ピクセルは「深度情報」を持つことが出来ないので、
セルフシャドウ等を行う際、半透明箇所を考慮出来ない
「中途半端な影」となってしまいます。

という訳で、解決策を色々考えてみました。

思いついたのが、
「半透明描画の代わりにディザ表現で透けている感を出す技法」です。
アルファ値の大きさに応じてディザパターンを加減するシェーダを作ってみました。

結果、こうなりました。
左側がディザ描画、右側がアルファ描画です。

2009_1009_01

拡大画像です。

2009_1009_02

テクスチャのアルファ値の調整を全然していないので、これで全てを評価するのは
難しいですが、プログラム的には思惑通りに出来たと思います。

ん~見た感じ、半透明描画と比べて相当変わっています。
特に中間値と思われる個所がかなり見劣りしますね。
アルファ値を調整すれば幾分かは解消出来そうな気もしますが、
調整するテクニックがありませんので(泣)、今回はここまでとします。

ということで、
今回は「半透明」について凄まじい意気込みを持って取り組んでみました。
結果、画質的にはイマイチ(汗)でしたが、
不透明でそれっぽく出来たのは収穫でした。

おそらくグラフィックスプログラマーにしか
賛同を得られない話題でしょうなぁ~(泣)

不透明、万歳!

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

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

« ○○の秋 | トップページ | Outlier of the Everywhere »

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

コメント

コメントを書く



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


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



トラックバック


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

« ○○の秋 | トップページ | Outlier of the Everywhere »