ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/genBSDF.pl
(Generate patch)

Comparing ray/src/util/genBSDF.pl (file contents):
Revision 2.26 by greg, Tue Oct 25 20:51:10 2011 UTC vs.
Revision 2.32 by greg, Thu Feb 23 21:28:42 2012 UTC

# Line 8 | Line 8
8   use strict;
9   use File::Temp qw/ :mktemp  /;
10   sub userror {
11 <        print STDERR "Usage: genBSDF [-n Nproc][-c Nsamp][-t{3|4} Nlog2][-r \"ropts\"][-dim xmin xmax ymin ymax zmin zmax][{+|-}f][{+|-}b][{+|-}mgf][{+|-}geom] [input ..]\n";
11 >        print STDERR "Usage: genBSDF [-n Nproc][-c Nsamp][-t{3|4} Nlog2][-r \"ropts\"][-dim xmin xmax ymin ymax zmin zmax][{+|-}f][{+|-}b][{+|-}mgf][{+|-}geom units] [input ..]\n";
12          exit 1;
13   }
14   my $td = mkdtemp("/tmp/genBSDF.XXXXXX");
# Line 23 | Line 23 | my $geout = 1;
23   my $nproc = 1;
24   my $doforw = 0;
25   my $doback = 1;
26 + my $pctcull = 95;
27   my $gunit = "Meter";
28   my @dim;
29   # Get options
# Line 43 | Line 44 | while ($#ARGV >= 0) {
44                  $doforw = ("$ARGV[0]" =~ /^\+/);
45          } elsif ("$ARGV[0]" =~ /^[-+]b/) {
46                  $doback = ("$ARGV[0]" =~ /^\+/);
47 +        } elsif ("$ARGV[0]" eq "-t") {
48 +                $pctcull = $ARGV[1];
49 +                shift @ARGV;
50          } elsif ("$ARGV[0]" =~ /^-t[34]$/) {
51                  $tensortree = substr($ARGV[0], 2, 1);
52                  $ttlog2 = $ARGV[1];
# Line 334 | Line 338 | print
338   system "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
339          q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' -of } .
340          "$td/" . ($bmodnm,$fmodnm)[$forw] . "_???.flt " .
341 <        "| rttree_reduce -h -ff -r $tensortree -g $ttlog2";
341 >        "| rttree_reduce -a -h -ff -t $pctcull -r $tensortree -g $ttlog2";
342   die "Failure running rttree_reduce" if ( $? );
343   print
344   '                       </ScatteringData>
# Line 360 | Line 364 | print
364   system "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
365          q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' -of } .
366          "$td/" . ($fmodnm,$bmodnm)[$forw] . "_???.flt " .
367 <        "| rttree_reduce -h -ff -r $tensortree -g $ttlog2";
367 >        "| rttree_reduce -a -h -ff -t $pctcull -r $tensortree -g $ttlog2";
368   die "Failure running rttree_reduce" if ( $? );
369   print
370   '                       </ScatteringData>
# Line 399 | Line 403 | KprojOmega = PI * if(Kbin-.5,
403   $kcal = '
404   DEGREE : PI/180;
405   abs(x) : if(x, x, -x);
406 < Acos(x) : 1/DEGREE * if(x-1, 0, if(-1-x, 0, acos(x)));
406 > Acos(x) : if(x-1, 0, if(-1-x, PI, acos(x))) / DEGREE;
407   posangle(a) : if(-a, a + 2*PI, a);
408 < Atan2(y,x) : 1/DEGREE * posangle(atan2(y,x));
408 > Atan2(y,x) : posangle(atan2(y,x)) / DEGREE;
409   kpola(r) : select(r, 5, 15, 25, 35, 45, 55, 65, 75, 90);
410   knaz(r) : select(r, 1, 8, 16, 20, 24, 24, 24, 16, 12);
411   kaccum(r) : if(r-.5, knaz(r) + kaccum(r-1), 0);
# Line 433 | Line 437 | my $rtcmd = "rtcontrib $rtargs -h -ff -fo -n $nproc -c
437          "-o '$td/%s.flt' -m $fmodnm -m $bmodnm $octree";
438   my $rccmd = "rcalc -e '$tcal' " .
439          "-e 'mod(n,d):n-floor(n/d)*d' -e 'Kbin=mod(recno-.999,$ndiv)' " .
440 <        q{-if3 -e 'oval=(0.265*$1+0.670*$2+0.065*$3)/KprojOmega' } .
437 <        q[-o '${  oval  },'];
440 >        q{-if3 -e '$1=(0.265*$1+0.670*$2+0.065*$3)/KprojOmega' };
441   if ( $doforw ) {
442   $cmd = "cnt $ndiv $ny $nx | rcalc -of -e '$tcal' " .
443          "-e 'xp=(\$3+rand(.12*recno+288))*(($dim[1]-$dim[0])/$nx)+$dim[0]' " .
# Line 460 | Line 463 | $cmd = "cnt $ndiv $ny $nx | rcalc -of -e '$tcal' " .
463   system "$cmd" || die "Failure running: $cmd\n";
464   @tbarr = `$rccmd $td/$bmodnm.flt`;
465   die "Failure running: $rccmd $td/$bmodnm.flt\n" if ( $? );
466 + chomp(@tbarr);
467   @rbarr = `$rccmd $td/$fmodnm.flt`;
468   die "Failure running: $rccmd $td/$fmodnm.flt\n" if ( $? );
469 + chomp(@rbarr);
470   }
471   # Output angle basis
472   print
# Line 561 | Line 566 | print
566   # Output front transmission (transposed order)
567   for (my $od = 0; $od < $ndiv; $od++) {
568          for (my $id = 0; $id < $ndiv; $id++) {
569 <                print $tfarr[$ndiv*$id + $od];
569 >                print $tfarr[$ndiv*$id + $od], ",\n";
570          }
571          print "\n";
572   }
# Line 584 | Line 589 | print
589   # Output front reflection (transposed order)
590   for (my $od = 0; $od < $ndiv; $od++) {
591          for (my $id = 0; $id < $ndiv; $id++) {
592 <                print $rfarr[$ndiv*$id + $od];
592 >                print $rfarr[$ndiv*$id + $od], ",\n";
593          }
594          print "\n";
595   }
# Line 611 | Line 616 | print
616   # Output back transmission (transposed order)
617   for (my $od = 0; $od < $ndiv; $od++) {
618          for (my $id = 0; $id < $ndiv; $id++) {
619 <                print $tbarr[$ndiv*$id + $od];
619 >                print $tbarr[$ndiv*$id + $od], ",\n";
620          }
621          print "\n";
622   }
# Line 631 | Line 636 | print
636                          <ScatteringDataType>BRDF</ScatteringDataType>
637                          <ScatteringData>
638   ';
639 < # Output back reflection (transposed order)
639 > # Output back reflection (reciprocity averaging)
640   for (my $od = 0; $od < $ndiv; $od++) {
641          for (my $id = 0; $id < $ndiv; $id++) {
642 <                print $rbarr[$ndiv*$id + $od];
642 >                print $rbarr[$ndiv*$id + $od], ",\n";
643          }
644          print "\n";
645   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines