G60 G60
Páginas: 1 2 [3] 4   Ir Abajo
  Imprimir  
Autor Tema: Proyecto: LLuvia dinámica en cabina 3D  (Leído 78201 veces)
0 Usuarios y 1 Visitante están viendo este tema.
23 Marzo, 2010, 22:42:40 #30
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Alucinante, compadres. Estais a AÑOS LUZ del resto de nosotros... Ánimo con vuestras investigaciones, que redundarán sin duda en beneficio del resto de este humilde "ganao".
Recibid un respetuoso saludo.

Muchas gracias por tus palabras Francisco, de veras que agradezco mucho los ánimos que me enviais.

Ahora, al turrón, como se suele decir.

He estado perfilando en mi cabeza el algoritmo principal para la creación de las gotas de lluvia de fondo. El tema está en tener unos cuantos polígonos fijos; rectángulos, circulos, eso al final va a dar más o menos lo mismo. Cierto número de estos polígonos se mapearán por UV a un rotary, otro grupo a otro, etc. En total puede haber unos 10 rotaries, cada uno con su animación correspondiente y distintas entre ellas.

Como la idea es que el número de gotas varíe al cambiar la intensidad de la lluvia, se me ha ocurrido un sistema por el cual según el valor del DataRef rain_percent, que va de 0 a 1 cada rotary se posicionará en un fotograma correspondiente con el número de gotas proporcional al valor de dicho DataRef. ¿Como hacerlo?. Fácil, pensando en binario. ¿Extraño?, no tanto, vamos a verlo.

Creamos la animación de cada rotary con 16 fotogramas, eso son valores de 0 a 15 para el custom DataRef de un rotary particular, es decir, que el valor del DataRef, como máximo, tendrá 4 bits, porque 2^4=16 yendo de 0 a 15, como ya hemos visto. Ahora lo que hacemos es poner en cada fotograma el mismo número de gotas que el número de bits a 1 que tenga el valor del DataRef que le corresponde. Así tenemos que para el fotograma nº 1, valor de DataRef 0, no hagrá gota alguna, para el 2º fotograma (valor 1) habrá 1 gota, para el 3º (valor 2) habrá una gota, para el 4º (valor 3) habrá dos gotas, porque el número 3 tiene dos bits a 1 en binario (011).

De este modo, según el valor del DataRef rain_percent podemos escoger qué fotograma de cada rotary mostrar.

Para evitar el reconocimiento de patrones, para lo que el ojo humano es experto, crearemos varios rotaries, entre ellos el nº de gotas por fotograma, segun el valor de su DataRef será el mismo, pero lo habremos dibujado de forma diferente para los diferentes rotaries. Es decir, todos los fotogramas de valor de DataRef = 7 tendrán 3 gotas dibujadas (7 tiene 3 bits a 1 en binario), pero cada rotary las tendrá en posiciones distintas.

Para establecer el valor de cada rotary lo que se hará es escoger N posiciones aleatoriamente, dentro del medio byte que le corresponde, para establecerlas a 1. Es decir, si rain_percent es 0.85, podemos hacer 0.85*3 (el nº máximo de gotas y bits a establecer a 1, -1) = 2,55 ahora redondeamos, lo que se queda en 3, que en binario tiene 2 bits a 1, de modo que ahora escogemos dos posiciones aleatoriamente de las 4 posiciones y las ponemos a 1, y eso para el valor del DataRef de cada rotary, de modo que todos rotaries mostrarán un fotograma con dos gotas, pero podrán ser cualquiera de los correspondientes a los valores de DataRef  3, 5, 9, 10 o 12. Hay que tener en cuenta que no multiplicamos rain_percent por 4 porque solo hay un fotograma equivalente a todos los bits a 1 lo que daría lugar a que si rain_percent es 1 siempre habría el mismo fotograma por rotary y eso no es lo que deseamos.

Si ya hemos dicho que los fotogramas de mismo número de N gotas serán disintos entre los diferentes rotaries, ¿por qué aleatorizar los valores de DataRef para cada uno de ellos?. La intención es que se perciba mayor variedad, la idea es evitar, en la medida de lo posible, la existencia de patrones reconocibles, digamos que el número de rotaries distintos influye en la variedad de gotas sobre toda la superficie en general, lo que podríamos denominar caos espacial, y la aleatoriedad, a la hora de generar los bits a 1, influye en la aleatoriedad a lo largo del tiempo, el caos temporal, intentando mostrar fotogramas distintos, para el mismo polígono, aun cuando tengan el mismo número de gotas cada uno por si no varía en el tiempo el rain_percent de forma significativa.

