|
33
|
1 |
#!/bin/perl
|
|
|
2 |
# RCSid: $Id: compamb.csh,v 3.7 2008/08/25 04:50:32 greg Exp $
|
|
|
3 |
#
|
|
|
4 |
# Compute best ambient value for a scene and append to rad input file
|
|
|
5 |
# This is a re-write of Greg's CSH script compamb.csh
|
|
|
6 |
# (c) Axel Jacobs, Nov 2011
|
|
|
7 |
|
|
|
8 |
use strict;
|
|
|
9 |
use warnings;
|
|
|
10 |
use File::Temp qw/ tempdir /;
|
|
|
11 |
|
|
|
12 |
my $doexpos = 0;
|
|
|
13 |
my $docolor = 0;
|
|
|
14 |
my $radfile;
|
|
|
15 |
my $oct;
|
|
|
16 |
|
|
|
17 |
sub usage() {
|
|
|
18 |
print "Usage: $0 [-e] [-c] rad_input_file.rad\n";
|
|
|
19 |
exit 1;
|
|
|
20 |
}
|
|
|
21 |
|
|
|
22 |
while ($#ARGV > 0) {
|
|
|
23 |
$_ = shift @ARGV;
|
|
|
24 |
if (m/-e/) {
|
|
|
25 |
$doexpos = 1;
|
|
|
26 |
} elsif (m/-c/) {
|
|
|
27 |
$docolor = 1;
|
|
|
28 |
} else {
|
|
|
29 |
&usage;
|
|
|
30 |
}
|
|
|
31 |
}
|
|
|
32 |
|
|
|
33 |
if ($#ARGV == 0) {
|
|
|
34 |
$radfile = $ARGV[0];
|
|
|
35 |
if (! -f $radfile) {
|
|
|
36 |
die ("Cannot open Radiance input file $ARGV[0]\n");
|
|
|
37 |
}
|
|
|
38 |
} else {
|
|
|
39 |
&usage;
|
|
|
40 |
}
|
|
|
41 |
|
|
|
42 |
my $td = tempdir( CLEANUP => 1 );
|
|
|
43 |
#set oct=`rad -w -s -e -v 0 $argv[1] QUA=High AMB=$tf.amb OPT=$tf.opt | sed -n 's/^OCTREE= //p'`
|
|
|
44 |
my $radout = `rad -w -s -e -v 0 $radfile QUA=High AMB=$td/compamb.amb OPT=$td/compamb.opt`;
|
|
|
45 |
exit 1;
|
|
|
46 |
#...my $oct = sed -n 's/^OCTREE= //p'`
|
|
|
47 |
my $rpictargs = '-av 0 0 0 -aw 16 -dv- -S 1 -x 16 -y 16 -ps 1';
|
|
|
48 |
system "rad -n -s -V $radfile | rpict @$td/compamb.opt $rpictargs $oct | ra_rgbe - '\!pvalue -h -H -d' > $td/compamb.dat";
|
|
|
49 |
#rad -n -s -V $argv[1] \
|
|
|
50 |
#| rpict @$tf.opt -av 0 0 0 -aw 16 -dv- -S 1 -x 16 -y 16 -ps 1 $oct \
|
|
|
51 |
#| ra_rgbe - '\!pvalue -h -H -d' > $tf.dat
|
|
|
52 |
|
|
|
53 |
#echo \# Rad input file modified by $0 `date` >> $argv[1]
|
|
|
54 |
my $now = localtime();
|
|
|
55 |
open (FHrad, ">>$radfile") or
|
|
|
56 |
die("Unable to append to file $radfile\n");
|
|
|
57 |
print FHrad "# Rad input file modified by $0 $now";
|
|
|
58 |
|
|
|
59 |
if ($doexpos == 1) {
|
|
|
60 |
my $expo = `total -u $td/compamb.dat | rcalc -e '$1=2/(.265*$1+.670*$2+.065*$3)'`;
|
|
|
61 |
#chomp $expo;
|
|
|
62 |
#(echo -n 'EXPOSURE= '; \
|
|
|
63 |
#total -u $tf.dat | rcalc -e '$1=2/(.265*$1+.670*$2+.065*$3)') \
|
|
|
64 |
#>> $argv[1]
|
|
|
65 |
print FHrad "EXPOSURE= $expo\n";
|
|
|
66 |
}
|
|
|
67 |
|
|
|
68 |
#lookamb -h -d $tf.amb | rcalc -e '$1=$10;$2=$11;$3=$12' >> $tf.dat
|
|
|
69 |
system ("lookamb -h -d $td/compamb.amb | rcalc -e '$1=$10;$2=$11;$3=$12' >> $td/compamb.dat");
|
|
|
70 |
|
|
|
71 |
#set lavg=`rcalc -e '$1=lum;lum=.265*$1+.670*$2+.065*$3;cond=lum-1e-5' $tf.dat | total -m -p`
|
|
|
72 |
my $lavg = `rcalc -e '$1=lum;lum=.265*$1+.670*$2+.065*$3;cond=lum-1e-5' $td/compamb.dat | total -m -p`;
|
|
|
73 |
|
|
|
74 |
my $av = "$lavg $lavg $lavg";
|
|
|
75 |
if ($docolor == 1) {
|
|
|
76 |
my $cavg = `total -m $td/compamb.dat`;
|
|
|
77 |
my ($ravg, $gavg, $bavg) = split(/\t/, $cavg);
|
|
|
78 |
my $sf = $lavg / (.265*$ravg + .670*$gavg + .065*$bavg);
|
|
|
79 |
#my $av = `rcalc -n -e "r=$ravg;g=$gavg;b=$bavg;sf=$lavg/(.265*r+.670*g+.065*b)" -e '$1=sf*r;$2=sf*g;$3=sf*b'`)
|
|
|
80 |
my $av = "$sf*$ravg $sf*$gavg $sf*$bavg";
|
|
|
81 |
}
|
|
|
82 |
|
|
|
83 |
print FHrad "render= -av $av";
|
|
|
84 |
close (FHrad);
|
|
|
85 |
|
|
|
86 |
#EOF
|