Blogia

maduniversity

Sky Rendering

He estado mirando webs donde hablara de como renderizar un cielo (he buscado en el google "sky rendering game"). A continuación estan las webs que he encontrado:

http://www.gamedev.net/community/forums/topic.asp?topic_id=86024

http://www.spheregames.com/files/SkyDomesPDF.zip
http://www.spheregames.com/files/SkyDomesPDF_SP.zip

En Angel Code hay 3 articulos bastante interesantes a los que se puede acceder desde la siguiente categoria Programming: Graphics/Simulation/Clouds & sky light. Los articulos son los siguientes:

A Simple, Efficient Method for Realistic Animation of Clouds
A practical analytic Model For Daylight
Real-time Cloud Rendering

Son un poco hardcore, pero se puede sacar bastante de ellos, mirad la siguiente imagen :)


Igual el siguiente articulo también puede resultar interesante:

Cloud Cover

Se pueden encontrar algunos articulos interesantes sobre otros efectos y/o materiales en:
http://freespace.virgin.net/hugo.elias/

Documentacion con Doxygen

Para documentar los programas existentes y obtener los diagramas UML necesarios para entender mejor todo el sistema hemos usado DOXYGEN que se puede obtener libremente de la pagina:
http://www.doxygen.org/index.html

de ahi se puede bajar el programa para windows y el manual de uso.

Además permite realizar graficas en formato UML para cada clase, para ello es necesario bajar:
http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-1.12.exe

Ahora para generar la documentacion hay que seguir mas o menos los siguientes pasos:
-Ejecutar la aplicación "doxywizard.exe"
-Indicar un nombre para el proyecto
-Indicar un directorio donde se generará la documentacion
-En Input seleccionar los archivos y directorios para generar la documentacion
-Deseleccionar formatos como LaTeX o cosas así, y dejar solo el HTML (que es lo mejor para esto)
-En build seleccionar ExtractAll o lo que sea necesario
-En index seleccionar Alphabetical Index, y así generara un indice
-Para generar las graficas hay que ir a la pestañita "DOT" y activar el checkbutton "HAVE_DOT" y despues si se quiere ver como diagramas UML pues ya se selecciona el checkbutton UML_LOOK

Servidor: modificacion inicial

Llevo un par de dias modificando la interfaz de la aplicacion, creada mediante GTK+2 y mirando de migrar la base de datos a SQLite, además de readaptar el código fuente para que compile con Dev-Cpp (como paso previo a Linux).

Mi pretension es utilizar codigo portable (en principio Windows & Linux)

Debido a unos problemas que he tenido con una libreria (libglade), me he demorado unas cuantas horas en el desarrollo, sin embargo de aqui a una semana espero tener el servidor perfectamente funcionando.

Sobre los Enfermeros

Los enfermeros y los médicos se comunican directamente independientemente de donde este cada uno. Cuando el médico solicite la presencia de algun enfermero éste deberá acudir a la consulta inmediatamente.

En principio los enfermeros cuando no se requiera su presencia pueden ir dando vueltas por el campus de tal forma que si algún enfermo solicita su asistencia éstos puedan asistirlo. Si se acerca la hora de comer/cenar etc... y los enfermeros no están haciendo algo de vital importancia, podrian acercarse a un bar/restaurante. O si es media tarde y no hacen nada pueden ir a algun lugar de 'ocio' ubicado dentro del campus (algun club social o similar).

Cuando un medico solicite la asistencia del enfermero, éste deberá acudir inmediatamente (siempre que no esté realizando nada de interés) mediante algun algoritmo eficiente de pathfinding

Mapas

A continuación se van a exponer las distintas ideas sobre los mapas que se nos han ido ocurriendo.

- Hacer que el servidor vaya enviando los mapas para los clientes que lo requieran ==> Si es muy grande que envie solo el cacho que toque ==> Chungo => no compensa.... si el usr no tiene el mapa, ke se lo baje y se lo instale en un directorio de tal forma que para indicar el mapa unicamente hay que hacer un md5 (y asi no hace falta volver a bajarlo).

- mapa 2D de alturas, cada coordenada x,y indica la altura en el mapa 3d (así es como está ahora)

- Los arboles se generan al azar, pero todos los clientes lo ven igual (mismo generador de numeros aleatorios y misma semilla, y como se tiene el mismo mapa, se obtienen los mismo resultados)

- Usar mapas 2D de alturas junto a mapas 2D de objetos, donde en cada objeto se pueda especificar el tipo de objeto, tipo de textura, etc... por ejemplo se podrian definir arboles, paredes, edificios, puertas, etc... todo eso se pondria en una capa por encima de los mapas de alturas...
la ventaja es que mientras no caigan unas plantas encima de otras se pueden hacer tantos niveles como se quiera...

