DirectionalSphereの自分用メモ

Caeruさんのエフェクト(シェーダー)

DirectionalSphre
https://skydrive.live.com/?cid=9bd87d92867ebedd

※画像はCaeruさんのツイートの転載です(リンクが転載元)


https://twitter.com/Caeru_Odin/status/461094529416708096

効果)
カメラのZ軸回転にスフィアの方向が付いていくようにする

利点)
髪の毛の天使の輪などが崩れない

欠点)
スフィアのZ軸回転を固定するので不自然な材質もあるかも?
動いているとわかりにくいのでどちらかというと静画向き

使い方)
単独でシェーダーとして使えるけど他のシェーダーに組み込み可能
(舞力介入Pのfull.fxシェーダーがベース)

 ①「DirectionalSphere.h」というファイルを組み込むシェーダーのフォルダに入れる
 ②シェーダー冒頭の「パラメーター宣言」付近に.fxの以下をコピペ

    // パラメータ宣言
    // LocalNormalToDirSphのアレをインクルード
    #include "DirectionalSphere.h"
    // LocalNormalToDirSph関数を使えるようにします
    DEC_LOCAL2DIRSPHERE( "頭", float3( 0, 1, 0 ) );
    // スフィアのUV計算のところでLocalNormalToDirSphを呼んでます

 ③「スフィアマップテクスチャ座標」近辺を書き換え
  (シェーダーによってパラメーター表記などに多少違いあり)

    if ( useSphereMap ) {
    if ( use_subtexture ) {
    // PMXサブテクスチャ座標
    Out.SpTex = Tex2;
    } else {
    // スフィアマップテクスチャ座標
    Out.SpTex = LocalNormalToDirSph( Out.Normal );
    }

例1)AlternativeFullの場合
https://twitter.com/Caeru_Odin/status/494156925005619201

 メモ:「AlternativeFull.fxsub」は上書き保存してもMMD上では自動更新されない
    「.fx」を上書き保存するか、読み込み直さないと書き換えが反映されない

例2)HAToon2の場合
https://twitter.com/Caeru_Odin/status/502146662790221824

 メモ:「HACore.hlsl」を書き換える
    「.fx」を更新しないとMMD上に反映されないのは(例1)と同じ
    M4Toonなども同様に書き換え可能