Showing posts with label caustic. Show all posts
Showing posts with label caustic. Show all posts

Wednesday, July 23, 2008

MOSAIC feature ramblings - part 12

Part 12 - Mapping utilities tutorial:


This post represents the last of the MOSAIC feature ramblings series and will focus on actually building and rendering a simple scene using mapping.
In particular this tutorial will focus on the following tasks:


  • Build a basic scene in Blender highlighting RenderMan setup

  • Prepare shaders via materials

  • Set up MOSAIC

  • Set up an occlusion map pass

  • Set up an environment map pass

  • Set up a shadow map pass

  • Set up a caustic map pass

  • Set up camera DOF

  • Add, build and use RenderMan shader sources and fragments

  • Tweak RenderMan settings

  • Tweak shaders via MOSAIC's GUI



This tutorial will specifically target MOSAIC's mapping utilities to create advanced rasterization techniques, because of this I will be using Aqsis for this tutorial (since it's a pure REYES renderer). Before we begin be sure you have at least Blender 2.46, Aqsis 1.4 and CVS mosaic.py 1.39 or newer.

If you're impatient and, like me, just want to see the scene, you can download it here:http://www.dreamscapearts.com/Public/mapping.blend

Also the first image is the final render, so you can use it as reference for building your scene ;)

Building the scene


To start off with, we will need to build a scene in Blender keeping in mind a few details related to how MOSAIC and RenderMan work. To save a little time instead of outlining every step of this I'll just explain what's in the scene and show some scene shots. I'm assuming a basic knowledge of Blender if we're using external renderers :)

Here's what's in the scene, look at the pictures to the right for the layout:


  • 1024x1024 UV test grid image saved as a tif.

  • 1 mesh plane Scale 13.7x13.7, double sided, UV unwrap, with unique material.

  • 1 mesh Suzanne Scale 2.1x2.1x2.1, double sided, smooth, SDS mod with unique material.

  • 4 instances (alt d) Suzanne Scale 1x1x1, double sided, smooth SDS mod with unique material.

  • 1 standard spot light, energy 1.2, color RGB 1.0,0.9,0.8.

  • 1 standard camera with 35mm lens.


Now that we have the basic components and layout of the scene let's setup the RenderMan related settings. To start off with we need to assign the large Suzanne to a group, this is because later on we will assign it to caustic pass by itself.

Preparing shaders via materials


Next let's quickly outline the material settings:

For the plane use standard material :
  • Col RGB=1,1,1,

  • Amb=1 (sets occlusion),

  • Spec=0,

  • create image texture using tif image, disable map to Col, enable map to Disp, and set its Disp slider to 0.477 (this tells MOSAIC to use texture for micropoly displacements).

For big central Suzanne use standard material :
  • Col RGB=0.098,0.665,0.544,

  • Ref=0.709,

  • Spec=2,

  • Hard=309,

  • Amb=0.607,

  • RayMir=1,

  • Mir Fresnel=1.2,

  • IOR=1.3,

  • Transp Fresnel=2.0.

For the instanced Suzannes use standard material :
  • Col RGB=0.617,0.617,0.617,

  • Spec=0.184,

  • Hard=215,

  • Amb=1,

  • enable "Subsurface Scattering";
  • Scale=1,
  • IOR=1.3,
  • Error=0.05,
  • Col RGB=1,0.791,0,
  • Front=0.8,
  • Back=1.


One thing to note about the big Suzanne's material is you'll notice that we're setting the ray mirror and transp settings even though we're not enabling Ray Mirror and Transp. This is because if MOSAIC sees an environment map enabled on an object it will use its material's ray mirror and transp settings on the map as if it were raytraced. This allows more advanced control such as fresnel over the environment map. If an environment map is enabled you will need to first disable it before being able to use raytracing even if you enable the "Ray Mirror" and "Ray Transp" toggles (maps take precedence since they involve render passes to MOSAIC).

Just for a nice effect let's also enable some fog. Go to Blender's world material settings and set the HorRGB color to 0.289,0.542,0.817. Also enable "Mist" and set "Dist" to 30. The other default settings should work but you may want to play with them to get other effects :)

Finally we need to setup the camera for DOF by switching on the camera's Limits and adjusting the Dof Dist (yellow cross) so that it's near the front of the big Suzanne. This will tell MOSAIC where the focal point for the DOF will be.

Setting up MOSAIC


Now that we have the camera, lights, objects and materials setup now it's time to setup MOSAIC. Before we begin be sure to go to the "MOSAIC Settings" tab and make sure you have "Aqsis" selected in the preset menu.

In the previous posts I briefly mention the mapping utilities and several buttons related to this, let's describe this in a little more detail.

The mapping utilities collectively are just a series of buttons throughout MOSAIC interface that allow you to create and edit map related render passes. You can find these button connected to the thing they make a map for, such as occlusion maps with scenes, environment maps with objects, shadow and caustic maps with lights. Once clicked , you will be presented with a dialog that allows you to setup how you want the map to be generated and how you want its contents updated. When complete MOSAIC will generate a render pass entry in the "Project Setup" tab and a scene to use as the pass using the name of the object and a special extension as its name (such as lamp.sm, see post 5 for details). Once the pass is created the button for the utility will be pressed in (letting you know at a glance if the pass already exists), if you click on the utility button again the scene and all its render pass entries will be removed. You can click the "edit" button next to the utility buttons to edit an existing pass without destroying its contents. The mapping dialogs have a set of controls that are standard for all dialogs and some that are specific to the map type.

Here are some of the standard ones:

  • SizeX/Y - These are standard controls for all utilities and adjust the width and height of the map.

  • Use Shaders - This is standard for all utilities and if enabled the shaders for the scene are used in the pass. This should be turned on if the map needs to see displacement mapping or surface shader related transparency (for deep shadows, etc). This is best left off for faster render times unless needed.

  • Use Preview - This is standard for all utilities and if enabled the pass will use the framebuffer display (will popup a render window). This should only be enabled if you wish to see the passes render output.

  • Degrees/Scale - This is standard for all utilities and has different meaning depending on the object type. If this is an environment or point shadow pass then this controls the seams for the cube mapping, if this is a sun lamp then this is orthographic scale (usually good to start a 9 or so), if this is a spot light then it does nothing (lens determined from spot size). In the case of occlusion mapping this does nothing because the occlusion rig uses spot lights.

  • Shading Rate - This is standard for all utilities and sets the shading rate for the pass. This is by default set very high for lower quality but faster rendering (which is usually OK for support passes), set this lower for higher detail and higher for faster render times.

  • Group - This is standard for all utilities and combined with the other filter settings control how the generated pass is built from the beauty pass. MOSAIC creates the pass from the current scene which becomes the passes beauty scene, the filter settings at the end of all utility dialogs tell MOSAIC what to use from the beauty scene. Depending on the pass type, some of these controls are always forced to certain values and some are available to the user. This one (group filter), is the most commonly used and just tells MOSAIC to build this pass only from objects contained in the specified group.


Now that we've covered a little about how mapping utilities work let's use them to setup the passes for this scene.

Set up an occlusion map

Let's start by going to the "Scenes Setup" tab and pressing the "Enable Occlusion Mapping" button. The default setting for this should be fine.

Just in case you were wondering, here are what some of the controls do:

  • Hemisphere - This is exclusive to occlusion mapping and controls whether the occlusion rig is a hemisphere or a full sphere. MOSAIC does occlusion mapping by creating a mesh in the pass and dupliverting a spot light to it, thereby making a dome light rig.

  • Rig Segment / Rings - This is exclusive to occlusion mapping and controls the number of segment and rings used in the occlusion rig. The higher these numbers the more lights are used in the rig.

This will produce an occlusion map that Aqsis will use to calculate occlusion.

The occlusion color is set by the world's HorRGB color and its intensity is controlled by each material's Amb slider, just like Blender.









































Set up an environment map

Next click on the big Suzanne and let's give her an environment map!

Once you've clicked on the big Suzanne go to the "Geometry Setup" tab and click the
"Enable Environment Mapping" button.

Unlike last time instead of using all defaults enable the "Use EnvDOF" toggle and set
"fstop" to 600.

