a Grafica en Tiempo Real

Embed Size (px)

Citation preview

MEMORIA DEL PROYECTO DE FIN DE CARRERA

Desarrollo de un sistema de edicin de escenas basado en una librera grfica de alto nivel: OpenSceneGraph.INGENIERA INFORMATICA ESCUELA TECNICA SUPERIOR DE INGENIERA

Septiembre 2006

Alumno: Miguel Martnez Rodilla Tutor: Marcos Fernndez Marn

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

INDICE GENERAL PARTE I....................................................................................................... 71.1 Introduccin. ..................................................................................................................... 11 1.2 Objetivos. .......................................................................................................................... 12

PARTE II ................................................................................................... 132.1 Informtica grfica en tiempo real. ................................................................................... 17 2.1.1 Introduccin. .................................................................................................................. 17 2.1.2 Orientacin hacia el Hardware Grfico 3D. Libreras grficas de bajo nivel. ............... 18 2.1.2.1 OpenGl. ................................................................................................................... 19 2.1.2.2 Representacin poligonal de los objetos. ................................................................ 20 2.1.2.3 Modelos de Sombreado. Sombreado Local............................................................. 21 2.1.2.4 Primitivas de dibujado............................................................................................. 21 2.1.2.5 Pilas de Matrices. .................................................................................................... 22 2.1.2.6 Empleo de Texturas................................................................................................. 22 2.1.2.7 Depth buffer. ........................................................................................................... 23 2.1.2.8 Shaders. ................................................................................................................... 23 2.1.3 Libreras grficas de Alto Nivel. Grafos de escena........................................................ 24 2.1.3.1 Grafos de Escena. Generalidades. ........................................................................... 24 2.1.3.2 Tipos bsicos de Nodos........................................................................................... 25 2.1.3.3 Proceso de seleccin de niveles de detalle. ............................................................. 26 2.1.3.4 Proceso de culling. .................................................................................................. 28 2.1.3.5 Multiproceso............................................................................................................ 30 2.1.3.5.1 Procesamiento Paralelo. ................................................................................... 30 2.1.3.5.2 Procesamiento Serie o en Pipeline. .................................................................. 31 2.1.4 Revisin de Grafos de Escena. ....................................................................................... 31 2.1.4.1 OpenGl Performer. .................................................................................................. 32 2.1.4.2 Open Inventor.......................................................................................................... 33 2.1.4.3 VRML ...................................................................................................................... 35 2.1.4.4 OpenSceneGraph..................................................................................................... 36 2.1.4.5 Otras libreras graficas de alto nivel........................................................................ 38 2.1.5 Motores de Videojuegos................................................................................................. 38 2.1.5.1 Motores de Visualizacin........................................................................................ 38 2.1.5.1.1 3D GameStudio ................................................................................................ 38 2.1.5.1.2 Crystal Space.................................................................................................... 39 2.1.5.1.3 Genesis3D ........................................................................................................ 39 2.1.5.1.4 The Nebula Device........................................................................................... 40 2.1.5.1.5 OGRE ............................................................................................................... 40 2.1.5.1.6 Shark3D............................................................................................................ 40 2.1.5.1.7 The Torque Game Engine ................................................................................ 41 2.1.5.1.8 CDX Game Development Kit .......................................................................... 41 2.1.5.1.9 Artist................................................................................................................. 41 2.1.6.2 Motores de Videojuegos.......................................................................................... 42 2.1.6.2.1 Fly3D................................................................................................................ 42 2.1.6.3 Videojuegos Completos .......................................................................................... 43 2.1.6.3.1 Doom................................................................................................................ 43 2.1.6.3.2 Quake ............................................................................................................... 44 2.1.6.3.3 Unreal Tournament .......................................................................................... 45 2.1.6.3.4 Source Engine ................................................................................................. 46 2.1.7 Editores 3D................................................................................................................. 49 2.1.7.1 Maya.................................................................................................................... 51 2.1.7.2 3D Studio Max .................................................................................................... 54

1

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

2.1.7.3 LightWave 3D ..................................................................................................... 56 2.1.7.4 SoftImage XSI..................................................................................................... 57 2.1.7.5 Multigen Creator ................................................................................................. 57 2.1.7.6 OSGEdit .............................................................................................................. 58 2.1.7.7 Valve Hammer Editor ......................................................................................... 59 2.1.7.8 UnrealED............................................................................................................. 60 2.2 Arquitectura de Plugins..................................................................................................... 61 2.3 Bibliotecas de enlace dinmico ......................................................................................... 63 2.3.1 Desarrollo de Plugins en 3D Studio Max....................................................................... 74 2.3.1.1 Funciones que debe implementar un plugin en 3ds Max .................................... 74 2.3.1.2 La funcion DllMain() .......................................................................................... 74 2.3.1.3 LibNumberClasses .............................................................................................. 75 2.3.1.4 LibClassDesc....................................................................................................... 75 2.3.1.5 LibDescription..................................................................................................... 75 2.3.1.6 LibVersion() ........................................................................................................ 75 2.3.1.7 Descriptores de clases ......................................................................................... 76 2.3.1.8 Mapas de parmetros........................................................................................... 79 2.4 Conclusiones. .................................................................................................................... 79

PARTE III.................................................................................................. 813.1 Metodologa ...................................................................................................................... 84 3.2 Materiales .......................................................................................................................... 84 3.3 Planificacin temporal....................................................................................................... 84 3.3.1 Diagrama de Gant....................................................................................................... 85

PARTE IV .................................................................................................. 894.1 Introduccin ...................................................................................................................... 94 4.2 Anlisis de Requisitos. ...................................................................................................... 95 4.2.1 Requisitos generales del sistema. ............................................................................... 95 4.2.2 Requisitos de la representacin del grafo de escena .................................................. 95 4.2.3 Requisitos de la representacin de tipos de datos en el interfaz................................ 96 4.2.4 Requisitos de la manipulacin sobre la representacin 3D del grafo......................... 96 4.2.5 Requisitos del sistema de deshacer / rehacer.............................................................. 97 4.2.5 Requisitos del sistema de plugins............................................................................... 97 4.2.6 Requisitos del Manejador de Vista Activa ................................................................. 97 4.3 Anlisis.............................................................................................................................. 98 4.3.1 Anlisis de la representacin de los datos del grafo en el interfaz ............................. 98 4.3.1.1 Grupos de parmetros.......................................................................................... 99 4.3.1.2 Descriptores de parmetros ................................................................................. 99 4.3.1.3 El gestor de parmetros ....................................................................................... 99 4.3.1.4 Objects, Nodes, y AttributeTypes en OpenSceneGraph ................................... 103 4.3.1.5. El Gestor de ObjectTypes, NodeTypes y AttributeTypes. ............................... 104 4.3.2 Anlisis de la representacin del grafo de escena .................................................... 104 4.3.2.1 Crear un rbol a partir de un grafo .................................................................... 105 4.3.2.2 Mostrar el grafo en mltiples vistas de rbol .................................................... 106 4.3.2.3 Acciones sobre el rbol ..................................................................................... 107 4.3.2.4 Mostrar la informacin de un nodo del grafo.................................................... 108 4.3.3 Anlisis de la interaccin con el visor del editor...................................................... 108 4.3.3.1 El gestor de seleccin ........................................................................................ 109 4.3.3.2 El eje manipulador ............................................................................................ 109 4.3.3.3 Creacin automtica de Matrices de Transformacin ....................................... 110 4.3.3.4 Traslacin de objetos usando el eje manipulador.............................................. 111 4.3.3.5 Representacin de objetos independientes a la escena del editor...................... 112 4.3.4 Anlisis del sistema deshacer / rehacer. ................................................................... 113

2

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

