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

Comparing ray/src/common/bsdf_m.c (file contents):
Revision 3.37 by greg, Fri Jan 5 21:00:24 2018 UTC vs.
Revision 3.45 by greg, Tue Jan 25 01:34:20 2022 UTC

# Line 171 | Line 171 | fo_getndx(const FVECT v, void *p)
171  
172          if (v == NULL)
173                  return -1;
174 <        if ((v[2] < 0) | (v[2] > 1.))
174 >        if ((v[2] < 0) | (v[2] > 1.00001))
175                  return -1;
176          pol = 180.0/M_PI*Acos(v[2]);
177          azi = 180.0/M_PI*atan2(v[1], v[0]);
# Line 295 | Line 295 | int
295   mBSDF_color(float coef[], const SDMat *dp, int i, int o)
296   {
297          C_COLOR cxy;
298 +        double  d;
299  
300 <        coef[0] = mBSDF_value(dp, i, o);
300 >        coef[0] = mBSDF_value(dp, o, i);
301 >                                /* position-specific perturbation */
302 >        d = 2*dp->ninc/(i + .22545) + 4*dp->nout/(o + .70281);
303 >        d -= (int)d;
304 >        coef[0] *= 1. + 6e-4*(d - .5);
305          if (dp->chroma == NULL)
306                  return 1;       /* grayscale */
307  
308 <        c_decodeChroma(&cxy, mBSDF_chroma(dp,i,o));
308 >        c_decodeChroma(&cxy, mBSDF_chroma(dp,o,i));
309          c_toSharpRGB(&cxy, coef[0], coef);
310          coef[0] *= mtx_RGB_coef[0];
311          coef[1] *= mtx_RGB_coef[1];
# Line 383 | Line 388 | get_extrema(SDSpectralDF *df)
388          for (i = dp->ninc; i--; ) {
389                  double  hemi = .0;
390                  for (o = dp->nout; o--; )
391 <                        hemi += ohma[o] * mBSDF_value(dp, i, o);
391 >                        hemi += ohma[o] * mBSDF_value(dp, o, i);
392                  if (hemi > df->maxHemi)
393                          df->maxHemi = hemi;
394          }
# Line 519 | Line 524 | load_bsdf_data(SDData *sd, ezxml_t wdb, int ct, int ro
524                  if (rowinc) {
525                          int     r = i/dp->nout;
526                          int     c = i - r*dp->nout;
527 <                        mBSDF_value(dp,r,c) = val;
527 >                        mBSDF_value(dp,c,r) = val;
528                  } else
529                          dp->bsdf[i] = val;
530                  sdata = sdnext;
# Line 624 | Line 629 | subtract_min(C_COLOR *cs, SDMat *sm)
629                                  coef[c] = (coef[c] - min_coef[c]) /
630                                                  mtx_RGB_coef[c];
631                          if (c_fromSharpRGB(coef, &cxy) > 1e-5)
632 <                                mBSDF_chroma(sm,i,o) = c_encodeChroma(&cxy);
633 <                        mBSDF_value(sm,i,o) -= ymin;
632 >                                mBSDF_chroma(sm,o,i) = c_encodeChroma(&cxy);
633 >                        mBSDF_value(sm,o,i) -= ymin;
634                  }
635                                          /* return colored minimum */
636          for (i = 3; i--; )
# Line 649 | Line 654 | extract_diffuse(SDValue *dv, SDSpectralDF *df)
654                                          /* subtract minimum value */
655          dv->cieY = subtract_min(&dv->spec, (SDMat *)df->comp[0].dist);
656          df->maxHemi -= dv->cieY;        /* adjust maximum hemispherical */
657 <                                        /* make sure everything is set */
658 <        c_ccvt(&dv->spec, C_CSXY+C_CSSPEC);
657 >                                
658 >        c_ccvt(&dv->spec, C_CSXY);      /* make sure (x,y) is set */
659          return df;
660   }
661  
# Line 709 | Line 714 | SDloadMtx(SDData *sd, ezxml_t wtl)
714                                          /* separate diffuse components */
715          sd->rf = extract_diffuse(&sd->rLambFront, sd->rf);
716          sd->rb = extract_diffuse(&sd->rLambBack, sd->rb);
717 <        if (sd->tf != NULL)
718 <                sd->tf = extract_diffuse(&sd->tLamb, sd->tf);
719 <        if (sd->tb != NULL)
720 <                sd->tb = extract_diffuse(&sd->tLamb, sd->tb);
717 >        sd->tf = extract_diffuse(&sd->tLambFront, sd->tf);
718 >        if (sd->tb != NULL) {
719 >                sd->tb = extract_diffuse(&sd->tLambBack, sd->tb);
720 >                if (sd->tf == NULL)
721 >                        sd->tLambFront = sd->tLambBack;
722 >        } else if (sd->tf != NULL)
723 >                sd->tLambBack = sd->tLambFront;
724                                          /* return success */
725          return SDEnone;
726   }
727  
728   /* Get Matrix BSDF value */
729   static int
730 < SDgetMtxBSDF(float coef[SDmaxCh], const FVECT outVec,
731 <                                const FVECT inVec, SDComponent *sdc)
730 > SDgetMtxBSDF(float coef[SDmaxCh], const FVECT inVec,
731 >                                const FVECT outVec, SDComponent *sdc)
732   {
733          const SDMat     *dp;
734          int             i_ndx, o_ndx;
# Line 805 | Line 813 | make_cdist(SDMatCDst *cd, const FVECT inVec, SDMat *dp
813          cmtab[0] = .0;
814          for (o = 0; o < cd->calen; o++) {
815                  if (rev)
816 <                        cmtab[o+1] = mBSDF_value(dp, o, cd->indx) *
816 >                        cmtab[o+1] = mBSDF_value(dp, cd->indx, o) *
817                                          (*dp->ib_ohm)(o, dp->ib_priv);
818                  else
819 <                        cmtab[o+1] = mBSDF_value(dp, cd->indx, o) *
819 >                        cmtab[o+1] = mBSDF_value(dp, o, cd->indx) *
820                                          (*dp->ob_ohm)(o, dp->ob_priv);
821                  cmtab[o+1] += cmtab[o];
822          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines