ページ 11

キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 10:08
by cattail
DirectX10でキャラを表示し、
テクスチャーのアルファチャンネルを使って
髪の毛を半透明にしようとがんばっているのですが、
透明にしようとしている部分が白くなってしまいます。
いろいろやってもダメだったので、
同じように1枚の正方形ポリゴンで木の葉を作って葉の形のテクスチャーにすると透明になりました。
そこで、髪の毛の部分が白く塗られているのではなくて透明になっいて背景色が見えているのではと思い、
背景色を青に変えたら透明にする部分が青くなりました。
たぶんですが、透明になってはいるけど、キャラやキャラの後ろの背景のポリゴンが透過してしてしまっているように感じます。
木の葉の方は透明になった部分にキャラや背景のポリゴンが見えています。
なぜこのようなことが起こるのか教えて頂けないでしょうか?

初期化部分は以下の通りです。

コード:

 
//アルファブレンディングを設定する
pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );// アルファ・ブレンディングを行う
pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );// 半透明処理を行う
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );// 透過処理を行う

//アルファブレンディング テクスチャの設定
pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);   
pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); 
pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
よろしくお願いします。

Re: キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 11:03
by softya(ソフト屋)
Zバッファの関係じゃないでしょうか。

「その17 Zバッファとアルファブレンドの嫌な関係」
http://marupeke296.com/DXG_No17_ZBuffer ... nding.html

「ポリゴン 半透明 Zソート」あたりで検索してもらうと色々情報が探せると思います。
木の葉がうまく行ったのはレンダリング順序の偶然だと思います。

Re: キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 11:28
by cattail
ご返事ありがとうございます。
リンク先のページを拝見させて頂きました。
確かに「Zバッファの関係」のような気がします。
大変そうなのですぐには結果を出せないかもしれませんが、
今はキャラを最初にレンダリングしていますので、
背景ポリゴンを先にレンダリングさせてみます。
少しでも改善されましたら報告します。
ありがとうございます。

Re: キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 11:57
by cattail
とりあえず透明になりました!
背景ポリゴンとキャラポリゴンのレンダリングの順番を変えただけで
髪の毛の透明は確認できました!
モノの前後関係やキャラの前髪を透明にしたら顔が見えるかとかはやっていませんが、
色々試してみます。
良かったです。何とか抜け出せそうです!

Re: キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 12:01
by cattail
慌ててお礼を忘れてしまいました。
助かりました、ありがとうございます!

Re: キャラの髪の毛を半透明にしたい

Posted: 2014年9月30日(火) 12:21
by cattail
前髪も透明にできて顔が見えるようになりました!
あとはモノの前後関係ですがこれは作っていくうちに少しづつやっていきます。
これで解決とさせて頂きます。
本当にありがとうございました!