Castor3D 0.15.0
Multiplatform 3D engine
|
Le rendu dans Castor3D est découpé en plusieurs passes.
Cette passe génère la texture d'environnement pour un noeud en ayant besoin.
Notez que plusieurs noeuds peuvent avoir besoin de textures d'environnement différentes, générant ainsi plusieurs passes d'environnement.
Elle est divisée en 3 passes distinctes:
Son résultat est stocké dans une cube map.
Cette passe génère la texture d'ombres pour une source lumineuse.
Le moteur supporte pour l'instant trois types de sources lumineuses, ayant leur passe d'ombres spécifique :
Cela dit, il est important de noter que les shadow maps omnidirectionnelle et projecteur sont stockées dans des texture arrays (respectivement Cube et 2D).
Les cascades de la shadow map directionnelle sont elles aussi stockées dans un texture 2D array.
Cela permet de limiter le nombre de bindings, notamment lors des passes utilisant le forward rendering.
Comme Castor3D permet à l'utilisateur de choisir le type d'ombres qu'il souhaite (Raw, PCF or VSM), Les résultats sont toujours stockés dans des textures au format R32G32_SFLOAT.
Cette passe de rendu est la plus complexe, et est divisée en de multiples passes:
Cette passe est la geometry pass, et génère les buffers dont les autres passes ont besoin.
Castor3D utilise actuellement 5 (+1) buffers :
Cette passe implémente l'algorithme Scalable Ambient Obscurance décrit ici : https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf
Elle est donc scindée en 3 sous-passes :
Cette passe est en fait un ensemble de sous-passes d'éclairage, une par source lumineuse.
Si la source lumineuse génère des ombres, sa shadow map sera utilisée, pour produire les ombres choisies par l'utilisateur.
Les sources omnidirectionnelles et projecteurs effectuent d'abord une passe de stencil, afin de déterminer leur zone d'application.
Cette passe implémente l'algorithme de Screen-Space Subsurface Scattering décrit ici : http://www.iryoku.com/sssss/
Elle est donc scindée en 4 sous-passes :
Cette passe combine les résultats des passes précédentes :
Cette passe est la plus simple, il s'agit juste de dessiner la skybox de la scène.
Elle est appliquée après la passe de rendu des objets opaques afin de profiter du depth test, avec le depth buffer rempli par la passe opaque.
Cette passe implémente le blended weighted rendering décrit ici : http://jcgt.org/published/0002/02/09/paper.pdf
Elle est donc scindée en deux passes :