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