Salut tlm,
Je bosse en se moment sur un simili effet de glow.
C'est pas encore finalisé, mais j'arrive à quelque chose de choérent et vu que je suis un impatient, je ne peux m'empêcher de poster ça ici
Voici sans plus attendre mes premiers résultats :
Donc pour préciser, je n'utilise pas le Blend Mode ADD que tout le monde connais.
Je suis parti sur cette technique au départ mais ça ne fonctionnait pas bien.
Donc j'utilise ici pour mon rendu le vertex Alpha et ça marche du tonnerre sous irrlicht .
A priori, je devrais m'en sortir sans shader .
Voilou à très bientôt .
Hors ligne
ca rend pas mal du tout, on attend une démo
Hors ligne
Bon le précédent screen n'étant pas totalement finalisé, j'ai enfin réussi à avoir un glow moins saturé, moins baveux et surtout optimisé (suffit de regarder le fps).
Il est moins violent, mais beaucoup plus jolie je trouve.
un screen parle plus :
Promis dès que j'ai résolu tous les bugs que j'ai en opengl je poste une démo .
Hésitez pas à le regarder directement sur une nouvelle page web car depuis le site, l'image parrait toute pas belle à cause de sa grande taille.
Hors ligne
C'est vraiment remarquable !! Je comprends mieux pourquoi tu tenais absolument à bénéficier de ce type de rendu ;-)
En un mot : bravo !
Hors ligne
Superbe !!
Ca fait longtemps que je cherche un moyen d'ajouter un effet glow à ma scène sans passer par les shaders (ma geForce 4200 veut même pas en entendre parler...).
Ca marche bien en OpenGL ?
Hors ligne
Salut Aranoth,
Le glow semble fonctionner nettement plus rapidement en Directx9 qu'en openGL mais sinon il fonctionne sur les deux.
J'utilise un Render To Texture et une camera Style FPS.
Je pense que la rapidité du glow est surtout dû à la rapidité de irrlicht à calculer le render to texture en opengl...
Pour te donner une idée de la chose sur la même scene de test :
DirectX9 = 350 FPS
OpenGL = 48 FPS
Voilou en attendant, je vais essayer de mettre tout ça dans quelque chose de facilement réutilisable.
Au fait, t'a trouvé le site par quel moyen (liens,amis,moteur de recherche)?
Hors ligne
Ah ouais en effet, 48 fps c'est hard pour un programme qui tourne "à vide"
Sinon j'ai trouvé le site via l'annonce sur le GCN
Hors ligne
Faut que je regarde une simple scene sans mon systeme de glow mais avec un render to texture en opengl voir si ça rame pareil sur mon pc mais à mon avis ça vient pas de mon code...
[EDIT]
J'arrivai pas à dormir, cette question me turlupiné...
Alors après essai, sur le code fourni dans le sdk 13.RenderToTexture voici les résultats :
DirectX9 = 790 fps
OpenGL = 70 fps
Il me parrait donc incontestable que l'opengl est énormément moins rapide concernant les render to texture.
[EDIT2]
Se qui fait ramer le render to texture c'est une trop grande taille de la texture en question.
il faut pas dépasser les 256*256 sinon le résultat au niveau fps est catastrophique.
256*256 pour un effet de glow ça marche encore à peu pret bien donc ça nous remmene à
DirectX9 = 350 fps
OpenGL = 145 fps
[EDIT3]
Je viens de le faire tester à plusieurs copains pour voir alors voici les résultats :
pour le premier pote :
DX9 = 235 FPS
OpenGL = 215 FPS
pour le deuxième pote :
DX9 = 600 FPS
OpenGL = 600 FPS
A priori ma Geforce 7600 GS aime pas l'openGL je suis dégouté ^^.
ça parrait desuite un peu plus utilisable .
@++
Hors ligne
Aller un pti dernier screenshot pour faire patienter la démo .
Hors ligne
mouais bizarre pour l'openGL, chez moi c'est beaucoup plus rapide avec (intel 845G)
sinon le screenshot rend bien, à voir sur un chip de merde
Hors ligne
Ah, ça me rassure ^^
Je trouve qu'un leger glow (pas trop non plus) embellis les scènes et cache quelques défauts.
J'attend la démo avec impatience
Hors ligne
Très joli effet, j'aimerais bien voir ça de plus près On dirait presque un HDR le dernier effet
Pour ce qui est de ton problème avec OpenGL, il faut prendre en compte la quantité de problèmes que présente le render to texture avec Irrlicht (sauf à savoir bien utiliser la dernière SVN d'Irrlicht il me semble). Après bien sûr tu peux avoir des problèmes avec telle carte graphique et telle config, ça on sait jamais... Ca peut dépendre de ta version des pilotes et de tout en réalité.
Hors ligne
Salut et bienvenu,
J'ai testé avec plusieurs drivers mais le problème semble similaire.
Sinon dans l'ensemble ça fonctionne pas trop mal.
Je bosse actuellement sur une mini démo, dès qu'elle est prête je vous la metrrai que vous puissiez l'essayer et me donner votre opinion.
A très bientôt.
Hors ligne
Je vous laisse une micro démo,
Rien de très spectaculaire graphiquement, mais ça vous permettra de vous faire une idée.
http://www.tv3dfr.com/irrlicht/Demo.rar
Hors ligne
J'aime bien
Freeze total en openGL (obligé de reboot, huh?)
13fps en DirectX 9
sur celeron 2.4Ghz / 768DDR / chip intel 845G
vivement la 6600
Hors ligne
Pauvre pc forcément avec un chipset tu lui balance ça il a pas dû aimer
J'ai mis la possibilité de ne pas activer le Glow au départ, exprès pour que vous vous rendiez bien compte de la différence.
J'ai aussi réuploader la démo, car y'avait un bug de clipping en directx9 sur le moteur, j'ai dû corriger et le recompiler.
Hors ligne
Très joli rendu
Lorsque je regarde le Nain et l'arbre :
DirectX9 : 27fps
OpenGL : 20fps
avec athlon 2Ghz / 1Go DDR / geForce 4200
PS : le modèle de l'arbre est libre ? ça fait longtemps que j'en cherche un bien sans trouver...
Hors ligne
Pour l'arbre je me doutais qu'on allait me demander si il était libre...Biensûr il n'y a pas de problème .
Bon j'essai encore de trouver une autre méthode pour le rendu du Glow voir si y'a moyen de gagner en fps.Je vous tiendrai au courant ^^.
Hors ligne
Bon alors j'ai testé avec dx9wine sur mon Ubuntu :
-DirectX9 plante (normal, wine émule pas trop bien Irrlicht via DirectX)
-OpenGL tourne à 40 fps c'est vraiment splendide
J'attends impatiemment une release (du code source ? ) finale pour voir ce que ça fait.
Hors ligne
Oui promis pour le code source il sera très bientôt dispo. Par contre je l'ai fait en Cpp et j'apprends le C++ donc y risque d'y avoir des corrections à faire, mais je laisserai ça au pro .En espérant aussi avoir des retour avec amélioration du code ça serai sympa.
Bon j'y retourne que je m'éclate vraiment sur se moteur !
Hors ligne
Hello,
J'ai passé une bonne partie de la nuit à chercher comment afficher mon effet de glow sur tout type de camera mais y'a pas moyen de récupérer la rotation d'une Camera ordinaire ou d'une camera maya ....Donc il sera compatible que sur les camera FPS.
Si quelqu'un à la solution pour récup la rotation de camera je suis preneur ^^.
@++
Hors ligne
ATI radeon series 9200 et amd 2Ghz
regarder arbre + nain :
DX :
avec glow : 38
sans glow : 72
OGL :
avec glow : 37
sans glow : 65
regarder par terre :
DX :
avec glow : 47
sans glow : 130
OGL :
avec glow : 41
sans glow : 95
joli
Dernière modification par minirop (29-09-2006 15:50:10)
Hors ligne
Copland :
Hello,
J'ai passé une bonne partie de la nuit à chercher comment afficher mon effet de glow sur tout type de camera mais y'a pas moyen de récupérer la rotation d'une Camera ordinaire ou d'une camera maya ....Donc il sera compatible que sur les camera FPS.
Si quelqu'un à la solution pour récup la rotation de camera je suis preneur ^^.
@++
Je vois pas pourquoi ce serait différent avec des caméras FPS/Maya/ordinaires
Ce sont toutes des ICameraSceneNode
Qu'entends tu par rotation de la caméra ?
Camera->getRotation()
ou
Camera->getAbsoluteTransformation().getRotationDegrees() // rotation absolue
Camera->getRelativeTransformation().getRotationDegrees() // rotation relative
Hors ligne
Hehe bein essaye un GetRotation sur une Camera ordinaire ou une camera Maya tu verras de quoi je parle :p.
Ca renvoi tout le temps 0,0,0 .... car il ne déplace la caméra que par position et target ....
Si t'a une solution fonctionnelle, te prive pas pour me la donner hein .
Hors ligne
Bien le bonjour, essaye ça :
core::vector3df getTargetAngle( core::vector3df v, core::vector3df r) { //v -current node position //r -target node position //Note : c'est des formules assez lourdes en terme de calcul, donc il faudrait optimiser selon tes besoins core::vector3df angle; float x,y,z; x = r.X - v.X; y = r.Y - v.Y; z = r.Z - v.Z; //angle in X-Z plane angle.Y = atan2 (x, z); angle.Y *= (180 / 3.14); //converting from rad to degrees //just making sure angle is somewhere between 0-360 degrees if(angle.Y < 0) angle.Y += 360; if(angle.Y >= 360) angle.Y -= 360; //angle in Y-Z plane while Z and X axes are already rotated around Y float z1 = sqrt(x*x + z*z); angle.X = atan2 (z1, y); angle.X *= (180 / 3.14); //converting from rad to degrees angle.X -= 90; //just making sure angle is somewhere between 0-360 degrees if(angle.X < 0) angle.X += 360; if(angle.X >= 360) angle.X -= 360; //note : ces deux lignes devraient être remplacées par angle.X = angle.X % 360 à mon avis... C'est plus rapide et plus sûr... return angle; }
Et quelque part dans ton code :
vector3df rotation = getTargetAngle(camera->getPosition(), camera->getTarget() + camera->getPosition());
Ca devrait fonctionner, bien sûr c'est à optimiser mais c'est déjà pas trop mal comme ça.
Dernière modification par DeusXL (29-09-2006 19:35:57)
Hors ligne