4.2.7 Anlisis del sistema de plugins. ............................................................................... 114 4.2.8 Anlisis del Manejador de Vista Activa................................................................... 115 4.4 Casos de uso .................................................................................................................... 117 4.4.1 Funciones del sistema............................................................................................... 117 4.4.2 Descripcin de alto nivel de los Casos de Uso......................................................... 119 Iniciar la aplicacin. ...................................................................................................... 119 Iniciar Barras. ................................................................................................................ 119 Crear barra de paneles de comandos. ............................................................................ 119 Iniciar tipos de objeto.................................................................................................... 120 Registrar un TabOutput................................................................................................. 120 Registrar un ObjectType. .............................................................................................. 120 Mapear los grupos de parmetros de un TabOutput...................................................... 120 Cargar Plugins. .............................................................................................................. 121 Cerrar aplicacin. .......................................................................................................... 121 Cerrar treebar ................................................................................................................ 122 Cerrar escena. ................................................................................................................ 122 Cargar escena. ............................................................................................................... 122 Establecer un grafo sobre un elemento del rbol. ......................................................... 123 Replicar una escena de una TreeBar a otra. .................................................................. 123 Clonar un TreeCtrl a partir de otro................................................................................ 124 Nueva escena................................................................................................................. 124 Crear grafo por defecto. ................................................................................................ 124 Nuevo rbol................................................................................................................... 125 Insertar fichero. ............................................................................................................. 125 Cambiar escena activa................................................................................................... 125 Deshacer. ....................................................................................................................... 126 Rehacer.......................................................................................................................... 126 Crear Nodo. ................................................................................................................... 126 Crear un nodo segn el nombre de su NodeType. ........................................................ 126 Crear una nueva instancia de un nodo segn su nombre............................................... 127 Seleccionar elemento en rbol....................................................................................... 127 Seleccionar todas las instancias de un elemento. .......................................................... 128 Seleccionar todos los mirrors de un elemento. .......................................................... 128 Mostrar la informacin de un nodo ............................................................................... 128 Crear los dilogos de un TabOutput.............................................................................. 129 Crear un dilogo a partir de un grupo de parmetros .................................................... 129 Generar el contenido de un TabOutput ......................................................................... 130 Vaciar el contenido de un TabOutput............................................................................ 130 Notificar fin de seleccin de un ObjectType................................................................. 130 Mostrar los datos de un TabOutput ............................................................................... 131 Seleccionar nodo en el visor.......................................................................................... 131 Agregar nodo a la seleccin del visor ........................................................................... 131 Crear Matriz de Transformacin como padre de un nodo............................................. 132 Actualizar la seleccin. ................................................................................................. 132 Actualizar el eje manipulador. ...................................................................................... 132 Copiar nodo................................................................................................................... 133 Replicar seleccin. ........................................................................................................ 133 Mover nodo. .................................................................................................................. 133 Duplicar Nodo. .............................................................................................................. 134 Duplicar Seleccion. ....................................................................................................... 134 Eliminar nodo................................................................................................................ 134 Activar modo seleccin................................................................................................. 135 Activar modo traslacin de objetos............................................................................... 135 Activar modo escalado de objetos................................................................................. 135 Activar modo rotacin de objetos. ................................................................................ 136

3

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

Activar modo rotar vista................................................................................................ 136 Activar modo trasladar vista. ........................................................................................ 136 Escalar seleccin. .......................................................................................................... 136 Comenzar escalado de seleccin. .................................................................................. 137 Realizar escalado de seleccin. ..................................................................................... 137 Finalizar escalado de seleccin. .................................................................................... 138 Rotar seleccin. ............................................................................................................. 138 Comenzar rotacin de seleccin.................................................................................... 138 Realizar rotacin de seleccin....................................................................................... 139 Finalizar rotacin de seleccin...................................................................................... 139 Trasladar seleccin........................................................................................................ 139 Comenzar traslacin de seleccin. ................................................................................ 140 Realizar traslacin de seleccin. ................................................................................... 140 Finalizar traslacin de seleccin. .................................................................................. 140 Centrar la vista en la seleccin...................................................................................... 141 Modificar el zoom de la vista. ....................................................................................... 141 Aadir un StateAttribute a un StateSet.......................................................................... 141 Eliminar un StateAttibute de un StateSet. ..................................................................... 142 Aadir un Modo a un StateSet. ..................................................................................... 142 Eliminar un Modo de un StateSet. ................................................................................ 142 Modificar un Modo de un StateSet. .............................................................................. 142 Modificar el parmetro de un control del panel de comandos. ..................................... 143 Establecer el valor de un parmetro. ............................................................................. 143 Establecer el valor de un parmetro. ............................................................................. 143 Establecer el contenido del portapapeles....................................................................... 144 Pegar el contenido del portapapeles. ............................................................................. 144 Visualizar escena en modo de alambre. ........................................................................ 144 Visualizar escena en modo de relleno. .......................................................................... 145 Visualizar sombreado en modo plano. .......................................................................... 145 Visualizar sombreado en modo suavizado. ................................................................... 145 Mostrar vista superior de la escena. .............................................................................. 145 Mostrar vista inferior de la escena. ............................................................................... 145 Mostrar vista anterior de la escena. ............................................................................... 146 Mostrar vista posterior de la escena. ............................................................................. 146 Mostrar vista lateral izquierda de la escena................................................................... 146 Mostrar vista lateral derecha de la escena. .................................................................... 146 4.4.3 Casos de Uso siguiendo la notacin UML. .............................................................. 147

PARTE V.................................................................................................. 1635.1. Introduccin. .................................................................................................................. 167 5.2 Diagrama de componentes del sistema. .......................................................................... 167 5.3 Diseo de las funciones del sistema mediante diagramas de secuencia y colaboracin. 168 5.3.1 Inicio. ....................................................................................................................... 168 5.3.2 Finalizar aplicacin .................................................................................................. 170 5.3.3 Nueva Escena ........................................................................................................... 171 5.3.4 Insertar fichero. ........................................................................................................ 172 5.3.5 Modificar Parmetro ................................................................................................ 173 5.3.6 Nuevo rbol .............................................................................................................. 173 5.3.7 Seleccionar elemento en visor.................................................................................. 174 5.3.8 Crear Nodo ............................................................................................................... 175 5.3.9 Seleccionar Elemento en rbol ................................................................................. 176 5.3.10 Undo....................................................................................................................... 177 5.3.11 Seleccionar elementos del rbol en el visor ........................................................... 177 5.3.12 Seleccionar elementos del visor en el rbol ........................................................... 178

4

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

5.3.13 Copiar elemento de rbol ....................................................................................... 179 5.3.14 Copiar tem de un nico rbol. ............................................................................... 179 5.3.15 SelectAllInstances .................................................................................................. 180 5.3.16 SelectAllMirrors..................................................................................................... 180 5.3.17 CreateParentMatrixTransform ............................................................................... 181 5.3.18 StartTranslation ...................................................................................................... 181 5.3.19 DoTranslate ............................................................................................................ 182 5.3.20 EndTranslate........................................................................................................... 182 5.3.21 RemoveSceneTree.................................................................................................. 183 5.3.22 Exec........................................................................................................................ 183 5.3.23 RecursiveCreateDialogs ......................................................................................... 184 5.3.24 CreateDialogs. ........................................................................................................ 184 5.3.25 CreateDialogFromGroup........................................................................................ 185 5.3.26 RegisterTabOutput (TabOutputManager) .............................................................. 186 5.3.27 RegisterType (ObjectTypeManager)...................................................................... 186 5.3.28 NewInstance ........................................................................................................... 187 5.3.29 CreateTreeNode ..................................................................................................... 187 5.3.30 CargarPlugins ......................................................................................................... 188 5.3.31 Update (Selection)................................................................................................. 188 5.3.32 UpdateAxis............................................................................................................. 189 5.3.33 MapIOControls....................................................................................................... 190 5.3.34 RecursiveOnEndSelection...................................................................................... 190 5.3.35 RecursiveGenerateRollupContent (ObjectType).................................................... 191 5.3.36 RecursiveClearRollupContent (ObjectType) ......................................................... 191 5.3.37 GenerateRollupContent (TabOutput) ..................................................................... 192 5.3.38 ClearRollupContent (TabOutput)........................................................................... 192 5.3.39 GetParamValue (TabOutput) ................................................................................. 193 5.3.40 SetParamValue (TabOutput) .................................................................................. 193 5.3.41 LookAtSelection..................................................................................................... 194 5.3.42 SetRootNode (ActiveViewHandler)....................................................................... 194 5.3.43 SetRootNode (MultiTreeBar)................................................................................. 195 5.3.44 ReplicateSceneTree (MultiTreeBar) ...................................................................... 196 5.3.45 CloneFrom (OSGTreeCtrl) .................................................................................... 196 5.3.46 DeleteNode (OSGTreeCtrl).................................................................................... 197 5.3.47 ActDeleteMultiItem (Action) ................................................................................. 197 5.3.48 DeleteNode (ActiveViewHandler) ......................................................................... 198 5.3.49 Cambiar escena activa............................................................................................ 199 5.4. Diagrama de estados del sistema.................................................................................... 199 5.4.1 Estado del cursor ...................................................................................................... 199

PARTE VI ................................................................................................ 2016.1 Introduccin .................................................................................................................... 205 6.2 Parametrizacin de datos................................................................................................. 206 6.2.1 El descriptor de parmetros (OSGParamGroupDesc). ............................................ 206 6.2.2 Los grupos de parmetros (OSGParamGroup) ........................................................ 207 6.2.3 El gestor de parmetros (OSGParamManager) ....................................................... 208 6.2.4 El control ColorSwatch ............................................................................................ 211 6.2.5 Las clases OSGTabOutput y OSGTabOutputManager............................................ 212 6.2.6 Un ejemplo de OSGTabOutput : la clase OutCreateNodes...................................... 214 6.2.7 Las clases OSGObjectType y OSGObjectTypeManager......................................... 215 6.2.8 Un ejemplo de OSGObjectType: TypeDrawable..................................................... 217 6.3 Implementacin del rbol del grafo de escena. ............................................................... 219 6.3.1 La clase TreeNodeInfo ............................................................................................ 219 6.3.2 La clase CEditTreeCtrl............................................................................................. 220

5

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

6.3.3 La clase CEditTreeCtrlEx ........................................................................................ 222 6.3.4 La clase COSGTreeCtrl ........................................................................................... 223 6.3.5 CTreeBar y CMultiTreeBar. .................................................................................... 224 6.4 Interaccin con el visor 3D ............................................................................................. 226 6.4.1 La clase OSGSelection............................................................................................. 226 6.4.2 La clase OSGAxisManipulator ............................................................................... 231 6.4.3 La clase MFCKeyboardMouseCallback .................................................................. 233 6.5 El sistema de deshacer / rehacer...................................................................................... 234 6.5.1 La clase OSGAction................................................................................................. 234 6.5.2 La clase OSGHistory................................................................................................ 235 6.6 El sistema gestor de plugins ............................................................................................ 236 6.6.1 El plugin Cartoon ..................................................................................................... 236 6.6.2 La clase OSGPluginManager ................................................................................... 237 6.6.3 La clase OutPlugins.................................................................................................. 239 6.7 El manejador de la vista activa y las clases MFC ........................................................... 241 6.7.1 La clase OSGActiveViewHandler............................................................................ 241 6.7.2 La clase COSGWorldView ...................................................................................... 246 6.8 Problemas y tips de implementacin. .......................................................................... 249 6.8.1 La actualizacin de OpenSceneGraph 0.9 a 1.0. ...................................................... 249 6.8.2 La clase RefParticle.................................................................................................. 249 6.8.3 La funcin clone....................................................................................................... 250 6.8.4 La funcin DoFrame().............................................................................................. 250 6.8.5 Eliminar un nodo, deshacer y rehacer. ..................................................................... 251

PARTE VII .............................................................................................. 2537.1 Introduccin .................................................................................................................... 257 7.2 El editor OSGWorld........................................................................................................ 257 7.2.1 Especificacin de los elementos del Interfaz grfico. .............................................. 257 7.2.1.1 La barras de menus............................................................................................ 258 7.2.1.2 La barra principal de herramientas.................................................................... 262 7.2.1.3 La barra de nodos. ............................................................................................. 263 7.2.1.4 Los paneles de comandos .................................................................................. 264 7.2.1.5 La barra de rbol ............................................................................................... 267 7.2.1.6 El Visor 3D........................................................................................................ 269 7.3 Ejemplos de escenas mediante el uso del editor.............................................................. 270 7.3.1 Utilizacin de Sistemas de partculas para crear fuego y humo............................... 271 7.3.2 Utilizacin de las Luces. .......................................................................................... 271 7.3.3 Efecto Cartoon ......................................................................................................... 272 7.3.4 Efecto BumpMapping .............................................................................................. 272 7.3.5 Efecto de Specular Highlights.................................................................................. 273 7.3.6 Instanciacin multiple .............................................................................................. 273 7.3.7 Efecto de niebla........................................................................................................ 274 7.3.8. Ejemplo de utilizacion de Shaders .......................................................................... 274

PARTE VIII............................................................................................. 2758.1 Conclusiones ................................................................................................................... 278 8.2 Trabajos futuros............................................................................................................... 279 8.3 Comparativa con OSGEdit.............................................................................................. 279

PARTE IX ................................................................................................ 281Bibliografa. .......................................................................................................................... 283

6

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

PARTE I

INTRODUCCIN

7

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

8

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

INDICE

PARTE I.........................................................Error! Marcador no definido.1.1 Introduccin. ..................................................................... Error! Marcador no definido. 1.2 Objetivos. .......................................................................... Error! Marcador no definido.

9

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

10

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

1.1 Introduccin.En el mundo de los grficos por ordenador, existen dos lneas de investigacin que se encuentran en estados muy avanzados, pero han seguido caminos divergentes: de un lado la Animacin 3D que ha centrado toda su atencin en la calidad visual de las imgenes, y de otro, la Realidad Virtual o Informtica Grfica en Tiempo Real, que ha intentando conseguir la mayor calidad posible, pero dando prioridad a la rapidez en la generacin de imgenes. La realidad virtual puede ser de dos tipos: inmersiva y no inmersiva. Los mtodos inmersivos de realidad virtual con frecuencia se ligan a un ambiente tridimensional creado por un ordenador, el cual se manipula a travs de cascos, guantes u otros dispositivos que capturan la posicin y rotacin de diferentes partes del cuerpo humano. La realidad virtual no inmersiva utiliza medios como el que actualmente nos ofrece Internet, en el cual podemos interactuar en tiempo real con diferentes personas en espacios y ambientes que en realidad no existen sin la necesidad de dispositivos adicionales al ordenador. La realidad virtual no inmersiva ofrece un nuevo mundo a travs de una ventana de escritorio. Este enfoque no inmersivo tiene varias ventajas sobre el enfoque inmersivo como son el bajo coste y fcil y rpida aceptacin de los usuarios. Los dispositivos inmersivos son de alto coste y generalmente el usuario prefiere manipular el ambiente virtual por medio de dispositivos familiares como son el teclado y el ratn que por medio de cascos pesados o guantes. Pero tanto la Animacin 3D como la Informtica Grfica en Tiempo Real siempre han estado complementadas por herramientas especficas o interfaces de edicin. Estas herramientas grficas han facilitado al desarrollador de entornos o animaciones la tarea de modelar objetos o generar escenarios, o realizar secuencias de movimientos de manera manual, mediante series de comandos o introduciendo las posiciones de la geometra manualmente. Estas herramientas tambin han ido evolucionando al mismo tiempo que lo han ido haciendo los motores grficos, permitiendo en algunas de ellas una visualizacin en tiempo real del resultado final de la imagen. Adems, gracias a la modularidad de estas aplicaciones, cada vez son ms las aplicaciones que admiten extensiones, desarrollables por terceras personas, que se pueden ir aadiendo a las mismas para mejorar su capacidad y flexibilidad. Gran parte de los motores grficos de simulacin actuales definen una escena mediante el uso de un Grafo de Escena (Scene Graph), el cual es una estructura en forma de grafo, formado por diversos tipos de nodos que ejercen distintos tipos de influencias sobre sus nodos hijos, bien sea estableciendo una agrupacin, introduciendo algn tipo de poda o aplicando alguna transformacin afn. Los nodos hijos de estas estructuras suelen ser los objetos geomtricos a representar. Aunque hasta hoy los grafos de escena han estado principalmente orientados a la representacin de entornos estticos, u objetos relativamente simples, cada vez ms se pueden encontrar grafos de escena que permiten realizar animaciones ms complejas y dinmicas, incluso que soportan sistemas de partculas. La motivacin de este proyecto radica en proporcionar una herramienta de edicin para uno de los ltimos grafos de escena disponibles en cdigo abierto: OpenSceneGraph, dada la carencia de potentes herramientas de edicin para este grafo de escena. Esta librera est siendo ampliamente utilizada por el Instituto de Robtica de la Universidad de Valencia, debido a la antigedad de OpenGL Performer (el motor grfico de SGI basado tambin en grafo de escena). Para ello, ser necesario analizar las carencias de las actuales herramientas existentes, as como las necesidades del Instituto de Robtica para as proponer soluciones que permitan llegar a construir una aplicacin a la altura de sus exigencias.

11

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

1.2 Objetivos.En este proyecto se pretende construir una aplicacin que permita construir y manipular un grafo de escena de la librera OpenSceneGraph, proporcionando un interfaz sencillo e intuitivo, pero a la vez potente, ampliable, y que no requiera apenas conocimientos de programacin. Concretamente vamos a enumerar los siguientes objetivos: Crear un interfaz sencillo, flexible y dinmico pero a la vez potente, proporcionando al usuario acciones que faciliten algunas de las tareas ms tediosas. Se tomar en cuenta el interfaz y el manejo de 3d Studio Max, puesto que es una herramienta muy utilizada por el Instituto de Robtica, y ser una de las aplicaciones que complementen con la aplicacin desarrollada en este proyecto. Dotar a la aplicacin de un mecanismo de visualizacin y manipulacin de la estructura del grafo de escena. Del mismo modo, realizar una parametrizacin de los datos del grafo de escena en el interfaz grfico para permitir la manipulacin de los datos, de la manera ms intuitiva posible y que aporte la mayor informacin al usuario. Disponer de un sistema de historia, para poder deshacer y rehacer cualquier tipo de accin sobre el grafo. Visualizar el estado del grafo de escena en tiempo real, permitiendo una interaccin del usuario con la escena, sin necesidad de hacerlo manipulando directamente el rbol. Que sea un sistema ampliable, mediante una arquitectura de plugins. De este modo se podrn desarrollar nuevas funcionalidades en la aplicacin, sin necesidad de modificar su ncleo. Por tanto se deber proporcionar un conjunto de clases y libreras disponibles para el desarrollador de plugins.

Todos estos objetivos se debern cumplir siempre siguiendo las tcnicas de desarrollo aprendidas en las asignaturas de Ingeniera del Software, pudiendo obtener, de este modo, unas aplicaciones de buena calidad.

12

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

PARTE II

ESTADO ACTUAL DE LAS TECNOLOGIAS IMPLICADAS

13

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

14

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

INDICEPARTE II .......................................................................................................2.1 Informtica grfica en tiempo real. ................................... Error! Marcador no definido. 2.1.1 Introduccin. .................................................................. Error! Marcador no definido. 2.1.2 Orientacin hacia el Hardware Grfico 3D. Libreras grficas de bajo nivel. .......Error! Marcador no definido. 2.1.2.1 OpenGl. ................................................................... Error! Marcador no definido. 2.1.2.2 Representacin poligonal de los objetos. ................ Error! Marcador no definido. 2.1.2.3 Modelos de Sombreado. Sombreado Local............. Error! Marcador no definido. 2.1.2.4 Primitivas de dibujado............................................. Error! Marcador no definido. 2.1.2.5 Pilas de Matrices. .................................................... Error! Marcador no definido. 2.1.2.6 Empleo de Texturas................................................. Error! Marcador no definido. 2.1.2.7 Depth buffer. ........................................................... Error! Marcador no definido. 2.1.2.8 Shaders. ................................................................... Error! Marcador no definido. 2.1.3 Libreras grficas de Alto Nivel. Grafos de escena........ Error! Marcador no definido. 2.1.3.1 Grafos de Escena. Generalidades. ........................... Error! Marcador no definido. 2.1.3.2 Tipos bsicos de Nodos........................................... Error! Marcador no definido. 2.1.3.3 Proceso de seleccin de niveles de detalle. ............. Error! Marcador no definido. 2.1.3.4 Proceso de culling. .................................................. Error! Marcador no definido. 2.1.3.5 Multiproceso............................................................ Error! Marcador no definido. 2.1.3.5.1 Procesamiento Paralelo. ................................... Error! Marcador no definido. 2.1.3.5.2 Procesamiento Serie o en Pipeline. .................. Error! Marcador no definido. 2.1.4 Revisin de Grafos de Escena. ....................................... Error! Marcador no definido. 2.1.4.1 OpenGl Performer. .................................................. Error! Marcador no definido. 2.1.4.2 Open Inventor.......................................................... Error! Marcador no definido. 2.1.4.3 VRML ...................................................................... Error! Marcador no definido. 2.1.4.4 OpenSceneGraph..................................................... Error! Marcador no definido. 2.1.4.5 Otras libreras graficas de alto nivel........................ Error! Marcador no definido. 2.1.5 Motores de Videojuegos................................................. Error! Marcador no definido. 2.1.5.1 Motores de Visualizacin........................................ Error! Marcador no definido. 2.1.5.1.1 3D GameStudio ................................................ Error! Marcador no definido. 2.1.5.1.2 Crystal Space.................................................... Error! Marcador no definido. 2.1.5.1.3 Genesis3D ........................................................ Error! Marcador no definido. 2.1.5.1.4 The Nebula Device........................................... Error! Marcador no definido. 2.1.5.1.5 OGRE ............................................................... Error! Marcador no definido. 2.1.5.1.6 Shark3D............................................................ Error! Marcador no definido. 2.1.5.1.7 The Torque Game Engine ................................ Error! Marcador no definido. 2.1.5.1.8 CDX Game Development Kit .......................... Error! Marcador no definido. 2.1.5.1.9 Artist................................................................. Error! Marcador no definido. 2.1.6.2 Motores de Videojuegos.......................................... Error! Marcador no definido. 2.1.6.2.1 Fly3D................................................................ Error! Marcador no definido. 2.1.6.3 Videojuegos Completos .......................................... Error! Marcador no definido. 2.1.6.3.1 Doom................................................................ Error! Marcador no definido. 2.1.6.3.2 Quake ............................................................... Error! Marcador no definido. 2.1.6.3.3 Unreal Tournament .......................................... Error! Marcador no definido. 2.1.6.3.4 Source Engine ................................................. Error! Marcador no definido. 2.1.7 Editores 3D................................................................. Error! Marcador no definido. 2.1.7.1 Maya.................................................................... Error! Marcador no definido. 2.1.7.2 3D Studio Max .................................................... Error! Marcador no definido. 2.1.7.3 LightWave 3D ..................................................... Error! Marcador no definido.

15

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

2.1.7.4 SoftImage XSI..................................................... Error! Marcador no definido. 2.1.7.5 Multigen Creator ................................................. Error! Marcador no definido. 2.1.7.6 OSGEdit .............................................................. Error! Marcador no definido. 2.1.7.7 Valve Hammer Editor ......................................... Error! Marcador no definido. 2.1.7.8 UnrealED............................................................. Error! Marcador no definido. 2.2 Arquitectura de Plugins..................................................... Error! Marcador no definido. 2.3 Bibliotecas de enlace dinmico ......................................... Error! Marcador no definido. 2.3.1 Desarrollo de Plugins en 3D Studio Max....................... Error! Marcador no definido. 2.3.1.1 Funciones que debe implementar un plugin en 3ds Max .... Error! Marcador no definido. 2.3.1.2 La funcion DllMain() .......................................... Error! Marcador no definido. 2.3.1.3 LibNumberClasses .............................................. Error! Marcador no definido. 2.3.1.4 LibClassDesc....................................................... Error! Marcador no definido. 2.3.1.5 LibDescription..................................................... Error! Marcador no definido. 2.3.1.6 LibVersion() ........................................................ Error! Marcador no definido. 2.3.1.7 Descriptores de clases ......................................... Error! Marcador no definido. 2.3.1.8 Mapas de parmetros........................................... Error! Marcador no definido. 2.4 Conclusiones. .................................................................... Error! Marcador no definido.

16

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

