﻿
超高品質セルフシャドウエフェクト　Ver.2.4

製作：そぼろ

きれいなシャドウを得るためなら、どれだけグラフィックボードを
いじめても構わないという方向けの高品質シャドウエフェクトです。

MMD標準のパースペクティブシャドウマップ、近景用固定シャドウマップ、
遠景用広域固定シャドウマップの3枚を動的にブレンドしつつ、
ポスト処理によってぼかしを入れることでかつてないエクセレントな影を実現しました。


■使用環境

MikuMikuEffect Ver.0.27以降
MikuMikuMoving Ver.1.1.8.2以降

SM3.0および浮動小数点テクスチャのミップマップをサポートするグラフィックボード
推奨VRAM：1GB以上


■使用方法

１．ExcellentShadow.xを読み込みます。この時点では何も起こりません。
２．すべてのモデル・アクセサリに full_ES.fx を適用します。
３．モデル・アクセサリのセルフシャドウを有効にします。


ExcellentShadow.x の位置がシャドウマップの中心になります。
ExcellentShadow.x が写したいオブジェクトの近くに配置されるようにしてください。

ExcellentShadow.x のSiによりシャドウマップの大きさが決定されます。
シャドウマップを大きくすればより広い範囲にセルフシャドウを発生させることができますが、
その分細かいシャドウが潰れ、エッジも汚くなります。
遠景、近景でうまく調整してください。
デフォルトの状態でもゲキド街の半分程度をカバーします。

このエフェクトはMMD標準のシャドウも利用するため、
エフェクトオフ時のシャドウにも気を使うとより良い結果が得られます。
Ctrl+Gのシャドウバッファ拡大も効果があります。


ExcellentShadow.x のTrにより影の濃さを調整できます。
Trを小さくすると影が濃くなります。

この効果は標準ではPMDモデルには弱くしか適用されません。
（人物モデルの影が濃くなりすぎるのを防止するためです）
PMDモデルにも適用したい時は full_ES.fx を編集して
PMD_SHADOWPOWERの値を大きくしてください。


アクセサリのX回転によって影のぼかし強度を増減できます。
範囲は-100～100です。
ボーン取り付けの影響は無視されます。


■材質モーフ対応

MMD＋MMEにおいて、材質モーフを使用したPMXモデルの場合、
full_ES.fxに代わりfull_ES_pmx.fxを適用してください。



■軽量化・詳細設定

・クオリティレベル

ExcellentShadowCommonSystem.fx を開き、
EXSHADOW_QUALITY の数値によってクオリティレベルを設定できます。
初期値は中品質に設定されています。

重すぎてまともに動かない場合は値を下げてみてください。


・MMD標準シャドウの使用/不使用

ExcellentShadowCommonSystem.fx を開き、
MMDSHADOW_USING の値を変更することでMMD標準のシャドウを利用するかどうか
設定することができます。
使用しない場合、ExcellentShadow内部の影はパースペクティブ化されていない影響で
アップ時の影にジャギーが出やすくなりますが、影の輪郭が「うにうに」動くことが無くなります。


・マルチサンプリングシャドウ

ExcellentShadowCommonSystem.fx を開き、
MULTISAMPLING の値を変更することでマルチサンプリングシャドウ機能を有効にします。
内容としてはビームマンPの簡易ソフトシャドウとだいたい同じです。
それをさらにぼかすことで、よりジャギーの少ない影になります。
若干重くなります。


・シャドウを適用するアルファ値の閾値

このエフェクトでは一定以下のアルファ値のオブジェクトは
シャドウ処理において無視されます。
ExcellentShadowCommonSystem.fx を開き、
ShadowAlphaThreshold の値を変更することでこの閾値を変更できます。


■MikuMikuMoving対応

Ver.2.3より、MikuMikuMovingに対応しました。
使用方法は、ExcellentShadow.fxを読み込み、モデルに full_ES_mmm.fxm を適用します。
ただし、以下のような制限があります。

・MMDSHADOW_USINGは強制的にオフになり、
　ExcellentShadow内部シャドウマップのみが使用されます。

・MMMの複数光源には対応していません。第2光源以降は影ができません。
　基本的に1光源で使用してください。

・MMMではモデル個別に影を落とす/落とさないの設定はできません。
　すべてのオブジェクトにセルフシャドウがかかります。
　例外として、アルファ値0.98の材質が影を落とさないMMDの仕様は
　ExcellentShadow内部で再現しています。


■SSAO連携

同梱のExShadowSSAOエフェクトを読み込むことで、
full_ESシェーダ側にSSAO情報が渡され、
ポスト処理でないSSAO描画が行われます。
違いが分かりにくいですが、材質やシャドウの情報を考慮することが
できるので、やや自然な感じになっています。
例を挙げると、照明の当たっている部分のSSAOは効果が弱くなります。

ExShadowSSAOの内容はSvSSAOとほぼ同じですが、
陰度マップをExcellentShadowに渡すようになっており、
単体では使用できません。


■シェーダエフェクトのExcellentShadow対応

full.fxベースのシェーダエフェクトは、
比較的簡単にExcellentShadowに対応させることができます。

エフェクトの中身がfull.fxから大幅に変更されていた場合、
この方法では上手くいかないことがあります。
また、頂点変化系、増殖系のエフェクトには適用できません。


・まず、目的のエフェクトを別名保存します。
　末尾に"_ES"などつけると分かりやすくなります。

・エフェクトをエディタで開き、full_ES.fxを参考にしながら、
　以下のように指示された箇所4点をコピペして追加します。


/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
// ■ ExcellentShadowシステム　ここから↓

XXXX

// ■ ExcellentShadowシステム　ここまで↑
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////


また、この方法で改造したエフェクトは、ExcellentShadow 未使用時は
MMD通常のシャドウを表示することができます。



■注意事項

・AbsoluteShadowとの互換性はありません。
・仕組み上、半透明オブジェクトの影が若干怪しいです。


■更新履歴

Ver.2.4
・MMMで他ポストエフェクトと共存できない問題修正
・MMMで材質設定によって影部分が明るくなる問題修正

Ver.2.3
・MMM対応
・アルファ値の取り扱いを変更

Ver.2.2
・材質モーフのアルファ値の対応忘れを修正

Ver.2.1
・材質モーフに暫定対応

Ver.2.0
・クオリティレベルの導入
・マルチサンプリングシャドウを追加
・影生成の調整
・連携SSAOの追加
・その他パラメータ調整
・その他バグフィックス

Ver.1.1
・軽量化オプション実装

Ver.1.0
・公開


■利用条件

商用利用、改変、再配布を含むいかなる利用も自由です。
また、作者の許諾も不要です。
ただし、このエフェクトを利用したことによるどのような損害も
責任を負うことはできません。自己責任でご利用ください。

また、このエフェクトについては特に、
動作しないことに対するサポートはいたしません。

mylist:  http://www.nicovideo.jp/mylist/17392230
twitter: sovoro_mmd