Mapearemos los polígonos a cada rotary de forma aleatoria también, para que dos polígonos contiguos no compartan el mismo rotary de animación.

Os pongo un gráfico con el esquema de funcionamiento. No se que tal resultado dará hasta que lo pruebe, puede ser que no parezca todo lo aleatorio que sería deseable pero hay que encontrar un compromiso entre como nos parece que queda y el número de rotaries a crear. Cada fotograma de los rotaries será de tamaño reducido, lo justo para que quepan las 4 gotas como máximo (si usamos 16 fotogramas). Yo probaré inicialmente con fotogramas de 16 pixels de ancho, de modo que los 16 fotogramas quepan en un bitmap de 256 pixels de anchura.



Si tenéis el interés o curiosidad suficientes, cualquier duda que os surja con esto,  no dudéis en preguntar.

Mira que si después de tanto pensar queda mal... Bufff...

Un saludo.
« Última modificación: 23 Marzo, 2010, 23:15:35 por kha29096335 »

24 Marzo, 2010, 20:26:17 #31
jorduran
Superusuario
*******
Desconectado Desconectado

Mensajes: 9988



WWW
En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Un detalle que no veo, cuando el binario es 0011, que corresponde a 2 gotas, al igual que el 0101 o el 0110 no lo veo representado en el cuadro "ejemplo con fotogramas 0, 5 y 13 para A, B y J respectivamente" pero en las secuencias de fotogramas de los rotarys A, B, y J el 0011 son 2 gotas pero en diferente ubicación, puedes aclararme el tema  Sonreir, solo por curiosidad y para ver si me aumentan las conexiones neuronales  Cheesy



Un buen aterrizaje es el que sales andando.
Un gran aterrizaje es cuando el avion puede seguir volando.

Telefonica ha cerrado mi WEB sin preaviso.
PHOTOBUCKET A CORTADO LAS FOTOS
24 Marzo, 2010, 21:41:31 #32
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Un detalle que no veo, cuando el binario es 0011, que corresponde a 2 gotas, al igual que el 0101 o el 0110 no lo veo representado en el cuadro "ejemplo con fotogramas 0, 5 y 13 para A, B y J respectivamente" pero en las secuencias de fotogramas de los rotarys A, B, y J el 0011 son 2 gotas pero en diferente ubicación, puedes aclararme el tema  Sonreir, solo por curiosidad y para ver si me aumentan las conexiones neuronales  Cheesy

Ningún problema, a ver si lo explico bien.

En el ejemplo, solo he representado los fotogramas 0 para el rotary A, 5 para el B y 13 para el J, escogidos arbitrariamente, símplemente a modo de ejemplo. El 0011 que indicas, que corresponde al fotograma nº 4 -valor de DataRef de rotary = 3 (0011)- de cualquier rotary, efectívamente, no aparece en el recuadro de ejemplo porque, como digo, solo he representado el 0 del A, el 5 del B y el 13 del J, no busques lógica en por qué he representado esos, el ejemplo era mas bien para ilustrar que los rotaries se distribuyen más o menos de forma arbitraria por los distintos rectángulos, no para ilustrar el algoritmo de selección del fotograma. Si te fijas, en ese ejemplo todos los rectángulos tendrían que tener el mismo número de gotas, todos  2 o todos 3, según el algoritmo descrito, porque el DataRef rain_percent tendría el mismo valor a la hora de calcular los fotogramas a mostrar para todos los rectángulos, sin embargo el ejemplo no lo he puesto consistente con esto, símplemente porque quería hacer patente la relación entre el cuadro izquierdo con las letras de los rotaries y los fotogramas escogidos de cada rotary.

