2012年06月12日

G-Bufferで材質選択

G-BufferでFBOのテクスチャに深度や色などを出力するのですが、G-Bufferの文献では材質番号も出力しています。
PMDでは材質がひとまとまりで、材質ごとにエッジ出力の有無の情報やテクスチャ画像を持っていたりします。

今回は、Qtのダイヤルで材質番号を指定すると、指定された材質の面が赤く表示されるようにしてみました。
流れとしては、1パス目で、PMDをVBOで描画する際に、glUniform1iで材質番号をシェーダ側に渡しておきます。
これをFBOのテクスチャのデータの一つとして出力すれば、出力画像の各ピクセルごとの材質番号を2パス目で知ることができるようになります。

後はQtのダイヤルで指定した材質番号と、そのピクセルと近傍を含む9ピクセルすべての材質番号が一致すれば、その領域は赤色とmixしています。で、4〜8ピクセル一致した場合には、青色のエッジとして描画しています。
1〜8ピクセルとすると、なぜか関係なさそうなところもエッジとして判別されてしまったので4〜としています。

現在シャドウマッピング用に光源からのFBOレンダリングを1回、視点からのFBOレンダリングを1回、画面いっぱいに四角形を描画してFBOのテクスチャをコネコネするのに1回の計3パスにしていますが、シェーダ側で完結していればリアルタイムで動きますね。シェーダ⇔PC間にデータ転送が入った瞬間にFPSが落ちてしまいますが。

実行結果

あざといことで有名なLat式ミクさんを使用させていただいております。顔の法線とか表示すると怖いですね。
動画だと見えないですが、ダイヤルをぐるぐる回しています。



選択した材質の色合いをGUIで変更したりとかしてみたかったのですがまたそのうちに。まぁこの辺のことはPMDEditorで全部できるんだと思いますが。
web拍手 by FC2
posted by シンドラー at 02:17 | Comment(0) | TrackBack(0) | Qt | このブログの読者になる | 更新情報をチェックする