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

Comparing ray/src/rt/raytrace.c (file contents):
Revision 2.65 by greg, Wed Feb 19 14:12:48 2014 UTC vs.
Revision 2.70 by greg, Thu Mar 17 21:53:42 2016 UTC

# Line 14 | Line 14 | static const char RCSid[] = "$Id$";
14   #include  "otypes.h"
15   #include  "otspecial.h"
16   #include  "random.h"
17 + #include  "pmap.h"
18  
19   #define  MAXCSET        ((MAXSET+1)*2-1)        /* maximum check set size */
20  
# Line 50 | Line 51 | rayorigin(             /* start new ray from old one */
51                  setcolor(r->rcoef, 1., 1., 1.);
52          } else {
53                  rw = intens(rc);
54 +                if (rw > 1.0)
55 +                        rw = 1.0;               /* avoid calculation growth */
56                  if (rc != r->rcoef)
57                          copycolor(r->rcoef, rc);
58          }
# Line 106 | Line 109 | rayorigin(             /* start new ray from old one */
109                  return(-1);
110          if (r->crtype & SHADOW)                 /* shadow commitment */
111                  return(0);
112 +                                                /* ambient in photon map? */
113 +        if (ro != NULL && ro->crtype & AMBIENT) {
114 +                if (causticPhotonMapping)
115 +                        return(-1);
116 +                if (photonMapping && rt != TRANS)
117 +                        return(-1);
118 +        }
119          if (maxdepth <= 0 && rc != NULL) {      /* Russian roulette */
120                  if (minweight <= 0.0)
121                          error(USER, "zero ray weight in Russian roulette");
# Line 181 | Line 191 | raytrans(                      /* transmit ray as is */
191   {
192          RAY  tr;
193  
194 <        if (rayorigin(&tr, TRANS, r, NULL) == 0) {
195 <                VCOPY(tr.rdir, r->rdir);
196 <                rayvalue(&tr);
197 <                copycolor(r->rcol, tr.rcol);
198 <                r->rt = r->rot + tr.rt;
189 <        }
194 >        rayorigin(&tr, TRANS, r, NULL);         /* always continue */
195 >        VCOPY(tr.rdir, r->rdir);
196 >        rayvalue(&tr);
197 >        copycolor(r->rcol, tr.rcol);
198 >        r->rt = r->rot + tr.rt;
199   }
200  
201  
# Line 249 | Line 258 | rayparticipate(                        /* compute ray medium participation
258          multcolor(r->rcol, ce);                 /* path extinction */
259          if (r->crtype & SHADOW || intens(r->albedo) <= FTINY)
260                  return;                         /* no scattering */
261 <        setcolor(ca,
262 <                colval(r->albedo,RED)*colval(ambval,RED)*(1.-colval(ce,RED)),
263 <                colval(r->albedo,GRN)*colval(ambval,GRN)*(1.-colval(ce,GRN)),
264 <                colval(r->albedo,BLU)*colval(ambval,BLU)*(1.-colval(ce,BLU)));
265 <        addcolor(r->rcol, ca);                  /* ambient in scattering */
261 >        
262 >        /* PMAP: indirect inscattering accounted for by volume photons? */
263 >        if (!volumePhotonMapping) {
264 >                setcolor(ca,
265 >                        colval(r->albedo,RED)*colval(ambval,RED)*(1.-colval(ce,RED)),
266 >                        colval(r->albedo,GRN)*colval(ambval,GRN)*(1.-colval(ce,GRN)),
267 >                        colval(r->albedo,BLU)*colval(ambval,BLU)*(1.-colval(ce,BLU)));
268 >                addcolor(r->rcol, ca);                  /* ambient in scattering */
269 >        }
270 >        
271          srcscatter(r);                          /* source in scattering */
272   }
273  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines