2009年10月13日 (火)プログラマー的デザイン表現(4)
おはようございます。本日の当番、プログラマーの大川です。
自らにプレッシャーを与える「プログラマー的デザイン表現」第4弾です。
今回は「アルファブレンディング」について考えてみます。
前回にも増して「今更感」がありますが、実は半透明描画は結構厄介です。
「こうすればよかったかなぁ~」という挑戦もありますので、地味な話題ですが
お付き合い下さい。
さて、アルファブレンディングといえば、
例えば「窓ガラス」や「煙」「髪の毛」等によく使われていますが…、
さぁここで出てきました「髪の毛」!コレが今回の肝です!
昔から思っていた事なんですが、
これを何とか不透明描画で表現出来ないものなのか!?
こう思う理由は色々とありまして、例えばソートの問題です。
半透明同士のソートは非常に厄介です。
物体間の距離が離れているのであれば、そう難しくない事なのですが、
髪の毛は互いが密接しているので、ソートはほぼ不可能です。
また、ソートするということは、
それなりにメッシュを細分化する必要も出てきますので、
データが冗長になりやすく、レンダリングの効率もそれなりに落ちてしまいます。
あと、半透明ピクセルは「深度情報」を持つことが出来ないので、
セルフシャドウ等を行う際、半透明箇所を考慮出来ない
「中途半端な影」となってしまいます。
という訳で、解決策を色々考えてみました。
思いついたのが、
「半透明描画の代わりにディザ表現で透けている感を出す技法」です。
アルファ値の大きさに応じてディザパターンを加減するシェーダを作ってみました。
結果、こうなりました。
左側がディザ描画、右側がアルファ描画です。
拡大画像です。
テクスチャのアルファ値の調整を全然していないので、これで全てを評価するのは
難しいですが、プログラム的には思惑通りに出来たと思います。
ん~見た感じ、半透明描画と比べて相当変わっています。
特に中間値と思われる個所がかなり見劣りしますね。
アルファ値を調整すれば幾分かは解消出来そうな気もしますが、
調整するテクニックがありませんので(泣)、今回はここまでとします。
ということで、
今回は「半透明」について凄まじい意気込みを持って取り組んでみました。
結果、画質的にはイマイチ(汗)でしたが、
不透明でそれっぽく出来たのは収穫でした。
おそらくグラフィックスプログラマーにしか
賛同を得られない話題でしょうなぁ~(泣)
不透明、万歳!
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント