Parallax mapping, more ambient occlusion n’ stuffs

Parallax mapping is finished.
The whole production pipeline is now ready for that technique. The 3D Studio MAX plugin now computes the correct scale/bias and can also display the result in a custom view.

Screenshots


As you can see, the specular highlight is not ‘real’ for that kind of material (supposed to be rocks…)


Wireframe mode!

I added a new parameter in the Ambient Occlusion Map creation
which is the length of the rays used to perform the occlusion test. This way the occlusion map builder can now produce maps for indoor meshes.

Screenshots

 
Ambient occlusion off


Ambient occlusion on


Ambient occluion off


Ambient occlusion on


Ambient occlusion map


3DS Max UVW unwrap modifier


The original mesh of the room wasn’t mapped, so I used the flatten mapping of the UVW Unwrap modifier of 3DS MAX to generate mapping coordinates, then use the Bum-o-matic plugin to generate the Ambient Occlusion Map.

The result speaks itself.

Light volume rendering.
Before, for each light was lighting every pixel on the viewport, which was quite slow/wasteful. Now for point and spot lights, their bounding volume is rendered to perform the lighting, as you can guess, this is much faster for small area lights.

Screenshots


Without


With


Without


With

I Added an IML Console right in the viewport.
Having more and more rendering parameters I’d like to tweak in real-time, I’ve decided to take advantage of the whole IML architecture to interact with the renderer (and the 3D Scene) in run-time.

Screenshots

More about Ambient Occlusion builder:

For each pixel on the map we’re created, its position into the mesh is located, and a series of rays are thrown to perform occlusion tests (intersection) with other part of the mesh itself. The problem for indoor environments is there’s always a intersection found (because the mesh is closed), making it impossible to produce an accurate map. By letting the graphist set a length for the rays that are cast, the occlusion can be perform on a limited area, then producing the expected result.

More about IML:

IML stands for Irion Micro Language, it’s a run-time wrapper to the C++ components, for each Irion component one is developing, he can create an IML Class that will be used to expose the component to the IML Framework. Using IML via an IML Console, you can create/edit/delete new components or existing ones. For instance, I developed an IML Class to wrap the SM3Viewport C++ class, I exposed a set of properties (rendering modes, rendering attributes, stats display, etc.) that can be later modified via an IML Console or Script.