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:
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) :
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:
Output of this command is like:
...
floor
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) :
I understand about the tmeshes... I also concur with Andy (and my second suggestion) which is in line with what you are doing. I think what would be nice to figure out is if this could all be done using native radiance tools (eg NOT sed/awk) by including a call to rcalc. It has been too long so I just do not remember if there is a way to get rcalc to do any type of string comparison. If there is not this could be a nice feature as this would allow great flexibility processing other scene data. Note my desire for doing it all natively in radiance is more from elegance than anything else.
Another neat feature would be if there was a way to generate an "alpha" file in process of the rendering, where each pixel location also includes the material name. This would be sort of like the option to include z-buffer data per pixel. I suppose this starts to generate huge files though. And may only have utility for a small subset of users.
Regards,
-Jack
···
On 2/25/2012 5:41 AM, Iebele Abel wrote:
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 "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
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:
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:
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 <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:
Output of this command is like:
...
floor
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) :
Many thank! So in this method alphas.txt is a file that you generate by hand of material names and values using regex notation?
-Jack
···
On 2/25/2012 12:28 PM, Greg Ward wrote:
Hi Jack,
It would be nice if rcalc were smart about strings, but all it can really do is pass them from one place in the input to another place in the output. It never looks at them, really, and none of the operations supports strings.
Regarding your second idea of including the material along with the value, you can do this with rcalc as written. You would have to go for an ascii output, like so:
This would replace each material with an associated alpha value. From there, you would have to convert to 16-bit RGBA or something if you wanted to load it into Photoshop, and I think you would need a C program for that. Alternately, you could split the file using rcalc and pvalue like so:
Photoshop can load, convert, and combine HDR files, though you probably have to change from 32-bit to 16-bit mode when you do. Just make sure not to use any of the fancy tone-mappers when you do....
I'm not sure the above would be any faster than Iebele's current method, but it would avoid separate rtrace steps. This permits you to use the -pj option of vwrays safely, as you won't risk sampling one object in one run and another object in another. (Pseudorandom sequences should guarantee this in any case, but I'm not sure they do on all systems.)
Cheers,
-Greg
From: Jack de Valpine<jedev@visarc.com>
Date: February 25, 2012 6:23:33 AM PST
Hi Iebele,
I understand about the tmeshes... I also concur with Andy (and my second suggestion) which is in line with what you are doing. I think what would be nice to figure out is if this could all be done using native radiance tools (eg NOT sed/awk) by including a call to rcalc. It has been too long so I just do not remember if there is a way to get rcalc to do any type of string comparison. If there is not this could be a nice feature as this would allow great flexibility processing other scene data. Note my desire for doing it all natively in radiance is more from elegance than anything else.
Another neat feature would be if there was a way to generate an "alpha" file in process of the rendering, where each pixel location also includes the material name. This would be sort of like the option to include z-buffer data per pixel. I suppose this starts to generate huge files though. And may only have utility for a small subset of users.