   Innovative Things in GI?
  As mentioned earlier, I am looking to implement a GI renderer in my next semester. I have already done a full fetched Whitted style raytracer, as well as some very unoptimized path tracers, experiments with photon mapping and distributed rendering.This time I would like to do a complete GI renderer, and do it right. I plan on having support for models, a kd-tree system, quite possibly a surface shader system. I'm actually looking for suggestions for features that should make it in  a GI renderer. I'm thinking of subsurface scattering. There is probably a way to fit this in a shader... I also wonder if any of you know an easy way to combine multiple shaders over a surface (run them all in parallel and give a certain intensity to each?). I'm thinking of having a material format that specifies a set of texture maps to load and a set of shaders to run with parameters and given intensities for each. I could have a simple phong shader, for example, with the usual phong parameters.I might actually use XML for my material, scene and shader format (well, maybe not for the shader format, I'm actually thinking of something ASM or C-like). Anyhow, my goal is for this to be original, and not just some clone of RenderMan. So I'm open to suggestions.By the way, if anyone knows a place to get some free 3D scenes I could render, that would be welcome.   
  I don't have many suggestions to give you, but since nobody posted yet, you might want to take a look to maxwell renderer wich is, in my knowledge, the only renderer based on real light simulation (i.e. I don't think it uses approximations like photon mapping).   ;  Maxwell is an unbiased path tracer. From what I've heard it uses a combination of metropolis light transport and bidirectional path tracing (haven't given much though to how that would work exactly). What makes maxwell interesting is that it uses a spectral light representation.If you're looking to "do it right", and don't want to do a path tracer, i'd devote most of your time to the shader system. imho, writing a clean and extensible API for shading is the best method to go. Shader parameters should be polymorphic, so you write a bunch of shading nodes that can be hooked up in any way you want. With this method you idea of multiple shaders running in parallel reduces to writing a shading node that accepts mulitple inputs and performs a weighted sum on each.The method taken by most production raytracers nowadays is photon mapping plus final gathering. If you write your shader system right, how exactly the scene's radiance is integrated is up to the user: you give them the tools and they can write a photon mapper, path tracer, or something else entirely.   