2.1 Informtica grfica en tiempo real. 2.1.1 Introduccin.La representacin una escena tridimensional en un ordenador requiere que toda la informacin referente a la descripcin de los objetos, la iluminacin, la atmsfera y los puntos de vista sean transformados en una imagen 2D que presente una calidad suficiente como para proporcionar una sensacin realista. La informtica grfica actual dispone de mltiples mtodos para proporcionar definiciones matemticas de los objetos tridimensionales, as, se pueden emplear definiciones de geometra slida (CSG), en superficies paramtricas, campos potenciales, fractales, etc. De igual modo, existen mltiples mtodos para definir las propiedades fsicas de los objetos que constituyen la escena tridimensional, y de iluminar y transformar estas escenas en imgenes planas. En el caso de que se est buscando la obtencin de imgenes estticas, o bien de secuencias grabadas de este tipo de imgenes, es posible recurrir a cualquiera de estos mtodos. Normalmente estas tareas son llevadas a cabo en la CPU, y suelen presentar una complejidad computacional tan elevada que hace que el tiempo empleado en generar cada imagen sea habitualmente de varios minutos o incluso varias horas. Frente a este tipo de aplicaciones en las que prima la calidad de la imagen (a costa del tiempo de clculo que sea necesario), existen otro tipo de aplicaciones, en las que es necesario que la generacin de imgenes se produzca con una rapidez tal que posibilite la interactividad (por encima de 8 imgenes/segundo), o la percepcin continua del movimiento (tasas de generacin de imgenes en torno a los 50 imgenes/segundo). Con este objetivo, se han diseado tarjetas grficas especialmente orientadas a descargar a la CPU de las tareas relacionadas con el renderizado de las imgenes tridimensionales. No todos los mtodos software empleados en la actualidad para conseguir imgenes 3D, pueden ser fcilmente implementadas dentro de una estructura hardware. Los mtodos empleados para generar estas imgenes en tiempo real estn fuertemente condicionados por las caractersticas del hardware grfico existente, existiendo una lnea de investigacin paralela a la Informtica Grfica Tradicional, cuyo objetivo es tambin conseguir la mxima calidad grfica posible, pero siempre enmarcada por las limitaciones de este hardware grfico. Esta lnea de investigacin paralela suele recibir el nombre genrico de Informtica Grfica en Tiempo Real. Para poder realizar representaciones visuales de una escena tridimensional en tiempo real, se ha de disponer de un formato de datos, segn el cual, los objetos y sus caractersticas grficas estn definidos a partir primitivas optimizadas para trabajar con este tipo de hardware grfico. El hardware grfico dispone de uno o varios procesadores encargados de procesar dichas primitivas (transformar la posicin espacial de los objetos y realizar su proyeccin, clculos de iluminacin, ocultacin entre objetos, clculos de sombreado, mapeado de texturas, etc.), hasta transformarlas en una imagen bidimensional. El conjunto de comandos necesarios para tener acceso a las funcionalidades de este hardware suele estar recogido en una librera grfica de bajo nivel, la cual, adems de permitir realizar una gestin ptima del hardware grfico, acta como substrato inicial para la implementacin de otras capas software de mayor complejidad. Como se ver en apartados posteriores, existen varias libreras de este estilo, siendo el estndar actual ms aceptado la librera OpenGl, la cual ser utilizada en los desarrollos implicados en Este proyecto. La necesidad de redibujar varias veces por segundo la escena completa, impone serias restricciones en cuanto al nmero de polgonos que se ven implicados en la generacin de cada imagen. El coste de obtencin de cada imagen, depende de varios factores relacionados directamente con el nmero de vrtices que forman las primitivas geomtricas de la escena, y el rea (en pxeles) que ocupan sobre pantalla. Existen varios mtodos para mantener este coste bajo un cierto lmite, pero todos tienen como planteamiento bsico la seleccin de los objetos

17

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

grficos relevantes por medio de una estructura jerrquica de dibujado conocida con el nombre de grafo de escena (scene graph). Estas estructuras son rboles formados por un conjunto de nodos organizados de tal modo que cada uno de ellos ejerce una determinada influencia sobre sus ramas hijas. Los nodos hoja de este rbol usualmente estn formados usualmente por primitivas de dibujado. El empleo de grafos de escena tambin facilita enormemente la organizacin lgica de la escena, y el control por parte del usuario. En los siguientes apartados se muestra un estado del arte sobre el hardware grfico, descrito a travs de las funcionalidades de las libreras grficas de bajo nivel empleadas para su manejo, se muestran las funcionalidades de las libreras grficas de alto nivel y sus grafos de escena, y por ltimo se realiza una revisin de los grafos de escena actuales.

2.1.2 Orientacin hacia el Hardware Grfico 3D. Libreras grficas de bajo nivel.El objetivo bsico en la generacin de imgenes 3D interactivas es alcanzar unas velocidades de refresco elevadas. El hecho de renderizar una escena 3D de una complejidad media varias veces por segundo, implica una inmensa cantidad de clculos que suele sobrepasar la capacidad de la CPU del ordenador. Por ello, es norma comn recurrir a la utilizacin de hardware grfico especialmente diseado para esta tarea, y, como consecuencia de un API (Application Programmer's Interface) que proporcione un acceso eficiente a sus capacidades. Adems, es deseable que dicho API proporcione una interfaz comn entre los diferentes tipos de hardware grfico existentes. En la actualidad hay varios sistemas que proporcionan un API para renderizado de grficos 3D, pero no todos ellos resultan adecuados para su utilizacin en tiempo real. Uno de los ms conocidos es PHIGS (Programmers's Hierarchical Interactive Graphics System) . PHIGS est basado en GKS (Graphic Kernel System) y es un estndar ANS que permite manipular y dibujar escenas 3D encapsulando descripciones de objetos y atributos en display list, esta caracterstica es especialmente til si existen objetos complejos que pueden ser definidos una sola vez y dibujados varias veces, o tambin si la escena va a ser transmitida por red. Uno de sus principales inconvenientes es que no resulta adecuada si los objetos necesitan estar actualizndose continuamente, y tambin que no soporta algunas caractersticas actualmente bsicas tales como el mapeado de texturas. PEXlib es otro API, basado originalmente en PHIGS, pero que a diferencia de ste, permite el renderizado en modo inmediato, es decir, los objetos son dibujados a medida que son descritos, sin necesidad de emplear una display list intermedia. PEXlib presenta como inconveniente que tampoco dispone de algunas caractersticas avanzadas de rendering y que tan slo funciona en sistemas basados en X. Otro API muy conocido es Renderman, a diferencia de los anteriores, proporciona un lenguaje de programacin para realizar las descripciones de los objetos y sus propiedades, esta caracterstica permite generar imgenes de un nivel de acabado muy elevado, pero es muy difcil disear un hardware grfico que lo soporte. Los tres sistemas anteriores constituyen los sistemas estndar de generacin de imgenes histricamente ms conocidos, pero presentan algunas carencias importantes a la hora de ser empleados en la generacin de imgenes en tiempo real. OpenGl es un API desarrollado a partir de IrisGL, una librera creada por Silicon Graphics en 1982. OpenGl tiene unas funcionalidades similares a PEXlib, pero es independiente de X, siendo en la actualidad soportado por casi la totalidad de sistemas operativos y de hardwares grficos. Una alternativa a OpenGl en sistemas Windows, es el API Direct3D, el cual es un subconjunto de DirectX, una librera que adems de la parte grfica da soporte de audio, vdeo, gestin de perifricos y gestin de red. Desde sus orgenes Direct3D ha sido considerada de inferior calidad que OpenGl (incluso en sistemas Windows), esta visin est cambiando debido a las

18

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

ltimos mejoras en su API que lo han hecho ms estable y potente. Sin embargo, Direct3D no es un standard abierto, solamente funciona en sistemas Windows, y es ms que dudoso que Microsoft tenga intencin de hacer que DirectX est disponible en otras plataformas.

2.1.2.1 OpenGl.OpenGl fue introducida en 1992, y es en la actualidad un estndar industrial cuya especificacin es llevada a cabo por el ARB (OpenGL Architecture Review Board), un organismo del que son socios 3DLabs, ATI, Compaq, Evans&Sutherland, Hewlett-Packard, IBM, Intel, NVidia, Microsoft, y SGI. OpenGl es multiplataforma, independiente de vendedor y abierta, lo que le permite adaptarse a las nuevas innovaciones del hardware. Soporta primitivas grficas bsicas tales como puntos, lneas, polgonos e imgenes, y operaciones tales como la aplicacin de transformaciones afines o proyecciones, clculos de iluminacin, ocultacin entre objetos o mapeado de texturas. En la actualidad existen gran cantidad de tarjetas grficas desarrolladas para cumplir la especificacin de OpenGl. Los drivers de OpenGl encapsulan la informacin sobre el hardware grfico al que van destinados, liberando al desarrollador de aplicaciones, de tener que hacer desarrollos adaptados a las caractersticas de los diferentes tipos de tarjetas grficas. El funcionamiento bsico de la OpenGl puede ser observado en la Figura 2-1. Los comandos de OpenGl son recibidos desde la parte izquierda del diagrama, la informacin que se enva es bsicamente relativa a vrtices de la geometra (Geometry Path) o a imgenes (Imaging Path). Existe la posibilidad de acumular estos comandos en display list para procesarlos en un instante posterior, de otro modo, los comandos son enviados directamente al pipeline de procesado.

