ps.1.1 // Decl(t0, Normal1) // Decl(t1, Normal2) def c0, 1.000, 1.000, 0.500, 0.50 def c1, 0.000, 0.000, 0.250, 0.00 def c2, 0, 0, 0, 0.5 def c3, 0, 0, 0, 0.375 ; 3/8 tex t0 tex t1 add_d2 r0 , t0 , t1 ;r0 = (t0+t1)/2 mad r0 , r0 , c0 , c1 ;r0.z*= 0.5 ; Normalize (2nd order) dp3_sat r1 , r0_bx2 , r0_bx2 ;r1.w = n2 mul t0.w , 1-r1.w , c2.w ;t0.w = 1/2*(1-n2) mul r0.w , 1-r1.w , 1-r1.w ;r0.w = (1-n2)^2 mad t0.w , r0.w , c3.w , t0.w ;t0.w+= 3/8*(1-n2)^2 mad r0 , r0_bx2 , t0.w , r0_bx2 ; Convert to [0,1] range mad r0 , r0 , c0.w , c0.w