surface glass
param	float	Ka		0.2
param	float	Kd		0
param	float	Ks		0.5
param	float	Kr		1
param	float	Kt		1
param	float	roughness		0.05
param	float	blur		0
param	float	eta		1.5
param	color	specularcolor		1 1 1
param	color	transmitcolor		1 1 1
param	float	samples		1
local	normal	Nf	0 0 0
local	vector	IN	0 0 0
local	vector	Rfldir	0 0 0
local	vector	Rfrdir	0 0 0
local	vector	uoffset	0 0 0
local	vector	voffset	0 0 0
local	color	ev	0 0 0
local	color	cr	0 0 0
local	vector	R	0 0 0
local	vector	Rdir	0 0 0
local	float	i	0
local	float	j	0
local	float	kr	0
local	float	kt	0
initcode 10
	return
code
	return_area
	pushif	0 
	cset	ev 
	pushif	0 
	cset	cr 
	pushv	I 
	normalize
	popv	IN 
	pushv	I 
	pushv	N 
	normalize
	faceforward
	popv	Nf 
	pushif	0 
	pushv	N 
	pushv	I 
	vdot
	lt
	ifz	0
	pushf	eta 
	pushif	1 
	divff
	jump	1
label 0
	pushf	eta 
label 1
	pushv	Nf 
	pushv	IN 
	fresnel4
	popf	kr 
	popf	kt 
	popv	Rfldir 
	popv	Rfrdir 
	pushf	Kr 
	mulF	kr 
	popf	kr 
	pushf	Kt 
	mulF	kt 
	popf	kt 
	pushif	0.001 
	pushf	kr 
	gt
	ifz	2
	pushv	Rfldir 
	normalize
	popv	Rdir 
	pushif	0 
	pushf	blur 
	gt
	ifz	4
	pushv	Rdir 
	xcomp
	pushv	Rdir 
	ycomp
	subff
	pushv	Rdir 
	zcomp
	pushv	Rdir 
	xcomp
	subff
	pushv	Rdir 
	ycomp
	pushv	Rdir 
	zcomp
	subff
	normalize
	mulFv	blur 
	popv	uoffset 
	pushv	uoffset 
	pushv	Rdir 
	cross
	popv	voffset 
	pushif	0 
	popf	i 
label 6
	pushf	samples 
	pushf	i 
	lt
	ifz	8
	pushif	0 
	popf	j 
label 9
	pushf	samples 
	pushf	j 
	lt
	ifz	11
	pushv	voffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	j 
	divff
	subff
	mulfv
	pushv	uoffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	i 
	divff
	subff
	mulfv
	addV	Rdir 
	addvv
	popv	R 
	pushv	R 
	normalize
	pushv	P 
	trace
	addC	ev 
	popc	ev 
label 10
	pushif	1 
	addF	j 
	popf	j 
	jump	9
label 11
label 7
	pushif	1 
	addF	i 
	popf	i 
	jump	6
label 8
	pushf	samples 
	mulF	samples 
	divF	kr 
	pushc	ev 
	mulcf
	popc	ev 
	jump	5
label 4
	pushv	Rdir 
	pushv	P 
	trace
	mulFv	kr 
	popc	ev 
label 5
label 2
label 3
	pushif	0.001 
	pushf	kt 
	gt
	ifz	12
	pushv	Rfrdir 
	normalize
	popv	Rdir 
	pushif	0 
	pushf	blur 
	gt
	ifz	14
	pushv	Rfrdir 
	xcomp
	pushv	Rfrdir 
	ycomp
	subff
	pushv	Rfrdir 
	zcomp
	pushv	Rfrdir 
	xcomp
	subff
	pushv	Rfrdir 
	ycomp
	pushv	Rfrdir 
	zcomp
	subff
	normalize
	mulFv	blur 
	popv	uoffset 
	pushv	uoffset 
	pushv	Rfrdir 
	cross
	popv	voffset 
	pushif	0 
	popf	i 
label 16
	pushf	samples 
	pushf	i 
	lt
	ifz	18
	pushif	0 
	popf	j 
label 19
	pushf	samples 
	pushf	j 
	lt
	ifz	21
	pushv	voffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	j 
	divff
	subff
	mulfv
	pushv	uoffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	i 
	divff
	subff
	mulfv
	addV	Rdir 
	addvv
	popv	R 
	pushv	R 
	pushv	P 
	trace
	addC	cr 
	popc	cr 
label 20
	pushif	1 
	addF	j 
	popf	j 
	jump	19
label 21
label 17
	pushif	1 
	addF	i 
	popf	i 
	jump	16
label 18
	pushf	samples 
	mulF	samples 
	divF	kt 
	pushc	cr 
	mulcf
	popc	cr 
	jump	15
label 14
	pushv	Rdir 
	pushv	P 
	trace
	mulFv	kt 
	popc	cr 
label 15
label 12
label 13
	pushif	1 
	cset	Oi 
	pushc	cr 
	mulC	transmitcolor 
	pushf	roughness 
	pushv	IN 
	negv
	pushv	Nf 
	specular
	mulFv	Ks 
	addC	ev 
	mulC	specularcolor 
	pushv	Nf 
	diffuse
	mulFv	Kd 
	ambient
	mulFv	Ka 
	addcc
	mulC	Cs 
	addcc
	addcc
	popc	Ci 
	return