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

Comparing ray/src/util/rtpict.pl (file contents):
Revision 2.3 by greg, Tue Mar 20 22:48:10 2018 UTC vs.
Revision 2.8 by greg, Tue Jul 23 01:03:30 2019 UTC

# Line 2 | Line 2
2   # RCSid $Id$
3   #
4   # Run rtrace in parallel mode to simulate rpict -n option
5 + # May also be used to render layered images with -o* option
6   #
7   #       G. Ward
8   #
9   use strict;
10 < # we'll call rpict if this is not overridden
10 > # we'll run rpict if no -n or -o* option
11   my $nprocs = 1;
12   # rtrace options and the associated number of arguments
13   my %rtraceC = ("-dt",1, "-dc",1, "-dj",1, "-ds",1, "-dr",1, "-dp",1,
# Line 16 | Line 17 | my %rtraceC = ("-dt",1, "-dc",1, "-dj",1, "-ds",1, "-d
17                  "-me",3, "-ma",3, "-mg",1, "-ms",1, "-lr",1, "-lw",1);
18   # boolean rtrace options
19   my @boolO = ("-w", "-bv", "-dv", "-i", "-u");
20 + my $irrad = 0;
21   # view options and the associated number of arguments
22   my %vwraysC = ("-vf",1, "-vtv",0, "-vtl",0, "-vth",0, "-vta",0, "-vts",0, "-vtc",0,
23                  "-x",1, "-y",1, "-vp",3, "-vd",3, "-vu",3, "-vh",1, "-vv",1,
# Line 23 | Line 25 | my %vwraysC = ("-vf",1, "-vtv",0, "-vtl",0, "-vth",0,
25   # options we need to silently ignore
26   my %ignoreC = ("-t",1, "-ps",1, "-pt",1, "-pm",1);
27   # Starting options for rtrace (rpict values)
28 < my @rtraceA = split(' ', "rtrace -ffc -u- -dt .05 -dc .5 -ds .25 -dr 1 -aa .2 -ar 64 -ad 512 -as 128 -lr 7 -lw 1e-03");
28 > my @rtraceA = split(' ', "rtrace -u- -dt .05 -dc .5 -ds .25 -dr 1 " .
29 >                                "-aa .2 -ar 64 -ad 512 -as 128 -lr 7 -lw 1e-03");
30   my @vwraysA = ("vwrays", "-ff", "-pj", ".67");
31   my @vwrightA = ("vwright", "-vtv");
32   my @rpictA = ("rpict");
33 + my @rsplitA = ("rsplit", "'-t   '", "-ih", "-iH", "-oh", "-oH");
34 + my $refDepth="";
35 + # Supported rtrace -o* options and data type encoders
36 + my %rtoutC = (
37 +        v =>    "radiance.hdr",
38 +        r =>    "mirrored.hdr",
39 +        x =>    "unmirrored.hdr",
40 +        i =>    "irradiance.hdr",
41 +        l =>    "effective.dpt",
42 +        L =>    "firstsurface.dpt",
43 +        R =>    "mirrored.dpt",
44 +        X =>    "unmirrored.dpt",
45 +        n =>    "perturbed.nrm",
46 +        N =>    "unperturbed.nrm",
47 +        s =>    "surface.idx",
48 +        m =>    "modifier.idx",
49 +        M =>    "material.idx"
50 + );
51 + my $outpatt = "^-o[vrxlLRXnNsmM]+";
52 + # Supported compressed format suffixes and compressors, decompressors
53 + my %comprC = (
54 +        ".tgz", ["tar czf ", "tar xzf "],
55 +        ".zip", ["zip -q -r ", "unzip -q "]
56 + );
57 + my $outlyr;
58 + my $outdir;
59   my $outpic;
60 + my $outzbf;
61   OPTION:                         # sort through options
62   while ($#ARGV >= 0 && "$ARGV[0]" =~ /^[-\@]/) {
63          # Check for file inclusion
# Line 41 | Line 71 | while ($#ARGV >= 0 && "$ARGV[0]" =~ /^[-\@]/) {
71          }
72          # Check booleans
73          for my $boopt (@boolO) {
74 <                if ("$ARGV[0]" =~ ('^' . $boopt . '[-+01tfynTFYN]$')) {
74 >                if ("$ARGV[0]" =~ ('^' . $boopt . '[-+01tfynTFYN]?$')) {
75                          push @rtraceA, $ARGV[0];
76                          push @rpictA, shift(@ARGV);
77 +                        if ("$ARGV[0]" eq "-i") {
78 +                                $irrad = ! $irrad;
79 +                        } elsif ("$ARGV[0]" =~ /^-i[-+01tfynTFYN]/) {
80 +                                $irrad = ("$ARGV[0]" =~ /^-i[+1tyTY]/);
81 +                        }
82                          next OPTION;
83                  }
84          }
# Line 82 | Line 117 | while ($#ARGV >= 0 && "$ARGV[0]" =~ /^[-\@]/) {
117          if ("$ARGV[0]" eq "-o") {
118                  shift @ARGV;
119                  $outpic = shift(@ARGV);
120 +        } elsif ("$ARGV[0]" eq "-z") {
121 +                push @rpictA, shift(@ARGV);
122 +                $outzbf = $ARGV[0];
123 +                push @rpictA, shift(@ARGV);
124          } elsif ("$ARGV[0]" eq "-n") {
125                  shift @ARGV;
126                  $nprocs = shift(@ARGV);
127 +        } elsif ("$ARGV[0]" eq "-d") {
128 +                shift @ARGV;
129 +                $refDepth = " -d " . shift(@ARGV);
130 +        } elsif ("$ARGV[0]" =~ "$outpatt") {
131 +                push @rtraceA, $ARGV[0];
132 +                $outlyr = substr(shift(@ARGV), 2);
133 +                $outdir = shift(@ARGV);
134          } else {
135                  die "Unsupported option: " . $ARGV[0] . "\n";
136          }
137   }
138 + my %rcodeC = (
139 +        ".hdr", ["-of3", "!pvalue -r -df -u"],
140 +        ".dpt", ["-of", "!rcode_depth$refDepth -ff"],
141 +        ".nrm", ["-of3", "!rcode_norm -ff"],
142 +        ".idx", ["-oa", '!rcode_ident "-t       "']
143 + );
144   die "Number of processes must be positive" if ($nprocs <= 0);
145 < if ($outpic) {                  # redirect output?
145 > if (defined $outdir) {          # check conflicting options
146 >        die "Options -o and -o* are mutually exclusive\n" if (defined $outpic);
147 >        die "Options -z and -o* are mutually exclusive\n" if (defined $outzbf);
148 > }
149 > if (defined $outpic) {          # redirect output?
150 >        die "File '$outpic' already exists\n" if (-e $outpic);
151          open STDOUT, '>', "$outpic";
152   }
153 < if ($nprocs == 1) {             # may as well run rpict?
153 >                                # may as well run rpict?
154 > if ($nprocs == 1 && !defined($outdir)) {
155          push(@rpictA, $ARGV[0]) if ($#ARGV == 0);
156          exec @rpictA ;
157   }
100 die "Need single octree argument\n" if ($#ARGV != 0);
101 push @rtraceA, (`@vwraysA -d`);
102 chomp $rtraceA[-1];
158   push @rtraceA, ("-n", "$nprocs");
159 < push @rtraceA, $ARGV[0];
160 < my @view = (`@vwrightA 0`);
161 < exec qq{@vwraysA | @rtraceA | getinfo -a "VIEW=@view"};
159 > die "Need single octree argument\n" if ($#ARGV != 0);
160 > my $oct = $ARGV[0];
161 > my $view = `@vwrightA 0`;
162 > my @res = split(/\s/, `@vwraysA -d`);
163 > if (defined $outdir) {          # layered output directory?
164 >        my $pkg;
165 >        my ($pkgext) = ($outdir =~ /(\.[^.]+)$/);
166 >        
167 >        if ($pkgext) {
168 >                die "Unknown compressor for '$pkgext'\n" if (!defined $comprC{$pkgext});
169 >                $pkg = $outdir;
170 >                die "Output '$pkg' exists as directory!\n" if (-d $pkg);
171 >                $outdir = substr($pkg, 0, length($pkg)-length($pkgext));
172 >                if (-e $outdir) {
173 >                        die "Both '$outdir' and '$pkg' exist!\n" if (-e $pkg);
174 >                } elsif (-e $pkg) {
175 >                        system "$comprC{$pkgext}[1] '$pkg'";
176 >                        die "Cannot decompress '$pkg'\n" if ( $? );
177 >                }
178 >        }
179 >        if (! -d $outdir) {
180 >                mkdir $outdir or die("Cannot create output directory '$outdir'\n");
181 >        }
182 >                                # construct rsplit command
183 >        foreach (0..(length($outlyr) - 1)) {
184 >                my $oval=substr($outlyr, $_, 1);
185 >                $oval = "i" if ($oval eq "v" && $irrad);
186 >                die "Duplicate letter in -o$outlyr\n" if (!defined $rtoutC{$oval});
187 >                my ($otyp) = ($rtoutC{$oval} =~ /(\.[^.]+)$/);
188 >                push @rsplitA, $rcodeC{$otyp}[0];
189 >                push @rsplitA, qq{'$rcodeC{$otyp}[1] > "$outdir/$rtoutC{$oval}"'};
190 >                delete $rtoutC{$oval};
191 >        }
192 >        system "@vwraysA | @rtraceA -fff @res $oct | " .
193 >                        "getinfo -a 'VIEW=$view' | @rsplitA";
194 >        die "Error running rtrace\n" if ( $? );
195 >        if (defined $pkg) {     # compress folder if requested
196 >                unlink $pkg;
197 >                system "$comprC{$pkgext}[0] '$pkg' '$outdir'";
198 >                die "Cannot compress folder '$outdir'\n" if ( $? );
199 >                system "rm -r '$outdir'";
200 >        }
201 >        exit;                   # all done with layered output
202 > }
203 > if (defined $outzbf) {          # generating depth buffer?
204 >        exec "@vwraysA | @rtraceA -fff -olv @res $oct | " .
205 >                "rsplit -ih -iH -f " .
206 >                        "-of $outzbf " .
207 >                        "-oh -oH -of3 '!pvalue -r -df' | " .
208 >                "getinfo -a 'VIEW=$view'";
209 > }
210 >                                # no depth buffer, simplest case
211 > exec "@vwraysA | @rtraceA -ffc @res $oct | getinfo -a 'VIEW=$view'";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines