[Extensión] 3Dit, programar con Bennu 3D usando únicamente las LOCAL de Bennu 2D

Started by Windgate, February 02, 2010, 09:10:21 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

el usar las variables reservadas del motor hace que el motor tenga trabajo extra, porque va a pensar que tiene un grafico, va a intentar obtener el grafico y sus caracteristicas y va a intentar muchas cosas mas... entre las cuales es dibujarlo...

yo usaria otras locales, podria algo asi como _3d_file, _3d_model, _3d_x, _3d_y, _3d_z, _3d_angle_x,  _3d_angle_y,  _3d_angle_z,  _3d_size... etc... o algo similar, pero diferente de las ya usadas... quizas con poner _file, _graph o _model, etc... alcanza, pero ponerle 3d o algo deja mas claro a que se refiere
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

y no se podría independizar del todo bennu3d de mod_video?
Si solo depende de set_mode, quizas se podría reimplementar dentro de bennu3d.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

grisendo

Bennu3D puede ser que necesite también set_fps? (que también está en mod_video). No sé muy bien las cosas de mod_video que necesita...

De todas formas me imagino que habría que intentar quitar mod_video como dice DCelso. Aunque se utilicen otros nombres que empiecen por _3d_, los procesos van a seguir estando ahí, todos en la posición [0, 0], pero el mod_video va a intentar repintarlos y tal (creo, no conozco los detalles de la implementación)...

De todas formas, sería gracioso ver por donde "rondan" los gráficos reales en 2D de este módulo en ejecución... en plan yo me estoy dando de balazos con un nazi a dos palmos de mí pero los procesos realmente están uno en Pamplona y otro en Jaén disparando cada uno para un lado xD

Por cierto, Bennu3D admite transparencias? Algo leí en la página de Trinit de que estabas intentando poner transparencias a las animaciones de agua y oleaje que estabas haciendo... Porque a mi "flags" me sugiere o espejados (lo que no tiene mucho sentido teniendo rotaciones en los 3 ejes) o transparencias. Si admite transparencias/semitransparencias estaría chulo usarlo para poner modelos de fuego y agua tal (lo dice uno que no tiene ni idea de 3D, igual esos efectos se hacen de otra forma) :D

Windgate

Tenéis razón en lo que decís, reutilizar las LOCAL de 2D implica trabajo extra, pero ya de por sí está visto que para Bennu 3D quedan "residuos" del 2D que a largo plazo habría que pulir. Lo de independizar el set_mode (Y set_fps que también se usa) podría ser un gran paso, por ejemplo hacer que Bennu 3D tuviese uno propio.

(Ahora recuerdo que funciones como map_get_pixel que requieren file y graph son útiles en 3D, y path_find, entre otras... Así que ojo)

Bennu 3D admite transparencias, pero por ahora sólo he encontrado un flag de transparencia 50% para los modelos 3D... En otros elementos como los emisores de partículas (Para el fuego y tal xD) sí que se puede poner un alpha. De todas formas los emisores de partículas no los he explorado a fondo, lo justo me he peleado para tener distintos efectos de fuego, humo y alguna chorradita más, pero no tengo una documentación como para saber exactamente qué es lo que hay que poner para simular sangre... Tiempo al tiempo.

Voy a hacer una cosa chicos:

Voy a probar rendimiento en fps y memoria usada tal y como está el módulo ahora y con LOCALs definidas por mí. Invocaré varios cientos de dummys con posiciones aleatorias y así de paso pruebo la estabilidad, os informo :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

flags=4 es transparencia 50% :)

Te dejo un par de sugencias pa posteriores (aunque no he visto aún la última versión y no sé si las has metido):

1. Cámara manual o que siga a un personaje (creí ver en el manual que hay funciones en Bennu3D para ello)

2. Colisiones con otros procesos como la de Bennu2D, con función tipo if(collision3d(type ogro))...
   (eso ya no sé si está en Bennu3d... pero de todas formas eso es de matrícula de honor xDD)

Windgate

La cámara con movimiento es una parida, tengo vectores de ellas con distintos funcionamientos, fijas de seguimiento automático, controlables... Todo en un módulo independiente que puedo reutilizar, ya lo meteré, pero lo considero de momento algo ajeno al módulo actual, que todavía no está listo.

La colisión en Bennu 3D está recién implementada, es "parecida" a la de 2D, con la limitación de que hay que especificar los 2 procesos implicados (No el conjunto de procesos), por lo que habría que hacer una iteración y comprobar y/o apoyarse en la existencia de un grid (Cómo me gustan) para acotar las comprobaciones. Como te digo, no la he probado aún pero he de hacerlo próximamente, ya tengo pensado como la "portaré" a 3dit para que sea como la collision de Bennu 2D y soporte conjuntos de procesos. Gracias por la sugerencia Grisendo, próximo paso a seguir :D

En cuanto al rendimiento con reutilización o no de LOCAL, sinceramente lo veo exactamente igual, para 1001 procesos Dummy, juzguen ustedes mismos:

Rendimiento reutilizando las LOCAL de Bennu:

Rendimiento creando nuevas LOCAL y sin usar las de Bennu:

Cabe destacar que la memoria usada se queda en casi la mitad y los fps suben ligeramente si uso OpenGL (Las pruebas son con Direct3D9 para que funcione hasta en los PC más mierdosos).

He probado a no importar mod_video ni establecer modo de video y fps, sale en ventana 320x240 y el rendimiento no cambia un ápice.

He intentado no importar mod_proc omitiendo el exit, pero Bennu 3D lo requiere, lo mismo con mod_text.

Conclusión: Veo exactamente igual reutilizar o no, pensaré por dónde seguir, se trata de que sea lo más sencillo y similar a bennu 2D posible... Me ha extrañado que con nuevas LOCAL ocupe un poco más de memoria, debería ser al revés :S
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

1) en maquinas poderosas no vas a sentir mucha diferencia de rendimiento...
2) con las locales del mod_video te ocupa mas memoria
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

1001 procesos dummy? Eres un puto bestia :) al final vamos a tener que implantar algún módulo de CUDA para que revientes la gráfica con bennu...
Qué gracia! El windows semen te marca que bgdi trabaja a 32 bits xDD

Drumpi

¿Y por qué no? aun no hay versión 64 bits ¿o si? ;D

Yendo al tópico: hombre, se verá que usa unas cuantas locales más (o menos, no se, no he contado las variables que se crean en una y otra librería), no debería verse afectado el rendimiento... bueno, salvo por las comprobaciones gráficas que haga internamente Bennu, a osea, una vez por ciclo ver que no existen los gráficos apuntados por file+graph, pero vamos ¿que ocupa eso? ¿12 ciclos por proceso?

Tampoco es tan bestia tener 1001 procesos, aunque sean 3D: cuando edito niveles para el juego tengo más de 6000 activos (he pasado los 7000), el doble cuando trabajo con dos mapas :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Bien, vamos a dejarnos de chorradas y vamos a probar con 32000 o algo así, aunque la saturación en Bennu 3D llega por CPU y va a ser brutal comparada con la saturación que pueda suponer la presencia de LOCAL que afecten internamente a la ejecución...

También voy a probar a lanzar 32000 procesos que "no hagan nada" más que FRAME para comprobar diferencias de carga a ver si sale algo significativo de "un 10% más de algo".

Informo :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

Quote from: Drumpi on February 03, 2010, 06:23:11 PM
¿Y por qué no? aun no hay versión 64 bits ¿o si? ;D

Yap, pero me refería a que me hace gracia que Windows 7 (lo tendrás de 64 bits me imagino) diga que ese proceso es una aplicación de 32 bits, no sé si Vista 64bits también lo hacía o no. :) Yo nunca lo había visto hasta ahora...

Quote from: Drumpi on February 03, 2010, 06:23:11 PM
Tampoco es tan bestia tener 1001 procesos, aunque sean 3D: cuando edito niveles para el juego tengo más de 6000 activos (he pasado los 7000), el doble cuando trabajo con dos mapas :D :D :D

