| 13 | 
  | 
        exit 1; | 
| 14 | 
  | 
} | 
| 15 | 
  | 
my ($td,$radscn,$mgfscn,$octree,$fsender,$bsender,$receivers,$facedat,$behinddat,$rmtmp); | 
| 16 | 
< | 
my ($tf,$rf,$tb,$rb,$tfx,$rfx,$tbx,$rbx,$tfz,$rfz,$tbz,$rbz,$cph); | 
| 16 | 
> | 
my ($tf,$rf,$tb,$rb,$tfx,$rfx,$tbx,$rbx,$tfz,$rfz,$tbz,$rbz); | 
| 17 | 
  | 
my ($curphase, $recovery); | 
| 18 | 
  | 
if ($#ARGV == 1 && "$ARGV[0]" =~ /^-rec/) { | 
| 19 | 
  | 
        $td = $ARGV[1]; | 
| 57 | 
  | 
        $rfz = "$td\\rfz.dat"; | 
| 58 | 
  | 
        $tbz = "$td\\tbz.dat"; | 
| 59 | 
  | 
        $rbz = "$td\\rbz.dat"; | 
| 60 | 
– | 
        $cph = "$td\\phase.txt"; | 
| 60 | 
  | 
        $rmtmp = "rd /S /Q $td"; | 
| 61 | 
  | 
} else { | 
| 62 | 
  | 
        $radscn = "$td/device.rad"; | 
| 79 | 
  | 
        $rfz = "$td/rfz.dat"; | 
| 80 | 
  | 
        $tbz = "$td/tbz.dat"; | 
| 81 | 
  | 
        $rbz = "$td/rbz.dat"; | 
| 83 | 
– | 
        $cph = "$td/phase.txt"; | 
| 82 | 
  | 
        $rmtmp = "rm -rf $td"; | 
| 83 | 
  | 
} | 
| 84 | 
  | 
my @savedARGV = @ARGV; | 
| 163 | 
  | 
                        ($tensortree==3 && !($doforw && $doback)); | 
| 164 | 
  | 
        # Get scene description | 
| 165 | 
  | 
        if ( $mgfin ) { | 
| 166 | 
< | 
                system "mgf2rad @ARGV > $radscn"; | 
| 166 | 
> | 
                system "mgf2rad -s @ARGV > $radscn"; | 
| 167 | 
  | 
                die "Could not load MGF input\n" if ( $? ); | 
| 168 | 
  | 
        } else { | 
| 169 | 
  | 
                system "xform -e @ARGV > $radscn"; | 
| 184 | 
  | 
                ';h=' . ($dim[3] - $dim[2]) . '"'; | 
| 185 | 
  | 
$wrapper .= " -g $mgfscn" if ( $geout ); | 
| 186 | 
  | 
# Calculate CIE (u',v') from Radiance RGB: | 
| 187 | 
< | 
my $CIEuv =     'Xi=.5141*Ri+.3239*Gi+.1620*Bi;' . | 
| 190 | 
< | 
                'Yi=.2651*Ri+.6701*Gi+.0648*Bi;' . | 
| 191 | 
< | 
                'Zi=.0241*Ri+.1229*Gi+.8530*Bi;' . | 
| 192 | 
< | 
                'den=Xi+15*Yi+3*Zi;' . | 
| 187 | 
> | 
my $CIEuv =     'den=Xi+15*Yi+3*Zi;' . | 
| 188 | 
  | 
                'uprime=if(Yi,4*Xi/den,4/19);' . | 
| 189 | 
  | 
                'vprime=if(Yi,9*Yi/den,9/19);' ; | 
| 190 | 
  | 
my $FEPS = 1e-5; | 
| 320 | 
  | 
                                qq{-e "r2=rand(-5.37138*recno+67.1737811)" } . | 
| 321 | 
  | 
                                qq{-e "r3=rand(+3.17603772*recno+83.766771)" } . | 
| 322 | 
  | 
                                qq{-e "r4=rand(-1.5839226*recno-59.82712)" } . | 
| 323 | 
< | 
                                qq{-e "odds(n):if(.5*n-floor(.5*n)-.25,-1,1)"} . | 
| 323 | 
> | 
                                qq{-e "odds(n):if(.5*n-floor(.5*n)-.25,-1,1)" } . | 
| 324 | 
  | 
                                qq{-e "Dx=1-(\$1+r1)/$ns2" } . | 
| 325 | 
  | 
                                qq{-e "Dy=min(1/$ns,sqrt(1-Dx*Dx))*odds(\$1)*r2" } . | 
| 326 | 
  | 
                                qq{-e "Dz=sqrt(1-Dx*Dx-Dy*Dy)" } . | 
| 345 | 
  | 
                                qq{-e 'zp=$dim[5-$forw]' -e 'myDz=Dz*($forw*2-1)' } . | 
| 346 | 
  | 
                                qq{-e '\$1=xp-Dx;\$2=yp-Dy;\$3=zp-myDz' } . | 
| 347 | 
  | 
                                qq{-e '\$4=Dx;\$5=Dy;\$6=myDz' -of } . | 
| 348 | 
< | 
                                "| $rfluxmtx$r -h -ff -y $ns2 - $receivers -i $octree"; | 
| 348 | 
> | 
                                "| $rfluxmtx$r -ff -y $ns2 - $receivers -i $octree"; | 
| 349 | 
  | 
                } | 
