Open source 3D rendering solution adhering to the RenderMan standard

Indirect lighting using Aqsis 1.8

I've been playing with Aqsis 1.8, using  point based color bleeding.  Just wanted to show what a big difference indirect lighting can do to a very simply scene composed of a few spheres and cubes and one ambient light.


Here is the scene rendered in one pass using a standard ambient light and a basic ambient surface shader.

There are 4 cubes and 4 spheres in that scene but it looks like there are only 3 spheres.


And now here is the same scene rendered in two passes using indirect lighting.

  The first pass bakes into a point cloud and ambient color is used for the _radiance.  The second pass uses the same basic ambient surface shader but with the addition of the indirectdiffuse() shade op to add to the ambient.   Note: I did not use the occlusion() shade op.

another indirect difuse example

Another example:

Just ambient (the bake pass)

with indirect diffuse and ambient (the beauty pass) with only one ambient light in the scene.

The blender scene:

I used a surface for the sky so that the sky and gound colors would effect the buildings to get the outdoor ambient lighting effect.

Added distant sun light with shadows

I added a distant sun light with shadows to the scene.

This needed 3 passes:

The first pass is for generating the shadow map for the distant sun.

The second pass bakes the ambient + diffuse + shadows into the point cloud.

The third pass is the beauty pass as described before.

c42f's picture

awesome :)

I think I said this on IRC when you posted these, but I don't mind saying it again: it's really great to see people using the new code to produce cool things :-)

I just added a feature which I think will help you out with the sky lighting: you can now get occlusion for free when calling indirectdiffuse() by using the optional "occlusion" argument.  For example:

color skyCol = /*...*/;
float occ = 0;
color indirect = indirectdiffuse(P, N, 0, "occlusion", occ, /*...*/);
indirect += skyCol*(1-occ);



This (the scene with the spheres) is EXACTLY something that I am trying to do. Do you think you'd be willing to walk me through creating a scene like this? I am totally new to Aqsis and rendering in general and I would greatly appreciate some help getting started.

Update from Oct 2011


Here is an update I forgot to post back in October 2011 when I had done a little more work on the Yazd scene.  I used a displacement on the sand and water dome along with changes in the lighting colour.  Also some minor tweaks to the shadow map along with an increase to the shadow map resolution.


  ehya guys, how you doing


ehya guys, how you doing ?

I'm testing a bit beta1.8 pbgi and found the cube rasterizer works good for diffuse scenes but it exhibits some problems when the source of light is more 'directional'.
edit: there're no direct light sources but an hdr image to light the scene, ie. everything is indirect, that's where the cuberaster seems having major problems gathering light, not sure if it's a 'hierarchical' problem, ie. passing from one level to another of the octree while rasterizing). 

I can almost get rid of the 'shadow' blotches by increasing the cube raster resolution to 64 or so (which of course increases by a huge degree rendertimes) but it will still remains problems in the 'raytraced' parts, like where the shoes touch the ground.

I just started to dig into the code and didn't reach the raster cube code yet but looking at the octree builder I see you attach a vector of points to the octree nodes, a general approach with octrees is that you order the node points so you can just register the first starting point and the ntotnodepoints and lookup directly into the pointcloud instead to attach points to the nodes, depending on how you deal then with the pointlist(ie. probably you may delete it alltogether after having attached points to nodes, to free up resources, but that doesn't seem to be the case in the actual code) this may or may be not an optimization for your code. I'll try to examine the cuberaster code asap, feel free to comment up in the while.

keep up the good work !


c42f's picture

PBGI should be considered "experimental" ;-)

Hi guestme,

I agree that there's some rather naive stuff in my octree code - it's nothing more than a quick hack which I expect should be replaced ;-) We figured we should make a new release even though it's still experimental, since our last release was *ages* ago. The eventual aim is to be able to load the octree from disk on demand but I haven't got to doing that yet.

Regarding the problems you're having with your specific scene - if the light source is too directional then you will see artifacts from the small resolution of the micro environment buffer. I spent a lot of time trying to remove these and I did make it a lot better, but as you can see they still occur. Any further ideas (or code improvements) will be happily considered!  Another source of artifacts is if the maxsolidangle parameter is too large, and there's some potential code improvements to do with spherical harmonics that we could try there.

Regarding the problems near the character's feet, I think we might be able to do something about those, but I'm not entirely sure what's causing them. One idea is that the micropolygons near the feet migth not be very square but are long and skinny (is the ground plane made out of triangles?). Do the artifacts get less noticable when you turn the shading rate down on the ground plane?



I have downloaded 1.8.1 and I

I have downloaded 1.8.1 and I have not been able to get the cornell box to render correctly. I have tried just feeding all_passes.rib directly to aqsis.exe but that does not work. When I do the same thing with beauty_pass_ao.rib I get a point cloud not found and socket error 10035.


@nfz: Could you post the cube sphere scene, shown above, as an example file? It would be nice to see indirect lighting work.



Up and at them

No, no

Up an Atom

Just bumping this, you have

Just bumping this, you have unwanted Ads being posted.

Up and at them

No, no

Up an Atom


Must say it needs creativity and love for colors so that can do it in a perfect manner.


soins oxygène