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

Comparing ray/src/cv/bsdf2klems.c (file contents):
Revision 2.8 by greg, Fri Aug 2 20:56:19 2013 UTC vs.
Revision 2.10 by greg, Thu Sep 26 17:05:00 2013 UTC

# Line 25 | Line 25 | char                   *progname;
25   static const char       *kbasis = "LBNL/Klems Full";
26                                  /* number of BSDF samples per patch */
27   static int              npsamps = 256;
28 +                                /* limit on number of RBF lobes */
29 + static int              lobe_lim = 15000;
30  
31   /* Return angle basis corresponding to the given name */
32   ANGLE_BASIS *
# Line 154 | Line 156 | static void
156   eval_bsdf(const char *fname)
157   {
158          ANGLE_BASIS     *abp = get_basis(kbasis);
157        float           *trans_mtx = NULL;
159          SDData          bsd;
160          SDError         ec;
161          FVECT           vin, vout;
# Line 210 | Line 211 | eval_bsdf(const char *fname)
211          }
212                                                  /* front transmission */
213          if (bsd.tf != NULL || bsd.tLamb.cieY > .002) {
213            if (bsd.tb == NULL)
214                trans_mtx = (float *)malloc(sizeof(float) *
215                                                abp->nangles*abp->nangles);
214              input_orient = 1; output_orient = -1;
215              data_prologue();
216              for (j = 0; j < abp->nangles; j++) {
# Line 227 | Line 225 | eval_bsdf(const char *fname)
225                          sum += sv.cieY;
226                      }
227                      printf("\t%.3e\n", sum/npsamps);
230                    if (trans_mtx != NULL)
231                        trans_mtx[j*abp->nangles + i] = sum/npsamps;
228                  }
229                  putchar('\n');                  /* extra space between rows */
230              }
231              data_epilogue();
232          }
233                                                  /* back transmission */
234 <        if (bsd.tb != NULL || trans_mtx != NULL) {
239 <            if (bsd.tf == NULL)
240 <                trans_mtx = (float *)malloc(sizeof(float) *
241 <                                                abp->nangles*abp->nangles);
234 >        if ((bsd.tb != NULL) | (bsd.tf != NULL)) {
235              input_orient = -1; output_orient = 1;
236              data_prologue();
237              for (j = 0; j < abp->nangles; j++) {
238 <                for (i = 0; i < abp->nangles; i++)
239 <                    if (bsd.tb != NULL) {       /* use tb if we have it */
240 <                        sum = 0;                /* average over patches */
241 <                        for (n = npsamps; n-- > 0; ) {
242 <                            fo_getvec(vout, j+(n+frandom())/npsamps, abp);
243 <                            bi_getvec(vin, i+urand(n), abp);
244 <                            ec = SDevalBSDF(&sv, vout, vin, &bsd);
252 <                            if (ec != SDEnone)
238 >                for (i = 0; i < abp->nangles; i++) {
239 >                    sum = 0;            /* average over patches */
240 >                    for (n = npsamps; n-- > 0; ) {
241 >                        fo_getvec(vout, j+(n+frandom())/npsamps, abp);
242 >                        bi_getvec(vin, i+urand(n), abp);
243 >                        ec = SDevalBSDF(&sv, vout, vin, &bsd);
244 >                        if (ec != SDEnone)
245                                  goto err;
246 <                            sum += sv.cieY;
255 <                        }
256 <                        printf("\t%.3e\n", sum/npsamps);
257 <                        if (trans_mtx != NULL)
258 <                            trans_mtx[i*abp->nangles + j] = sum/npsamps;
259 <                    } else {                    /* else transpose tf */
260 <                        printf("\t%.3e\n", trans_mtx[i*abp->nangles + j]);
246 >                        sum += sv.cieY;
247                      }
248 +                    printf("\t%.3e\n", sum/npsamps);
249 +                }
250                  putchar('\n');                  /* extra space between rows */
251              }
252              data_epilogue();
253          }
266                                                /* derived front transmission */
267        if (bsd.tf == NULL && trans_mtx != NULL) {
268            input_orient = 1; output_orient = -1;
269            data_prologue();
270            for (j = 0; j < abp->nangles; j++) {
271                for (i = 0; i < abp->nangles; i++)
272                    printf("\t%.3e\n", trans_mtx[j*abp->nangles + i]);
273                putchar('\n');                  /* extra space between rows */
274            }
275            data_epilogue();
276        }
254          SDfreeBSDF(&bsd);                       /* all done */
278        if (trans_mtx != NULL)
279                free(trans_mtx);
255          return;
256   err:
257          SDreportError(ec, stderr);
# Line 346 | Line 321 | eval_rbf(void)
321              else
322                  bi_getvec(vin, i+.5*(i>0), abp);
323  
324 <            rbf = advect_rbf(vin);              /* compute radial basis func */
324 >            rbf = advect_rbf(vin, lobe_lim);    /* compute radial basis func */
325  
326              for (j = 0; j < abp->nangles; j++) {
327                  sum = 0;                        /* sample over exiting patch */
# Line 412 | Line 387 | main(int argc, char *argv[])
387                  case 'q':
388                          kbasis = "LBNL/Klems Quarter";
389                          break;
390 +                case 'l':
391 +                        lobe_lim = atoi(argv[++i]);
392 +                        break;
393                  default:
394                          goto userr;
395                  }
# Line 483 | Line 461 | main(int argc, char *argv[])
461          return(0);
462   userr:
463          fprintf(stderr,
464 <        "Usage: %s [-n spp][-h|-q][bsdf.sir ..] > bsdf.xml\n", progname);
464 >        "Usage: %s [-n spp][-h|-q][-l maxlobes] [bsdf.sir ..] > bsdf.xml\n", progname);
465          fprintf(stderr,
466          "   or: %s [-n spp][-h|-q] bsdf_in.xml > bsdf_out.xml\n", progname);
467          fprintf(stderr,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines