mercredi 22 septembre 2010

Vénus : les fonctionnalités actuelles !

Je voulais vous présenter un peu aujourd'hui la liste des fonctionnalités présente dans Vénus. Cela fait plus d'un an que le projet est commencé et pour le moment les fonctionnalités semblent plutôt maigre. Nous avons préféré nous concentrer sur les performances et l'optimisation du core principale du moteur afin que celui ci soit optimal et que l'ont puisse ensuite se concentrer sur le reste et l'implémentation des fonctions.

Le Core :

Le moteur principal est un hybrid renderer, combinant un raytracer et un Reyes ( base de la technologie Renderman). Nous avons fait ce choix car nous sommes partis du raytracer et nous nous sommes vites rendus comptes que aussi puissant puisse être le raytracer, rendre des très grosses scènes avec du micro-displacement est bien moins performant qu'en utilisant la techno Reyes qui offre un algorythm très puissant pour ce genre de scénario. Ya rien à dire les raytracer n'offriront jamais la qualité et la finesse de rendu d'un Reyes en micro displacement. Notre second argument était que nous voulions baser notre moteur sur l'utilisation des pointcloud, pour baker et pour calculer en pointbased et biensur là encore, le Reyes offre des avantages considérables. Après donc plusieurs mois de travail, de recherche et surtout d'optimisations en tout genre nous en sommes arrivé au Core actuel de la version de Vénus. Vénus est un reyes, c'est a dire qu'il va subdiviser et optimiser la scène de rendu, par contre notre implémentation est différente et nos optimisations aussi du a l'utilisation intensive des pointclouds. Nous avons aussi développé une architecture qui est hautement parallélisée et fonctionne à la foi sur Cpu et Gpu en openCL. Seulement nous couplons certains calculs exécutés via Cpu et certains via Gpu en fonction des performances de ceux-ci.


Vénus core features :

 Reyes :

- Reyes architecture très optimisée. (Micro polygon et micro displacement)
- Support polygon, nurbs, subdvision (catmull-clark) surface.
- Stochastic sampling avec support des filtres Renderman (box, gaussian, mitchell, catmullrom, sinc)
- Reglage du pixel sample et pixel filter.
- Reglage du ShadingRate global. (gestion adaptative du dicing par algorithme)
- Support des pointclouds (écriture, lecture, traité en octree, optimisé pour consommer peu de ram).
- Depth map Shadow.
- Texture support (open exr, tif, jpg)
- Output support (single output en open exr, tif ou jpg )
- UV support.
- Point hierarchical (PointBased) Rendering from pointclouds. (diffuse, specular, arealight, environment, occlusion)
- Spherical Harmonic Rendering support.

 Raytracer :

- Raytracer de type path tracer avec une gestion de la distribution des samples optimisé via plusieurs algorithmes.
- Sampling global Réglable et indépendant du ShadingRate optimisé suivant le type de calcul effectué.
- BVH structure ultra optimisée avec une gestion du tracing inédite avec un nouvel algorithme.
- Gestion des données ultra optimisée, des caches, structures de données, organisation, Ram, etc...
- Physical Based RGB transport.
- Tone Mapping.
- BSDF Shader support.
- Direct lighting support.
- Object lighting and Arealight support.
- Real Raytraced shadow.
- Instance object with minimal Ram.
- HDRI texture support via EXR format.
- Highly optimized memory footprint consumption.
- Maya plugin, Standalone Application for rendering and fine tuning.
- .off and .vib scene description format support.
- OBJ, FBX support.
- 64 bits support only, Linux 64bits, Windows 7 64bits.
- support all Graphic cards with openCL, and all CPU.

Voila pour le moment une liste globale des fonctions proposées dans Vénus, alors évidemment on ne peut pas encore faire grand chose avec, il supporte à peine de pouvoir rendre de la géométrie depuis maya. Par contre il est ultra optimisé du coup les temps de rendus sont très bas et sa consommation en ram est ridicul si on le compare aux autres moteurs de rendu.
Vénus propose 3 types de gestion du rendu possible et cela suivant les besoins. il est évident que Vénus utilisant le meilleur de votre carte graphique et de vos cpu en même temps il est très performant et permet de rendre des scènes de milliards de polygones sans broncher et très vite. Son système de pointcloud lui permet de baker très vite vos scènes et de les re-rendre en quelques secondes. La gestion mémoire des pointclouds à été optimisée pour que cela puisse être possible même avec des gros fichiers. Le pointbased offre les effets du raytrace sans flicking ou besoin de sampling et les resultats sont a 95% identiques à ceux du raytrace dans notre implémentation pour un gain de 5 à 15 fois en fonction de la scène. Nous avons implémenté un module capable de calculer les informations de l'eclairage de la scène par sphérical harmonics. Cette technique très prométeuse donne des résultats très convainquant et performant et nous pensons que c'est ce sur quoi nous allons nous pencher plus vers l'avenir.
Comme je vous le disais, nous nous sommes concentré dans un premier temps sur les performances. Souvent on procède à l'inverse, on conçoit d'abord le gros du moteur afin de supporter toutes les fonctions de bases d'un moteur de rendu et petit a petit on optimise son code. Nous avons choisit le contrepied de cela car même si cela semble une perte de temps au début, nous savons désormais comment implémenter chaque nouvelle fonction tout en respectant les même procédés d'optimisation utilisées dans le code et ainsi développer plus vite les nouveautés. C'est aussi valable pour le fait que nous voudrions intégrer à Vénus les capacités de la Rispec pour en faire un rendu de type Renderman, et cela n'étant pas simple, il est mieux de bien connaitre son moteur avant de se lancer dans un tel chantier.
Pour le moment Vénus reste donc très expérimental et les rendus que j'en tire sont encore assez pauvre du fait du peu de fonctions supportées pour le moment mais nous sommes en train de travailler dessus et je vous parlerais dès qu'elle sera prête de la prochaine version qui sera un peu plus étoffée en fonctionnalités.

A plus.

Aucun commentaire:

Enregistrer un commentaire