0001: ; c0 -- {0.0, 0.5, 1.0, 2.0} 0002: ; c1 -- メッシュの色 0003: ; c2 -- ブラーしたメッシュの色 0004: ; c3 -- ブラー用パラメータ (メッシュのサイズ/2.0f, ブラーの長さの倍率, 1, 0) 0005: ; c4-7 -- 透視変換行列 0006: ; c8-11 -- 現在のビュー座標系 0007: ; c12-15 -- 前のビュー座標系 0008: ; c16-19 -- ビュー行列 の逆転置行列 0009: ; 0010: ; v0 頂点の座標値 0011: ; v3 法線ベクトル 0012: ; v7 テクスチャ座標0 0013: 0014: vs.1.0 0015: 0016: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0017: ; 座標変換 0018: 0019: ; 前のビュー座標系で座標を変換する 0020: dp4 r0.x, v0, c12 0021: dp4 r0.y, v0, c13 0022: dp4 r0.z, v0, c14 0023: 0024: ; 現在のビュー座標系で座標を変換する 0025: dp4 r1.x, v0, c8 0026: dp4 r1.y, v0, c9 0027: dp4 r1.z, v0, c10 0028: 0029: ;差を取って、速度ベクトルを求める 0030: add r2.xyz, r1, -r0 0031: 0032: ; 適当な係数を掛けて、ブラーの長さを調整する 0033: mul r2.xyz, r2, c3.y 0034: 0035: ; 法線をビュー座標系に変換する 0036: dp3 r3.x, v3, c16 0037: dp3 r3.y, v3, c17 0038: dp3 r3.z, v3, c18 0039: 0040: ; 速度の法線方向の成分を求める 0041: dp3 r2.w, r2, r3 0042: 0043: ; (r2.w < 0) ? r4 = r0 : r4 = r1 0044: slt r3.w, r2.w, c0.x 0045: mad r4.xyz, r3.w, -r2, r1 0046: mov r4.w, c0.z 0047: 0048: ; r4 を透視変換 0049: dp4 oPos.x, r4, c4 0050: dp4 oPos.y, r4, c5 0051: dp4 oPos.z, r4, c6 0052: dp4 oPos.w, r4, c7 0053: 0054: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0055: ; 速度と法線の関係から色を計算する 0056: 0057: dp3 r2.w, r2, r2 0058: rsq r1.w, r2.w 0059: mul r2.w, r2.w, r1.w ; r2.w = 速度ベクトルの長さ 0060: 0061: mad r2.w, -r2.w, c3.x, c3.z ; r2.w = 1 - 速度ベクトルの長さ/extent (extent = メッシュのサイズ/2.0f) 0062: 0063: mul r5, c2, r2.w ; c2' = max (ブラーのついた基本色(c2), r2.w) 0064: 0065: add r5, r5, - c1 0066: mad oD0, r3.w, r5, c1 ; 色 = c1 + Max(0,N・V)*(c2'-c1) 0067: ; 法線と速度の向きが同じなら color(ブラーの色として設定された色) 0068: ; 法線と速度の向き反対なら メッシュの色 0069: 0070: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0071: ; テクスチャーを張る 0072: mov oT0.xy, v7 0073: