M4Layerの「#define LAYER_RT 0」の使い方

今さらなM4Layerの使い方メモ。

 

合成モードの下にあるフラグの話。

 

 

// レンダリングターゲットを使用するか
// 0 にすると描画結果をそのまま使用するようになりますが、
// 他のレンダリングターゲットに対して使用できるようになります。
#define LAYER_RT 1

 

これ。

デフォルトだと「#define LAYER_RT 1」になってます。

シェーダーを乗算合成するには1になってないとダメです。

でも画面色調したいだけなら「#define LAYER_RT 0」の方がいい。

 

■「#define LAYER_RT 1」の場合

M4Layerで適用したシェーダーで作ったレイヤーを合成するモード。

 

適用シェーダーが(none)の場合はMMDデフォシェーダーを重ねる。

たとえば階調のきついトゥーンをモデルに適用してる上にM4Layerで(none)を重ねると、トゥーンの階調がぼやけてしまう。逆にリアルなシェーダーの上から(none)を重ねるとトゥーンがかかってしまう。

 

2つの効果の違うシェーダーを重ねたい場合はこれでいいんだけれど、単純に色調したい場合は(none)だとダメでmainタブと同じシェーダーをM4Layer上でも重ねる必要がある、で、重い。

 

■「#define LAYER_RT 0」の場合

現在、描画されている画面を複製したレイヤーを合成するモード。

AviUtilとかだとフレームバッファとかそういう機能に該当する。

 

3D処理がなくて軽いけど、別のシェーダーは重ねられない。

M4Layerより上の描画順で他にポストエフェクトを読み込んでる場合はそのポストエフェクトの効果も含めてレイヤーに反映される。

 

同じシェーダーを重ねるだけならポストエフェクトの描画順で一番上にして合成すればよくて、「~_RT 1」より軽い。

 

ポストエフェクトの効果も含めて色調したい場合はM4Layerの上にそのポストエフェクトを置く。たとえばDiffusionを読み込んでる場合、Diffusionまで含めた色調結果をレイヤーとして描画して上から合成する。

 

★「#define LAYER_RT 0」で材質ごとにオンオフを設定する場合

「~_RT 0」の場合、そのままだとRTタブが存在しないので一部の材質だけレイヤー合成をオフにするという操作ができない。そこで必要になるのが以下の設定。

 

// マスクを使用するか
#define LAYER_MASK 1

 

「~_RT 1」でこのマスク用のタブ設定を1にしている人もたぶんいると思うけど、「~_RT 1」の場合はM4Layerのタブに直接、「InvisibleMask.fx」か「VisibleMask.fx」を適用すればマスク効果が出るのでマスク専用のタブは実は必要ない。(使ってもいいけど)

 

「~_RT 0」の場合はタブがないから、マスク用のタブを設定しないと材質ごとのレイヤー合成のオンオフ設定ができない。つまり、このマスク用タブ設定のオンオフは「~_RT 0」と組み合わせて使わないとあまり意味がない。

 

「~_RT 0」の状態で、マスク用のタブに「InvisibleMask.fx」か「VisibleMask.fx」を適用すれば、M4Layer以前に描画された画面を材質ごとに自由自在に切り取ってその画像をレイヤーとして合成して色調できる。

 

▼結論

M4Layerで色調したいだけなら「#define LAYER_RT 0」+「#define LAYER_MASK 1」で使いましょう。

 

今さらそんなことに気が付いたのかよ!

・・・はい、すみません。。。