| 350 | 
  | 
        } else { | 
| 351 | 
  | 
                # Anisotropic BSDF | 
| 353 | 
  | 
                if ($windoz) { | 
| 354 | 
  | 
                        $cmd = "$rfluxmtx$r -fa $sender $receivers -i $octree"; | 
| 355 | 
  | 
                } else { | 
| 356 | 
< | 
                        $cmd = "$rfluxmtx$r -h -ff $sender $receivers -i $octree"; | 
| 356 | 
> | 
                        $cmd = "$rfluxmtx$r -ff $sender $receivers -i $octree"; | 
| 357 | 
  | 
                } | 
| 358 | 
  | 
        } | 
| 359 | 
  | 
        if ( $dop ) { | 
| 401 | 
  | 
        my $dest = shift; | 
| 402 | 
  | 
        my $cmd; | 
| 403 | 
  | 
        if ($windoz) { | 
| 404 | 
+ | 
                $cmd = "rcomb -fa -c xyz $src | rcollate -ho -oc 1" . | 
| 405 | 
+ | 
                                q{ | rcalc -e "Xi=$1;Yi=$2;Zi=$3" }; | 
| 406 | 
  | 
                if ("$spec" eq "Visible") { | 
| 407 | 
< | 
                        $cmd = qq{rcalc -e "Omega:PI/($ns*$ns)" } . | 
| 411 | 
< | 
                                q{-e "Ri=$1;Gi=$2;Bi=$3" } . | 
| 412 | 
< | 
                                qq{-e "$CIEuv" } . | 
| 407 | 
> | 
                        $cmd .= qq{-e "Omega:PI/($ns*$ns)" } . | 
| 408 | 
  | 
                                q{-e "$1=Yi/Omega"}; | 
| 409 | 
  | 
                } elsif ("$spec" eq "CIE-u") { | 
| 410 | 
< | 
                        $cmd = q{rcalc -e "Ri=$1;Gi=$2;Bi=$3" } . | 
| 416 | 
< | 
                                qq{-e "$CIEuv" } . | 
| 410 | 
> | 
                        $cmd .= qq{-e "$CIEuv" } . | 
| 411 | 
  | 
                                q{-e "$1=uprime"}; | 
| 412 | 
  | 
                } elsif ("$spec" eq "CIE-v") { | 
| 413 | 
< | 
                        $cmd = q{rcalc -e "Ri=$1;Gi=$2;Bi=$3" } . | 
| 420 | 
< | 
                                qq{-e "$CIEuv" } . | 
| 413 | 
> | 
                        $cmd .= qq{-e "$CIEuv" } . | 
| 414 | 
  | 
                                q{-e "$1=vprime"}; | 
| 415 | 
  | 
                } | 
| 416 | 
  | 
        } else { | 
| 417 | 
+ | 
                $cmd = "rcomb -ff -c xyz $src | getinfo -" . | 
| 418 | 
+ | 
                                q{ | rcalc -if3 -of -e 'Xi=$1;Yi=$2;Zi=$3' }; | 
| 419 | 
  | 
                if ("$spec" eq "Visible") { | 
| 420 | 
< | 
                        $cmd = "rcalc -if3 -e 'Omega:PI/($ns*$ns)' " . | 
| 426 | 
< | 
                                q{-e 'Ri=$1;Gi=$2;Bi=$3' } . | 
| 427 | 
< | 
                                "-e '$CIEuv' " . | 
| 420 | 
> | 
                        $cmd .= "-e 'Omega:PI/($ns*$ns)' " . | 
| 421 | 
  | 
                                q{-e '$1=Yi/Omega'}; | 
| 422 | 
  | 
                } elsif ("$spec" eq "CIE-u") { | 
| 423 | 
< | 
                        $cmd = q{rcalc -if3 -e 'Ri=$1;Gi=$2;Bi=$3' } . | 
| 431 | 
< | 
                                "-e '$CIEuv' " . | 
| 423 | 
> | 
                        $cmd .= "-e '$CIEuv' " . | 
| 424 | 
  | 
                                q{-e '$1=uprime'}; | 
| 425 | 
  | 
                } elsif ("$spec" eq "CIE-v") { | 
| 426 | 
< | 
                        $cmd = q{rcalc -if3 -e 'Ri=$1;Gi=$2;Bi=$3' } . | 
| 435 | 
< | 
                                "-e '$CIEuv' " . | 
| 426 | 
> | 
                        $cmd .= "-e '$CIEuv' " . | 
| 427 | 
  | 
                                q{-e '$1=vprime'}; | 
| 428 | 
  | 
                } | 
| 429 | 
  | 
        } | 
| 432 | 
  | 
                my $pcull = ("$spec" eq "Visible") ? $pctcull : | 
| 433 | 
  | 
                                                     (100 - (100-$pctcull)*.25) ; | 
| 434 | 
  | 
                if ($windoz) { | 
| 435 | 
< | 
                        $cmd = "rcollate -ho -oc 1 $src | " . | 
| 445 | 
< | 
                                        $cmd . | 
| 446 | 
< | 
                                        " | rttree_reduce$avg -h -fa -t $pcull -r $tensortree -g $ttlog2"; | 
| 435 | 
> | 
                        $cmd .= " | rttree_reduce$avg -h -fa -t $pcull -r $tensortree -g $ttlog2"; | 
| 436 | 
  | 
                } else { | 
| 437 | 
< | 
                        $cmd .= " -of $src " . | 
| 449 | 
< | 
                                        "| rttree_reduce$avg -h -ff -t $pcull -r $tensortree -g $ttlog2"; | 
| 437 | 
> | 
                        $cmd .= " | rttree_reduce$avg -h -ff -t $pcull -r $tensortree -g $ttlog2"; | 
| 438 | 
  | 
                } | 
| 439 | 
  | 
                run_check "$cmd > $dest"; | 
| 440 | 
  | 
        } else { | 
| 453 | 
– | 
                if ($windoz) { | 
| 454 | 
– | 
                        $cmd = "rcollate -ho -oc 1 $src | " . $cmd ; | 
| 455 | 
– | 
                } else { | 
| 456 | 
– | 
                        $cmd .= " $src"; | 
| 457 | 
– | 
                } | 
| 441 | 
  | 
                if ( active_phase() ) { | 
| 442 | 
  | 
                        open(DATOUT, "> $dest"); | 
| 443 | 
  | 
                        print DATOUT "{\n"; | 
| 477 | 
  | 
        my $dop = do_phase(); | 
| 478 | 
  | 
        my $r = ($dop < 0) ? " -r" : ""; | 
| 479 | 
  | 
        my $sender = ($bsender,$fsender)[$forw]; | 
| 480 | 
< | 
        my $cmd = "$rfluxmtx$r -fd $sender $receivers -i $octree"; | 
| 480 | 
> | 
        my $cmd = "$rfluxmtx$r -ff $sender $receivers -i $octree"; | 
| 481 | 
  | 
        if ( $dop ) { | 
| 482 | 
  | 
                # print STDERR "Running: $cmd\n"; | 
| 483 | 
  | 
                system $cmd; | 
| 520 | 
  | 
        my $dest = shift; | 
| 521 | 
  | 
        my $cmd = "rmtxop -fa -t"; | 
| 522 | 
  | 
        if ("$spec" eq "Visible") { | 
| 523 | 
< | 
                $cmd .= " -c 0.2651 0.6701 0.0648"; | 
| 523 | 
> | 
                $cmd .= " -c y"; | 
| 524 | 
  | 
        } elsif ("$spec" eq "CIE-X") { | 
| 525 | 
< | 
                $cmd .= " -c 0.5141 0.3239 0.1620"; | 
| 525 | 
> | 
                $cmd .= " -c x"; | 
| 526 | 
  | 
        } elsif ("$spec" eq "CIE-Z") { | 
| 527 | 
< | 
                $cmd .= " -c 0.0241 0.1229 0.8530"; | 
| 527 | 
> | 
                $cmd .= " -c z"; | 
| 528 | 
  | 
        } | 
| 529 | 
  | 
        $cmd .= " $src | getinfo -"; | 
| 530 | 
  | 
        run_check "$cmd > $dest"; |