From Wakapon
Jump to: navigation, search
Line 20: Line 20:
 
* '''CreatePrimitive()''', that creates a primitive of the type supported by the technique
 
* '''CreatePrimitive()''', that creates a primitive of the type supported by the technique
 
* '''GetPrimitiveInfos()''', that returns the informations about a primitive supported by the technique (basically, its name, vertices/indices count and the content of the vertex/index buffers for serialization)
 
* '''GetPrimitiveInfos()''', that returns the informations about a primitive supported by the technique (basically, its name, vertices/indices count and the content of the vertex/index buffers for serialization)
 +
 +
 +
== Examples ==
 +
 +
So you see this basic organization is actually quite powerful, here are some examples of renderings I have already achieved in a few weeks.
 +
 +
I have written some "advanced" render techniques already like the Cascaded Shadow Map technique that computes shadow maps for your scene and provides shadow map support for the shaders :
 +
 +
[[File:ShadowMaps0.png]]
 +
 +
[[File:ShadowMaps1.png]]
 +
 +
 +
 +
Another technique is able to render sub-surface scattering for realistic skin rendering :
 +
 +
[[File:SubSurfaceScattering.png]]

Revision as of 14:13, 12 October 2010

Cirrus, as well as being high altitude clouds is also my high-level Nuaj wrapper also available at the same SVN repository as Nuaj here.

It's loaded with cool stuff like a FBX scene importer that allows you to load any FBX scene from your favorite 3D package like 3DS Max and Maya into a Cirrus scene that can later be saved as a unit using the (quite lousy) Cirrus proprietary format.

Cirrus is not a 3D engine filled with humongous amounts of code and 3rd party libraries : as for Nuaj its sole purpose is to ease the development of 3D projects so you can quickly come up with a 3D application that fills your needs (and some polygons at the same time, mirf hirf hirf S1.gif).


The architecture in Cirrus is quite simple and is organized like this :

Cirrus Renderer.png


Structures

There's nothing much to say about the Renderer and the Pipelines, a Renderer is (usually) a singleton (although you can create as many as you like) that contains a collection of pipelines which, in turn, contain a collection of RenderTechniques. The RenderTechniques on the other hand are quite interesting as they are the main render units that actually draw the polygons.

The base RenderTechnique class contains 3 abstract methods that need to be implemented :

  • Render(), that performs the rendering of the primitives registered to the technique
  • CreatePrimitive(), that creates a primitive of the type supported by the technique
  • GetPrimitiveInfos(), that returns the informations about a primitive supported by the technique (basically, its name, vertices/indices count and the content of the vertex/index buffers for serialization)


Examples

So you see this basic organization is actually quite powerful, here are some examples of renderings I have already achieved in a few weeks.

I have written some "advanced" render techniques already like the Cascaded Shadow Map technique that computes shadow maps for your scene and provides shadow map support for the shaders :

ShadowMaps0.png

ShadowMaps1.png


Another technique is able to render sub-surface scattering for realistic skin rendering :

SubSurfaceScattering.png