[Radiance-general] Generating alpha channels using vwrays and rtrace

Iebele Abel iabel at iebele.nl
Sat Feb 25 02:41:24 PST 2012


Well, thanks a lot folks, for your comments on this. Jacks suggestion has
been used over years, but recently we started using tmeshes, and because of
that parts of the octree is frozen. So we had to find some other solution,
without messing around with multiple material files for each tmesh. I've
tried both Gregs and Andys suggestions and they both work really smooth.
When running the command in a bash script I found awk performing about
25-30% faster as sed. See below how the commands are put in bash (not
checking argument values etc.) and their timed outputs pasted thereafter.

There remain some issues in the script when rendering non-square images
(like 1920x1080 HD), but that will be worked out. All together this has all
been very helpful,

Cheers,

Iebele


--- ralpha script  ---

#!/bin/bash

if ( ! getopts ":v:m:x:y:o:" opt ); then
        echo "Usage: `basename $0` -v viewfile -m modifier -x xres -y yres
-o octree" >&2
        exit
fi

while getopts "v:m:x:y:o:" opt; do
        case $opt in
        v)      viewfile=$OPTARG
                ;;
        m)      modifier=$OPTARG
                ;;
        x)      xres=$OPTARG
                ;;
        y)      yres=$OPTARG
                ;;
        o)      octree=$OPTARG
                ;;
        esac
done


echo "using awk" >&2
time vwrays -ff -vf $viewfile -x $xres -y $yres | \
        rtrace `vwrays -d -vf $viewfile -x $xres -y $yres`  -ffa -om
$octree  | \
        awk -v v1=$modifier '{if( $1 == v1 ) print 1.0; else print 0.0;}'
 | \
        pvalue +x $xres -y $yres -h -da -b -r

echo "using sed" >&2
time vwrays -ff -vf $viewfile  -pa 0 -x $xres -y $yres | \
        rtrace -h -x $xres -y $yres  -ffa -om $octree  | \
        sed -e "s/^$modifier/1/" -e "s/^[^1].*$/0/" | \
        pvalue -h -r -b -d -x $xres -y $yres


--- output --

./ralpha -v hermitage_brug01.vp -m water -x 16000 -y 16000 -o export.oct >
/dev/null

using awk
real    5m21.743s
user    8m51.873s
sys     0m7.116s

using sed
real    7m55.060s
user    13m41.563s
sys     0m5.199s






2012/2/25 Andy McNeil <amcneil at lbl.gov>

