Ogre 3D : une introduction

Post on 09-Jul-2015

3.036 views 3 download

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

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

?