Ogre 3D : une introduction

23
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

description

Introduction à Ogre3D, description complète, ses principaux composants, ses usages. les gestionnaire de scenes, les materiaux, les compositor, etc.

Transcript of Ogre 3D : une introduction

Page 1: Ogre 3D : une introduction

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

Page 2: Ogre 3D : une introduction

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

Page 3: Ogre 3D : une introduction

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

Page 4: Ogre 3D : une introduction

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

Page 5: Ogre 3D : une introduction

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)

Page 6: Ogre 3D : une introduction

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

Page 7: Ogre 3D : une introduction

Vue d'ensemble

Page 8: Ogre 3D : une introduction

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 );

Page 9: Ogre 3D : une introduction

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);

Page 10: Ogre 3D : une introduction

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);

Page 11: Ogre 3D : une introduction

Ombres

Texture

Stencil

Modulative, Additive

mSceneMgr>setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);

Page 12: Ogre 3D : une introduction

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

Page 13: Ogre 3D : une introduction

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

Page 14: Ogre 3D : une introduction

Système de traitement « post rendu »

Scripts (comme matériaux)

Peuvent être chainés

Place importante dans les rendus modernes.

Compositors

Page 15: Ogre 3D : une introduction

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

Page 16: Ogre 3D : une introduction

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

}}

}}

Page 17: Ogre 3D : une introduction

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é

Page 18: Ogre 3D : une introduction

NxOgre,OgreBulletOgreCollada, MOGRE, HydraxPython-Ogre, Hikari, Qt & wxWidget, OgreSpeedtree, ...

Page 19: Ogre 3D : une introduction

Performance

Page 20: Ogre 3D : une introduction

The FuturePagination RT shader systemCompositor NextGenShared shader parametersCMakeSymbian, iPhone & iPod touch support....

Page 21: Ogre 3D : une introduction

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)

Page 22: Ogre 3D : une introduction

Clients, Utilisateurs

Page 23: Ogre 3D : une introduction

?