Figura 2-1. Pipeline de visualizacin de OpenGl.

Tanto la informacin de vrtices como de imagen puede llegar en un formato compactado, siendo en este caso descomprimido dentro de la propia pipeline. Puede que la informacin referente a la geometra est indicada en forma curvas o superficies paramtricas, en tal caso se evalan y transforman en una descripcin basada en vrtices. En la siguiente etapa, se realizan operaciones sobre primitivas formadas de vrtices (puntos, segmentos de lneas y polgonos), los vrtices son transformados e iluminados, y las primitivas son ensambladas y recortadas por la pirmide de visin. Tambin se realizan operaciones sobre las imgenes, y algunas de ellas se almacenan sobre la memoria de texturas, listas para ser aplicadas sobre la geometra 3D. En la etapa de Rasterizacin, se utilizan los resultados de la fase anterior para generar una serie de direcciones y valores del framebuffer mediante la utilizacin de una descripcin 2D basada en puntos, lneas o polgonos. Por ltimo, el contenido del framebuffer es actualizado teniendo en cuenta la informacin anterior, y un conjunto de operaciones tales como comprobaciones de zbuffer, operaciones de mezcla con los actuales colores de framebuffer, operaciones de enmascaramiento etc. OpenGl ofrece acceso a un conjunto de operaciones grficas del nivel ms bajo posible, y como consecuencia no proporciona mecanismos directos para realizar la descripcin de objetos

19

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

geomtricos complejos (como por ejemplo un cubo o una esfera). Estos han de ser ensamblados mediante la utilizacin de mltiples comandos de OpenGl.

2.1.2.2 Representacin poligonal de los objetos.Se puede considerar que una escena 3D est constituida por un conjunto de objetos con determinadas formas y que ocupan determinadas posiciones. La informtica grfica dispone de diferentes mtodos para proporcionar definiciones matemticas de dichos objetos, siendo una de las ms comunes considerar que la forma geomtrica de un objeto est ser definido por un conjunto de tringulos conectados por sus lados (ver Figura 2-2).

Figura 2-2. Modelo de representacin de objetos 3D mediante secuencias de tringulos.

El hecho de emplear una representacin de este tipo hace que el proceso de dibujado de una escena pueda ser considerado como el procesado de un conjunto ms o menos grande de tringulos. Las actuales tarjetas grficas 3D incorporan hardware capaz de procesar dichos tringulos y transformarlos en su representacin correspondiente en pxeles de pantalla. Las libreras grficas de bajo nivel proporcionan mtodos para realizar descripciones de este tipo de objetos poligonales y emplear de forma adecuada el hardware grfico. La forma bsica de descripcin de un objeto en OpenGl consiste en la definicin de las coordenadas que especifican vrtices entre un par de comandos glBegin/glEnd, as, por ejemplo, para definir un tringulo formado por los vrtices en (0,0,0) (0,1,0) y (1,0,1) seria necesaria la siguiente secuencia de cdigo.

glBegin(GL_POLYGON); glVertex3i(0,0,0); glVertex3i(1,1,0); glVertex3i(1,0,1); glEnd();

Cada vrtice es especificado con dos o tres coordenadas. Adicionalmente se pueden definir una normal, coordenadas de textura y color que sern utilizados en el procesamiento del vrtice. La normal se utiliza en los clculos de iluminacin y es especificada por medio de un vector de 3 componentes. El color proporciona informacin sobre las componentes Roja, Verde, Azul y de Alfa del vrtice. Las coordenadas de textura indican la forma en la que imagen que define la textura es mapeada sobre la primitiva. En una fase previa al dibujado del tringulo se pueden haber definido otras caractersticas que afectaran a la forma en la que ser dibujado, tales como las caractersticas del material empleado, la posicin y caractersticas de las luces que le afectan, la presencia de niebla, etc.

20

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

2.1.2.3 Modelos de Sombreado. Sombreado Local.OpenGl solamente proporciona mtodos de sombreado locales. Mtodos muy populares en la imagen de sntesis tradicional como son el trazado de rayos, o la radiosidad, necesitan conocer informacin de otras partes de la escena diferentes al polgono que se est dibujando, y no resultan adecuados para una aplicacin en tiempo real. La razn de esto es que estos mtodos requieren un conocimiento global de la escena a dibujar, mientras que el hardware grfico es una pipeline de operaciones muy localizadas, y que no tiene capacidad para almacenar y recorrer la gran cantidad de informacin que compone una escena compleja. Existe una posibilidad de emplear estos mtodos con OpenGl que consiste en realizar un preclculo de la iluminacin empleando algn mtodo de iluminacin global, y asociar los resultados a los objetos grficos en un proceso anterior e independiente del dibujado. Este tipo de tcnica solamente resulta adecuada en la representacin de escenarios estticos. En OpenGl, el color de cada vrtice es calculado de forma independiente a partir de las propiedades del material y las condiciones de iluminacin. Los colores obtenidos en cada vrtice son interpolados linealmente sobre las primitivas de dibujado segn el mtodo de Gouraud.

2.1.2.4 Primitivas de dibujado.En una escena normal la cantidad de tringulos suele ser aproximadamente el doble que el nmero de vrtices, esto evidencia que la gran mayora de los vrtices estn siendo compartidos por varios tringulos. El procesado independiente de los vrtices de cada tringulo incrementa de forma innecesaria los costes asociados a la transformacin e iluminacin de los vrtices y tambin a su transferencia. Es usual que procesado redundante de los vrtices incremente estos costes en un factor de 6. Para reducir esta redundancia computacional, es comn que el hardware grfico 3D disponga de primitivas de dibujado en las que un mismo vrtice es utilizado simultneamente por varios tringulos. El tipo de primitiva de este tipo ms empleada son las tiras de tringulos, tambin denominadas t-mesh o tambin triangle strp. En este tipo de primitivas, cada vrtice es usado de forma conjunta con los dos vrtices procesados en ltimo lugar para generar el siguiente tringulo. En el caso de emplear t-meshes largas, en lugar de tringulos sueltos, la mayora de los vrtices son procesados tan slo 2 veces, reduciendo en un factor de 3 los clculos asociados a la transformacin e iluminacin de vrtices. An as, cada vrtice sigue siendo procesado 2 veces, y, por tanto, sigue existiendo un coste redundante. En la Figura 2-3 se pueden observar las primitivas geomtricas ms significativas empleadas por la librera OpenGl, y como el orden en el que se definen los vrtices, especifica la forma en la que se van generando los tringulos individuales.

21

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

Figura 2-3. Primitivas geomtricas empleadas por OpenGl.

En arquitecturas en las cuales las transformaciones geomtricas e iluminacin son realizadas por software, se pueden emplear estructuras indexadas en las que los vrtices pueden ser procesados y almacenados una sola vez, y los tringulos se generan en una fase posterior accediendo de forma indexada a estos vrtices ya procesados. Sin embargo, por razones de compatibilidad con el hardware grfico, los APIs actuales no suelen explotar esta posibilidad.

2.1.2.5 Pilas de Matrices.OpenGl proporciona mtodos para realizar operaciones con matrices de 4x4, y bsicamente gestiona tres tipos de ellas: La matriz model-view que transforma las coordenadas de los vrtices; la matriz de texturas que es aplicada a las coordenadas de textura; y la matriz de proyeccin, la cual describe la pirmide de visin, y es empleada de forma conjunta con la matriz de model-view para transformar la escena 3D en una imagen plana. OpenGl define internamente una pila para cada uno de estos tipos de matrices. Para la gestin de estas pilas de matrices, OpenGl incorpora una serie de funciones permiten entre otras cosas definir rotaciones, traslaciones, escalados, y operaciones de push y pop sobre las pilas. La matriz en la parte alta de cada pila, es la que en cada momento se est aplicando a los vrtices o las coordenadas de textura. El hecho de utilizar pilas de matrices resulta de gran utilidad en el caso de que exista una organizacin jerrquica de los objetos que se van a dibujar, y muy especialmente en el caso de que existan objetos con mltiples sistemas de referencia.