Joder, creo recordar que DIV tenía un tope (una constante) de máximos procesos que podías ejecutar, y creo que era muchísimo más pequeño que eso (y entonces me parecía una barbaridad...). Yo hasta hoy en DIV/Fenix/Bennu no sé si he pasado alguna vez de lanzar 20 procesos simultáneos!!! :D

Espero con ansias versiones nuevas... parece que éste era el empujón que necesitaba para pasarme a las 3D!!

Windgate

Breve apunte: Con 32000 procesos las cosas siguen igual, no hay ninguna diferencia apreciable de rendimiento ni de comportamiento, 2% menos memoria consume SIN reutilizar las locales...

Quería hacer más cosas pero no he podido, mañana más.

PD: Lo he enseñado a unos alumnos y lo han pillado al vuelo :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

a que te refieres con eso de 32000 procesos no hay diferencias? rendimiento o memoria?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quote from: grisendo on February 03, 2010, 07:39:09 PM
Quote from: Drumpi on February 03, 2010, 06:23:11 PM
¿Y por qué no? aun no hay versión 64 bits ¿o si? ;D

Yap, pero me refería a que me hace gracia que Windows 7 (lo tendrás de 64 bits me imagino) diga que ese proceso es una aplicación de 32 bits, no sé si Vista 64bits también lo hacía o no. :) Yo nunca lo había visto hasta ahora...

Quote from: Drumpi on February 03, 2010, 06:23:11 PM
Tampoco es tan bestia tener 1001 procesos, aunque sean 3D: cuando edito niveles para el juego tengo más de 6000 activos (he pasado los 7000), el doble cuando trabajo con dos mapas :D :D :D

Joder, creo recordar que DIV tenía un tope (una constante) de máximos procesos que podías ejecutar, y creo que era muchísimo más pequeño que eso (y entonces me parecía una barbaridad...). Yo hasta hoy en DIV/Fenix/Bennu no sé si he pasado alguna vez de lanzar 20 procesos simultáneos!!! :D

Espero con ansias versiones nuevas... parece que éste era el empujón que necesitaba para pasarme a las 3D!!


Bennu siempre ha sido 32bits y siempre se ha ejecutado a 32 bits. Ahora ya hay un montón de programas que funcionan a 64bits, pero cuando empezó Bennu, eso era una tecnología aun en desarrollo.
Es más, Bennu (y Fenix tampoco) no usa ni aceleración HW, imagina ;D Ya se habló de los problemas que había para pasar a 64 bits (no creo que sea dificil de encontrar el hilo).

Y si, lo mío es una salvajada, pero es un editor que hice cuando no tenía ni idea de punteros, y usa mi primer motor de scroll tileado (snif). Por desgracia, no tengo dos meses para reescribirlo y meterle el motor actual, otro gallo cantaría.

ONTOPIC: hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta. Drumpi me ha pedido tu ip, Windgate, ¡PARA NO ENTRAR NUNCA EN TU ORDENADOR! :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

grisendo

Quote from: Drumpi on February 04, 2010, 02:32:47 AM
Bennu siempre ha sido 32bits y siempre se ha ejecutado a 32 bits. Ahora ya hay un montón de programas que funcionan a 64bits, pero cuando empezó Bennu, eso era una tecnología aun en desarrollo. Es más, Bennu (y Fenix tampoco) no usa ni aceleración HW, imagina ;D Ya se habló de los problemas que había para pasar a 64 bits (no creo que sea dificil de encontrar el hilo).
Soy un incomprendido!!! O me expreso con el orto, una de dos... jaja. Me refería a que no sabía que Windows 7 te avisaba de qué procesos eran de 32 bits... :)

Ontopic: Ayer trasteé con el bicho, metí otro personaje-3d-proceso pero no consigo matarlo con signal (y en el proceso mato a su make_3dit porque si no luego tira error de que no encuentra al padre), supongo que habrá que usar algo para quitar el modelo md2, porque se queda ahí justo donde lo mato animándose :) ... No sé si has hecho algo al respecto, pero a lo mejor vendría bien que al igual que haces lo de "si el padre no tiene file, no hago nada", algo como "si el padre está muerto, borro sus datos de 3d y me suicido"