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 13: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 ).
The architecture in Cirrus is quite simple and is organized like this :
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 :
Another technique is able to render sub-surface scattering for realistic skin rendering :