POVRAY en Castellano

Un sitio de intercambio sobre POVRAY

Aqui presento otro idea que llevaba tiempo rondado mi atormentada cabeza: crear paisajes con POVRay. Pero la cuestión no es el terreno, sino distribuir vegetación o rocas en el entorno. He estado trabajando sobre este tema y obtenido estos resultados. Pero tengo un problema que me gustaría compartir y si es posible tener vuestra opinión.

La distribución de los árboles de la imagen adjunta se realiza de forma aleatoria pero homogenea, es decir la probabilidad de que aparezca un árbol es igual para todos los puntos. Posteriormente, se estudia la pendiente del terreno y la elevación del mismo para decidir si realmente existirá un árbol o no. La cuestión es la siguiente, realmente lo que querría es que la distribución de los árboles no fuese homogenea, sino que tuviese un patrón aleatorio correlacionado; algo así como el patrón formado por la instrucción "bozo". Tengo algunas ideas que quizas funcionen pero querría saber vuestra opinión.

Compartir

Responde a esto

Respuestas a esta discusión

He estado ojeando las imágenes de Jaime Vives Piqueres y de Christoph Horman antes de atreverme a contestar a tu pregunta. Aunque sus imágenes son condenadamente buenas no encuentro ese punto sútil de aleatoriedad que pides. O hay pocos árboles/plantas distribuidos aleatoriamente o no los hay (además de usar isosurfaces en lugar de height_fields).

A ver... mientras escribo esto una idea cruza por mi cabeza.
Supongamos que tu campo elevado es de 100 x 100 unidades. Tu quieres tener X bosquecillos distribuidos aleatoriamente por su superficie, no una gran masa arbolada, como hay ahora.

Crea un array de X elementos con las coordenadas (pueden ser aleatorias) donde estarán enclavados esos bosquecillos (usa tus pruebas de posicionamiento de árboles para que no caigan en la cúspide de un monte).

Del mismo modo en que has dejado caer los árboles hasta ahora añada la condición de que se generen sólo si estan a una determinada distancia de tus puntos aleatorios de control

¿se parece en algo a lo que habías pensado?

Un saludo

Responde a esto

Gracias por tus comentarios y por tu aportación. Obviamente parte de la inspiración proviende de las imágenes de Jaime Vives y Christoph Horman. La idea es hacer algunas macros para distribuir árboles, arbustos, hierba, rocas, etc por el paisaje. Cada elemento será generado por otra macro que creará un objeto con tres niveles de detalle, en función de la distancia a la cámara (por aquello de reducir tiempo y memoria). Por ejemplo: el árbol tendría tres niveles, uno para árboles muy lejanos similares a los de la escena del post anterior, otro nivel similar a los de la imagen de este post para árboles a una distancia intermedia y otro para nivel para vistas más cercanas hecho con isosurfaces. Si quiero colocar árboles muy cerca de la cámara habrá que utilizar árboles generados con alguna macro más elaborada (pero en eso ya... uf, me quedo con los que ya hay por internet).

Tu idea es buena, pero tiene el problema que quiero evitar: si situo un grupo de árboles en una zona, esa zona tendrá una forma, posiblemente rectangular, y si el número de árboles es suficientemente alto, la forma rectangular se hará evidente. Por esa razón estoy buscando la forma de generar un patrón más natural como el del patrón "bozo".


De todas formas tu idea es interesante, porque se puede utilizar con una densidad baja de árboles para que no se vea la forma rectangular. Además si se tiene en cuenta que la posición es aleatoria la forma se verá alterada por la topología del terreno (altura y pendiente), dando como resultado algo que debe parecerse a lo que yo quiero.

Otras opciones que barajo son:
- Utilizar el método que me has planteado pero pertubando un poco las posiciones con la función vturbulence. Pero aún no he hecho las suficientes pruebas para comprobar los resultados.
- Utilizar una doble comprobación con la función trace. Una primera contra un height_field de baja resolución y con el water_level adecuado para definir el patrón global de la distribución de los árboles. Una vez definida si la posición XZ es válida, calcular la coordenada Y sobre el terreno ( y obviamente verificar si es posible ubicar un árbol en función de la altura y la pendiente). El problema de esto es que el parsing será mucho más lento.


Aún queda mucho por delante: textura del terreno, atmosfera, más detalle en el terreno, iluminación, etc.

Responde a esto

Aunque poco, he seguido trabajando con la idea de los paisajes. He implementado en la macro de distribución de árboles la posibilidad de disponer de tres niveles de detalle para los árboles en función de la distancia. Además he hecho algunas mejoras en la forma de distribuir los árboles:
- Pendiente mínima y máxima y alturas mínimas y máximas con una pequeña perturbación aleatoria ajustable.
- La inclinación de los árboles depende de la pendiente del terreno donde se ubican.
- El tamaño y la rotación del árbol es aleatoria. (de momento el diseño del árbol es único).

Además la macro puede utilizarse para distribuir hierba (tengo una imagen terminado de diseñar que muestra hierba) y cualquier otro objeto como arbustos, rocas, etc. (esto será lo próximo).

Dejo una imagen con una distribución de árboles, esta vez, sobre un terreno con isosuperficies. La textura del terreno también la he mejorado, pero en esta imagen no. En próximos días les mostraré nuevas imágenes.

Espero que les guste.


Saludos.

Responde a esto

Dejo otra imagen esa vez realizada con un height_field utilizando function como mapa de alturas.


Saludos

Responde a esto

Gracias Francisco Javier. Sigo con mucho interés tu trabajo. Saludos desde Córdoba, Argentina.
Mario Antonio Herrero Machado

