ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/ambient.c
(Generate patch)

Comparing ray/src/rt/ambient.c (file contents):
Revision 2.75 by greg, Sat Apr 19 19:20:47 2014 UTC vs.
Revision 2.79 by greg, Fri Apr 25 00:21:52 2014 UTC

# Line 152 | Line 152 | setambient(void)                               /* initialize calculation */
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) {
# Line 357 | Line 357 | sumambient(            /* get interpolated ambient value */
357          FVECT  c0,
358          double  s
359   )
360 < {                                       /* initial limit is ambacc radians */
361 <        const double    maxangle = (ambacc-PI/2.)*pow(r->rweight,0.13) + PI/2.;
360 > {                       /* initial limit is 5 degrees plus ambacc radians */
361 >        const double    minangle = 5.0 * PI/180.;
362 >        const double    maxangle = (minangle+ambacc-PI/2.)*pow(r->rweight,0.13)
363 >                                        + PI/2.;
364          double          wsum = 0.0;
365          FVECT           ck0;
366          int             i, j;
# Line 406 | Line 408 | sumambient(            /* get interpolated ambient value */
408                  d = 0.0;
409                  for (j = 0; j < 3; j++)
410                          d += (r->rop[j] - av->pos[j])*(uvw[2][j] + r->ron[j]);
411 <                if (d*0.5 < -minarad*ambacc-.001)
411 >                if (d*0.5 < -minarad*qambacc-.001)
412                          continue;
413                  /*
414                   *  Extrapolate value and compute final weight (hat function)
# Line 461 | Line 463 | makeambient(           /* make a new ambient value for storage
463                                                  /* compute ambient */
464          i = doambient(acol, r, amb.weight, uvw, amb.rad, amb.gpos, amb.gdir);
465          scalecolor(acol, 1./AVGREFL);           /* undo assumed reflectance */
466 <        if (i <= 0)                             /* no Hessian => no storage */
466 >        if (i <= 0 || amb.rad[0] <= FTINY)      /* no Hessian or zero radius */
467                  return(i);
468                                                  /* store value */
469          VCOPY(amb.pos, r->rop);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines