Índice de Contenidos - esi.uclm.es · del videojuego movió 710.000.000 € (un 22% más que el...

33

Transcript of Índice de Contenidos - esi.uclm.es · del videojuego movió 710.000.000 € (un 22% más que el...

Í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í (Port) Sí (Port)

No

No

Sí Sí Sí

Sí Sí

Sí Sí Sí

Sí Sí

Sí Sí Sí

Sí Sí

Sí Sí (Pt)

Sí (Pt)

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í (Bajo Nivel)

Sí (ODE)

C++

Python, LUA

3DS, MD2, OBJ...

C

QuakeC

No

No

Sí Sí

C++ C++

UnrealScript Sí

C++

No

No*

Licencia

Plataformas PC

Scripting

Lenguaje

Cartoon Render

Formatos

No 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