Responde a esto

Hola a todos, hola Francisco.

Leyendo lo que ustedes proponen (que me parece bien) se me ocurren un par de cosas:

Más allá del posicionamiento de los árboles, ten en cuenta que los árboles deberían estar sobre un sustrato terroso. Eso le dará mayor realismo a la escena.

Con respecto al posicionamiento, yo lo dejaría al azar, pero agregaría una variable relacionada a la altura: cuando más cerca de un valle se encuentre, mayor es la probabilidad de agregar un árbol.
A eso le puedes sumar otra variable más relacionada con el tamaño de cada árbol, para que no se superpongan ni entremezclen innecesariamente. Se me ocurre que si colocas primero los árboles más grandes (tamaño relativo) luego puedes "ponerle cerca" algunos medianos, y en una siguiente pasada otros más chicos.

Si se me ocurren más cosas, te contaré.

Saludos.

Nos escribimos,
Daniel

Responde a esto

Los árboles no salen de la nada. Salen de una semilla, por ejemplo cae una piña rueda y salen en un sito varios árbolillos juntos. Luego compiten y unos cuantos se imponen a sus compañeros.

Los árboles y las plantas en general tienen a formar pequeños grupos. Un bosque en una población donde casi todo el espacio está aprovechado pero puntualmente aparecen claros que serán colonizados más adelante por otros árboles originando amplias zonas con árboles más jóvenes que en el resto del bosque. Investiga la dinámica de los bosques, observa fotos por satélite, pide consejo a un botánico, y hazte preguntas:

¿Cómo demonios llegó la semilla de un árbol a la cima escarpada de una montaña? y ¿cómo hizo para no rodar a otro sitio?, ¿cómo resistió a la meteorología de una cumbre? (fuertes vientos, rayos, erosión).

La primera imagen es buena, pero aparte del detalle de las cumbres deberías añadir otro parámetro para aleatorizar una posterior aparición de algunos claros en el bosque, y una pequeña cantidad de árboles jóvenes en algunos de los claros.

Dejando aparte el algoritmo que me parece un campo de investigación muy bonito, la uniformidad de las fórmas de los árboles también puede ser un área para mejorar la estética del resultado.

Responde a esto

Para distribuir los arboles segun un patron, no tienes mas que usar una funcion de pigmento y evaluarla dentro del bucle para la posicion de cada arbol.

Por ejemplo, al principio, defines la funcion:

#declare f_distrib=
function{
pigment{
bozo
}
}

y luego, dentro del bucle, usa un #if para comprobar el valor de la funcion:

#if (f_distrib(posicion.x,0,posicion.z).gray>0.5)
...
#end

donde "posicion" es el emplazamiento del arbol. Fijate que he usado un 0 para la componente de altura, asi solo evaluas el patron en "2D". Este truco tambien lo puedes usar para distribuir distintas especies, para que esten juntas pero no revueltas... :)

Saludos, y sigue con ello: tiene muy buena pinta!

Responde a esto

Gracias a todos por los comentarios. Los tendré en cuenta. Efectivamente, Jaime, esa es la mejor solución. Estaba en esa línea pero tu me lo has terminado de resolver. Eso esa exactamente lo que quería encontrar.

En cuanto a lo que comenta Axxonita, el algoritmo actual tiene en cuenta dos variables la pendiente (mínima y máxima) y la altura (mínima y máxima), todas ellas con una pequeña perturbación aleatoria. Esto hace que los árboles se acumulen en los valles y laderas poco pronunciadas o en su caso en las cumbres dentro de los límites de altura. Adicionalmente la inclinación de los árboles depende de la pendiente del terreno. Pero como bien dices, se pueden introducir nuevos parametros para obtener resultados más realistas. Algunos de ellos los estaba contemplando ya, como son mezclar varias especies de árboles y hacer que los árboles en los bordes de los bosques sean más jóvenes (de momento no distingo la edad de los árboles). Por último otro aspecto que estaba considerando es que los árboles que crecen en zonas más escarpadas (mayor pendiente) sean más raquíticos.

Pero todo esto, gracias a la aportación de Jaime se puede mejorar considerablemente. Ahora se pueden definir mapas con las características (como por ejemplo la fertilidad) del terreno para decidir que tipo de planta crece, con qué vigor, la edad del árbol, etc.

Cuantos más parámetos puedan controlarse más fácil será modelar bosques que tengan en cuenta todos los aspectos que comenta Antonio Castro. Todas esas variables deben poder evaluarse de algún modo. Creo que utilizando el método propuesto por Jaime de abre un ámplio campo para esto. Claro que aún me queda un punto crítico: todo esto se basa en que la forma física del árbol este afecta a estos parámetros. De momento el modelo de árbol es fijo. Habría que crear un modelo de árbol sensible a esas variables (edad, forma, tamaño, vigor...). Pero por supuesto, con la menor cantidad posible de objetos para poder crear verdaderos bosques.

Queda por resolver otro problema: el de las colisiones de árboles. Este puede tener una solución similar a la que utilicé en la animación de DLA y si resulta factible puede servir para hacer que los árboles que crecen cercen de árboles grandes sean más pequeños o incluso dedicir la especie del árbol. Bueno, bueno, menudo trabajo.

Espero tener tiempo, ganas y que estemos todos en contacto. Saludos y gracias de nuevo.

Responde a esto

RSS

Insignia

Cargando…

Tu caja de dialogo en POVRAY en Castellano

© 2009   creado por Mario Antonio Herrero Machado en Ning.   Crear tu propia red social

Insignias  |  Informar un problema  |  Privacidad  |  Términos de servicio

Iniciar sesión para hablar