SonSilentSea, creación de juegos en Blender con Python
Jose Luis Cercos-Pita
November 22, 2013
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
1 / 35
Tabla de contenidos
1
Introducción
¿Quién soy yo?
¿Qué es SonSilentSea?
¿Qué pretendo contar?
2 Desglose de líneas de código
Estructura general
Componentes
3 Conclusiones
Resultado del experimento
Conclusiones
4 Preguntas
5 Demostración
Física
Hidrodinámica
Importando el nuevo objeto
6 Conclusiones
Conclusiones
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
2 / 35
Introducción
Contents
1
Introducción
¿Quién soy yo?
¿Qué es SonSilentSea?
¿Qué pretendo contar?
2 Desglose de líneas de código
Estructura general
Componentes
3 Conclusiones
Resultado del experimento
Conclusiones
4 Preguntas
5 Demostración
Física
Hidrodinámica
Importando el nuevo objeto
6 Conclusiones
Conclusiones
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
3 / 35
¿Quién soy yo?
Introducción
¿Quién soy yo?
Ingeniero Naval y Oceánico
Doctorando del programa de ingeniería aeroespacial
Investigador en el canal de ensayos de la ETSIN
Especializado en mecánica de fluidos computacional
Desarrollador de software libre
FreeCAD
ocland
SonSilentSea
...
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
4 / 35
¿Qué es SonSilentSea?
Introducción
¿Qué es SonSilentSea?
https://github.com/sanguinariojoe/sonsilentsea
Juego de simulación naval
Dedicado a Sonsoles Jiménez Caballero
Software libre
Desarrollado durante 3 años con C++ y OGRE
Ahora se desarrolla en Blender con Python
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
5 / 35
¿Qué pretendo contar?
Introducción
¿Qué pretendo contar?
OGRE vs. Blender
C++ vs. Python
O más concretamente...
Diferencias debidas a la familiaridad con el diseño, el lenguaje y el entorno
Diferencias debidas a una mejor integración
Diferencias debidas a tener un framework
Diferencias debidas a los estándares (ligado con la integración)
Diferencias debidas al lenguaje (C++ vs. Python)
Tratamos de estimar que parte se límita al cambio de lenguaje, pero es difícil de medir: tiempo,
esfuerzo, cantidad de información...
"3 años en C++ → 2 meses en Python"
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
6 / 35
¿Qué pretendo contar?
Introducción
¿Qué pretendo contar?
OGRE vs. Blender
C++ vs. Python
O más concretamente...
Diferencias debidas a la familiaridad con el diseño, el lenguaje y el entorno
Diferencias debidas a una mejor integración
Diferencias debidas a tener un framework
Diferencias debidas a los estándares (ligado con la integración)
Diferencias debidas al lenguaje (C++ vs. Python)
Tratamos de estimar que parte se límita al cambio de lenguaje, pero es difícil de medir: tiempo,
esfuerzo, cantidad de información...
"3 años en C++ → 2 meses en Python"
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
6 / 35
Precedentes
Introducción
¿Qué pretendo contar?
Usando algunos ejemplos de algoritmos de ordenación...
Python
C++
Bubble sort: 24 líneas
Bitonic sort: 23 líneas
Counting sort: 11 líneas
Insertion sort: 8 líneas
Merge sort: 24 líneas
Heap sort: 35 líneas
Radix sort: 38 líneas
Bubble sort: 33 líneas (x1.4)
Bitonic sort: 131 líneas (x5.7)
Counting sort: 49 líneas (x4.5)
Insertion sort: 9 líneas (x1.1)
Merge sort: 58 líneas (x2.4)
Heap sort: 53 líneas (x1.5)
Radix sort: 90 líneas (x2.4)
Con ésta pequeña muestra crear un algoritmo en C++ parece requerir 2.7 ± 1.6 veces más líneas
de código
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
7 / 35
Diferencias en cuanto a características
Introducción
¿Qué pretendo contar?
Blender
OGRE
20 FPS en el portátil
Cámara "isométrica"
Sólo visión desde fuera del agua
Geometría del mar simplificada por un plano
Física más realista
No existe necesidad de preocuparse por la
atmósfera
Inmanejable en el portátil
Cámara libre
Completo entorno submarino (Hydrax)
Compleja geometría del mar
Física pobre
Atmósfera realista (SkyX)
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
8 / 35
Contents
Desglose de líneas de código
1
Introducción
¿Quién soy yo?
¿Qué es SonSilentSea?
¿Qué pretendo contar?
2 Desglose de líneas de código
Estructura general
Componentes
3 Conclusiones
Resultado del experimento
Conclusiones
4 Preguntas
5 Demostración
Física
Hidrodinámica
Importando el nuevo objeto
6 Conclusiones
Conclusiones
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
9 / 35
Desglose de líneas de código
Estructura general
Estructura general
Blender
7975 líneas de código
main
Blender
frame listener
Blender logic
input manager
Blender logic
Environment
Water plane
GUI
bgui
Sound
Blender internal engine
Entities
Player/AI control & ship motions
OGRE
39211 líneas de código (-1054 líneas)
main
112+257+303 líneas
frame listener
242+140 líneas
input manager
OIS reading
Environment
PSSM + HydraX + SkyX
GUI
CEGUI
Sound
ALSA + OGG Vorbis
Entities
Ship motions
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
10 / 35
Input manager
Desglose de líneas de código
Componentes
Blender (0 líneas)
OGRE (-1054-379 líneas)
Analizar las entradas por teclado y ratón en C++
requiere generar una clase específica para ello
haciendo uso de OIS (el estándar en OGRE
hasta la versión 1.8).
Header file
204 líneas
Source file
175 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
11 / 35
Input manager
Desglose de líneas de código
Componentes
Blender (-98 líneas)
OGRE (-1054-379 líneas)
Camera inputs
83 líneas
Submarine inputs
15 líneas
Sin implementar en OGRE
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
12 / 35
Environment (Parallel-Split Shadow Maps)
Desglose de líneas de código
Componentes
Crucial para obtener sombras de calidad.
Crítico en función de la distancia mínima de corte:
=
xv
yv
zv
wv
n
r
0
0
0
0
0
0
n
0
0
h
0 − f +n
f−n − 2fn
f−n
−1
0
0
y
z
w
x
,
1
z
Resultando la profundidad del punto en pantalla como:
zs =
zv
wv
= 2
fn
f − n
w
z
+
f + n
f − n
= O
Blender (-98 líneas)
OGRE (-1054-379-159 líneas)
Implementado internamente en el motor de
Blender.
Header file
40 líneas
Source file
119 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
13 / 35
Environment (Parallel-Split Shadow Maps)
Desglose de líneas de código
Componentes
Crucial para obtener sombras de calidad.
Crítico en función de la distancia mínima de corte:
=
xv
yv
zv
wv
n
r
0
0
0
0
0
0
n
0
0
h
0 − f +n
f−n − 2fn
f−n
−1
0
0
y
z
w
x
,
1
z
Resultando la profundidad del punto en pantalla como:
zs =
zv
wv
= 2
fn
f − n
w
z
+
f + n
f − n
= O
Blender (-98 líneas)
OGRE (-1054-379-159 líneas)
Implementado internamente en el motor de
Blender.
Header file
40 líneas
Source file
119 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
13 / 35
Environment (Atmósfera)
Desglose de líneas de código
Componentes
Blender (-98 líneas)
OGRE (-1054-379-159-11877 líneas)
La cámara no permite apreciar la atmósfera, y
por tanto no ha sido implementada.
SkyX
11877 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
14 / 35
Environment (Océano)
Desglose de líneas de código
Componentes
Blender (-98-38 líneas)
OGRE (-1054-379-159-11877-8220 líneas)
Plano que sigue a la cámara
38 líneas
Geometría compleja
121+159+193+229+277+452+667+842 líneas
Olas creadas internamente en el shader
0 líneas
Olas generadas sobre la geometría
65+97+112+133+135+152+186+194+272+282+589+800 líneas
Sin entorno submarino
0 líneas
∼43+∼75+335+∼190+∼255+915+∼450 líneas
Entorno submarino
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
15 / 35
GUI
Desglose de líneas de código
Componentes
Blender (-98-38-2500 líneas)
OGRE (-1054-379-159-11877-8220 líneas)
bgui tool
2500 líneas
CEGUI
0 líneas
Código para manejar las ventanas
362 líneas (que cuentan para comparar)
Código para manejar las ventanas
1895 líneas (que cuentan para comparar)
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
16 / 35
Sonidos
Desglose de líneas de código
Componentes
Blender
(-98-38-2500 líneas)
OGRE
(-1054-379-159-11877-8220-1880 líneas)
Gestor de sonidos interno de Blender
0 líneas
Gestor de sonidos & streamer
1880 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
17 / 35
Entidades
Desglose de líneas de código
Componentes
Blender
(-98-38-2500-2206-388 líneas)
OGRE
(-1054-379-159-11877-8220-1880-592 líneas)
Gestor de partículas adaptado de easyEmit
2206 líneas
Gestor de Partículas asistido por OGRE
592 líneas
Contol del jugador / inteligencia artificial
138+194+56 líneas
Sin control implementado
0 líneas
Jose Luis Cercos-Pita
SonSilentSea, creación de juegos en Blender con Python
November 22, 2013
18 / 35
Conclusiones
Contents
1
Introducción
¿Quién soy yo?
¿Qué es SonSilentSea?
¿Qué pretendo contar?
2 Desglose de líneas de código
Estructura general
Componentes
3 Conclusiones
Resultado del experimento
Conclusiones
4 Preguntas
5 Demostración
Física
Hidrodinámica
Importando el nuevo objeto
6 Conclusiones
Con
Comentarios de: sonsilentsea - Creación de Juegos en Blender con Python (0)
No hay comentarios