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

Comparing ray/src/common/bsdf.c (file contents):
Revision 2.56 by greg, Fri Dec 7 07:38:15 2018 UTC vs.
Revision 2.60 by greg, Wed Apr 28 00:59:10 2021 UTC

# Line 47 | Line 47 | const SDCDst           SDemptyCD;
47   /* Cache of loaded BSDFs */
48   struct SDCache_s        *SDcacheList = NULL;
49  
50 < /* Retain BSDFs in cache list */
50 > /* Retain BSDFs in cache list? */
51   int                     SDretainSet = SDretainNone;
52  
53 + /* Maximum cache size for any given BSDF? */
54 + unsigned long           SDmaxCache = 0;         /* 0 == unlimited */
55 +
56   /* Report any error to the indicated stream */
57   SDError
58   SDreportError(SDError ec, FILE *fp)
# Line 327 | Line 330 | SDclipName(char *res, const char *fname)
330          for (cp = fname; *cp; cp++)
331                  if (*cp == '.')
332                          dot = cp;
333 +                else if (*cp == '/')
334 +                        dot = NULL;
335          if ((dot == NULL) | (dot < fname+2))
336                  dot = cp;
337          if (dot - fname >= SDnameLn)
# Line 378 | Line 383 | SDfreeBSDF(SDData *sd)
383          sd->rLambFront.spec.flags = 0;
384          sd->rLambBack.cieY = .0;
385          sd->rLambBack.spec.flags = 0;
386 <        sd->tLamb.cieY = .0;
387 <        sd->tLamb.spec.flags = 0;
386 >        sd->tLambFront.cieY = .0;
387 >        sd->tLambFront.spec.flags = 0;
388 >        sd->tLambBack.cieY = .0;
389 >        sd->tLambBack.spec.flags = 0;
390   }
391  
392   /* Find writeable BSDF by name, or allocate new cache entry if absent */
# Line 645 | Line 652 | SDevalBSDF(SDValue *sv, const FVECT outVec, const FVEC
652          } else if (!(inFront | outFront)) {
653                  *sv = sd->rLambBack;
654                  sdf = sd->rb;
655 <        } else if (outFront) {
656 <                *sv = sd->tLamb;
655 >        } else if (inFront) {
656 >                *sv = sd->tLambFront;
657                  sdf = (sd->tf != NULL) ? sd->tf : sd->tb;
658 <        } else /* inFront & !outFront */ {
659 <                *sv = sd->tLamb;
658 >        } else /* outFront & !inFront */ {
659 >                *sv = sd->tLambBack;
660                  sdf = (sd->tb != NULL) ? sd->tb : sd->tf;
661          }
662          sv->cieY *= 1./M_PI;
# Line 692 | Line 699 | SDdirectHemi(const FVECT inVec, int sflags, const SDDa
699          if ((sflags & SDsampDf+SDsampR) != SDsampDf+SDsampR)
700                  hsum = .0;
701          if ((sflags & SDsampDf+SDsampT) == SDsampDf+SDsampT)
702 <                hsum += sd->tLamb.cieY;
702 >                hsum += (inVec[2] > 0) ?
703 >                                sd->tLambFront.cieY : sd->tLambBack.cieY;
704                                          /* gather non-diffuse components */
705          i = (((sflags & SDsampSp+SDsampR) == SDsampSp+SDsampR) &
706                          (rdf != NULL)) ? rdf->ncomp : 0;
# Line 745 | Line 753 | SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int
753                  sv->cieY = .0;
754          rdiff = sv->cieY;
755          if ((sflags & SDsampDf+SDsampT) == SDsampDf+SDsampT)
756 <                sv->cieY += sd->tLamb.cieY;
756 >                sv->cieY += inFront ? sd->tLambFront.cieY : sd->tLambBack.cieY;
757                                          /* gather non-diffuse components */
758          i = nr = (((sflags & SDsampSp+SDsampR) == SDsampSp+SDsampR) &
759                          (rdf != NULL)) ? rdf->ncomp : 0;
# Line 781 | Line 789 | SDsampBSDF(SDValue *sv, FVECT ioVec, double randX, int
789          randX -= rdiff;
790                                          /* diffuse transmission? */
791          if ((sflags & SDsampDf+SDsampT) == SDsampDf+SDsampT) {
792 <                if (randX < sd->tLamb.cieY) {
793 <                        sv->spec = sd->tLamb.spec;
794 <                        SDdiffuseSamp(ioVec, !inFront, randX/sd->tLamb.cieY);
792 >                const SDValue   *sdt = inFront ? &sd->tLambFront : &sd->tLambBack;
793 >                if (randX < sdt->cieY) {
794 >                        sv->spec = sdt->spec;
795 >                        SDdiffuseSamp(ioVec, !inFront, randX/sdt->cieY);
796                          goto done;
797                  }
798 <                randX -= sd->tLamb.cieY;
798 >                randX -= sdt->cieY;
799          }
800                                          /* else one of cumulative dist. */
801          for (i = 0; i < n && randX >= cdarr[i]->cTotal; i++)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines