もきもき3D

アクセスカウンタ

zoom RSS OrenNayar

<<   作成日時 : 2009/06/17 02:09   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

取り合えず出来たっぽい('A`)

param == ラフさ。
N == スポットの法線ベクトル。
E == スポットから視点へ向かうベクトル。
 LWのNodeは視点からスポットへのベクトルなので符号反転する。算出する場合は normalize(raySouce - wPos)。
L == スポットからライトへ向かうベクトル(語弊有り)。
 LWで得られるのはライト側からスポットへ向かうベクトルなので符号反転する。
//
s = param * param;
A = 1.0 - (0.5 * s / (s + 0.33));
B = 0.45 * s / (s + 0.09);

NE = dot(N,E);
(light数ループ){
NL = dot(N,L);

AE = E - (N * NE); // 簡易表記(実処理はベクトルの各要素*スカラー値)
AL = L - (N * NL);
normalize(AE);
normalize(AL);
C = dot(AE, AL)

I = acos(NL); // ※1
R = acos(NE); // ※1

S = A + (B * max(0, C) * sin(max( I, R)) * tan(min( I, R)) ) ;
COLOR += color * diffuse * lightColor * NL * S;
}

 これでNodeと同等の傾向の結果になるっぽい。
 でも、Nodeは s の求め方が違うみたいで、同じParam値でも最終結果は違うけど。

 とあるページのコードでは※1の計算コストを低減する為か、事前計算の結果をテクスチャに持って参照してた。
 その為、主な流れから acos()が隠蔽されてたので見落とす事になって上手くいかなかったぽい。
 運良くBMRTのヘッダ(?)を見つけて気付く事が出来た(・з・)
 wiki(en/ja)では該当部はΘi,Θrとしか書いてないから意味わかんねぇ(;;・з・)
 Θ==角度と判っても、一体何処の角度だよ、みたいな(・3・)

 てか、何故 acos()を使うのか解って無い段階で論外か('з`)サーセン

----
 上記の状態では似てはいるけど結構違う結果だった。
 球に適用した場合において、(ラフ値に応じた直径の?)円状のトーンジャンプというかマッハバンドが出る傾向があった。(安物液晶だから微妙な変化がある箇所が目だって見えるのかもしれないけど、それは考慮外)

 で、上記式のCに対するmax(0,C)を外し、−値が影響するようにしたら明るさを除きOrenNayar Nodeと一致した。

 前述のマッハバンドが出ないからこっちの方が綺麗と言えるけど、あからさまに違う作用をさせた結果だと思うと微妙(・з・)

 でもまぁ、Nodeと同等の結果を別手段(Shader層プラグイン)で作る、ってのが目的だったしこれでいいか。

 (7.5/8.5の)Shader層だと、シェーディング結果をどう適用するか、という問題があるけど、ドキュメントや事例が殆ど無いわ、既存のShaderプラグインは好き勝手にやってるはで、まいっちんぐ。
 一応、今回の場合は結果をreplace〜()ではなくsa->colorに入れて、LumiとDiffを潰すという、LW7時代の方法を使う事で他の幾つかのスペキュラ系プラグインと共存出来る事を確認した。
 LumiやDiffに作用する物との共存は無理かも。

 handler()でLW Verチェックして、応じたフラグをflags()で返すようにして、9以降ならdiffuseShadeに適用する事で多少は潰しが利くようになるかな?

----
 LWSHF_DIFFUSE_SHADEフラグを立ててsa->diffuse_shadeに値を突っ込んでる状態で、RenderBufferViewでShadedDiffuseを見てると結構な確率で落ちる('A`;;
 COLORフラグ使った昔の方法でなら落ちる気配は無し。
 Nodeでdiffuse_shadeに値を突っ込んでても平気な模様。
 謎だ('A`)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
OrenNayar もきもき3D/BIGLOBEウェブリブログ
文字サイズ:       閉じる