2.1.2.6 Empleo de Texturas.La utilizacin de texturas mapeadas es una de las tcnicas que ms ha contribuido a mejorar la calidad grfica de los sistemas de generacin de imgenes en tiempo real. Dicha tcnica consiste emplear la capacidad de asociar imgenes a las primitivas geomtricas que representan los objetos, dichas imgenes proporcionan informacin de detalle sobre la apariencia de la superficie de los objetos, sobre sus zonas de transparencia, permite aplicar mapas de reflejo, etc.

22

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

La incorporacin de esta capacidad en los sistemas de generacin de imgenes en tiempo real supuso un enorme incremento en el realismo de las imgenes obtenidas (ver Figura 2-4).

Figura 2-4. Empleo de texturas por OpenGl.

Desde hace un par de aos es comn que el hardware grfico pueda aplicar varias texturas simultneamente sobre el mismo objeto, esta capacidad (multitexturing) ha contribuido a incrementar an ms la calidad de la imagen final.

2.1.2.7 Depth buffer.El Depth-buffer (tambin conocido como Z-buffer) proporciona un mtodo sencillo para almacenar la informacin sobre la profundidad sobre una imagen bidimensional. El proceso es muy sencillo, cada vez que se dibuja un pixel en pantalla, se almacena la distancia a la que dicho pixel se encuentra de la cmara. Cuando ms adelante el proceso de dibujado de un objeto 3D ordene dibujar de nuevo sobre esa posicin, bastar con comparar si la distancia de ese objeto es superior o inferior a la ya almacenada, si es mayor, el objeto est ms lejos, y, por tanto, est siendo ocultado por el primer pixel. En este caso la orden de dibujado del nuevo pixel es anulada. En caso contrario el nuevo pixel sera dibujado, y la nueva distancia almacenada. Normalmente cada pixel dispone de 24 o 32 bits para almacenar la informacin referente a la profundidad. Profundidades de z-buffer inferiores suelen hacer que se produzcan errores en la evaluacin de la profundidad a la que se encuentran los objetos, y, por tanto, pequeos errores de dibujado. Este mtodo es implementado muy fcilmente en el hardware, y resulta un mtodo muy eficiente para calcular las ocultaciones producidas entre los objetos 3D. Existen otros mtodos de ocultacin que son compatibles con OpenGl, tales como la utilizacin de BSP trees, la utilizacin de Octrees o la pre-ordenacin de los objetos, pero estos mtodos no son soportados directamente por el hardware grfico.

2.1.2.8 Shaders.En los ltimos aos, los fabricantes de hardware grfico han centrado parte de sus esfuerzos en flexibilizar la forma en la que acta la OpenGl, permitiendo que algunas de las partes de la pipeline grfica (hasta ahora totalmente fija) puedan ser reemplazadas por unidades de cdigo definibles por el usuario. Estas unidades son descritas en un lenguaje de alto nivel basado en un ANS C extendido de tal modo que es capaz de realizar operaciones con vectores y matrices, y que proporciona funciones especialmente diseadas para su utilizacin en grficos 3D. UnFigura 2-5. Imagen generada con la ayuda de shaders

23

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

Shader es una unidad compilable independientemente que ha sido definida mediante este lenguaje.

2.1.3 Libreras grficas de Alto Nivel. Grafos de escena.Las libreras de bajo nivel como la OpenGl estn orientadas a facilitar la utilizacin hardware grfico, pero resultan insuficientes si se desea gestionar una escena compleja, y casi todas las escenas de realidad virtual lo son. Como se ha comentado en el anterior apartado, uno de los objetivos principales de OpenGl es proporcionar un API que sea independiente del hardware grfico, y que al mismo tiempo, permita un control total sobre sus funcionalidades. Como consecuencia de esto, OpenGl proporciona acceso a operaciones grficas del nivel ms bajo posible, y deja en manos del desarrollador de la aplicacin la creacin y gestin de objetos geomtricos ms complejos tales como cubos, esferas, coches, casas o animales. Para ayudar al desarrollador en esta tediosa tarea, existen libreras de ms alto nivel que encapsulan la complejidad de estos objetos geomtricos en estructuras especiales, y que, adems, proporcionan mtodos para gestionar la inmensa cantidad de informacin geomtrica que suele ser manejada. Es usual que estas libreras de alto nivel, estn implementadas utilizando como base una librera de bajo nivel del estilo de la OpenGl. Las libreras de bajo nivel proporcionan mtodos para realizar nicamente descripciones geomtricas muy sencillas (por ejemplo un tringulo con un material y una textura determinada). La primera necesidad de un desarrollador de aplicaciones de realidad virtual es agrupar este tringulo con otros similares para poder, por ejemplo, definir la geometra un tornillo. A su vez, agrupar este tornillo con otra serie de elementos, para formar otro objeto de mayor complejidad, como puede ser una lmpara; agrupar esa lmpara con otros objetos para formar una habitacin, etc. Esta forma en la que los objetos del mundo real aparecen agrupados de forma jerrquica, ya podra ser una razn suficiente para que las libreras de alto nivel tomasen la decisin de emplear una estructura de datos con una organizacin jerrquica, pero, adems, la organizacin jerrquica de los elementos que constituyen una escena, facilita la utilizacin de mltiples sistemas de referencia, y ayuda a controlar la carga del sistema. La estructura jerrquica empleada de forma generalizada por todas las libreras grficas de alto nivel, recibe el nombre de Grafo de Escena o Scene Graph en literatura inglesa. En los siguientes subapartados se muestran las generalidades de los grafos de escena, se presentan los tipos de nodos bsicos empleados, y los mtodos de seleccin de nivel de detalle y culling, encargados de mantener la carga del sistema dentro de unos limites razonables. Por ltimo, se muestra la forma en la que actan las libreras grficas de alto nivel para aprovechar las capacidades de un sistema multiprocesador.

2.1.3.1 Grafos de Escena. Generalidades.Un grafo de escena es un grafo dirigido acclico de nodos que contiene los datos que definen un escenario virtual y controlan su proceso de dibujado. Contiene descripciones de bajo nivel de la geometra y la apariencia visual de los objetos, as como descripciones de alto nivel referentes a la organizacin espacial de la escena, datos especficos de la aplicacin, transformaciones, etc. Los grafos de escena almacenan la informacin del escenario virtual en diferentes tipos de nodos. Existen nodos que almacenan la informacin geomtrica y actan como nodos hijos dentro del grafo de escena; el resto de los nodos suelen aplicar algn tipo de modificacin sobre el segmento de jerarqua que depende de ellos, bien sea estableciendo agrupaciones, aplicando

24

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

alguna transformacin afn o realizando algn tipo de seleccin sobre alguna de sus ramas hijas. El proceso de dibujado consiste en realizar un recorrido de dicho grafo, aplicando las operaciones indicadas por cada tipo de nodo. El Grafo de Escena tiene como funciones principales: Contribuir a establecer una organizacin lgica de la escena. Establecer dependencias jerrquicas entre distintos sistemas de referencia. Posibilitar el proceso de seleccin entre mltiples niveles de detalle. Posibilitar el proceso automtico de Culling (eliminacin automtica de los objetos que se encuentran fuera del campo de visin). Facilitar el control de la escena por parte del usuario. Hacer ms cmodo el acceso a las libreras grficas de bajo nivel (OpenGl en este caso). En la siguiente imagen (Figura 2-5) se puede apreciar la descomposicin de un objeto en sus diferentes componentes, de manera agrupada, lo cual sera una aproximacin al grafo de escena que lo definira.

Figura 2-6. Descomposicin de un objeto en su aproximacin al correspondiente Grafo de Escena.

2.1.3.2 Tipos bsicos de Nodos.En la actualidad existen varias libreras grficas de alto nivel, y cada uno de sus grqfos de escena presenta sus propias particularidades. Sin embargo, existe un conjunto bsico de nodos que, a veces con distintos nombres, se encuentran presentes en todos ellos: Nodo de Geometra. Almacenan la informacin poligonal de los objetos, tambin almacenan informaciones referentes a su apariencia, tales como material, textura, etc. Usualmente actan como nodos hoja.

