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,   c13          ; (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: mul r0,     r0,    c12.w        ; 暗めなので、2倍の明るさにする
0037: mul oD0,    r0,    c15
0038: 
0039: ; テクスチャー
0040: mov oT0,    v7