- usar 1 mapa base de alturas, 1 mapa base de objetos y 1 mapa por cada nuevo nivel de altura que se quiera introducir

- Usar mapas 3D a cacho ==> muy hardcore

- usar lightmaps con el 3dstudio ==> (By ADLER: yo no me acuerdo pero era facilito... te los hacía él sólo... y vamos, eso mejora los edificios q da gusto)

--> los ficheros TerrainBase, TerrainDetail y TerrainHeight (los 2 primeros están comprimidos con DXTC para q ocupen menos memoria de vídeo, esto se puede hacer desde el photoshop o desde el DX texture tool)

A continuación viene un extracto de una conversación que tube sobre mapas con Adler:
adler: sip... puede tener sus complicaciones, por aquello de la correspondencia entre un objeto 3d y un pixel del mapa, q igual se corresponde con 10 m2
[...]
adler: es muxo suponer hacer k cuadre todo mas k nada pk si haceis suavizado y cosas de esas pues par poner un edificio y k kede bien hay k asegurarse que el terreno donde se pone es plano sea la altura k sea sino malo...
amnio: claro k siempre se pueden solapar ambos y donde haya un edificio se pilla la media de alturas se pone esa altura media en todo el bloque de puntos y se suavizan los puntos adyacentes ;)
adler: ten cuidado con la optimización de la geometría del mapa igual tienes q desactivarla para q no produzca errores o reducirle la intensidad ((( MIRAR LA DOC )))

Ideas iniciales sobre el servidor

- Gestion de usuarios no va

- Gestion de tratamientos no va

- Gestion de bots no va

- Poder ver los usuarios, bots y tratamientos insertados

- Expulsar, advertir y en general no va ningun menu solo podemos añadir

- Peta el cliente al aceptar el minijuego y el sever te da un mensaje de error aunque sigue funcionando poniendo los nombres de los jugadores aunque se desconecten y si se vuelven a meter peta to.

- si la conexion de alguno de los clientes peta ==> el server peta

- si el servidor se ejecuta bajo windows XP con lo de 'protecion de equipo limitando el acceso a internet' activado, hasta que no se desactive no hay nada que hacer para que rule...

+ Hacer que en la predicción de movimiento no se sobrepase cierta velocidad en los usuarios, porque aunque vayan muy rapido no van a ir tan follaos como a veces salen en los clientes

- mirar que pasa con la memoria del servidor, que se sube cerca de 8 kb cada segundo que pasa (y si hay clientes sube más rapido)

