3dmodel - unican.es

30
Introducci on Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro 3dmodel Crist obal Camarero Coterillo Universidad de Cantabria February 18, 2010 Cristobal Camarero Coterillo | 3dmodel 1/26

Transcript of 3dmodel - unican.es

Page 1: 3dmodel - unican.es

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

Page 2: 3dmodel - unican.es

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

Page 3: 3dmodel - unican.es

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

Page 4: 3dmodel - unican.es

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

Page 5: 3dmodel - unican.es

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

Page 6: 3dmodel - unican.es

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

Page 7: 3dmodel - unican.es

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

Page 8: 3dmodel - unican.es

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

Page 9: 3dmodel - unican.es

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

Page 10: 3dmodel - unican.es

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

Page 11: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

Comparacion de splines

Cristobal Camarero Coterillo — 3dmodel 7/26

Page 12: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

Comparacion de splines

Cristobal Camarero Coterillo — 3dmodel 8/26

Page 13: 3dmodel - unican.es

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

Page 14: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

3ds examples

En 3D Studio

Cristobal Camarero Coterillo — 3dmodel 10/26

Page 15: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

3ds examples

En blender

Cristobal Camarero Coterillo — 3dmodel 11/26

Page 16: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

3ds examples

En mi juego

Cristobal Camarero Coterillo — 3dmodel 12/26

Page 17: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

3ds examples

En mi juego

Cristobal Camarero Coterillo — 3dmodel 13/26

Page 18: 3dmodel - unican.es

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

Page 19: 3dmodel - unican.es

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

Page 20: 3dmodel - unican.es

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

Page 21: 3dmodel - unican.es

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

Page 22: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

Cristobal Camarero Coterillo — 3dmodel 18/26

Page 23: 3dmodel - unican.es

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

Page 24: 3dmodel - unican.es

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

Page 25: 3dmodel - unican.es

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

Page 26: 3dmodel - unican.es

Introduccion Modelos Terreno Interfaz Reglas Archivos Conversaciones Scripts Trabajo Futuro

Cristobal Camarero Coterillo — 3dmodel 22/26

Page 27: 3dmodel - unican.es

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

Page 28: 3dmodel - unican.es

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

Page 29: 3dmodel - unican.es

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

Page 30: 3dmodel - unican.es

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