Upload
trinhtuong
View
216
Download
0
Embed Size (px)
Citation preview
Índice de Contenidos :.[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Sesión 1 :: Transp. 2
Historia de los Videojuegos :: 1Estado del Mercado :: 2
Análisis en España :: 2.1 Análisis Mundial :: 2.2
Arquitectura de un Videojuego :: 3Descripción General :: 3.1
En el Corazón del Videojuego :: 3.2 Divide y Vencerás; Modularízalo!! :: 3.3
Algunos Motores Famosos :: 4Conclusiones :: 5
«¡Vamos! ¡Vamos!, gritó la Reina, ¡Más Rápido!, ¡Más Rápido!»Alicia en el País de las Maravillas, Lewis Carroll
1. Historia (Breve) de los Videojuegos :.[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
[1889] Se funda Marufuku Company en Japón, distribuidores de las famosísimas cartas Hanafuna.
[1932] Creación de COLECO. Empezó vendiendo cuero a fábricas de zapatos.
[1947] Tokyo Telecommunications Engineering Company, que cambiará su nombre a Sony. Comenzó fabricando radios.
[1951] Marufuku Company cambia el nombre a Nintendo Playing Card Company ("Dejar la suerte en manos del cielo").
[1954] Un ex-militar americano funda Services Games. Acababa de nacer SEGA.
Sesión 1 :: Transp. 3
1. Historia (Breve) de los Videojuegos :.
[1961] Steve Russell creó "Spacewar", el primer videojuego de la historia.
[1971] Comercialización del primer arcade "Computer Space".
[1972] Se vende la primera consola doméstica "Odyssey" por 100$.
[1972] Bushnell funda Atari.
[1976] Primera consola basada en cartuchos: Atari 2600.
Sesión 1 :: Transp. 4
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Mamá, mamá, quiero programar mi Atari... :.
B15A7 STX D2LDX #03
B15AB LDA L1765, YEOR D1EOR D2STA COLUP0, XBPL B15ABRTS
J15BD LDA #00B15BF INX
STA A2,XBNE B15BFRTS
L15C5 .BYTE $0E, $0A, $0A, $0A, $0E; 0.BYTE $22, $22, $22, $22, $22; 11.BYTE $EE, $22, $EE, $88, $EE; 22.BYTE $EE, $22, $66, $22, $EE; 33...
Fragmento de un juego de acción para Atari 2600.
Atari 2600● 128 Bytes RAM● Gráficos con 16 colores.● 2 canales de audio.● Cartuchos de hasta 4Kb.● No posee memoria de vídeo. La CPU refresca la pantalla.
Sesión 1 :: Transp. 5
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
1. Historia (Breve) de los Videojuegos :.
[1978] Taito: Space Invaders.
[1979] Atari: Asteroids.
[1979] Richard Garriot "Ultima", hecho en Basic!.
[1980] Sierra crea su primera aventura gráfica "Mystery House".
[1980] Namco lanza Pacman.
[1981] Nintendo "Donkey Kong"
[1982] ZX-Spectrum.
Sesión 1 :: Transp. 6
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
1. Historia (Breve) de los Videojuegos :.[1982] Dragon's Lair.
[1983] Creación de Lucasfilm Games.
[1988] Atari: Tetris.
[1989] Nintendo: GameBoy.
[1991] Street Fighter II.
[1993] IdSoftware: Doom.
[1995] Sony: PlayStation.
[2000] Sims de Maxis.
[2001] PSX2. [2002] Xbox y GameCube.
Sesión 1 :: Transp. 7
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
2. Estado del Mercado :.
Algunas Cifras Interesantes...● En España, el 73% de los jugadores (jugadores habituales: 47% de la población) son varones con una edad comprendida entre 20 y 30 años.
● En EEUU, el 60% de la población juega (145 millones de personas), con un 55% de varones.
● En España, durante el 2003, la industria del videojuego movió 710.000.000 € (un 22% más que el 2002).
● Cada ampliación del juego "Los Sims", vendió más de 80.000 copias en España en el año 2003.
Sesión 1 :: Transp. 8
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
2. Estado del Mercado :.
Algunas Cifras Interesantes...● Mundialmente, la industria del videojuego facturó en el 2003:
21.000.000.000 € en programas Software. 7.000.000.000 € en Hardware (consolas).
● El 70% de los videojuegos en España son copias sin licencia.● El presupuesto de muchos videojuegos de éxito supera los 10.000.000 €.● Commandos fue Nº1 en ventas en 17 países.
● El juego de "Harry Potter y la Cámara Secreta" ha vendido más de 350.000 copias en el 2003.
Sesión 1 :: Transp. 9
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
2. Estado del Mercado :.
Algunas Cifras Interesantes...● Según estimaciones, en el 2006 unos 15,4 millones de Europeos jugarán on line. ● Electronic Arts factura más de 1.500.000.000 € al año.● El 90% de los títulos superventas son apropiados para todos los públicos.● Se han vendido más de 100 millones de Game Boy. ● El día de lanzamiento de la PlayStation 2, se vendieron casi 100.000 unidades en sólo 4 horas. En 2003 más de 60 millones.
Sesión 1 :: Transp. 10
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Reparto del Mercado España/Europa :.
Europa 39%
Japón 24%
USA 37%
Reparto del Mercado a Nivel Mundial (Año 2003)
Video-juegos 24,00%
Vídeo18,00%
Cine 25,00%
Música 29,00%
Otros 4,00%
Reparto del Presupuesto de Ocio en España (Año 2002)
7%
Sesión 1 :: Transp. 11
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Tipos de Videojuegos más Vendidos :.
Plataformas Deportes Carreras Aventuras Acción0
2,5
5
7,5
10
12,5
15
17,5
20
22,5
25
27,5
30
13,4 13,914,9
22,5
29,7
Tipos de Videojuegos más Vendidos en España
Sesión 1 :: Transp. 12
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Tipos de Videojuegos más Vendidos :.
Estrategia
Aventura Acción Carreras Deportes Otros Simulacn.
Plataformas
0
5
10
15
20
25
30
35
40
45
Segmentación por Género en PC
Año 2000
Año 2001
Año 2002
Sesión 1 :: Transp. 13
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Tipos de Videojuegos más Vendidos :.
Aventura Acción Carreras Plataformas
Deportes Estrategia
Otros Simulacn.
0
2,5
5
7,5
10
12,5
15
17,5
20
22,5
25
27,5
30
32,5
Segmentación por Género en Consolas
Año 2000
Año 2001
Año 2002
Sesión 1 :: Transp. 14
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
¿Y qué pasa con los sueldos? :.
1-2 Años 3-5 Años +6 Años0
10000
20000
30000
40000
50000
60000
70000
80000
90000
Salarios por Año en Programación
Programador Jefe Prog. Director Técnico
● En el ámbito de la programación, el 97% de los contratados son hombres, con un salario medio de 62.000$.● Las mujeres (3%), tienen un salario medio de 70.000$.
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
55000
60000
65000
70000
57485 57791 58463
62486
66293
Media de Salarios por Disciplina
Audio Diseño Artistas Programacn.
Producción
Sesión 1 :: Transp. 15
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Entonces, ¿Cuánto Cuesta Hacer un Juego? :.
● De forma muy simplificada, suponiendo un equipo de 30 personas, durante 2 años (videojuego comercial):
Gastos por Personal: 60x60.000 = 3.600.000$ Gastos de Instalación: 80.000$ Equipamiento: 220.000$ ---------- Total: 3.900.000$ (Aprox)
● ¿Cuánto obtenemos de beneficio?, suponiendo que se vende muy bien... 1/2 millón de copias (10.000 en España, aprox.) Ganancias en Venta: 25.000.000$ Aprox »Distribuidora (-10%) + Tiendas (-25%) + IVA (-16%) Ganancia Bruta: 12.000.000$ Aprox (Sin Costes de Produc.) Ganancia Neta: 8.000.000$ Aprox
Sesión 1 :: Transp. 16
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
3. Arquitectura General :.
● Desarrollos de videojuegos profesionales siguen el modelo de «factoría de software».
● Alrededor del 50% del código de los desarrollos es el mismo; este código está recogido en el Engine.
● Es importante alcanzar un punto de inflexión. El motor no puede hacerlo «todo».
● Estudiaremos la arquitectura general del motor, con un diseño típico orientado a objetos y modular.
Videojuego
MapasModelos 3D
TexturasSonidos
...
MotorComunicaciones, Estados y Tareas
Kernel
Sesión 1 :: Transp. 17
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Estructura general del Motor :.
Gestor de Tareas
Gestor de Memoria
Gestor de Opciones
Gestor de Mensajes Depuración
Kerneldel
Motor
TareaVídeo
TareaReloj
TareaEntrada
TareaSonido
TareaEstado
Engine Aplicación
EstadoActual
Cliente Servidor
Estado del Juego
Com.Local
A la Red A la Red
FactoríaEstado del
Juego
Manejadoresde Mensajes
FactoríaEstado de laAplicación
«Main» de laAplicación
+ Modelos 3D,Texturas, Música,
Scripts de IA...
Datos
Sesión 1 :: Transp. 18
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
En el Corazón del Engine :.● El kernel es el módulo más crítico del motor. ● Se ocupa de actualizar todas las «cosas» que necesita el motor en cada instante. Estas «cosas» se denominan Tareas. ● Operaciones sobre Tareas: Crear, Pausar, Continuar, Finalizar.
Módulos del Kernel
Gestor de Tareas
Gestor de Memoria
Gestor de Opciones
Gestor de Mens. Depuracn.
Medidor de Recursos
● Imprescindible gestión uniforme de tareas. ● Diversidad de Tareas.● ¡¿Cómo lo conseguiremos?!
→ Arquitectura basada en el uso de interfaces abstractas y patrones de OO.
Sesión 1 :: Transp. 19
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
En el Corazón del Engine :.
«Singleton»kernel
#$Instancia : kernel#ListaTareasActivas : lista#ListaTareasPausadas: lista
«constructor» #kernel()«estática» +getKernel():kernel+Ejecutar(): integer+AnadirTarea(t:ITarea)+PausarTarea(t:ITarea)+ContinuarTarea(t:ITarea)+FinalizarTarea(t:ITarea)
«Interface»ITarea
#Prioridad : long
+ITarea(prioridad:long)+Crear()+Actualizar()+Pausar()+Continuar()+Finalizar()
TareaVideo
TareaReloj
TareaAudio
0..*
Sesión 1 :: Transp. 20
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
¿Cómo Diablos Implemento un Singletón? :.
class Kernel:instancia = Noneclass __KernelSingleton: # Método privado
def __init__(self):## Inicialización de los atributos...ListaTareasActivas = NoneListaTareasPausadas = None
def __init__(self):if not KernelSingleton.instancia:
Kernel.instancia = Kernel.__KernelSingleton()else:
passdef AnadirTarea(self, tarea):
# Añadir la tarea a listaTareasActivasdef PausarTarea(self, tarea):
# Etc...
class Engine:def unBonitoMetodo(self):
# Ejemplo de llamada a la clase SingletonKernel().AnadirTarea(unaTarea)
Ejemplo en Python. Cada lenguaje tienesus "truquillos"
Sesión 1 :: Transp. 21
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
El Bucle Principal (Main Loop) :.
Ejecutar() //Método de la clase Kernel Mientras (fin != true) Para cada Tarea de (ListaTareasActivas) hacer Tarea.Actualizar() Fin_Para Fin_MientrasFin_Ejecutar
● El kernel se encargará de ejecutar en el bucle principal (llamada a Ejecutar()) el método de actualización de todas las tareas activas.
● Una primera aproximación...
● Hummm... ¿y esa solución nos vale?
● Solución 1: Uso de Hilos. → Dependiente de la plataforma.
● Solución 2: Variar la Frecuencia de Llamado de las Tareas.
Sesión 1 :: Transp. 22
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
El Bucle Principal (Main Loop) :.
Ejecutar() // Método de la clase Kernel tiempoUltimo = ObtenerTiempo() // ObtenerTiempo es una función del S.O. Mientras (fin != true) Si ((ObtenerTiempo()-tiempoUltimo)>1000/frecuencia) // Actualizar la parte de la lógica del juego Para cada Tarea de (ListaTareasActivas) con Prioridad >= LimLogic hacer Tarea.Actualizar() Fin_Para tiempoUltimo = ObtenerTiempo() Fin_Si // Actualizar la parte de presentación del juego Para cada Tarea de (ListaTareasActivas) con Prioridad < LimLogic hacer Tarea.Actualizar() Fin_Para Fin_MientrasFin_Ejecutar
● ¿Y qué tal este otro?
Sesión 1 :: Transp. 23
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
int main (int argc, char **argv){
int time, oldtime, newtime;Qcommon_Init(argc, argv);
fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);nostdout = Cvar_Get("nostdout", "0", 0);if (!nostdout->value)
fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
oldtime = Sys_Milliseconds (); while (1) {
// find time spent rendering last framedo {
newtime = Sys_Milliseconds ();time = newtime - oldtime;
} while (time < 1); Qcommon_Frame (time); oldtime = newtime; }}
Un Ejemplo de Main Loop Real :.
Código fuente disponible enQuake2-3.21/linux/sys_linux.c
Sesión 1 :: Transp. 24
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
void Qcommon_Frame (int msec){
int time_before, time_between, time_after;// Suprimido fragmento de código de registro de logs...
if (host_speeds->value) time_before = Sys_Milliseconds ();SV_Frame (msec);if (host_speeds->value) time_between = Sys_Milliseconds ();CL_Frame (msec);if (host_speeds->value) time_after = Sys_Milliseconds ();
if (host_speeds->value) {int all, sv, gm, cl, rf;all = time_after - time_before;sv = time_between - time_before;cl = time_after - time_between;gm = time_after_game – time_before_game; sv -= gm;rf = time_after_ref – time_before_ref; cl -= rf;Com_Printf ("all:%3i sv:%3i gm:%3i cl:%3i rf:%3i\n",
all, sv, gm, cl, rf);}
}
Un Ejemplo de Main Loop Real :.
Sesión 1 :: Transp. 25
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
En el Corazón del Engine :.
» Gestor de Memoria:● Encargado de realizar un
seguimiento de la memoria en uso.
● Si el lenguaje no da facilidades, habrá que implementar un recolector de basura.
Módulos del Kernel
Gestor de Tareas
Gestor de Memoria
Gestor de Opciones
Gestor de Mens. Depuracn.
Medidor de Recursos» Gestor de Opciones:
● Carga opciones de configuración.
● Típicamente Controles, resolución, servidores de red...
Sesión 1 :: Transp. 26
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
En el Corazón del Engine :.
» Gestor de Mensajes de Depuración:
● Muestra eventos de interés. ● Es interesante que permita
varias salidas (ficheros de log) e incluso consolas de mensajes en tiempo real.
Módulos del Kernel
Gestor de Tareas
Gestor de Memoria
Gestor de Opciones
Gestor de Mens. Depuracn.
Medidor de Recursos» Medidor de Recursos:
● Porcentaje de uso de la CPU según tareas.
● Empleado en labores de optimización.
Sesión 1 :: Transp. 27
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Divide y Vencerás: ¡Moduralízalo! :.
...
Módulos del Kernel
Gestor de TareasMide el tiempo transcurrido
desde el último frame.
Tarea de Reloj
Inicialización y reproducciónde efectos y música.
Tarea de Sonido
Aisla la complejidad de usode diferentes dispositivos.
Tarea de Entrada
Gestión de Buffers y uso deAPIs gráficas transparente.
Tarea de Vídeo
Tarea de Estado
Tarea de IA
Sesión 1 :: Transp. 28
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Algunos Motores de Videojuegos Libres :.
» Crystal Space
● Desarrollo GPL muy portable y escalable (gracias a su sistema de plugins).
● Versiones para todos los sistemas (Linux, Solaris, DOS, Macintosh, Amiga, Windows, BeOS, NextStep, ...).
» Ogre
● Comunidad de desarrolladores muy activa. Licencia GPL.
● Versiones para Windows, Linux y MacOS.
● Gran cantidad de plugins para conexión con aplicaciones existentes.
Sesión 1 :: Transp. 29
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Uno de los Grandes: NetInmerse :.
● Es un Engine Multisistema (PC, Xbox, PlayStation 2, GameCube) con un conjunto de herramientas y plugins.
● La construcción de nuevos productos se hace mediante un interfaz basado en grafos acíclicos.
● El núcleo está construido en C++ y puede ampliarse, derivando nuevas clases.
Acelera enormemente el desarrollo.
Las aplicaciones son multiplataforma rápidamente.
El motor cuesta 200.000€ para desarrollos en las 4 plataformas.
No da buen soporte para IA.
Sesión 1 :: Transp. 30
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Algunas Características :.
CrystalSpace Ogre Quake 2 Fly3D Unreal
Sistema de BSP
Radiosidad
LOD Variable
Sistemas Partículas
Superficies Curvas
Luz Coloreada
Ilum. Dinámica
Sprites 3D
Soporte OpenGL
Soporte Direct3D
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí (Port) Sí (Port)
No
No
Sí Sí Sí
Sí
Sí
Sí Sí
Sí Sí Sí
Sí
Sí
Sí Sí
Sí Sí Sí
Sí
Sí
Sí Sí
Sí Sí (Pt)
Sí (Pt)
Sí
No
No No
No No
Sesión 1 :: Transp. 31
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Algunas Características :.
CrystalSpace Ogre Quake 2 Fly3D Unreal
Text. Procedurales
Soporte para Red
Colisiones
Físicas
Sí
Sí (Bajo Nivel)
Sí (ODE)
C++
Python, LUA
3DS, MD2, OBJ...
Sí
Sí
C
QuakeC
No
No
Sí Sí
Sí
Sí
Sí
Sí
C++ C++
UnrealScript Sí
C++
No
No*
Licencia
Plataformas PC
Scripting
Lenguaje
Cartoon Render
Formatos
No Sí
Sí
Sí (ODE)
No*
No*
No
No
No No
No
Todos* MD2 3DS, MD2 DXF
Todas Todas* Todas Todas Win/Mac
GPL GPL GPL Com/GPL Comercial
Sesión 1 :: Transp. 32
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores
Conclusiones :.
«Una vez hayas acabado el primer 90% de un videojuego,también tienes que terminar el otro 90%»
Michael Abrash, Desarrollador de Quake
● La mayoría de los proyectos que fracasan lo hacen porque no acaban el segundo 90%.
● Existen varias alternativas libres al desarrollo del engine en videojuegos profesionales. → Tomar como punto de partida desarrollos robustos y personalizables.
● Los rápidos avances en el sector exigen desarrollos multiplataforma a nivel software y hardware.
● El mercado internacional no puede ser más prometedor. En España, de momento, parece que se mueve...
Sesión 1 :: Transp. 33
[Contenido] 1. Historia :: 2. Mercado :: 3. Arquitectura :: 4. Motores