This will produce a glossy like reflection by using DOF to make objects further away
blurry (in this particular scene it's not very visible so could be skipped).









































Set up a shadow map

Next click on the light and go to the "Lights Setup" tab and press the "Enable Shadow
Mapping" button. The default settings should be fine for this, but note if we weren't
wanting displacements in shadows we could cut render times by disabling "Use Shaders".

Set up a caustic map

We also want to click "Enable Caustic Mapping" for this light but instead of using all the defaults set "Group" to "Group" (or whatever group you assigned the big Suzanne to
earlier).

We need to do this because by assigning a group to the filter, this pass will only use
objects in that group, in this case that's just the big Suzanne.

Since we only want caustics for that one glass object then this works well, if you were to
add more glass objects with caustics you would just assign them to the same groups.

Set up camera DOF

Finally the last thing we need to setup is the camera.

Click on the camera and go to the
"Cameras Setup" tab.

Enable the "Use DOF" toggle and
set the "fstop" to 240.

This tells the renderer to use DOF
and MOSAIC will set the focal point
to the camera's Dof Dist setting.

At this point we can now render a
basic scene but you'll probably
notice that the environment map
renders get "eyesplits" errors and
overall the rendering is slow.


Also the scene lacks the interesting procedural displacements.

Adding, building and using RenderMan shader sources


Let's go ahead and play with some RenderMan procedural shaders :) If you've installed a full version of MOSAIC you will have a folder in the installation called "shaders", let's use a couple of the shaders in there. In Blender setup a window to the "Text Editor", click "File" and browse to MOSAIC's "shader/displacements" folder and load two shader sources: "dented.sl" and "bubbly.sl". When shader sources are loaded into Blender's text editor MOSAIC can use them automatically, but in order to use them in the project we need shader fragments. To do this go to the "MOSAIC Utilities" tab and click "Generate Shader Fragment". Once clicked, select the "dented.sl" and "bubbly.sl" one at a time to automatically generate shader fragments for those shaders. Once shader fragments have been generated then you can select them in the "Shader Parameters" menu to manually edit them (and of course you can now use them in the "Materials Setup" tab).

Now that we have shader fragments let's edit them so they look like my example. Select "ds_bubbly" in the "Shader Parameters" menu and edit the following (including the square brackets):

  • Kd = [ -0.15 ]

  • bubsize = [ 0.5 ]

For the "ds_dented" the default values will be fine. Now that we have tweaked our shader values let's apply them. Select the big Suzanne and go to the "Materials Setup" tab (make sure this really is the material for the big Suzanne). Change the "Displacement Shader" entry to "ds_dented", this will apply the dented shader to this material which is applied to the big Suzanne. Next select one of the instanced smaller Suzannes, go to the material setup tab and change the "Displacement Shader" entry to "ds_bubbly". This will apply the bubbly shader to this material which is applied to all the instanced Suzannes.

That's it for using shader sources, very easy :)

Tweaking RenderMan settings


At this point everything should begin looking like the example render I've provided, but you're probably getting errors on the environment passes and things are a little slower than they should be, so let's look at optimizing this scene for RenderMan :)

Eyesplits happen when geometry passes through the eye plane of the camera (it helps to think of this as the near clip visually), when this happens the renderer has to continue to dice and split the geometry into finer pieces to create a clean edge. How many times this happens is controlled by the "eyesplits" control in the "Scenes Setup" tab, but you want to be careful because eyesplits are very slow and can usually be avoided. One of the first things to look for when getting eyesplits is whether the camera is too close to any geometry, when rendering environment maps the camera is placed at the center of where the object is (which is usually very close to other objects). To correct this one of the simplest things to do is decrease the DisplaceBound setting. The DisplaceBound setting basically extends the bounding box of an object to make extra room for displacement shaders, this is necessary because RenderMan renderers are really sensitive to the bounding box since it's used to determine how far to calculate the shaders. The bounds have to be manually adjusted because the renderer has no way of knowing how far the displacements are passing outside the bounds box. By default MOSAIC uses 0.100 for all objects which is actually very large (I did this so all displacements would work for beginners).

So, I said all that to say this, to remove the eyesplits error for the environment map and increase overall render performance change the "DisplaceBound" settings in the "Geometry Setup" tab for each object to these:

  • plane = 0.010

  • big Suzanne = 0.010

  • smaller Suzannes = 0.030

Another small tweak that can help performance depending on your machine and memory is to increase the "bucketsize" in the "Scene Setup" tab to 32. This determines how large each render bucket is and will usually use more memory the larger it is but render each bucket a little faster (up to a point).

Tweaking shaders via MOSAIC's GUI


Finally one of the last areas I want to discuss for tweaking the scene is manual shader parameters.

The built-in shaders that come with MOSAIC have several parameters that have no where to hook into Blender's interface.

One thing to keep in mind when tweaking these are that they are global in scope, this is because the same shader fragments are usually used by everything in the project (this is possible because tokens allow each object to pass different settings through the same fragment).

One way around this would be to copy the built-in fragment and apply it to the individual objects you wanted.

Here's some parameters on "ls_MOSAIClight" I've tweaked to improve the caustic effect by coloring, smoothing and adding a little procedural noise:

  • CausticAlpha = [ 0.7 ]

  • CausticColor = [ 0.0 1.0 0.6 ]

  • CausticSamples = [ 256 ]

  • CausticBlur = [ 0.12 ]

  • noisefreq = [ 1.5 ] (this turns on noise)

















Well that's it, thanks to everybody who's encouraged me to continue writing these blogs (it's been a lot of work).

Also a big thanks for everyone who's played a part in making MOSAIC better, it's absolutely amazed me how people's ideas, encouragements and bug reports have made MOSAIC far better then I ever planned :D

Thanks for reading, WHiTeRaBBiT

Saturday, July 12, 2008

MOSAIC feature ramblings - part 5

Part 5 - The Project Setup tab and render passes:


The "Project Setup" tab presents a series of controls for setting aspects of the current project. The term "project" is unique to MOSAIC since Blender has no project settings or internal datablocks (the lowest structures in Blender are scenes).

Since scenes are render passes to MOSAIC a project tab is necessary to have a global place for scenes to be managed as passes. This is also a convenient place to put settings global to all exported RIBs.

Before I begin outlining the controls for this tab I need to talk a little about render passes and RIBsets.

Render Passes:
We've learned from earlier posts that render passes are Blender scenes to MOSAIC. We've also hinted that these scenes can be managed by MOSAIC, so let's expound on that.

There are essentially 3 types of render passes to MOSAIC:

  • Generated map autopasses recognized by their names and extensions.

  • Generated user autopasses recognized by their extensions.

  • Manually linked scenes as passes (no special naming).

Generated map passes are automatically made by MOSAIC and are for things like shadow maps, occlusion maps, etc. They are created and edited by various controls in MOSAIC's interface and are named using the name of the object they are made for with an added special extension. So for example if you use the "Enable Shadow Mapping" dialog in the "Lights Setup" tab for a lamp called "mylamp", MOSAIC would generate a scene called "mylamp.sm" and add its entry to the render pass list.

MOSAIC recognizes five scene extensions for map autopasses:

  • ".sm" - shadow map scene

  • ".cm" - caustic map scene

  • ".om" - occlusion map scene

  • ".em" - environment map scene

  • ".wm" - world environment map scene

Generated user autopasses are created by a tool in the "MOSAIC Utilities" tab and allow the user to create a pass that's maintained by MOSAIC, but can be crafted for custom use (such as building an occlusion cache pass, etc). These passes are identified by MOSAIC because they have the ".ap" extension.

Manual passes are nothing but normal scenes linked to the render pass list and contain no filtering or automation. They are very flexible because MOSAIC does not mess with them (so anything is possible), but do not always update properly when the beauty scene is updated (such as adding objects to the beauty scene).

I've mentioned several times that autopasses are "maintained" by MOSAIC. By "maintained" I mean that the contents of these scenes are automatically updated according to filter settings before they are exported. This "filter" concept is the corner stone of autopasses. How this works is every scene can have a series of settings applied to them that tell MOSAIC how to filter the scene, these filters contain things like which scene this pass is to be updated from, which object will be the active camera, only link objects in certain groups, block all lights, block all objects, use a particular RIBset, etc. Before MOSAIC exports a scene it will look to see if it's an autopass (by its extension) and if so then filter its contents according to its filter settings before it's exported (unless you disable the "Export Render Passes" toggle in the actions tab). Both map and user autopasses use the same filter mechanism but map autopasses have several filter settings automatically filled in.

Even though this all sounds very complicated in practice all you really need to do for most projects is hit the button for the type of map you want (depending on where you are in MOSAIC) and it'll all be done for you ;)


RIBsets:
RIBsets are a simple mechanism to have multiple "sets" of RenderMan settings per MOSAIC tab (ergo "RIB" "set"). Scene, Camera, Geometry, Light, and Material tabs can all use RIBsets. RIBset controls are located at the top of each tab and have buttons for creating, deleting and selecting RIBsets. Any changes to any controls in the tab are applied to the current RIBset, all controls are updated by the selection of other RIBsets. All RIBsets have a "DEFAULT" selection that cannot be deleted, if a default RIBset is deleted all controls in it are reset to their default states. RIBsets have several purposes:

  • To allow the user to have multiple setups (such as multiple shader selections on one Blender material).

  • To allow multiple scenes with shared objects to use different settings (such as having shadow map passes with no surface shaders on shared materials).

  • To have potentially hundreds of settings in a single scene.

Occlusion


The last point is very important for occlusion mapping. Occlusion mapping involves having hundreds of spot lights in a hemisphere pointed at the center of the scene, each spot light needs to have its own render pass. Since we don't want hundreds of render passes entries we need a better way to do this. The best way to handle the setup for that many coordinated lights is by parenting a mesh to a light and using Blender's "DupliVert" feature thereby creating a light at every vertex of the mesh.

MOSAIC has a feature so that if a light is made an active camera and if that light is part of a dupli system then you can set the "Dupli Index" number in the "Scene Setup" tab to set which dupli light perspective to use for the camera. By itself this isn't very helpful but combined with RIBsets you can create hundreds of RIBsets for the "Scene Setup" tab for every index into the dupli system. Next if you set the render pass to use "RIBSETPASSES" then MOSAIC will export every RIBset (except DEFAULT) in the scene as a separate pass. Using this mechanism it's possible to create hundreds of passes in a single compact scene with just one render pass entry.

Again even though this sounds complicated all you have to do in reality is click "Enable Occlusion Mapping" in the "Scene Setup" tab and MOSAIC will build all of this for you ;)


Now let's outline the controls in this tab.

Project Folder:
This is the name of the folder to export the project into (this folder if created in the "Export Directory" set in "MOSAIC Settings"). Remember to change this for each project if you want multiple projects running (such as rendering one while you edit another).

Search Paths:
All options in this category allow you to control which paths are used in the RIBs, see your renderer's documentation for a more detailed description of searchpaths.

Note : If you blank a path it will reset to its default, if you type in "NONE" then it will not be exported.

Texture Export Options:
This utility allows you to set how a each texture is handled by MOSAIC. Their options are:

  • Completely ignore - Do not export or optimize this texture.

  • Export only - Simply export this texture, but do not optimize it.

  • Export and Optimize - Both export and optimize it for the renderer.

  • Export into Environment Map - Export map but optimize it as a lat/long env map.

Create Render Pass:
This button will generate a blank render pass. This control and everything below it are were render passes are managed in MOSAIC. When a render pass is added you will get a row of controls for managing that pass. Passes are exported and rendered from top down with the beauty pass normally being the last in the list. Render passes can be added manually or automatically created and ordered by autopass utilities throughout MOSAIC. When passes are automatically created they are stacked in this order:

  • occlusion map passes

  • shadow map passes

  • caustic map passes

  • environment map passes

  • world map passes

  • user autopasses

  • beauty passes

They are stacked in this order so that shadows are calculated before environments which are before final passes. Also note that MOSAIC can support multiple beauty passes. When a pass is created you will see a row of these controls for each pass:

  • "Use" - This lets you enable or disable the export of this pass.

  • "Select Scene" - This lets you select which Blender scene is used for this pass.

  • "Select RIBset" - This lets you select which RIBset to set for this scene for export. Use this to select a custom created scene setups or use RIBSETPASSESS to render every RIBset in scene as a separate pass (DEFAULT RIBset is ignored).

  • "Sta" - Set this to the starting animation frame for this pass (if 0 then uses scenes "Sta" control in Blender).

  • "End" - Set this to the ending animation frame for this pass (if 0 then uses scenes "End" control in Blender).

  • "Up/Dn" - Move this pass up or down the pass list to change its export and render order.

  • "Del" - Delete this pass entry (does not delete the scene however).


That's it for the project tab, next blog will be focused on the "Scene Setup" tab and will probably be broken into two blog posts (since it's such a large topic).

Thanks for reading, WHiTeRaBBiT