嘘パースシェーダーのシェーダー組み込み・メモ

たじゃっぴさんの嘘パースシェーダーを他のシェーダーに組み込めるかという話。
結論からいうと複雑なシェーダーでなければわりと簡単に組み込むことは可能。
複雑なシェーダーというのは~.fxと~.fxsubとかが入り組んでるようなもの。
AlternativeFullとかHAToon2とかRay-MMDとか・・・

まず基本的な話ですが、
嘘パースシェーダーは頂点変形シェーダーです。
パースの拡大はモデルの頂点を移動計算して描画してるわけ。

変形シェーダーの特徴としてシェーダータイプのポストエフェクトと相性が悪いです。
ディフュージョンやトーンマップみたいなフィルタータイプは大丈夫です。
見分け方はRTタブがあるかどうかだと思ってください。

他シェーダーに組み込む場合は、
頂点の座標を計算している部分に頂点移動計算部分を適用すればいいのです。

「//嘘パ用」と書かれている126行目から170行目までが変形用の計算部分。
この計算にはCameraPositionが必要なので以下の後に置かないとエラーが出ます。

float3 CameraPosition : POSITION < string Object = "Camera"; >;

この計算式がない場合は自分で付け加える必要があります。


「//嘘パ変形」と書かれている2行が計算の適用組み込み部分です。

輪郭描画(エッジ) 178~179行目
影描画(非セルフシャドウ、地面影) 226~227行目
オブジェクト描画(セルフシャドウOFF) 267~268行目
セルフシャドウ用Z値プロット(セルフシャドウマップ) 465~466行目
オブジェクト描画(セルフシャドウON) 515~516行目

嘘パースシェーダーはEdgeControlを使ってエッジを独自描画しています。
その関係でエッジ計算部分も追加されていますが、それは好き好きにという感じ。
エッジを独自計算する場合は、
MMD標準のエッジ用の処理「//輪郭描画用テクニック」をオフにする必要があります。

 

ポストエフェクトに嘘パースを適用する場合は、

RTタブで適用されているシェーダーに以上の処理をする必要があります。