ogre 3d : une introduction
DESCRIPTION
Introduction à Ogre3D, description complète, ses principaux composants, ses usages. les gestionnaire de scenes, les materiaux, les compositor, etc.TRANSCRIPT
OGRE: 3d temps réel open source
Présentation
Description de scène
Matériaux
Compositors
Extensions
Futur
Object-Oriented Graphics Rendering Engine
Paul Cheyrou-Lagrèze – Pop 3D
Présentation
Moteur 3D Temps réel
Open Source 2001 - 2009
Multi-platforme: Linux, OS X, Windows, BSD
Recherche, Visualisation, Jeux, Etudiants, Réalité augmentée, etc.
C++, OO, Motifs Conceptions
Accéléré par le matériel
Leader : Steve Streeting
Torus Knot software
Librairie
Ogre est un composant
Ne doit pas être le centre de l'application
Doit s'insérer dans une application
Fait par des développeurs pour les développeurs
Spécialisé et indépendanMoteur 3D accéléré seulementTout est fait pour l'intégration d'Ogre et non l'inverse
Longévité & stabilité Modélisation en premier, Code facile à maintenir, Commentaire, Documentation, Branche Stable et Développement
Éviter la « prédestination »Pas de spécificité / type de rendu Composant réutilisable et extensible
Les Règles d'Or
Moteur 3D != Moteur de JEU
Renderer
Animation, Particules
Shading/Lighting
Détection de Collisions
Scripts
Son/Vidéo
Réseau
Physique
Intelligence Artificielle
Éditeur (Niveaux, Terrain, shaders, modèles)
DescriptionInterface déclarative, de description de
scène:
Tel modèle à tel endroit vu par tel camera avec telle lumière
Action/Rendu
Toutes les utilisations communes en 3D simplifiées:
Gestion des matériaux, des particules, des niveau de détail, des ressources, de la visibilité, des ombres, des animations, des illuminations
Chaque gestionnaire a une interface paramétrable, extensible/modulable par greffons
DirectX9/10, OpenGL 1&2, GLES 1.1 : système de rendu sont des greffons
Vue d'ensemble
Scène: les basesSceneManager : le gestionnaire adapté au type de scène rendu
(intérieur, extérieur, statique, multi-zones)
SceneNode : le SceneNode contient les informations au sujet de l'emplacement et de l'orientation des entités.
Entity : une entité est un objet 3D
SceneMgr = mRoot->createSceneManager (ST_GENERIC);
Entity *ent1 = SceneMgr->createEntity( "Robot", "robot.mesh" );
SceneNode *node1 = SceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );
node1->attachObject( ent1 );
Caméra !
Camera
ViewPort
mCamera = SceneMgr->createCamera("PlayerCam");
mCamera->setPosition(Vector3(0,10,500));
mCamera->lookAt(Vector3(0,0,0));
Viewport* vp = mWindow->addViewport(mCamera);
Lumière
Lumières
Point
Spot
Direction
light = mSceneMgr->createLight("Light1");
light->setType(Light::LT_SPOTLIGHT);
light->setDirection(-1, -1, 0);
light->setPosition(Vector3(300, 300, 0));
light->setDiffuseColour(1.0, 0.0, 0.0);
light->setSpecularColour(1.0, 0.0, 0.0);
Ombres
Texture
Stencil
Modulative, Additive
mSceneMgr>setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);
MatériauxScheme, techniques, passes, texture units
Ilumination, « Shading »Supporte tous les langages de « shader » Héritage, modèles, texture alias, variable,
etc.Séléction des « Schemes » selon le
contexteItération par type de lumière et/ou filtrageItération par PassesSupporte les ombresLevel Of Detail
m a t e r ia l ParallaxMapping{ t e c h n iq u e { p a s s { _ _ v e r t e x p r o g r a m r e f Parallax_vp {} _ _ f r a g m e n t p r o g r a m r e f Parallax_fp {} _ t e x t u r e u n it normalmap {} _ t e x t u r e u n it diffusemap {} _ t e x t u r e u n it shadowmap { _ c o n t e n t t y p e shadow } } }}
m a t e r ia l MyParallaxObject : ParallaxMapping{ _ _ s e t t e x t u r e a lia s normalmap my_nm.png _ _ s e t t e x t u r e a lia s diffusemap my.png}
Matériaux
Système de traitement « post rendu »
Scripts (comme matériaux)
Peuvent être chainés
Place importante dans les rendus modernes.
Compositors
c o m p o s it o r TV{ t e c h n iq u e { // Temporary textures t e x t u r e rt0 _ _ t a r g e t w id t h t a r g e t h e ig h t
_ 8 8 8 8P F A R G B t a r g e t rt0 { // Render from previous compositor
// (or original scene) in p u t p r e v io u s } _t a r g e t o u t p u t { // Start with clear output in p u t n o n e // add some noise, distort it, // then render to scene aligned quad p a s s _r e n d e r q u a d { // Renders a fullscreen quad with a material m a t e r ia l / /O g r e C o m p o s it o r O ld TV in p u t 0 rt0 } } }}
Highlights: Compositors
material Ogre/Compositor/OldTV{
technique{
pass{
depth_check off vertex_program_ref Ogre/Compositor/StdQuad_Tex2a_vp
{}fragment_program_ref Ogre/Compositor/OldTV_FP{
param_named_auto time_0_X time_0_x 120 param_named_auto sin_time_0_X sintime_0_x 120 param_named distortionFreq float 2.7 param_named distortionScale float 2.5 param_named distortionRoll float 0.93 param_named interference float 0.5 param_named frameLimit float 0.40 param_named frameShape float 0.26 param_named frameSharpness float 6.0
}texture_unit 0{
tex_coord_set 0tex_address_mode clampfiltering linear linear linear
}texture_unit 1{
texture Random3D.dds 3d tex_coord_set 1
tex_address_mode wrapfiltering linear linear linear
}texture_unit 2{
texture NoiseVolume.dds 3d tex_coord_set 2
tex_address_mode wrapfiltering linear linear linear
}}
}}
Tout est fait par
« injection de dépendances »
RenderSystemDX9, DX10, GL, GLES
SceneManagerOctree, PCZ, BSP
GpuProgram (shaders)Asm, Cg, HLSL, GLSL
ShadowCameraSetupUniform, Focused, LiSPSM, PSSM
MovableObject & RenderableEntity, BillboardChain, ParticleSystem
Listeners
Extensibilité
NxOgre,OgreBulletOgreCollada, MOGRE, HydraxPython-Ogre, Hikari, Qt & wxWidget, OgreSpeedtree, ...
Performance
The FuturePagination RT shader systemCompositor NextGenShared shader parametersCMakeSymbian, iPhone & iPod touch support....
Livres Pro OGRE3D ProgrammingGreg Junker 2006 (Apress)
C++ How to Program, 6th EditionDietel & Dietel 2007 (Prentice Hall)
Introduction to Game Programmingwith C++Alan Thorn 2007 (Wordware)
Game Engine ArchitectureJason Gregory 2009 (A K Peters)
Clients, Utilisateurs
?