0001: ;
0002: ; 環境光半球ライティング
0003: ;
0004: ; c0-3   -- world + ビュー + 透視変換行列
0005: ; c12    -- {0.0, 0.5, 1.0, 2.0}
0006: ; c13    -- ライトのベクトル (w成分は環境光の強さ)
0007: ; c14    -- 視点の位置
0008: ; c15    -- ライトの色(平行光源の色*メッシュの色)
0009: ; c18    -- ライトの色(上半球の色)
0010: ; c19    -- ライトの色(下半球の色)
0011: ; c20    -- 半球の軸
0012: ;
0013: ; v0    頂点の座標値
0014: ; v3    法線ベクトル (w成分は1.0f)
0015: ; v7    テクスチャ座標0
0016: 
0017: vs.1.0
0018: 
0019: ;座標変換
0020: dp4 oPos.x, v0,   c0
0021: dp4 oPos.y, v0,   c1
0022: dp4 oPos.z, v0,   c2
0023: dp4 oPos.w, v0,   c3
0024: 
0025: 
0026: ;半球ライティング
0027: dp3 r0,      v3,   c20          ; (N・A)
0028: mov r1,      c12.y              ; r1 = 0.5
0029: mad r0,      r0,   r1, r1       ; r0 = (1+N・A)/2 = α
0030: 
0031: mov r1,      c19                ; r1 = Ld
0032: add r1,      c18,  -r1          ; r1 = Lu-Ld
0033: mad r0,      r1,   r0,  c19     ; r0 = α(Lu-Ld)+Ld = αLu + (1-α)Ld 
0034: 
0035: ; N・L (平行光源)
0036: dp3 r2.x,   v3,    c13
0037: max r1.w,   r2.x,  c12.x
0038: add r1,     r1.w,  r0
0039: mul r1,     r1,    c15
0040: 
0041: ; スペキュラ
0042: add r0,     c14,  -v0
0043: dp3 r0.w,   r0,    r0
0044: rsq r0.w,   r0.w
0045: mul r0,     r0,    r0.w         ; r0 = E = 正規化(視点 - 頂点)
0046: add r0,     r0,    c13          
0047: mul r0,     r0,    c12.y        ; r0 = H = (E+L)/2
0048: dp3 r2.y,   v3,    r0           ; V = N・H
0049: mov r2.w,   c12.w               ; 2乗
0050: add r2.w,   r2.w,   r2.w        ; 4乗
0051: lit r2,     r2
0052: 
0053: add oD0,    r2.z,  r1
0054: 
0055: ; テクスチャー
0056: mov oT0,    v7