0001: ; diffuse.vsh
0002: ; c0-3   -- world + ビュー + 透視変換行列
0003: ; c8-11  -- 逆(ビュー + 透視変換)行列
0004: ; c12    -- {0.0, 0.5, 1.0, 2.0}
0005: ;
0006: ; v0    頂点の座標値
0007: ; v3    法線ベクトル (w成分は1.0f)
0008: 
0009: vs.1.1
0010: 
0011: ;座標変換
0012: mov oPos,  v0
0013: 
0014: m4x4 r3, v0, c8
0015: ; 正規化
0016: dp3 r3.w, r3, r3
0017: rsq r3.w, r3.w
0018: mul r3, r3, r3.w
0019: 
0020: ; oT0 = (0<=(N・L1))?L1:-L1
0021: dp3 r0,   r3, c32           ; (N・L1)
0022: sge   r1,  r0,  c12.x
0023: add   r2,  c32, c32
0024: mad  oT0,  r1,  r2, -c32
0025: 
0026: ; oT1 = (0<=(N・L2))?L2:-L2
0027: dp3 r0.a,  r3, c33          ; (N・L2)
0028: sge   r1,  r0.a,  c12.x
0029: add   r2,  c33, c33
0030: mad  oT1,  r1,  r2, -c33
0031: 
0032: ; (|N・L1|^8, |N・L1|^8, |N・L1|^8, |N・L2|^8)
0033: max r0, r0, -r0
0034: mul r0, r0, r0
0035: mul r0, r0, r0
0036: mul oD0, r0, r0
0037: 
0038: ; oT2 = (0<=(N・L3))?L3:-L3
0039: dp3 r0,   r3, c34           ; (N・L3)
0040: sge   r1,  r0,  c12.x
0041: add   r2,  c34, c34
0042: mad  oT2,  r1,  r2, -c34
0043: 
0044: ; oT3 = (0<=(N・L4))?L4:-L4
0045: dp3 r0.a,  r3, c35          ; (N・L4)
0046: sge   r1,  r0.a,  c12.x
0047: add   r2,  c35, c35
0048: mad  oT3,  r1,  r2, -c35
0049: 
0050: ; (|N・L3|^8, |N・L3|^8, |N・L3|^8, |N・L4|^8)
0051: max r0, r0, -r0
0052: mul r0, r0, r0
0053: mul r0, r0, r0
0054: mul oD1, r0, r0
0055: