[Bf-funboard] RFC-Multipass Rendering

Douglas Bischoff bf-funboard@blender.org
Mon, 8 Dec 2003 11:11:08 -0500


Hello, all!

I'm starting this thread in the "funboard" side because I am pretty  
sure that coding this will be well beyond my skills, but knowing that a  
few features recently added to Blender seem to suggest that more of  
this kind of stuff is possible I thought I'd post out a few thoughts  
and see if anyone bites!

The idea is "Multipass Rendering."

A recent discussion on elYsiun.com on the subject revealed that there  
is a very defined method of handling multipass rendering in Blender,  
but it is very work intensive. The steps (very abbreviated and taken  
from Little_Cube's mini-tutorial on elYsiun at  
http://www.elysiun.com/forum/viewtopic.php? 
t=18247&postdays=0&postorder=asc&start=30)

1) Main "Beauty" Pass - "Normal" Lighting: No Emit, No Ambient: Save  
environment maps for reflection pass
2) Diffuse Pass - "No Specular" for all Lights: Disable CMIR texture  
maps: No Shadows
3) Specular Pass - "No Diffuse" for all lights: Disable CMIR texture  
maps: No Shadows
4) Reflection Pass - Envmap to "CMIR": "No Specular No Diffuse" for all  
lights: No Shadows
5) Shadow Pass - Pure white background World: "Only Shadow" for all  
materials: Unified Renderer

Setting each of these parameters up manually for every light & every  
material, then undoing it after each pass, is horribly time consuming  
and error-prone.

There are already buttons on the render control panel for "Shadows" and  
"EnvMap" and "Radiosity..." My proposal is this:

1) Add a button next to or below the "Unified" renderer button called  
"Multipass"
2) If Multipass is selected, the following take place:
	a) Rendering to file is required
	b) "Extension" button is turned on
	c) "Do Sequence" is disabled (once the multipass rendering is  
complete, sequence effects can be done USING the various passes.)
3) A subpanel is created which contains the 5 pass types as toggle  
buttons. User selects which passes they are interested in. At the  
bottom of the subpanel is a separate button called "Create Sequence"
4) Pressing "Render" or "Anim" causes the scene/each frame to be  
rendered in the "passes" specified in step 3. The files are saved with  
a single letter "B,D,S,R,K" (K from the print world meaning "black" for  
shadows, open to suggestions here... is there a standard out there?),  
frame number, then the extension.
5) If "Create Sequence" was selected, then the various passes are  
combined in the sequence editor in the following fashion:
	shadow MULTIPLY (diffuse ADD specular ADD refraction)

Special passes created by the user, such as Ambient Occlusion (AO),  
Fresnel, and Depth (z-buffer) passes can then be inserted by the user  
as desired, and of course all the various passes' files are in the  
saved directory for use in other programs if desired.

Now, all this may sound extremely cumbersome to code, but since you can  
disable all Shadows with a single button click, and a single button for  
all EnvMaps... I am hoping that a knowledgeable coder could insert  
similar "hooks" or "flags" into the code which would handle the  
conditions the 5 above "pass" types require. (i.e. temporarily force  
all lamps to "no specular" and disable CMIR texture maps, etc.)

As a side note, if the above is possible, then being able to define a  
temporary "override" material which would be used in place of all  
active materials when an option in the "Multipass" rendering subpane is  
checked would enable quick use of special techniques like Fresnel  
passes, AO passes, mask passes, etc.

Comments welcome,

-Bischofftep