3dmodel - unican.es
TRANSCRIPT
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3dmodel
Cristobal Camarero Coterillo
Universidad de Cantabria
February 18, 2010
Cristobal Camarero Coterillo — 3dmodel 1/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Introduccion
3dmodel empezo siendo un simple cargador de modelos del NeverwinterNights. Con el tiempo se ha convertido en todo un motor para juegos.
Desarrollado completamente desde 0 con C++ y OpenGL. Usando GLUTpara manejar los eventos de entrada. Con lo que es portable a casi todaslas platformas. Los modelos han sido extraıdos del propio NWN, de unvisor de bioware y del nwnvault, donde la gente ponıa los modelos quecreaba.
Cristobal Camarero Coterillo — 3dmodel 2/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Funcionalidad
Carga de modelos del NWN en ascii.
Carga de 3ds
Carga de texturas TARGA y PLT.
Interpolacion de animaciones, mi propio spline.
Normales para cada vertice
Partıculas
Cristobal Camarero Coterillo — 3dmodel 3/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Funcionalidad
Terreno generado aleatoriamente
Agua
Seleccion con el raton
Camara modificable con raton
Pequeno entorno de ventanas
Reglas de Combate
Configurabilidad desde ficheros externos (CSV)
Conversaciones
Scripting virtual machine
Cristobal Camarero Coterillo — 3dmodel 4/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
NWN .mdl
No existe documentacion oficial, con lo que se complica entender elfuncionamiento, sobre todo algunas partes que admiten varias sintaxis.
Nodes
Caras
Animaciones
Herencia
Cristobal Camarero Coterillo — 3dmodel 5/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
NWN .mdl
Nodes
node trimesh torso_g
parent rootdummy
position 0.000000 0.000000 0.000000
orientation 0.000000 0.000000 0.000000 0.000000
diffuse 1.000000 1.000000 1.000000
ambient 1.000000 1.000000 1.000000
specular 0.050000 0.050000 0.050000
shininess 26.000000
bitmap c_gobling
...
endnode
Caras
Animaciones
Herencia
Cristobal Camarero Coterillo — 3dmodel 5/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
NWN .mdl
Nodes
Caras
verts 80
0.000000 -0.193398 -0.060441
-0.357981 -0.032166 -0.148311
...
faces 52
0 1 2 1 0 1 2 1
3 4 5 1 3 4 5 1
...
tverts 80
0.459666 0.376161 0
0.540734 0.350370 0
Animaciones
Herencia
Cristobal Camarero Coterillo — 3dmodel 5/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
NWN .mdl
Nodes
Caras
Animacionesnode dummy rootdummy
positionkey
0.000000 0.136134 0.004866 2.072889
0.399999 0.136134 0.003069 2.072901
...
endlist
orientationkey
0.000000 0.000005 1.000000 -0.000014 -0.069813
0.600000 0.000006 1.000000 -0.000013 -0.064577
...
endlist
endnode
Herencia
Cristobal Camarero Coterillo — 3dmodel 5/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
NWN .mdl
Nodes
Caras
Animaciones
Herencia Para la mayorıa de las animaciones usan las de otromodelo, especialmente las del humano estandar.
setsupermodel c_gobling a_ba
Cristobal Camarero Coterillo — 3dmodel 5/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Mi spline
Para las animaciones tengo varios tiempos, con la posicion yorientacion de cada parte, ası que si quiero la posicion en un tiempoespecıfico tengo que interpolar.
¡Cuidado al interpolar vectores de orientacion y angulos!
Una interpolacion lineal les da aspecto robotico
Los splines normales no dan resultados muy buenos
Ası que me disene mi propio splineFuerzo la posicion como en un spline normalLa derivada del polinomio que entra va a ser igual que el del que sale.Y esa derivada es la pendiente entre los puntos adyacentes al que estamosmirandoA diferencia de los otros solo le altera un entorno. Posiblemente a unaparte de la animacion le da igual lo que pasa en otra lejana.Se evitan problemas por puntos muy cercanos
¡Pero realmente no se si los puntos que tengo son puntos por losque tiene que pasar la animacion o son puntos de control de algotipo Bezier!
Cristobal Camarero Coterillo — 3dmodel 6/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Comparacion de splines
Cristobal Camarero Coterillo — 3dmodel 7/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Comparacion de splines
Cristobal Camarero Coterillo — 3dmodel 8/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3ds
De momento la carga de ficheros 3ds, no esta muy cuidada. De hecho,solo he probado a cargar un fichero que hizo Diego, eso sı, le carga mejorque blender.
El modelo en cuestion tiene unos 200000 polıgonos, con lo que no lovereis en el juego.
En mi pagina he colgado un documento con las cosas que he aprendidosobre el formato 3ds.
Cristobal Camarero Coterillo — 3dmodel 9/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3ds examples
En 3D Studio
Cristobal Camarero Coterillo — 3dmodel 10/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3ds examples
En blender
Cristobal Camarero Coterillo — 3dmodel 11/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3ds examples
En mi juego
Cristobal Camarero Coterillo — 3dmodel 12/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
3ds examples
En mi juego
Cristobal Camarero Coterillo — 3dmodel 13/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Terreno
El terreno consiste de una malla, cada nodo de la malla contiene
alturamaterial (tierra, hierba)altura y velocidades del agua
Inicialmente su renderizado se hacıa dibujando un par de triangulospor cada nodo. Pero mi trajeta no puede con eso, ası que he hechoque las zonas mas alejadas se dibujen con menos detalle, i.e. contriangulos mas grandes.
n
Cristobal Camarero Coterillo — 3dmodel 14/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Interfaz
Como necesitaba que haya elementos para interactuar, como botonespara cambiar de arma, de personaje, recibir mensajes, ver caracterısticasdel personaje, conversaciones, ...
Panel El elemento basico, dimensiones, layout, color
PanelGroup Para mantener una jerarquıa de panelesLabel Etiquetas con texto
TextPanel Texto de varias lıneas, con botones paradesplazarse.
Cristobal Camarero Coterillo — 3dmodel 15/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Reglas
No hit points, alguien se muere cuando le cortan la cabeza . . . , oal menos un golpe fuerte en una parte vital.
Sin dados, los dados son buenos para los juegos de mesa. Pero enun computador no tenemos problemas en lanzar gaussianas (Elgenerador de numeros con una normal lo he copiado del modulorandom de python, no tenıa ganas de leerme eso papers . . . ).
Con cada herida que recibes tienes penalizadores segun dondetienes esa herida y cuan grave es.
Puedes atacar, esquivar y bloquear ataques. No tengo puestastodavıa las animaciones de esquivar y bloquear; habrıa que cambiarprimero un poco como funciona dos atacandose a la vez.
Cristobal Camarero Coterillo — 3dmodel 16/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Caracterısticas
Las caracterısticas que de momento estan pensadas son (brown indica noimplementado)
strength Mas dano, llevar sin problemas armas y armaduras
reflexes Esquivar
dexterity Atacar y bloquear
will Reducir penalizadores por heridas
constitution Curar mas rapido, aguantar mas tiempo haciendo cosas.
Por supuesto, por defecto son variables aleatorias normales � = 0, � = 1.
Cristobal Camarero Coterillo — 3dmodel 17/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Cristobal Camarero Coterillo — 3dmodel 18/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Archivos
basicos modelos, texturas
weapons.csv Con las propiedades de las armas.
appearance.csv Con valores por defecto para cada tipo deespecie/raza/sexo/etc.
conversaciones Un fichero csv para cada dialogo.
scripts Un fichero para cada script.
Cristobal Camarero Coterillo — 3dmodel 19/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Conversaciones
En un csv
Soporta varios individuos en la conversacion, aunque para tener masde los dos que inician la conversacion hace falta scripts paraanadirlos (la cual es una funcion que falta).
Pausa mostrando <continue> cuando el otro esta diciendo variasfrases seguidas.
Puedes elegir entre varias opciones.
Puedes hacer que se ejecute un script al seleccionar una frase (ocuando el otro la dice).
Puedes hacer que una frase solo sea seleccionable si un scriptretorna cierto (los que no controlas diran la primera disponible).Con lo que puedes hacer conversaciones que dependan de otrasconversaciones, que es lo basico para poder hacer una aventura.
Cristobal Camarero Coterillo — 3dmodel 20/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Fichero de conversacion
sentence Identificador
speaker Quien dice la frase, 0 tu, 1 el otro, en un futuro se podranmas.
nextsentences Siguientes sentencias posibles, a seleccionar una.
script Script a ejecutar al decirla.
conditionscript Script para determinar si se puede seleccionar.
sentence,speaker,nextsentences ,text,script,conditionscript
0 ,2 ,1 ,,
1 ,1 ,2 3 ,"I need you to go somewhere!",
2 ,0 ,,"ok",transition,
3 ,0 ,,"later"
Cristobal Camarero Coterillo — 3dmodel 21/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Cristobal Camarero Coterillo — 3dmodel 22/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Maquina virtual
instrucciones virtuales
SYSCALL, ADD, SUB, AND, OR, XOR, JE, JNE, JLE, JL, MUL, DIV,ADDF, SUBF, MULF, DIVF
virtual “syscalls”
PRINTINT, EXIT, PRINTSTRING, GETGLOBALINT, SETGLOBALINT,CREATEACTOR, ACTORSETPOSITION, ACTORSETNAME,ACTORSETANGLE, ACTORSETCONVERSATION, NEWTERRAIN,CHANGETOTERRAIN, TERRAINPERTURBATE, TERRAINFRACTAL,MOVEPARTY, TERRAINSETWATERLEVEL, RANDOMUNIF,RANDOMGAUSS, ACTORSETFACTION
Cristobal Camarero Coterillo — 3dmodel 23/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Scripts files
De momento solo hay una sintaxis estilo ensamblador (de hecho no usoun parser sintactico, sino solo un escaner hecho a mano).Quizas en unfuturo tenga un lenguaje.Por supuesto, se traduce a codigo binario virtual.
je main 0 0
deer:
.raw deer
deername:
.raw Angry Deer
main:
syscall @newterrain $0
...
add $1 10 0
createdeer:
syscall @createactor deer $0
syscall @randomgauss $64
syscall @randomgauss $65
mulf $64 $64 %10.0
mulf $65 $65 %10.0
syscall @actorsetposition $0
syscall @actorsetname $0 deername
syscall @actorsetfaction $0 0
add $1 $1 -1
jne createdeer $1 0
syscall @exit 0
Cristobal Camarero Coterillo — 3dmodel 24/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Trabajo Futuro
Hacer alguna aventura, pero yo no soy un buen narrador
Lenguaje para los scripts
Anadir reglas
Game menu
Calculate boundings → text and status bar over creatures
Create texture map from terrain
Armaduras
Cabezas
Placeables → usescript, pathfinding
Cristobal Camarero Coterillo — 3dmodel 25/26
Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro
Trabajo Futuro
Usar las animaciones correctas
Get more creatures
Make the status bar billboard
Blood spatters, flying parts
Creador de mapas
Inventario
Habilidades
¿Bugs?
¡Muchas mas cosas!
Cristobal Camarero Coterillo — 3dmodel 26/26