El número de gotas que puede tener cada rectángulo -polígono- dependerá directamente del valor de intensidad de la lluvia, de modo que cuando dicho indicador diga que el número de gotas a representar por rectángulo es de 2, sólo podrán aparecer fotogramas con dos gotas, es decir, podrán aparecer los fotogramas 3, 5, 6, 9, 10 y 12. Los fotogramas, dentro de un mismo rotary, aun cuando tengan el mismo número de gotas entre si, las tendrán dibujadas en distinto lugar, para que cuando ocurra que el marcador de intensidad de lluvia no varíe significatívamente y durante una cantidad de tiempo determinada y solo se muestren fotogramas con el mismo número de gotas, estas aparezcan en posiciones distintas a lo largo de ese tiempo -aunque dentro del mismo rectángulo- dado que es de esperar que el algoritmo, aun a pesar de escoger fotogramas con el mismo número de gotas, los escoja distintos a cada ciclo. Si en el caso de los fotogramas con dos gotas, 3, 5, 6, 9, 10 y 12 las hubiesemos dibujado en el mismo lugar, para el mismo rotary, cuando el número de gotas a mostrar fuese 2 daría igual escoger cualquiera de estos fotogramas, pues todos ellos serían iguales. Son distintos para que, aun cuando el número de gotas a mostrar por rotary se mantenga constante durante un tiempo determinado, las gotas varíen de lugar y de la sensación que caen gotas en posiciones distintas, dentro del mismo rectángulo.

Por otra parte los diferentes rotaries tienen los fotogramas pertenecientes al mismo binario distintos, para disimular patrones que puedan formarse dado que el cristal es dividido y cubierto por estos rotaries, pero en número limitado, repitíendosen varias veces el mapeado UV de cada rotary. Si dos rectangulos adyacentes, digamos que tienen asociado el rotary A y B, respectivamente, y el fotograma del binario 0011 fuese idéntico en ámbos rotaries, podría suceder que en ámbos rectángulos apareciese la misma formación de gotas cuando el fotograma escogido fuese ese, lo que daría a entender un patron de texturas demasiado obvio a lo largo de la superficie.

Resumiendo:
Los fotogramas con el mismo número de gotas y dentro de un mismo rotary, son distintos entre sí para disimular patrones de gotas a lo largo del tiempo.

Los fotogramas con el mismo número de gotas, entre distintos rotaries, son distintos entre sí para disimular patrones a lo largo de la superficie.

Espero haberlo aclarado y haber resuelto tus dudas. La verdad es que es un poco lioso, sí.

Ahora estoy realizando simulaciones de este algoritmo en Visual Basic, que me da un resultado muy inmediato, para ver como queda en la simulación, de momento parece que luce decente. Me gustaría poner un vídeo para que se pueda apreciar como llueve más cuando rain_percent así lo indica, aunque lo tengo chungo, no tengo conectado el PC a video y Fraps no graba aplicaciones GDI, solo Direct X y OpenGL. Veré a ver que puedo hacer para intentar mostraroslo.

Gracias y un saludo.

26 Marzo, 2010, 15:24:15 #33
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Hola,

He podido subir un video a youtube con el test del algoritmo a implementar para la representación de las gotas de fondo.

<a href="http://www.youtube.com/v/rdPS7t2pMu0&rel=1" target="_blank">http://www.youtube.com/v/rdPS7t2pMu0&rel=1</a>

La barra que muevo con el ratón es el equivalente al DataRef de X-Plane rain_percent, solo que multiplicado por 100. El algoritmo funciona de dos maneras distintas. La homogénea y la heterogénea. En la primera todas las celdas muestran el mismo número de gotas, es decir, que si toca mostrar N gotas por celda, N gotas aparecen en cada una de las celdas. En la heterogénea cuando las gotas a mostrar son N no se muestran esas N en todas las celdas, si no que, de forma aleatoria por celda, las gotas mostradas son entre 0 y N.

EL método heterogéneo escala mejor con los diferentes valores de rain_percent, como podéis observar, a valores bajos las gotas aparecen tímidamente, y su aumento en número es mucho más suave a medida que aumenta rain_percent. Esto viene dado por el hecho de que con el algoritmo en modo heterogéneo, es posible que el número de gotas mostrado por celda sea 0 o menor de N.

También tengo que decir que si el número de bits de valor de DataRef de los rotaries se aumenta en 2, pasando de 4 a 6, y por lo tanto en lugar de 16 fotogramas pudiese haber 64 fotogramas por rotary, podría aprovechar los nuevos para dibujar, en lugar de gotas redondas, salpicaduras de modo que el DataRef de velocidad podría gobernar la aparición de gotas redondas o salpicaduras según la velocidad del avión. Así puedo mostrar gotas normales cuando estemos parados y gotas alargadas o salpicaduras cuando estemos en movimiento. Esto incremetnaría el tamaño del gráfico de los rotaries hasta 1024 pixels de ancho (16 x 64, si dibujo cada gota con una anchura de 16 pixels, que creo que estará bien y será mas que suficiente).

Vuestras opiniones serán bienvenidas. Un saludo.

26 Marzo, 2010, 20:11:40 #34
jorduran
Superusuario
*******
Desconectado Desconectado

Mensajes: 9988



WWW
En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Perfectamente comprendido, lo intuía pero con intuirlo no es suficiente, ahora esta perfectamente claro.

Tras ver el video, queda, a mi parecer, mucho mas natural el método heterogeneo

Felicitaciones por tu trabajo e investigación en curso


Un buen aterrizaje es el que sales andando.
Un gran aterrizaje es cuando el avion puede seguir volando.

Telefonica ha cerrado mi WEB sin preaviso.
PHOTOBUCKET A CORTADO LAS FOTOS
05 Abril, 2010, 15:18:14 #35
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Hola,

Tras unos días de descanso que me he tomado de mi mismo -la parte más creativa y menos lúdica- aquí os dejo otro vídeo que muestra una modificación al algoritmo de la lluvia. He agregado el método Pseudohomogeneo, que en realidad no tiene nada que ver con pseudo ni con homogéneo, pero algún nombre le tenía que dar a la etiqueta en el programa.

Con este método observaréis que la generación de las gotas escala mejor con el valor de RainPercent. El método homogéneo era demasiado agresivo, enseguida se llenaría la pantalla con gotas, además, se desperdiciarían los fotogramas con 4 gotas, porque no hay fotogramas distintos para un mismo Rotary con 4 gotas, con 4 gotas solo hay un fotograma por rotary, lo que produce que cuando son 4 las gotas a mostrar, estas no cambien de posición por celda con el tiempo, dado que el algoritmo homogéneo siempre muestra por celda el número total de gotas a mostrar según RainPercent .

El heterogéneo, como el compañero jorduran dijo, parece más natural, pero a niveles altos de RainPercent es demasiado "suave", hay muchas áreas sin gotas, de modo que me he decidido a implementar algo entre medias de los dos. El método Pseudohomogéneo genera gotas tímidamente a valores bajos de RainPercent, en valores bajos-medios hay más gotas, pero aún hay zonas con posibilidad de que no caiga ninguna, en un momento dado; a valores medios la lluvia es mas copiosa y a valores altos lo es aún más. Es decir, con el nuevo método hay más situaciones distintas en cada momento. Personalmente creo que es el que mejor queda.

Ahí va el vídeo
<a href="http://www.youtube.com/v/0JlP4hUqjA4&rel=1" target="_blank">http://www.youtube.com/v/0JlP4hUqjA4&rel=1</a>

05 Abril, 2010, 18:34:58 #36
jorduran
Superusuario
*******
Desconectado Desconectado

Mensajes: 9988



WWW
En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Muy conseguido, ya hay otro paso resuelto  Gi&ntilde;ar


Un buen aterrizaje es el que sales andando.
Un gran aterrizaje es cuando el avion puede seguir volando.

Telefonica ha cerrado mi WEB sin preaviso.
PHOTOBUCKET A CORTADO LAS FOTOS
10 Abril, 2010, 12:18:59 #37
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Muy conseguido, ya hay otro paso resuelto  Gi&ntilde;ar

Hola de nuevo.

Gracias Jorduran se hace lo que se puede con lo que se tiene ;-)

Había empezado yo con el dibujado de los PNG para las texturas animadas cuando hoy -maldita sea la ley de Murphy-, al encender el equipo para continuar con el trabajo, parece ser que se ha dañado el disco duro del sistema. No es que haya perdido nada de lo hecho, pues todo en lo que trabajo lo tengo duplicado y además almacenado, aparte, en un sistema RAID 5 externo, pero bueno, tengo que diagnosticar el problema -ójala sea solo problema de disco-

Si realmente es el HD lo tendré que sustituir por uno nuevo e instalar la imagen de sistema, indudablemente, a pesar de no haber perdido nada, me llevará su tiempo.

Símplemente que lo sepáis, que si es problema de disco -que tiene todas las pintas- el lunes encargaré uno nuevo, segúramente para el miércoles ya lo tendré y en un dia o dos más estaré en condiciones de continuar.

Saludos

15 Abril, 2010, 21:34:10 #38
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Hola,

Ya parece que he reparado el equipo de desarrollo gráfico, de modo que me encuentro en disposición de continuar con el dibujado de los PNGs.

Saludos.

15 Abril, 2010, 21:38:30 #39
DeltaRomeo
Superusuario
*******
Desconectado Desconectado

Mensajes: 2201




En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Y has pensado en simular el efecto de los wipers?

15 Abril, 2010, 21:41:58 #40
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Y has pensado en simular el efecto de los wipers?

Pues sí, entra dentro de mis intenciones. Algo haré o intentaré hacer  Gi&ntilde;ar

16 Abril, 2010, 21:35:31 #41
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Muy buenas,

Aqui os dejo una pequeña muestra del trabajo. Se trata de la animación de múltiples gotas para el rotary de tipo A. Según la descripción del método, como ya habréis visto anteriormente en este hilo, habrá varios tipos de rotary, por tipo quiero decir que cada uno contendrá una animación de N gotas distinta. A X celdas rectangulares del polígono del "cristal" se le asignará un rotary del tipo A, a otras X otro de tipo B...etc. Al final no sé cuantos tipos tendremos, eso dependerá de lo aleatoria que parezca la lluvia y del tamaño de la textura del panel, dado que todos los rotaries deben ir en esa textura.

Bueno, aquí está la animación. La disposición de las gotas en ella, para cada fotograma la he hecho igual que la correspondiente en el programa en Visual Basic para la simulación del algoritmo.



Todas las gotas son iguales, pero, en caso de necesidad, para mejorar el aspecto y aleatoriedad de las gotas en la lluvia, podremos deformar dichas gotas en cada fotograma, para que parezcan gotas distintas. Eso probaré a hacerlo posteriormente, lo primero es tener todas las animaciones para todos los tipos de rotary, de modo que pueda integrarlas con la geometría del avión de ejemplo que estoy usando, a ver como queda.

Saludos

11 Mayo, 2010, 20:07:00 #42
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Símplemente comentaros que el proyecto no está muerto, pero estoy "perruno", con muy poco tiempo libre y, claro, la cosa va muy, muy despacio, más de lo que había previsto, porque también me apetece volar, y claro... debo repartir el tiempo del que dispongo.

El otro día en un par de horas libres comencé con el mapeo UV del área sobre el que situar a lluvia, ya está el mapeo UV terminado -ya pondré algunas capturas-. De esta primera fase queda terminar las animaciones de los rotary -tengo hechas la de dos tipos- e ir poniendolos en el cockpit 3D. Estoy usando un cockpit de 2048 pixels de resolución, para que se vean mejor las gotas al hacer zoom.

Un saludo.

18 Mayo, 2010, 23:39:43 #43
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Buenas,

Como os dije en una aportación anterior, aqui os pongo unas capturas del parte del proceso de creación del sistema de la lluvia esta...

Ya tengo las animaciones de los rotaries, al he hecho 4 tipos de ellos, es decir, que podrá haber 4 tipos de animación diferente para las gotas. Todo el parabrisas consta pues de un "grid" en el que en cada celda habrá una animación de gotas chocando en el cristal, con 4 animaciones distintas en total.

Las capturas que os pongo a continuación son la parte correspondiente a la creación del UV-mapping del parabrisas, que podeis ver como se ha dividido en celdas. En la creación del UV-Map se tratará de dejar todas las celdas totalmente planares con respecto a la textura y del mismo tamaño. Posteriormente se mapeará cada celda a uno de los 4 rotaries del panel de instrumentos.

En la edición de los vertices para el UV-Mapping inicial se ha tenido como punto de referencia el cursor 2D de la ventana de texturas en Blender, tal y como indico en la siguiente captura



Ahora un resumen de los pasos para la creación del mapa UV:









El próximo paso consistirá en realizar con X-Plane un "preview" del panel para posicionar adecuadamente cada celda sobre el rotary que le corresponda.

Si tenéis alguna duda sobre el proceso general de creación del mapa UV a partir de la malla con gusto os las responderé si está en mi mano.

Saludos

19 Mayo, 2010, 10:57:57 #44
DeltaRomeo
Superusuario
*******
Desconectado Desconectado

Mensajes: 2201




En línea
Re: Proyecto: LLuvia dinámica en cabina 3D

Uuuuuuuufff

No me he enterado de nada, pero acojona  Sonreir

Tags:
Páginas: 1 2 [3] 4   Ir Arriba
  Imprimir  
 
Ir a:  

www.x-plane.es.
Página creada en 0.134 segundos con 19 queries.