--- ray/src/util/genBSDF.pl 2012/02/20 02:56:19 2.30
+++ ray/src/util/genBSDF.pl 2012/03/15 02:32:19 2.34
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-# RCSid $Id: genBSDF.pl,v 2.30 2012/02/20 02:56:19 greg Exp $
+# RCSid $Id: genBSDF.pl,v 2.34 2012/03/15 02:32:19 greg Exp $
#
# Compute BSDF based on geometry and material description
#
@@ -23,7 +23,7 @@ my $geout = 1;
my $nproc = 1;
my $doforw = 0;
my $doback = 1;
-my $pctcull = 95;
+my $pctcull = 90;
my $gunit = "Meter";
my @dim;
# Get options
@@ -45,6 +45,7 @@ while ($#ARGV >= 0) {
} elsif ("$ARGV[0]" =~ /^[-+]b/) {
$doback = ("$ARGV[0]" =~ /^\+/);
} elsif ("$ARGV[0]" eq "-t") {
+ # Use value < 0 for rttree_reduce bypass
$pctcull = $ARGV[1];
shift @ARGV;
} elsif ("$ARGV[0]" =~ /^-t[34]$/) {
@@ -321,6 +322,7 @@ sub bg_tree_rtcontrib {
sub ttree_out {
my $forw = shift;
my $side = ("Back","Front")[$forw];
+ my $cmd;
# Only output one transmitted distribution, preferring backwards
if ( !$forw || !$doback ) {
print
@@ -335,11 +337,21 @@ print
BTDF
';
-system "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
- q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' -of } .
- "$td/" . ($bmodnm,$fmodnm)[$forw] . "_???.flt " .
+$cmd = "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
+ q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' };
+if ($pctcull >= 0) {
+ $cmd .= "-of $td/" . ($bmodnm,$fmodnm)[$forw] . "_???.flt " .
"| rttree_reduce -a -h -ff -t $pctcull -r $tensortree -g $ttlog2";
-die "Failure running rttree_reduce" if ( $? );
+ system "$cmd" || die "Failure running rttree_reduce";
+} else {
+ $cmd .= "$td/" . ($bmodnm,$fmodnm)[$forw] . "_???.flt";
+ print "{\n";
+ system "$cmd" || die "Failure running rcalc";
+ for (my $i = ($tensortree==3)*$ns*$ns*$ns/2; $i-- > 0; ) {
+ print "0\n";
+ }
+ print "}\n";
+}
print
'
@@ -361,11 +373,21 @@ print
BRDF
';
-system "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
- q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' -of } .
- "$td/" . ($fmodnm,$bmodnm)[$forw] . "_???.flt " .
+$cmd = "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " .
+ q{-e '$1=(0.265*$1+0.670*$2+0.065*$3)/Omega' };
+if ($pctcull >= 0) {
+ $cmd .= "-of $td/" . ($fmodnm,$bmodnm)[$forw] . "_???.flt " .
"| rttree_reduce -a -h -ff -t $pctcull -r $tensortree -g $ttlog2";
-die "Failure running rttree_reduce" if ( $? );
+ system "$cmd" || die "Failure running rttree_reduce";
+} else {
+ $cmd .= "$td/" . ($fmodnm,$bmodnm)[$forw] . "_???.flt";
+ print "{\n";
+ system "$cmd" || die "Failure running rcalc";
+ for (my $i = ($tensortree==3)*$ns*$ns*$ns/2; $i-- > 0; ) {
+ print "0\n";
+ }
+ print "}\n";
+}
print
'
@@ -463,8 +485,10 @@ $cmd = "cnt $ndiv $ny $nx | rcalc -of -e '$tcal' " .
system "$cmd" || die "Failure running: $cmd\n";
@tbarr = `$rccmd $td/$bmodnm.flt`;
die "Failure running: $rccmd $td/$bmodnm.flt\n" if ( $? );
+chomp(@tbarr);
@rbarr = `$rccmd $td/$fmodnm.flt`;
die "Failure running: $rccmd $td/$fmodnm.flt\n" if ( $? );
+chomp(@rbarr);
}
# Output angle basis
print
@@ -584,10 +608,10 @@ print
BRDF
';
-# Output front reflection (reciprocity averaging)
+# Output front reflection (transposed order)
for (my $od = 0; $od < $ndiv; $od++) {
for (my $id = 0; $id < $ndiv; $id++) {
- print .5*($rfarr[$ndiv*$id + $od] + $rfarr[$ndiv*$od + $id]), ",\n";
+ print $rfarr[$ndiv*$id + $od], ",\n";
}
print "\n";
}
@@ -634,10 +658,10 @@ print
BRDF
';
-# Output back reflection (reciprocity averaging)
+# Output back reflection (transposed order)
for (my $od = 0; $od < $ndiv; $od++) {
for (my $id = 0; $id < $ndiv; $id++) {
- print .5*($rbarr[$ndiv*$id + $od] + $rbarr[$ndiv*$od + $id]), ",\n";
+ print $rbarr[$ndiv*$id + $od], ",\n";
}
print "\n";
}