Partage
  • Partager sur Facebook
  • Partager sur Twitter

[OGRE]Effets

Comment appliquer un effet ?

Sujet résolu
    7 juin 2008 à 23:04:25

    Yop c'est encore mwa ^^"
    Ma question porte cette fois-ci sur OGRE,
    je voudrais en fait savoir comment faire pour créer un effet de toon-shading comme dans la démo d'OGRE ?
    J'ai cherché dans la doc et en fait [no0b]je sais pas quoi faire avec les materials ^^"[/no0b].
    Si quelqu'un s'y connaissait un peu sur le sujet je lui en serais reconnaissant ^^
    merci ^^ !
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2008 à 19:36:52

      toon-shading c'est du cell-shading?

      Sinon,tu a un shader(Cg,gsls,hsls) et un .material.
      Tu doit éditer ton .material pour déclarer le shader,et l'inclure dans la pass(je sais j'imagine que je suis pas très claire,mais je pense que regarder les materials d'exemples devraient t'aider).
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2008 à 20:34:01

        Désolé j'ai pas très bien compris gusgus ^^"
        C'est que dans Ogre je suis plutôt noob donc euh...^^"
        Si tu pouvais faire un petit exemple de code pour illustrer, parce que ca reste un peu brouillé ^^"
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2008 à 8:38:30

          Un .material contient des informations sur le "materiau" de l'objet(sa texture, se genre de truc).Il dit aussi si Ogre doit utiliser des Shader pour le rendue.
          Note:dans un .material il y a plusieur materiaux avec des noms differents.

          Evidement, un .material tout seul ne sert a rien. Il faut l'associer a un objet. Les .mesh donné avec Ogre sont par défaut chargé avec un .material précis, mais tu peu le changer pendant le programme.

          Voula comment charger un material(compris dans un .material):
          Ogre::MaterialPtr TonMaterial = Ogre::MaterialManager::getSingleton().getByName("NomDeTonMaterial");
          


          Ensuite il faut l'appliquer a ton Entity avec
          Entity->SetMaterial
          


          Voila comment charger de material pendant l'execution. Apres,faire son propre material c'est un autre histoire!
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2008 à 12:44:49

            Je l'inclus dans createScene() ? Sinan merci beaucoup je vais tester ti suite ^^ !
            J'ai testé Ogre m'a pas fait d'erreurs, par contre j'obtiens un perso tout blanc...
            J'ai testé Example_CelShading.cg
            • Partager sur Facebook
            • Partager sur Twitter
              9 juin 2008 à 13:25:01

              On peut voir le log et le ptit bout de code qui met ton material?
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2008 à 18:44:16

                ah oui escuse mwa xD !

                Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().getByName("Example_CelShading.cg");
                
                // Ninja
                Entity *ent = mSceneMgr->createEntity("Ninja", "ninja.mesh");
                SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("NinjaNode");
                SceneNode *yawNode = node->createChildSceneNode("NinjaYawNode");
                yawNode->attachObject(ent);
                ent->setMaterialName("Example_CelShading.cg");
                


                Rendu

                Si t'as besoin d'autres choses dis-le moi parce que j'aimerais vraiment maitriser les materials ^^"
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2008 à 21:44:16

                  t'a mis un fichier de shader pour le nom du material qu'il est censé chargé :p sa va moins bien marcher :lol:

                  Un fichier .Cg contient un shader. Mais donner juste un shader a Ogre,sa va pas lui suffire,vu que le shader prend des parametres,etc. Et c'est la que les .material interviennent. Ils te permetent de définire comment utiliser ton shader. Ensuite, un fichier .material contient plusieurs materiaux. Ogre auras déjas reperé tous ces materiaux,donc ce qu'il faut donner,ce n'est pas le nom du fichier mais le nom du material!

                  Cherche bien dans Exemple.material et autre pour le CelShading,tu devrais trouver ton bonheur.

                  Le code devrais ressembler a un truc du genre

                  ent->setMaterialName("NomDeMonMaterial");
                  


                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2008 à 22:19:04

                    C'est toujours blanc...à la place de Example Celshading j'ai mis Glass.material (trouvé dans le dossier scripts :p )
                    mais ces scripts là doivent plutot s'appliquer à tout l'écran ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 juin 2008 à 10:52:08

                      Apparament tu n'a pas compris comment fonctionne les .material

                      voila un bout de Exemples-Advanced.material
                      // -------------------------------
                      // Cel Shading Section
                      // -------------------------------
                      vertex_program Ogre/CelShadingVP cg
                      {
                      	source Example_CelShading.cg
                      	entry_point main_vp
                      	profiles vs_1_1 arbvp1
                      
                      	default_params
                      	{
                      		param_named_auto lightPosition light_position_object_space 0
                      		param_named_auto eyePosition camera_position_object_space
                      		param_named_auto worldViewProj worldviewproj_matrix
                      		param_named shininess float 10 
                      	}
                      }
                      
                      fragment_program Ogre/CelShadingFP cg
                      {
                      	source Example_CelShading.cg
                      	entry_point main_fp
                      	profiles ps_1_1 arbfp1 fp20
                      }
                      
                      
                      material Examples/CelShading
                      {
                      	technique
                      	{
                      		pass
                      		{
                      			vertex_program_ref Ogre/CelShadingVP
                      			{
                      				// map shininess from custom renderable param 1
                      				param_named_auto shininess custom 1
                      			}
                      			fragment_program_ref Ogre/CelShadingFP
                      			{
                      				// map diffuse from custom renderable param 2
                      				param_named_auto diffuse custom 2
                      				// map specular from custom renderable param 2
                      				param_named_auto specular custom 3
                      			}
                      			texture_unit
                      			{
                      				texture cel_shading_diffuse.png 1d
                      				tex_address_mode clamp
                      				filtering none
                      			}
                      			texture_unit
                      			{
                      				texture cel_shading_specular.png 1d
                      				tex_address_mode clamp
                      				filtering none
                      				tex_coord_set 1
                      			}
                      			texture_unit
                      			{
                      				texture cel_shading_edge.png 1d
                      				tex_address_mode clamp
                      				filtering none
                      				tex_coord_set 2
                      			}
                      		}
                      	}
                      	
                      }
                      
                      
                      
                      //------------------------
                      // Bump mapping section
                      //------------------------
                      
                      // Bump map vertex program, support for this is required
                      vertex_program Examples/BumpMapVP cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point main_vp
                      	profiles vs_1_1 arbvp1
                      }
                      
                      // Bump map fragment program, support for this is optional
                      fragment_program Examples/BumpMapFP cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point main_fp
                      	profiles ps_1_1 arbfp1 fp20
                      }
                      
                      // Bump map vertex program shadow receiver
                      vertex_program Examples/BumpMapVPShadowRcv cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point main_shadowreceiver_vp
                      	profiles vs_1_1 arbvp1
                      }
                      // Bump map fragment program shadow receiver, support for this is optional
                      fragment_program Examples/BumpMapFPShadowRcv cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point main_shadowreceiver_fp
                      	profiles ps_1_1 arbfp1 fp20
                      }
                      
                      
                      // Bump map with specular vertex program, support for this is required
                      vertex_program Examples/BumpMapVPSpecular cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point specular_vp
                      	profiles vs_1_1 arbvp1
                      }
                      
                      // Bump map fragment program, support for this is optional
                      fragment_program Examples/BumpMapFPSpecular cg
                      {
                      	source Example_BumpMapping.cg
                      	entry_point specular_fp
                      	profiles ps_1_1 arbfp1 fp20
                      }
                      
                      // Single light material, less passes (one pass on a 4-unit card)
                      material Examples/BumpMapping/SingleLight
                      {
                      	// Preferred technique, uses vertex and fragment programs
                      	// to support a single coloured light
                      	technique
                      	{
                      		pass
                      		{
                      			// base colours, not needed for rendering, but as information
                      			// to lighting pass categorisation routine
                      			ambient 0 0 0 
                      			// Vertex program reference
                      			vertex_program_ref Examples/BumpMapVP
                      			{
                      				param_named_auto lightPosition light_position_object_space 0
                      				param_named_auto worldViewProj worldviewproj_matrix
                      			}
                      
                      			// Fragment program
                      			fragment_program_ref Examples/BumpMapFP
                      			{
                      				param_named_auto lightDiffuse light_diffuse_colour 0 
                      			}
                      			
                      			// Base bump map
                      			texture_unit
                      			{
                      				texture NMBumpsOut.png
                      				colour_op replace
                      			}
                      			// Normalisation cube map
                      			texture_unit
                      			{
                      				cubic_texture nm.png combinedUVW
                      				tex_coord_set 1
                      				tex_address_mode clamp
                      			}
                      			// Decal
                      			texture_unit
                      			{
                      				texture RustySteel.jpg
                      			}
                      		}
                      	}
                      	// Fallback technique, uses vertex program but only fixed-function
                      	// fragment shading, which does not support coloured light
                      	technique
                      	{
                      		pass
                      		{
                      			// base colours, not needed for rendering, but as information
                      			// to lighting pass categorisation routine
                      			ambient 0 0 0 
                      			// Vertex program reference
                      			vertex_program_ref Examples/BumpMapVP
                      			{
                      				param_named_auto lightPosition light_position_object_space 0
                      				param_named_auto worldViewProj worldviewproj_matrix
                      			}
                      
                      			// Base bump map
                      			texture_unit
                      			{
                      				texture NMBumpsOut.png
                      				colour_op replace
                      			}
                      			// Normalisation cube map
                      			texture_unit
                      			{
                      				cubic_texture nm.png combinedUVW
                      				tex_coord_set 1
                      				tex_address_mode clamp
                      				colour_op_ex dotproduct src_texture src_current
                      				colour_op_multipass_fallback dest_colour zero
                      			}
                      			// Decal
                      			texture_unit
                      			{
                      				texture RustySteel.jpg
                      			}
                      		}
                      	}
                      }
                      


                      Comme tu peu le voir il Y a 2 materiaux dans le code au dessus:Examples/CelShading et Examples/BumpMapping/SingleLight. Pour appliquer le celshading,il faut appliquer le material Examples/CelShading via la commande
                      ent->setMaterialName("Examples/CelShading");
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 juin 2008 à 11:37:24

                        Mon perso est devenu tout noir c'est bien signe qu'il y a un changement xD
                        Attends deux secondes, dans la commande:
                        Ogre::MaterialPtr TonMaterial = Ogre::MaterialManager::getSingleton().getByName("Examples-Advanced.material");
                        

                        C'est bon ce que j'ai mis ?
                        En conséquent j'ai rajouté ca:
                        ent->setMaterialName("Examples/CelShading");
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 juin 2008 à 14:25:04

                          désolé j'ai mélanger 2 commandes...
                          en faite la commande
                          ent->setMaterialName("Examples/CelShading");
                          

                          est équivalente au commandes:
                          Ogre::MaterialPtr TonMaterial = Ogre::MaterialManager::getSingleton().getByName("Examples/CelShading");
                          ent->setMaterial(TonMaterial);
                          


                          Sinon,je sais pas pourquoi ton perso est noir,je ne connais pas le shader,mais sa prouve que le material est bien appliqué.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 juin 2008 à 15:10:52

                            J'ai testé avec un autre shader ça marche super ! Merci beaucoup gusgus ^^ !
                            Par contre la commande setMaterial n'existe pas chez mwa...j'utilise donc la méthode setMaterialName("");
                            Ca marche tout aussi bien xD
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [OGRE]Effets

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown