ホーム < ゲームつくろー! < DirectX10技術編

その9 マルチレンダーターゲットで異なる情報を一度に描いてみる : サンプルプログラム



 DirectX10技術編その9「マルチレンダーターゲットで異なる情報を一度に描いてみる」で説明した内容を踏まえたサンプルプログラムです。実行すると、モデルの明るい部分にブルームがかかり眩しく光ります。


サンプルスクリーンショット。ブルームは強めに掛けてます(^-^;

 上のサンプルを動かすには、こちらからソースをダウンロードして下さい。

 直接実行するにはbin/DX10_No9Smp.exeを起動してください。
コードはsourceフォルダ下にあります。multirendertarget.fxシェーダファイル以外をプロジェクトに追加しDirectX10ライブラリへのパスを設定すればビルド出来ます。

 [w][s]キーでスペキュラの拡散強度を変更できます。
 [a][d]キーでスペキュラの加算度合いを変更できます。
 [q]キーをでモデルの表示のON/OFFを切り替えられます。OFFの時は加算されている輝度ブラー画像のみが表示されます。

 【注意】
 サンプルに付いているモデル(Saba.stl)はクリエイティブコモンライセンスに基づき使用させて頂いております。頒布等について詳しくはサイトのライセンス情報をご確認下さい。商用利用が禁止されておりますのでご注意下さい。

Saba Sword (https://www.thingiverse.com/thing:2225517) by bermantdesigns is licensed under the Creative Commons - Attribution - Non-Commercial license. http://creativecommons.org/licenses/by-nc/3.0/


〇 サンプルの解説

 このサンプルでは、最初に元のモデルから2つの画像をマルチレンダーターゲットで描画しています。一つはディフューズ及びスペキュラーを加味した良く見るライティング画像です。もう一つはそのライティングの結果非常に明るい部分のみを抽出した「輝度マップ」と呼ばれる画像です:


ディフューズ&スペキュラ画像

輝度マップ

 ブルーム効果を起こすには輝度マップにぼかしフィルターを掛ける必要があります。今回はsmoothstep関数を使ったなんちゃってガウスブラーでごまかしています(^-^;。数学的には正しくないのですが、まぁ何とかなるもんです:


X軸方向へ軸平行ブラー

Y軸方向へさらに軸平行ブラー。輝度ブラー画像が出来る

 ガウスブラーは流石にMRTでは描画出来ないため、2パス使って右のぼかし画像を作成しています。

 最後に作成した輝度ブラー画像を元のディフューズ&スペキュラ画像に加算合成して完成です。