25

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

Nodo Grupo. Se emplean para agrupar varios nodos hijos, bien sea a nivel meramente organizativo, o para facilitar el proceso de culling jerrquico. Nodo Nivel de Detalle. Usualmente llamados nodos LOD (Level of Detail). Seleccionan uno de sus hijos, basndose en la distancia entre el objeto con mltiples niveles de detalle y el punto de vista. Nodo de Transformacin Afn. Permite aplicar una matriz de transformacin que afectara a ubicacin espacial de sus nodos hijos. Son necesarios para la definicin de objetos mviles y tambin para la creacin de estructuras articuladas. Nodo de Switch. Permiten realizar una seleccin entre sus nodos hijos.

Tambin es usual que el usuario tenga cierta capacidad para personalizar el comportamiento de los nodos, para ello los nodos suelen tener la capacidad de almacenar datos genricos que necesite el usuario, y tambin rutinas de callback escritas por el usuario que son invocadas junto con el cdigo interno de gestin del nodo.

2.1.3.3 Proceso de seleccin de niveles de detalle.Cualquier sistema grfico presenta unas limitaciones que afectan al nmero de primitivas geomtricas que pueden ser procesadas en una unidad de tiempo. Debido a estas limitaciones, el objetivo principal de las bases de datos orientadas a tiempo real, es emplear estrategias que consigan reducir la complejidad de la base de datos a representar, sin que ello repercuta en una merma de la calidad visual final. La seleccin de niveles de detalle es una de estas estrategias. La idea principal del proceso de seleccin de niveles de detalle se basa en la observacin de que un objeto, cuando se encuentra alejado, no puede ser apreciado en detalle, bien sea por el reducido nmero de pxeles que ocupa en pantalla, debido al efecto de la perspectiva, o bien por efecto de las condiciones atmosfricas, tales como la niebla, o la iluminacin. Esta circunstancia hace que un objeto originalmente muy complejo, pueda ser sustituido por otro geomtricamente ms sencillo. Como consecuencia, una base de datos para grficos en tiempo real suele hacer que cada objeto presente distintas versiones de diferente complejidad geomtrica, cada una de las cuales representa al objeto en un margen de distancias concreto. Adems, se ha de establecer un criterio que determine cual de ellas en concreto ha de ser visualizada en cada instante. El criterio suele consistir en emplear la distancia existente entre el objeto y el punto de vista, en funcin de ella, se selecciona la representacin que resulte ms adecuada: una representacin geomtricamente muy sencilla si el objeto se encuentra tan alejado que es imposible percibir sus detalles, o una estructura geomtricamente compleja si el objeto se encuentra tan cercano que sus detalles resultan perceptibles. Si bien la distancia entre el objeto y el punto de vista, es el criterio principal para realizar la seleccin entre los distintos niveles de detalle, en realidad, para que el proceso se realice de forma ptima, se han de tener en cuenta otros factores tales como el campo de visin empleado, la resolucin en pxeles de la imagen, la precisin ptica del sistema de monitorizacin, ciertos efectos atmosfricos como la niebla o el humo, etc. Otros aspectos que pueden ser tenidos en cuenta, son la importancia del objeto dentro de la escena, o la carga del sistema. Es usual que cada objeto presente tres o ms niveles de detalle. En general, el hecho de disponer de varios niveles de detalle intermedios hace las transiciones entre niveles de detalle resulten menos bruscas. La condicin de cambio de nivel de detalle, (en funcin de la distancia u otros criterios) se produce en un instante concreto, y esto hace, que las representaciones de un objeto, entre un frame y el siguiente, resulten ligeramente diferentes. El sistema visual humano es muy sensible a estas discontinuidades, y es necesario prestar un inters especial a la forma en la que se producen los cambios entre niveles de detalle. Existen varias tcnicas, que permiten reducir

26

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

los efectos indeseables de las transiciones entre niveles de detalle, unas de ellas consisten en seleccionar el punto adecuado de transicin, otras, en la creacin de muchos niveles de detalle distintos, de tal forma que las diferencias entre dos niveles de detalle consecutivos sean mnimas, y otras hacen que los saltos no se produzcan de forma brusca, sino mediante transiciones suaves entre las representaciones, no existiendo una distancia a la cual un modelo es directamente sustituido por otro, sino un rango de distancias, o bien, un rango temporal en el cual se realiza una transicin progresiva entre las dos representaciones: La tcnica de Fading produce un fundido suave entre las imgenes correspondientes a dos niveles de detalle consecutivos, pero, presenta como inconveniente que incrementa temporalmente la carga en el periodo en el que los dos modelos estn siendo dibujados simultneamente; la tcnica de Morphing, hace que los vrtices de la geometra de uno de los modelos se modifiquen suavemente, hasta adoptar la posicin de los vrtices del otro modelo. Esto requiere que algunos vrtices sean creados o destruidos en tiempo real, y, por tanto, obliga a que existan fuertes dependencias entre los modelos que representan los distintos niveles de detalle. Durante los periodos de transicin la CPU consume un tiempo adicional en la gestin del morphing. Es el mtodo que presenta mejores resultados tanto a nivel visual como computacional, sin embargo, el hecho de que existan dependencias tan fuertes entre los distintos niveles de detalle, hace que dichos modelos sean muy difciles de generar, y que en la prctica, sea muy poco usado. Para tener una referencia de la magnitud de la reduccin de clculos que supone la utilizacin de niveles de detalle, se puede indicar que la representacin poligonal de una persona de una calidad aceptable requiere unos 2250 polgonos, mientras que el nivel de detalle ms bajo puede ser resuelto con tan slo 38. En la Figura 2-6 se pueden apreciar los diferentes niveles de detalles empleados en la representacin del busto de una persona.

Figura 2-7. Diferentes niveles de complejidad en la representacin geomtrica de un busto.

En la figura anterior, la representacin de ms calidad tiene aproximadamente unos 60.000 caras, la que aparece en tercer lugar presenta aproximadamente 600 caras, y por ltimo la ms sencilla, est formada por tan slo 60 caras. Esto evidencia que con la utilizacin adecuada de niveles de detalle se obtienen unas tasas de reduccin de su coste computacional que se mueven en dos ordenes de magnitud. En la Figura 2-7 se ha realizado una representacin conjunta de las geometras que representan el tercer y cuarto nivel de detalle, situndolas a distancias de la cmara cada vez mayores, es fcil comprobar que a medida que la distancia va aumentando las diferencias entre ellos se vuelven prcticamente imperceptibles.

27

E.T.S.E. Universidad de ValenciaDesarrollo de un sistema de edidin de escenas basado en una librera grfica de alto nivel.

Figura 2-8. Evidencia de que la capacidad de percepcin de detalles disminuye con la distancia del objeto.

Existe un gran nmero de investigaciones relativas al desarrollo de tcnicas de simplificacin geomtrica que pueden ser empleadas para la generacin de niveles de detalle.

2.1.3.4 Proceso de culling.En una aplicacin de simulacin, o en cualquier entorno virtual en general, el usuario se encuentra inmerso en una inmensa base de datos geomtricos. Sin embargo, en cada instante est mirando en una direccin concreta, y, por consiguiente, gran parte de la geometra permanece fuera de su campo de visin. Enviar toda la base de datos al hardware grfico resultara muy costoso, y, adems, es innecesario. La CPU puede determinar cuales son los objetos que estn dentro de la pirmide de visin (denominada viewing frustum o simplemente frustum en la literatura inglesa) y con ello reducir considerablemente la cantidad de datos a transferir al hardware grfico y consecuentemente la cantidad de trabajo a realizar por ste. Este proceso es conocido como culling, y es junto el proceso de gestin de niveles de detalle, uno de los principios que permite mantener la cantidad de geometra a dibujar dentro de unos mrgenes adecuados. Existen mtodos de culling muy avanzados que tienen en cuenta las ocultaciones producidas entre los objetos de la escena, este tipo de culling es esencial en el caso de entornos de tipo arquitectnico, formados por muchas habitaciones y paredes. Bsicamente consisten en determinar que objetos son visibles a travs de las puertas y ventanas, y almacenar la informacin en estructuras de datos adecuadas que son rellenadas en una fase previa a la