|
1 | 1 | (FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v) |
2 | 2 | :name "HairBSDF, Mp, upper" |
3 | | - :precision binary64 |
| 3 | + :precision binary32 |
4 | 4 | :pre (and (<= -1 cosTheta_i 1) (<= -1 cosTheta_O 1) |
5 | 5 | (<= -1 sinTheta_i 1) (<= -1 sinTheta_O 1) |
6 | 6 | (< 0.1 v) (<= v 1.5707964)) |
|
10 | 10 |
|
11 | 11 | (FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v) |
12 | 12 | :name "HairBSDF, Mp, lower" |
13 | | - :precision binary64 |
| 13 | + :precision binary32 |
14 | 14 | :pre (and (<= -1 cosTheta_i 1) (<= -1 cosTheta_O 1) |
15 | 15 | (<= -1 sinTheta_i 1) (<= -1 sinTheta_O 1) |
16 | 16 | (<= -1.5707964 v 0.1)) |
|
20 | 20 |
|
21 | 21 | (FPCore (u v) |
22 | 22 | :name "HairBSDF, sample_f, cosTheta" |
23 | | - :precision binary64 |
| 23 | + :precision binary32 |
24 | 24 | :pre (and (<= 1e-5 u 1) (<= 0 v 109.746574)) |
25 | 25 | (+ 1 (* v (log (+ u (* (- 1 u) (exp (/ -2 v)))))))) |
26 | 26 |
|
27 | 27 | (FPCore (sinTheta_O h eta) |
28 | 28 | :name "HairBSDF, gamma for a refracted ray" |
29 | | - :precision binary64 |
| 29 | + :precision binary32 |
30 | 30 | :pre (and (<= -1 sinTheta_O 1) |
31 | 31 | (<= -1 h 1) |
32 | 32 | (<= 0 eta 10)) |
|
38 | 38 |
|
39 | 39 | (FPCore (ux uy maxCos) |
40 | 40 | :name "UniformSampleCone, x" |
41 | | - :precision binary64 |
| 41 | + :precision binary32 |
42 | 42 | :pre (and (<= 2.328306437e-10 ux 1) |
43 | 43 | (<= 2.328306437e-10 uy 1) |
44 | 44 | (<= 0 maxCos 1)) |
|
49 | 49 |
|
50 | 50 | (FPCore (ux uy maxCos) |
51 | 51 | :name "UniformSampleCone, y" |
52 | | - :precision binary64 |
| 52 | + :precision binary32 |
53 | 53 | :pre (and (<= 2.328306437e-10 ux 1) |
54 | 54 | (<= 2.328306437e-10 uy 1) |
55 | 55 | (<= 0 maxCos 1)) |
|
60 | 60 |
|
61 | 61 | (FPCore (ux uy maxCos) |
62 | 62 | :name "UniformSampleCone, z" |
63 | | - :precision binary64 |
| 63 | + :precision binary32 |
64 | 64 | :pre (and (<= 2.328306437e-10 ux 1) |
65 | 65 | (<= 2.328306437e-10 uy 1) |
66 | 66 | (<= 0 maxCos 1)) |
|
72 | 72 | ;; Unsure on reasonable bounds for xi, yi, zi |
73 | 73 | (FPCore (xi yi zi ux uy maxCos) |
74 | 74 | :name "UniformSampleCone 2" |
75 | | - :precision binary64 |
| 75 | + :precision binary32 |
76 | 76 | :pre (and (<= -1e4 xi 1e4) (<= -1e4 yi 1e4) (<= -1e4 zi 1e4) |
77 | 77 | (<= 2.328306437e-10 ux 1) (<= 2.328306437e-10 uy 1) |
78 | 78 | (<= 0 maxCos 1)) |
|
85 | 85 |
|
86 | 86 | (FPCore (normAngle u n0_i n1_i) |
87 | 87 | :name "Curve intersection, scale width based on ribbon orientation" |
88 | | - :precision binary64 |
| 88 | + :precision binary32 |
89 | 89 | :pre (and (<= 0 normAngle (/ PI 2)) |
90 | 90 | (<= -1 n0_i 1) (<= -1 n1_i 1) |
91 | 91 | (<= 2.328306437e-10 u 1)) |
|
96 | 96 |
|
97 | 97 | (FPCore (x tau) |
98 | 98 | :name "Lanczos kernel" |
99 | | - :precision binary64 |
| 99 | + :precision binary32 |
100 | 100 | :pre (and (<= 1e-5 x 1) (<= 1 tau 5)) |
101 | 101 | (let ([xp (* x PI)]) |
102 | 102 | (* (/ (sin (* xp tau)) (* xp tau)) |
103 | 103 | (/ (sin xp) xp)))) |
104 | 104 |
|
105 | 105 | (FPCore (cosTheta_i u1 u2) |
106 | 106 | :name "Beckmann Sample, near normal, slope_x" |
107 | | - :precision binary64 |
| 107 | + :precision binary32 |
108 | 108 | :pre (and (> cosTheta_i 0.9999) (<= cosTheta_i 1) |
109 | 109 | (<= 2.328306437e-10 u1 1) (<= 2.328306437e-10 u2 1)) |
110 | 110 | (let ([r (sqrt (- (log (- 1 u1))))] |
|
114 | 114 |
|
115 | 115 | (FPCore (cosTheta_i u1 u2) |
116 | 116 | :name "Beckmann Sample, near normal, slope_y" |
117 | | - :precision binary64 |
| 117 | + :precision binary32 |
118 | 118 | :pre (and (> cosTheta_i 0.9999) (<= cosTheta_i 1) |
119 | 119 | (<= 2.328306437e-10 u1 1) (<= 2.328306437e-10 u2 1)) |
120 | 120 | (let ([r (sqrt (- (log (- 1 u1))))] |
|
124 | 124 |
|
125 | 125 | (FPCore (cosTheta_i u1 u2) |
126 | 126 | :name "Trowbridge-Reitz Sample, near normal, slope_x" |
127 | | - :precision binary64 |
| 127 | + :precision binary32 |
128 | 128 | :pre (and (> cosTheta_i 0.9999) (<= cosTheta_i 1) |
129 | 129 | (<= 2.328306437e-10 u1 1) (<= 2.328306437e-10 u2 1)) |
130 | 130 | (let ([r (sqrt (/ u1 (- 1 u1)))] |
|
133 | 133 |
|
134 | 134 | (FPCore (cosTheta_i u1 u2) |
135 | 135 | :name "Trowbridge-Reitz Sample, near normal, slope_y" |
136 | | - :precision binary64 |
| 136 | + :precision binary32 |
137 | 137 | :pre (and (> cosTheta_i 0.9999) (<= cosTheta_i 1) |
138 | 138 | (<= 2.328306437e-10 u1 1) (<= 2.328306437e-10 u2 1)) |
139 | 139 | (let ([r (sqrt (/ u1 (- 1 u1)))] |
|
142 | 142 |
|
143 | 143 | (FPCore (u0 u1 alphax alphay) |
144 | 144 | :name "Trowbridge-Reitz Sample, sample surface normal, cosTheta" |
145 | | - :precision binary64 |
| 145 | + :precision binary32 |
146 | 146 | :pre (and (<= 2.328306437e-10 u0 1) |
147 | 147 | (<= 2.328306437e-10 u1 0.5) |
148 | 148 | (<= 0.0001 alphax 1) |
|
158 | 158 |
|
159 | 159 | (FPCore (x s) |
160 | 160 | :name "Logistic distribution" |
161 | | - :precision binary64 |
| 161 | + :precision binary32 |
162 | 162 | :pre (<= 0 s 1.0651631) |
163 | 163 | (let ([e (exp (/ (- (fabs x)) s))]) |
164 | 164 | (/ e (* s (+ 1 e) (+ 1 e))))) |
165 | 165 |
|
166 | 166 | (FPCore (x s) |
167 | 167 | :name "Logistic function" |
168 | | - :precision binary64 |
| 168 | + :precision binary32 |
169 | 169 | :pre (<= 0 s 1.0651631) |
170 | 170 | (/ 1 (+ 1 (exp (/ (- x) s))))) |
171 | 171 |
|
172 | 172 | (FPCore (u s) |
173 | 173 | :name "Sample trimmed logistic on [-pi, pi]" |
174 | | - :precision binary64 |
| 174 | + :precision binary32 |
175 | 175 | :pre (and (<= 2.328306437e-10 u 1) (<= 0 s 1.0651631)) |
176 | 176 | (let* ([lcdf_lo (/ 1 (+ 1 (exp (/ PI s))))] |
177 | 177 | [lcdf_hi (/ 1 (+ 1 (exp (/ (- PI) s))))] |
|
180 | 180 |
|
181 | 181 | (FPCore (cosTheta c) |
182 | 182 | :name "Beckmann Sample, normalization factor" |
183 | | - :precision binary64 |
| 183 | + :precision binary32 |
184 | 184 | :pre (and (< 0 cosTheta 0.9999) (< -1 c 1)) |
185 | 185 | (let* ([sinTheta (sqrt (- 1 cosTheta cosTheta))] |
186 | 186 | [tanTheta (/ sinTheta cosTheta)]) |
187 | 187 | (/ 1 (+ 1 c (* (/ 1 (sqrt PI)) tanTheta (exp (* (- cosTheta) cosTheta))))))) |
188 | 188 |
|
189 | 189 | (FPCore (alpha u0) |
190 | 190 | :name "Beckmann Distribution sample, tan2theta, alphax == alphay" |
191 | | - :precision binary64 |
| 191 | + :precision binary32 |
192 | 192 | :pre (and (<= 0.0001 alpha 1) (<= 2.328306437e-10 u0 1)) |
193 | 193 | (* (- alpha) alpha (log (- 1 u0)))) |
194 | 194 |
|
195 | 195 | (FPCore (alphax alphay u0 cos2phi sin2phi) |
196 | 196 | :name "Beckmann Distribution sample, tan2theta, alphax != alphay, u1 <= 0.5" |
197 | | - :precision binary64 |
| 197 | + :precision binary32 |
198 | 198 | :pre (and (<= 0.0001 alphax 1) (<= 0.0001 alphay 1) (<= 2.328306437e-10 u0 1) |
199 | 199 | (<= 0 cos2phi 1) (<= 0 sin2phi)) |
200 | 200 | (let ([alphax2 (* alphax alphax)] |
|
205 | 205 |
|
206 | 206 | (FPCore (s r) |
207 | 207 | :name "Disney BSSRDF, PDF of scattering profile" |
208 | | - :precision binary64 |
| 208 | + :precision binary32 |
209 | 209 | :pre (and (<= 0 s 256) (< 1e-6 r 1e6)) |
210 | 210 | (+ (/ (* 0.25 (exp (/ (- r) s))) (* 2 PI s r)) |
211 | 211 | (/ (* 0.75 (exp (/ (- r) (* 3 s)))) (* 6 PI s r)))) |
212 | 212 |
|
213 | 213 | (FPCore (s u) |
214 | 214 | :name "Disney BSSRDF, sample scattering profile, lower" |
215 | | - :precision binary64 |
| 215 | + :precision binary32 |
216 | 216 | :pre (and (<= 0 s 256) (<= 2.328306437e-10 u 0.25)) |
217 | 217 | (* s (log (/ 1 (- 1 (* 4 u)))))) |
218 | 218 |
|
219 | 219 | (FPCore (s u) |
220 | 220 | :name "Disney BSSRDF, sample scattering profile, upper" |
221 | | - :precision binary64 |
| 221 | + :precision binary32 |
222 | 222 | :pre (and (<= 0 s 256) (<= 0.25 u 1)) |
223 | 223 | (* 3 s (log (/ 1 (- 1 (/ (- u 0.25) 0.75)))))) |
224 | 224 |
|
225 | 225 | (FPCore (cosTheta alpha) |
226 | 226 | :name "GTR1 distribution" |
227 | | - :precision binary64 |
| 227 | + :precision binary32 |
228 | 228 | :pre (and (<= 0 cosTheta 1) (<= 0.0001 alpha 1)) |
229 | 229 | (let ([alpha2 (* alpha alpha)]) |
230 | 230 | (/ (- alpha2 1) (* PI (log alpha2) (+ 1 (* (- alpha2 1) cosTheta cosTheta)))))) |
0 commit comments