描画することにおいて重要なのがエフェクト効果です。
アルファブレンディングといえば、png画像のRGBAデータの中のアルファ値0.0fを切り捨てて透過を行うことで切り絵みたいになるわけですが、
今回はその実装をしていきたいと思います。
アルファブレンド処理をせずに描画すると以下の画像のようになります。
ちなみに+αで、
- 加算合成
- 加算合成(透過あり)
- 減算合成
- スクリーン合成
これらの合成を行っています。
基本色と合成色という、前の色と今から重ねる色を合成するということです。
合成モードに関しては以下のサイトページを参考にしてください。
https://tips.clip-studio.com/ja-jp/articles/867
ブレンド設定の方法については、以下のサイト2つが参考になりました。
http://fmworks.cocolog-nifty.com/blog/2009/06/d3d-f379.html
https://yttm-work.jp/gmpg/gmpg_0020.html
プロジェクトの作成
前回同様にプロジェクトを新しく作成します。
プロジェクト名は、” 0009_AlphaBlend “としておきましょう。
プロジェクトの設定
DirectXSDKのパスを通すために、毎回プロジェクトの設定をいちいちしなければなりません。
前の記事「4. 三角形」と同じように「インクルードディレクトリパス」と「ライブラリディレクトリパス」の設定をしてください。
やり方は前と同じです。
ソースコード
以下がソースです。これも前回同様、流れが分かりやすいようにmain.cppだけでまとめました。
以下のソースをコピペするか、ダウンロードしてVisual Studio の「ソースファイル」に保存してください。
コピペするなら、
「ソースファイル」で右クリックして
「追加」→「新しい項目」で、「C++ ファイル」を選び、名前を” main.cpp “にして追加ボタンを押して作成してください。
ダウンロードなら、
同じく「ソースファイル」で右クリックして
「追加」→「既存の項目」で、main.cppを選択して追加してください。
「L」と「J」のキー押下でブレンドモードを切り替えられるようになっています。
そして、付属ウィンドウのコンソールで現在描画しているブレンドモードを確認できるようにもなっています。
アルファブレンドとその他の合成モードは、
最初にOnInit内で予め全て作っておいてブレンドステートを変えることでブレンドモードを切り替えることができています。
加算合成↓
加算合成(透過あり)↓
減算合成↓
スクリーン合成↓
あと、これ以上のエフェクト効果の処理(乗算合成、オーバーレイ、差の絶対値とか)は現状の実装方法では無理なので、
ピクセルシェーダの方で追加する形になります。
次に、シェーダ本文です。
これは「ソース ファイル」から「追加」→「新しい項目」で、
「Visual C++」→「HLSL」の中で.hlslなら何でもいいのですが(Visual Studio側が勝手にテンプレートを作るだけなので)、
ここでは「ジオメトリ シェーダー ファイル (.hlsl)」を選んで、
名前を” shaders.hlsl “にして追加ボタンを押してください。
すると、「ソース ファイル」中にshaders.hlslが作れますので、
中にあるコードを全て以下のコードでコピペして上書きするか、
ダウンロードして「既存の項目」で追加しましょう。
shaders.hlsl
シェーダ側ではワールド行列しか変換しません。
今回も引き続き、前回と同じようにプロパティで「カスタムビルドツール」に設定しましょう。
次に、読み込むテクスチャを用意します。
以下のテクスチャをダウンロードしてmain.cppと同じディレクトリ下に置いてください。
color_ink.png
以上で作成は完了です!!
以下のようになっていればOK。
ツールバーの「デバッグ」から「デバッグの開始(F5)」で実行できます。
ビルドするときは、「0009_AlphaBlend」を右クリックして「スタートアップ プロジェクトに設定」を押してプロジェクトターゲットを変更してからするようにしてください。
アルファブレンドされたものが表示できたら終わりです。お疲れさまでした。
最後に
学習を進めていく中でバージョンアップによる差分をすぐに確認できるように「WinMerge」というソフトを導入した方がすぐにでもプログラムを理解できるようになるかと思います。
この作例では、記事「DirectX11 | 6. 定数バッファ」でのmain.cppと今回のmain.cppとで差分を確認して学習に活かしてください。
何のコードが変更されたり追加されたのかがすぐに分かります。
exeファイル
VisualStudioで実際に動かさなくてもexeとして単体で動かせるように実行ファイルを添付しておきます。
0009_AlphaBlend.zip
zipなので解凍して「0009_AlphaBlend.exe」を起動してみてください。