> Oops! The resolution I gave to pvalue doesn't match the resolution in
> vwrays and rtrace.  I was testing a higher resolution so I could see detail
> in the image, but forgot to change it back to 100 after pasting into the
> email.  Here's the correct command:
>
> vwrays -ff -vf test.vp -x 100 -y 100 | \
> rtrace `vwrays -d -vf test.vp -x 100 -y 100`  -ffa -om test.oct  | \
> awk '{if($1=="window") print 1.0; else print 0.0;}'  | \
> pvalue +x 100 -y 100 -h -da -b -r | \
> ra_tiff - alpha.tif
>
> Also, you might be able to use rcalc in place of awk.  It depends on
> whether rcalc can compare strings in an if statement.  I don't know enough
> about rcalc to know if it's possible.
>
> Andy
>
>
> On Feb 24, 2012, at 2:25 PM, Andy McNeil wrote:
>
> I kinda like Iebele's method approach better than using black and white
> materials.  Using rtrace -om you can create alpha channels using the same
> octree that you use for a rendering.  And you can also create many alpha
> images for different materials with the same model.  It just seems less
> work than fussing with material files.
>
> Iebele, the main thing you're missing is pvalue to convert the data stream
> to image format.  I also used awk for the if statement.  Here's a complete
> command:
>
> vwrays -ff -vf test.vp -x 100 -y 100 | \
> rtrace `vwrays -d -vf test.vp -x 100 -y 100`  -ffa -om test.oct  | \
> * awk '{if($1=="window") print 1.0; else print 0.0;}'  *| \
> * pvalue +x 500 -y 500 -h -da -b -r *| \
> ra_tiff - alpha.tif
>
> Andy
>
>
>
> On Feb 24, 2012, at 1:29 PM, giulio antonutto wrote:
>
> yes, this was :-)
> (sorry missed your reply)
> G
>
> On 24 Feb 2012, at 19:45, Jack de Valpine wrote:
>
>  Hi Iebele,
>
> I have done a few different things to achieve this over the years. The one
> that come most readily to mind is to prep an alternate material file with a
> black (0 0 0) and white (1 1 1) material assigned as needed. This is one
> reason the "alias" material option can be quite handy when assigning
> materials to geometry! With the correct black/white materials this can be
> rendered out very quickly with -ab 0 and -av 1 1 1.
>
> I have also done something where (with scripting) you can specify a
> material name that then get white and everything else gets black. It has
> been a while so I do not quite remember off hand, but I think that this can
> also be setup as a big pipe in radiance and using radiance's functional
> language.
>
> The first way is pretty easy and if you need to do lots of it then it is
> possible to script the switching of material assignments. One challenge
> though is that if you use instances (frozen octrees) you need to remember
> to assign a material accordingly. Another challenge is thinking about
> transparencies that might need to be captured in the process...
>
> Regards,
>
> -Jack
>
> --
> # Jack de Valpine
> # president
> #
> # visarc incorporated
> # http://www.visarc.com
> #
> # channeling technology for superior design and construction
>
>
> On 2/24/2012 2:24 PM, Iebele Abel wrote:
>
> Hi group,
>
>  Whilst finding a method to create alpha channels for my rendered image,
> I'm playing with vwrays and rtrace. What I intend is to create an image in
> which
> geometry modified by a particular modifier  is rendered white, whilst the
> geometry modified otherwise is rendered black. The command below comes
> close to this, it has as output the modifiers for each surface hit:
>
>  vwrays -ff -vf test.vp -x 100 -y 100 | rtrace `vwrays -d -vf test.vp -x
> 100 -y 100`  -ffa -om test.oct  | more
>
>  Output of this command is like:
> ...
> floor
> floor
> floor
> window
> window
> etc...
>
>  Now I want that, for example, each occurrence of "window" sends 3
> "bright" RGBE primaries to stdout, and every other string sends 3 "dark"
> RGBE primaries to stdout. I can do this by writing a small program (instead
> of piping to 'more' as in the example above), but I wondered if there is a
> method using native Radiance tools to do it.
>
>  In pseudo code (bold) I think about something like this (where 1
> represents a value considered as white in the output, and 0 represents
> black) :
>
>  vwrays -ff -vf test.vp -x 100 -y 100 | rtrace `vwrays -d -vf test.vp -x
> 100 -y 100`  -ffa -om test.oct  | *if (stdin == "window") fprintf(stdout,
> "1 1 1" ); else fprintf ( stdout, "0,0,0"); *| ra_tiff - alpha.tif
>
>  So my questions are:
> 1. how do I format the output of stdout as Radiance RGBE?
> 2. can I do this using native Radiance tools?
>
>  Thanks for any hints.
>
>  -Iebele
>
>
>
>
>
> _______________________________________________
> Radiance-general mailing listRadiance-general at radiance-online.orghttp://www.radiance-online.org/mailman/listinfo/radiance-general
>
>  _______________________________________________
> Radiance-general mailing list
> Radiance-general at radiance-online.org
> http://www.radiance-online.org/mailman/listinfo/radiance-general
>
>
> _______________________________________________
> Radiance-general mailing list
> Radiance-general at radiance-online.org
> http://www.radiance-online.org/mailman/listinfo/radiance-general
>
>
>
>
> _______________________________________________
> Radiance-general mailing list
> Radiance-general at radiance-online.org
> http://www.radiance-online.org/mailman/listinfo/radiance-general
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.radiance-online.org/pipermail/radiance-general/attachments/20120225/ca57056f/attachment.html>


More information about the Radiance-general mailing list