152 |
|
ambdone(); |
153 |
|
/* init ambient limits */ |
154 |
|
setambres(ambres); |
155 |
< |
setambacc(ambacc); |
155 |
> |
qambacc = sqrt(sqrt(ambacc *= (ambacc > FTINY))); |
156 |
|
if (ambfile == NULL || !ambfile[0]) |
157 |
|
return; |
158 |
|
if (ambacc <= FTINY) { |
406 |
|
d = 0.0; |
407 |
|
for (j = 0; j < 3; j++) |
408 |
|
d += (r->rop[j] - av->pos[j])*(uvw[2][j] + r->ron[j]); |
409 |
< |
if (d*0.5 < -minarad*ambacc-.001) |
409 |
> |
if (d*0.5 < -minarad*qambacc-.001) |
410 |
|
continue; |
411 |
|
/* |
412 |
|
* Extrapolate value and compute final weight (hat function) |
461 |
|
/* compute ambient */ |
462 |
|
i = doambient(acol, r, amb.weight, uvw, amb.rad, amb.gpos, amb.gdir); |
463 |
|
scalecolor(acol, 1./AVGREFL); /* undo assumed reflectance */ |
464 |
< |
if (i <= 0) /* no Hessian => no storage */ |
464 |
> |
if (i <= 0 || amb.rad[0] <= FTINY) /* no Hessian or zero radius */ |
465 |
|
return(i); |
466 |
|
/* store value */ |
467 |
|
VCOPY(amb.pos, r->rop); |