- permitir volcar los logs al disco (volcado automatico en un directorio de logs segun la fecha en la que se inicia el server ==> (permitir cargar logs para visualizarlos?)

- hacer un mapa 2D donde se puedan visualizar los usuarios/NPC así como ver información de forma facil (si es un mapa 3D con varias capas, solaparlas o permitir navegar entre ellas...).
Se podria mostrar para los NPC que rutas van a seguir mediante una linea en el mapa (de un color destacado) Si los NPC estan distribuidos, que cada servidor muestre los suyos...

- hacer un servidor distribuido (cada cual con su base de datos/base de datos centralizada con un unico servidor que la maneje y los demás le hacen querys (mysql?))

Ideas iniciales sobre el Cliente

El jueves pasado probamos por primera vez el juego y decidimos apuntar todas las ideas/comentarios que se nos ocurrieran al respecto, así pues aqui expongo una lista de todos ellos.

- Crear un menu para conectarse al servidor y otro para seleccionar las opciones de video, sonido, etc...para no tener que editar el archivo de configuracion config.xml

- Cuando se tiene la mayúscula pulsada y se mueve con los cursores hacia derecha o izquierda no gira, sino que anda lateralmente, debería girar más rápido. Se deben habilitar otros dos botones para el desplazamiento lateral.

- Anda mal, y cuando se para se queda como si estuviera andando

- Se pueden transpasar objetos y personajes

- Se mete el personaje en el terreno

- En el Windows XP debe estar deshabilitada la protección mediante Firewall que trae por defecto (sino el juego no va)

- Mejorar escenarios, efectos atmosfericos, personajes, objetos, etc...

- Crear modelos, skins, etc.. pa los personajes y NPC's ==> Poder elegir el personaje actual desde el menu

- Poder llevar objetos pa intercambiar o usar

- Algunos medicos pasan de ti y no te dan tratamientos, los que dicen q te dan uno luego no lo tienes en el menu de tratamientos (algo falla?)

- Algunos minijuegos petan

- detección de colisiones, se puede usar codigo de lo de RG, si la representacion 3d va sobre un mapa 2D, se podrían detectar colisiones mediante poligonos 2D, lo cual seria bte rapido

+ Hacer que en la predicción de movimiento no se sobrepase cierta velocidad de movimiento, porque aunque vayan muy rapido no van a ir tan follaos como a veces salen en los clientes (que salen moviendose a 400 por hora)

- ventanita de log con todo el texto de toda la sesion del juego (o poder mirar mensajes anteriores por si la gente escribe muxo, etc...)

- ventanita de información donde diga la resolución actual, el nick del jugador, el servidor al que estamos conectado, el numero de personas k hay, nº de bots, etc... poder ver nombre de otros usuarios, etc....

- cuando alguien entre/salga de la partida (o cualquier tipo de evento) mostrar en el log de los clientes (en un color especial, igual que cuando alguien solicita un tratamiento)

- Tener tres modos de entrada de texto. El normal 't', el susurro 's' y el modo comando '!'. En el ultimo modo seria el unico donde se interpretarian los comandos, en el modo texto o susurro aunque pusieras cosas como '!trata 0 perico' se deberia interpretar como un mensaje del jugador, y nunca como comando

- Cuando el comando sea incorrecto se deberia mostrar un mensaje en el log (de un color especial)

- Hacer mas robusto frente a caidas del server. Si se pierde la conexion ==> perder partida y volver a menú principal.

- (Establecer) Mostrar las puntuaciones de cada jugador

- Cuando aparezcan usuarios en la pantalla con los que se pueda iniciar algun tipo de tratamiento indicar de alguna forma (mediante un circulo en 3D sobre/bajo el usuario?)

- Diferenciar mediante skins bien claros entre los distintos tipos de jugadores (médicos, jugadores, enfermeros...)

- Al iniciar sesion/cargar el programa etc... mostrar una ventanita (recuadro) donde indique lo que está haciendo y alguna barra de progreso o alguna forma en la que el usuario sepa que no se ha quedado colgado.... (cargando texturas, realizando peticion al servidor, conectando...recibiendo datos..etc...)

- Hacer edificios (1 unico nivel? tipo DOOM, mediante mapa 2D? X niveles, mediante octrees i burradas similares?)

- Cambiar nombre de "DreamGfx Application" por la de "Mad University"

- A veces el cliente se mueve a traskilones

- Realizar un pequeño mapa que muestre donde estan los demas jugadores/edificos, etc...

- Asignar un ID fijo a cada tratamiento/minijuego (mediante el servidor), de tal forma
que siempre sea el mismo numero para el mismo tratamiento... sino es un cachondeo..

- Cuando el cliente no tiene servidor y no esta en modo standalone ==> PETA

- si el cliente esta recibiendo info del server o cargandola de disco (en plan cargar texturas y tal) que tarda su tiempo y todo eso ==> mostrar mensaje de lo que se esta haciendo

- que los pies esten siempre arriba del terreno

- al jugar a minijuegos hacer que se puedan leer mejor los textos de los usuarios

- una vez finaliza un minijuego mostrar quien gana y quien pierde (e introducir esta info tb en el log)

- mirar a ver porque los minijuegos van tan lentos (hacer una conexion directa entre cliente/servidor?)

- Permitir ver porcentajes de las enfermedades¿? poder preguntar a medicos y/o enfermeros ¿? igual estaria bien ver porcentajes actuales y que se vayan actualizando al ir consultando con los enfermeros

- Hacer agua y que cuando pase por encima se sumerja ==> Como ocurre ahora con las montañas, pero con agua transparente :)

- Cuando en un rango determinado aparezca otro jugador que coincida con algunos tratamientos con el usuario actual marcar dicho cliente de algun modo (mediante un msg de texto, mediante algun circulito bajo o encima de él (en el mundo3D)) etc...

NOTA: las ventanitas serian un recuadro del juego con un alpha, para ke se siguiera viendo el fondo del juego, etc...

Bienvenido a Mad University

Este Blog pretendemos que sea un diario de nuestro proyecto de fin de carrera. En él iremos introduciendo todas las ideas/problemas/comentarios que se nos ocurran al respecto y en algunos casos iremos escribiendo artículos de interés sobre los temas que consideremos oportunos.

Ideas de I.A. que se podrían implementar/mejorar

A continuación vienen una serie de ideas esquemáticas donde se plantean diversos puntos que se podrían implementar/estudiar en el juego:

- Pathfinding (para lo cual se necesita primero un mapa bien definido)

- Comunicacion decente entre Bots

- Mecanismos de aprendizaje basados en redes neuronales

- puedes hacer los bots Enfermero que deberian ser capaces de buscar a una persona por el mapa por si tiene que capturarla por estar castigada

- Lo que hay ahora hace diagnostico basado en AGs y aprendizaje estadistico 'simple'

- Hacer algun tipo de minijuego especifico que permita a un bot jugar contra ti y aprender
gesticulacion inteligente

- que un sistema de IA controle los gestos que hacen los bots al hablar

- implementar una version de eliza inteligente que aprenda a comunicarse con los jugadores