上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ライティングに手を出した

pointlight_vs.png
これが頂点単位のライト
ライトの有効範囲内にモデルの頂点がある所しかライティングされないので、
このマップのようなローポリモデルだと不自然な感じになる

pointlight_ps.png
で、こっちがピクセル単位のライト
綺麗だけど処理がすごく重い

実装は単純にライトの数だけループを回してるんだけど

float3 LCol = {0,0,0};
for(int i=0; i < NumLight; i++)
{
float3 vL = LightPos[i] - In.VPos;// 光源ベクトル
float lenL = length(vL);// 光源ベクトルの長さ(光源への距離)
// 光の強さ(距離の二乗で減衰させて適当な係数を掛けて調節)
float Light_vol = 10 * dot(In.VNormal, normalize(vL)) / (lenL*lenL);
LCol += LightCol[i] * max(0, Light_vol);
}
return tex2D(MeshSamp, In.UV) * In.Col * float4(LCol, 1);

重くて使い物にならんから、描画する前にライトとモデルで当たり判定をして
当たっているライトだけループに入れるようにしないといけないね

//モデルはここから借りました
http://easy3d.wikiwiki.jp/?%A5%E2%A5%C7%A5%EB%A5%C7%A1%BC%A5%BF%C3%D6%A4%AD%BE%EC
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://perillasoft.blog75.fc2.com/tb.php/10-ec68a5e4
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。