Pages: 1
Bonjour à tous,
C'est encore moi xD, j'ai un problème avec Cel-Shading que j'ai crée.
J'ai crée un shaders GLSL, pour les contour noir, j'utilise une deuxième mesh en wireFrame. Avec une mesh, tout va bien, sa fonctionne. Mon problème, c'est dès que je rajoute une autre mesh, avec elle aussi le mode wireFrame pour les contours noirs, sa ne fonctionne plus, enfin si, la première mesh oui.... mais pas la deuxième, je ne sais pas comment expliqué, une vidéo vous parlera surement mieux : http://www.youtube.com/watch?v=aqCAGhbyRQ0
Et mon code source :
//shaders Cel-Shading irr::video::CShaderPerso* shaderPerso = new irr::video::CShaderPerso(device); irr::s32 newMaterial = gpu->addHighLevelShaderMaterialFromFiles( "Shaders/vertex_CelShading.vert", "main", irr::video::EVST_VS_1_1, "Shaders/pixel_CelShading.frag", "main", irr::video::EPST_PS_1_1, shaderPerso, irr::video::EMT_SOLID); //1er mesh IAnimatedMesh* node = smgr->getMesh("models/happy.b3d"); IAnimatedMeshSceneNode* node1 = smgr->addAnimatedMeshSceneNode(node); node1->setMaterialFlag(EMF_LIGHTING, false); node1->setMaterialType((irr::video::E_MATERIAL_TYPE)newMaterial); IAnimatedMeshSceneNode* nodeContour1 = smgr->addAnimatedMeshSceneNode(node); nodeContour1->setMaterialFlag(EMF_LIGHTING, true); nodeContour1->setMaterialFlag(EMF_WIREFRAME,true); nodeContour1->setMaterialFlag(EMF_ZWRITE_ENABLE, false); //2ème mesh IAnimatedMesh* node2 = smgr->getMesh("models/happy.b3d"); IAnimatedMeshSceneNode* node3 = smgr->addAnimatedMeshSceneNode(node2); node3->setMaterialFlag(EMF_LIGHTING, false); node3->setMaterialType((irr::video::E_MATERIAL_TYPE)newMaterial); node3->setPosition(vector3df(-25,0,0)); IAnimatedMeshSceneNode* nodeContour2 = smgr->addAnimatedMeshSceneNode(node2); nodeContour2->setMaterialFlag(EMF_LIGHTING, true); nodeContour2->setMaterialFlag(EMF_WIREFRAME,true); nodeContour2->setMaterialFlag(EMF_ZWRITE_ENABLE, false); nodeContour2->setPosition(vector3df(-25,0,0)); shaderPerso->drop();
Voilà, j'espère que vous pourrez m'aider, car franchement, je ne vois pas d'ou vien le problème-_-
Merci d'avance
Cordialement
Dernière modification par narugohan (09-11-2010 11:38:14)
Hors ligne
si tu peux mettre à dispo ton code et tes shaders en download, je veux bien essayer de tester çà chez moi pour voir.
Hors ligne
Tu sais que t'est chiant ?
on comprend pas grand chose a ta vidéo, se pendant si j'est bien comprit le shader ne splique qu'a un seul obj ?
je ne voie pas pourquoi, mais en tout cas utiliser le mode wireframe pour faire un "cell-shading" se n'est certainement pas la bonne chose a faire ...
tu augment par deux le nombre de polygone a rendre, forcement sa influe énormement sur les performence !
sinon même si se n'est pas logique que tu ne puisse appliquer le shader sur plusieur obj, tu peut toujours en crée un pour chaque obj
mais se n'est pas non plus une solution, demande sur le forum officiel tu veras bien ... je pensse a un problème avec le z-buffer ... mais ...
ps: arrete les "xD", "lol", "ptdr" ... sa fait vraiment gamin, et je ne sais pas pour les autre mais sa ne me donne pas envie de poster, surtout que j'ai mis 10 min a comprendre ....
Hors ligne
Dsl pour les smiley, et moi chiant ??? O_o nn pas du tout .... :°
Enfin bon, enfaite, le shader lui marche très bien, ce n'est pas lui le problème. Pour faire les contours noirs sur une mesh, il y a 2 méthode( une complexe et une plus simple( utilisé assez souvent sur PS1 et PS2, par exemple Jet Set Radio) ), la méthode complexe est réalisé à l'aide d'un shader qui calcul tous sa, mais comme je m'y connais pas trop en GLSL, et que la méthode est apparemment assez complexe, l'on ma conseillé d'utilisé la méthode simple, qui est pourtant assez utilisé, c'est d'affiché une deuxième mesh, en mode WireFrame avec le z-buffer qui affiche que les faces arrières, enfin on m'a dit de désactiver le z-buffer, se que j'ai fais. Le problème, c'est que sur la première mesh, sa fonctionne, par contre la deuxième mesh, pas du tout ou casiment pas. Il faut que je m'approche de la deuxième mesh, et que j'oriente ma caméra sous un certain angle, pour que sa fonctionne dès que je me recule, ou que je bouge légèrement la caméra de quelque degrès de rotation, cela m'affiche le WireFrame entièrement, c'est pour sa que je ne comprend pas.
Sinon, il faut savoir que n'utilise les contours noirs que sur les personnages, donc sa peut encore aller, et sa prend comme même moins de mémoire que d'affiché une deuxième mesh normal( pas en WireFrame ), mais je suis d'accord, que sa prend comme même plus de mémoire que la 1er méthode, mais je ne pense pas utiliser avant longtemps cette première méthode.
J'espère que je me suis un peu mieux expliqué, si non ? j'essayerais de refaire une meilleur vidéo pour que vous compreniez
Encore merci
Cordialement
Hors ligne
c'est bon narugohan, tu n'écris pas non plus a un ministre, et je disais ça gentiment, enfin bref ...
je viens de pensser que cela peut également venir de l'ordre d'affichage dans un cas, le wireframe est afficher en premier et le mesh après, mais dans l'autre cas c'est l'inverse
c'est pour cela, donc, que sa ne marche pas correctement, pour ce faire je te propose de crée un ISceneNode avec une methode d'afichage l'égèement différente
il te faut alors deux materieux, un pour celui du mesh, et l'autre pour le mode wireframe
et pour afficher tu fait:
sa règle ton probleme d'affichage je pensse, et tu ne seras pas obliger de bouger deux mesh a chaque fois, mais je maintien que c'est pas une bonne solution, même si des jeux l'utilise sur psp, et je ne pensse pas que se soit le cas ...
ps: dsl si je "pisque", je voulais pas être méchant :')
Hors ligne
Pages: 1