|
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 |