プロフィール

JaJa

JaJa
ツイニ スマートフォンヲ テニイレタゾ~! ('▽'ノ

...Now Developing
→ちょっと大きいサイズ
ブログ内検索
リンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2012/05/03▼バグがあらわれた!:2ひき

バグBは、ほぼ丸一日を費やしてしまいました……。

画面描画については、スプライトを直絶画面に表示せず、いったんレンダーターゲットという領域に展開してから、画面に表示させています。

こんな流れ……
・1.グラフィックの元となるpng画像(アセット)をテクスチャとして読み込む。

・2.テクスチャから個々のグラフィックパーツとなるスプライトを切り出す。

・3.スプライトをレンダーターゲットに展開し、より大きなまとまりのパーツにレイアウトする。

・4.大きなまとまりパーツを画面に表示。

レンダーターゲットは作業場みたいなイメージ。
スプライト(メニューの線や数字の1文字1文字、キャラ絵やアイコンの1個1個)をレンダーターゲット上で、大きなまとまりパーツ(1ユニットぶんのメニュー表示)にしてから、それを画面に表示します。
コンポジションみたいな物を作ってから表示させるような感じで。

しかし、この方法で実際に表示してみると、半透明で表示したスプライトの色が異様に暗く表示されてしまいます。
(不透明度100%で表示するぶんには正しく表示されます。)
この原因がなかなか掴めなくて、どっぷり時間を費やしてしまいました。。。

原因はブレンディング関数にあったのですが(ここに似たような要因で困っている人の記事も)、ライブラリの仕様上、Reachモードで駆動するWindowsPhoneでは、カラーとアルファ値に同じブレンディング関数を適用しなくてはならないため、直接解決する術は無いようです。('-';

そこで、取れそうな対策といえば……

・1.ピクセルシェーダを自作し、組み込む。
・2.半透明を諦める。
・3.レンダーターゲットを諦める。
・4.問題が起きない条件下でのみ、半透明とレンダーターゲットを使う。

1は、ピクセルシェーダの負荷によって、描画処理のパフォーマンスは確実に低下すると思うのだけど、WindowsPhoneのスペックで、それがどの程度描画速度に影響を及ぼすのか未知数だったり。
加えて、ピクセルシェーダの勉強を1からする必要があり、プログラム初心者である自分のスペックでは到底無理そうなので、まあ却下。('-';
2は、うーん……半透明表現は必要だよなあ。。。
3は、うーん……レンダーターゲットが使いたいなあ。。。

で、対策案4に。
具体的な使用条件としては……
・レンダーターゲットへ展開するスプライトは半透明を切る。
・半透明表現を使いたいスプライトは(レンダーターゲットを介さずに)直接画面に表示させる。
・バックバッファから画面へ表示する際に、アルファ値(透明度)を使った画面演出をしない。
というもの。

画面を構成するうえで半透明表現がやや扱いにくくなりますが、こういう仕様と割り切って進めようと思います。('-'ノ

20120503.jpg
▲以前から欲しかったサントラが到着! プレミア価格で手が出なかったので、このたびの再販は嬉しい限り!('▽'*
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。