だれか、東大の狩野氏にスペキュラーの自乗部分は、シェイダーではこうやって計算するって教えてやってくれ。
mul r0.r, r0.r, r0.r
...
って、最初はおれもやってたけどね。

俺のコードだが参考までに。ちなみにこれはPhongのモデル。なんでかっていうと、反射ベクトルを別の処理で再利用するので、Phongの方が効率がよい。


; Input for LIT instruction
;
; rn.x : N.L (LIT uses this dot prod to test front face or back face.)
; rn.y : Specular intensity
; rn.z : Ignored
; rn.w : Exponent
;

; <Input>
; r2: normal basis reflection vector
; c13: unit light vector
; c15: exponent

dp3 r0.x, v3, c13 ; r3 = N.L
dp3 r0.y, r2, c13 ; r0 = R.L Specular intensity
mov r0.w, c15.w ; Exponent
lit r0, r0
mov oD1.xyzw, r0.z ; Output to specular register