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.7 by greg, Fri Jul 5 00:20:57 2019 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 28 | Line 30 | my @rtraceA = split(' ', "rtrace -u- -dt .05 -dc .5 -d
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
# Line 46 | Line 74 | while ($#ARGV >= 0 && "$ARGV[0]" =~ /^[-\@]/) {
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 91 | Line 124 | while ($#ARGV >= 0 && "$ARGV[0]" =~ /^[-\@]/) {
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 (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   }
# Line 109 | Line 160 | 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 " .
# Line 116 | Line 207 | if (defined $outzbf) {         # generating depth buffer?
207                          "-oh -oH -of3 '!pvalue -r -df' | " .
208                  "getinfo -a 'VIEW=$view'";
209   }
210 <                                # no depth buffer, so simpler
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