Bonjour à tous
je bosse actuellement sur la conception de mon mini-moteur opengl pour le boulot, et étant plutôt habitué au rendu offline, j'ai peur d'avoir de mauvais réflexes:
avant tout il faut savoir que:
-la scene que je dois rendre dans le moteur repose énormément sur la notion de transparence (plusieurs couches superposées, chacune comportant une texture d'opacité) et sur les effets optiques que ça implique (reflexion, réfraction, caustiques, flou de transparence et autres joyeusetés).
-je n'ai pas besoin d'être d'une précision physique démente (de vulgaires approximations et/ou fake ne posent pas de problème majeur), mais je ne peux pas me passer de ces effets
pour prendre un exemple simple, imaginons que ma scene contienne une lentille qui ai un effet "loupe" avec des rayures dessus. Cette lentille devra donc disposer d'une map d'opacité (pour les rayures), d'un environment mapping (pour les reflets), d'un reflet spéculaire (parce que c'est trop badass ), et de cette transparence déformée (l'effet loupe).
le graphiste qui est en moi se dit donc: on va faire un rendu multipasses.
-rendre la totalité de la scene sauf la lentille dans un FBO
-rendre la lentille seule dans un autre FBO, en prenant soin de prendre en compte l'alpha pour ne pas perdre la transparence
-faire un compositing de ces deux FBO, en mettant en arrière-plan la scene, en premier plan la lentille, et en appliquant la deformation de la lentille sur la zone qui va bien
ça implique donc que mon moteur doit pouvoir être configuré pour rendre à chaque frame plusieurs FBO distincts qui ne contiennent pas forcément les mêmes objets.
typiquement, la config de la scene donnerait un truc dans ce goût là:
tout ça c'est bien beau, mais je me demande si ça a du sens de faire comme ça. Parce que dans ce que j'ai pu voir sur le net pour coder différents effets opengl, j'ai jamais vu de rendus multipasses comme ça, avec des jeux d'objets différents. Donc ça m'inquiète un peu, j'ai peur de faire fausse route.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <meshes> table.obj chaises.obj lentille.obj </meshes> <FBO> table.obj chaises.obj </FBO> <FBO> lentille.obj </FBO> <RENDU> compositing des FBO </RENDU>
Est-ce que d'autres moteurs fonctionnent sur ce principe?
de même, mes reflexes de graphistes me poussent à créer des passes de rendu un peu plus exotiques encore, par exemple une passe de material ID (c'est ce qu'on peut voir sur cette image: http://area.autodesk.com/th.gen/?z/h...iwa6:720x0.jpg ça permet d'identifier à chaque pixel quel objet est affiché, ce qui peut être utile pour le compositing )
donc ça reviendrait à préciser, pour chaque passe, les objets qui seront affichés, mais aussi un shader spécifique à chaque objet
ça aussi, ça a du sens?
vous vous y prendriez comment vous?
Partager