Jump to content
Quel

Trazar una linea sobre un terreno

Recommended Posts

Buenos días, hoy acudo a vosotros mas en búsqueda de ideas que no de soluciones.
Me interesaría poder "dibujar" una linea sobre un terreno irregular, pero no se me ocurren ideas que ofrezcan los resultados deseados. ¿ Como lo haríais ?. ¿ Alguno tiene una idea interesante ?

La primera opción es el uso de LineRenderers. Tiene a su favor que es una herramienta fácil de usar, pero en su contra que el resultado no es muy bueno. Cuando la camera se encuentra elevada y apuntando hacia abajo, queda muy bien. Pero en el momento que la camera desciende para tener una visión mas a ras del suelo, la cosa se estropea.
Eso por no mencionar que tengo que poner muchos vértices intermedios para adaptarse correctamente a la orografía del terreno, y aun así a veces se generan problemas de cliping.

La segunda opción es una Mesh auto-generada. Ya tengo bastante práctica generando/ediatando mallas sobre la marcha y no es un tema que me asuste en absoluto.Con este método podría evitar el problema de que el resultado se estropea cuando la camera desciende  a nivel del suelo. Pero sigo teniendo el problema de que me resulta complicado adaptar correctamente la malla los desniveles del terreno.

En último lugar había pensado en usar un Projector. Esta solución es la mejor para resolver el problema de la proyección de la ralla sobre el suelo. Pero por contra me ofrece limitaciones un tanto molestas en otros aspectos. Como que por ejemplo, no puedo controlar cómodamente sus variaciones de transparencia a lo largo del recorrido.

¿ Sugerencias ? ¿ Ideas ? ¿ Opiniones ?. ¿ Como lo haríais ?

Edited by Quel

Share this post


Link to post
Share on other sites

O tu no has entendido mi pregunta o yo no entiendo tu respuesta. ¿ Que me aporta un plugin de curvas Bezier al problema de proyección de una linea sobre un terreno irregular ?.

Edited by Quel

Share this post


Link to post
Share on other sites

Quel, creria que lo mejor seria un Proyecto, ya que de otra manera seria un poco complicado, aun que tenga desventajas es lo que quedaría mejor.

Share this post


Link to post
Share on other sites

O tu no has entendido mi pregunta o yo no entiendo tu respuesta. ¿ Que me aporta un plugin de curvas Bezier al problema de proyección de una linea sobre un terreno irregular ?.

"Me interesaría poder "dibujar" una linea sobre un terreno irregular"

Wikipedia sobre curvas de Bezier:

"La idea de definir geométricamente las formas no es demasiado compleja: un punto del plano puede definirse por coordenadas. Por ejemplo, un punto A tiene unas coordenadas (x1, y1) y a un punto B le corresponde (x2,y2). Para trazar una recta entre ambos basta con conocer su posición.

Si en lugar de unir dos puntos con una recta se unen con una curva, surgen los elementos esenciales de una curva Bézier; los puntos se denominan «puntos de anclaje» o «nodos». La forma de la curva se define por unos puntos invisibles en el dibujo, denominados «puntos de control», «manejadores» o «manecillas»."

Te paso la versión en Esperanto, por si es problema de idioma:

"La punktoj Pi estas la apogaj punktoj por la kurbo. La plurlatero formita per trakonektanta la apogaj punktoj per rektaj strekoj, startante de P0 kaj finante kun Pn, kio estas, la konveksa koverto de la Pi , estas nomata kiel la plurlatero de Bézier, kaj la plurlatero de Bézier enhavas la kurbon de Bézier."

Si no sabes como preguntar no esperes una respuesta adecuada.

Share this post


Link to post
Share on other sites

Quel, creria que lo mejor seria un Proyecto, ya que de otra manera seria un poco complicado, aun que tenga desventajas es lo que quedaría mejor.

El problema que mas me preocupa del Proyector es coste en cuando a rendimiento. Cada vez que una malla es tocada por un proyector, esta se redibuja. Si el terreno es afectado por 120 proyectores, al final acaba siendo renderizado 121 veces.
No dudaría mucho en usar Proyectores si fuese a usar unos pocos, pero puedo llegar a acumular hasta 100 o 150 "trazos" proyectados sobre el terreno. Es algo que temo que me pueda reventar el rendimiento. Y teniendo en cuenta que estoy apuntando a dispositivos móviles, no dispongo de muchos recursos.

Share this post


Link to post
Share on other sites

La primera opción es el uso de LineRenderers. .... Pero en el momento que la camera desciende para tener una visión mas a ras del suelo, la cosa se estropea.
 

La segunda opción es una Mesh auto-generada. ...

Podrías extruir un cubo para generar la línea. Solucionaría el problema del ángulo de visión.

Share this post


Link to post
Share on other sites

Y TrailRenderer? Se suele usar para dibujar las líneas de derrape de un coche, y se adapta al terreno por el que se va trazando. También se puede configurar la distancia entre Vertex para que el mesh que se va creando sea más o menos suave.

Share this post


Link to post
Share on other sites

Una idea muy divertida, aunque si es para una línea dinámica puede que no te sirva, es poner una cookie a la luz. Yo lo he hecho así en el Colonial y el resultado mola porque puedes cambiar el tamaño y hacer efectos (https://youtu.be/NvKiA7x7dAY -> 0:20).

También he probado generar un mesh y el resultado también está chulo para generar un grid, pero supongo que quedaría anguloso en una línea.

La idea de @Mantis del Trail también me parece buena, aunque creo que te pasaría como con el Line Renderer.

Share this post


Link to post
Share on other sites

Y TrailRenderer?

Me sigo encontrando con el mismo problema de que el efecto queda "feo" cuando la camera desciendo a nivel del suelo.

Una idea muy divertida, aunque si es para una línea dinámica puede que no te sirva, es poner una cookie a la luz.

Me da un poco de miedo que esto pueda joderme el rendimiento. Una cookie de luz no dista mucho de un proyector(por no decir que practicamente nada). Si uso 5 o 10 proyctores, a lo mejor no pasa nada, pero si meto 200, la cosa se puede jorobar, y mucho.

De momento me estoy decantando por una mesh auto-generada. Sigue generando problemas en algunos puntos del terreno(véase la linea de color cyan en la derecha). Pero es que no sé muy bien como leer de forma correcta la malla del suelo. En lugar e buscar donde la malla cambia, me limito a hacer un numero X de subdivisiones en el recorrido y adaptar cada punto a la altura de la malla. Sin embargo tiene la ventaja de que puedo unir todas las lineas en una sola malla. Me da igual si hay 1 o 200 rallas, son un solo objeto.

R5uLYkC.png

 

Share this post


Link to post
Share on other sites

Yo veo bien esa solución. No veo el problema que dices con la línea cyan, parece que está respetando la malla en los 3 segmentos. Si acaso se me ocurre que obtengas la normal del tris sobre el que estás creando la malla para acoplarla bien, pero da la sensación de que ya lo estás haciendo ¿No?

Share this post


Link to post
Share on other sites

La parte que ha sido un poco complicada ha sido hallar donde están las aristas de la malla, para poder calcular donde tengo que "cortar" la linea y realinearla. Esta mañana ya lo he finiquitado. Ahora la linea lee la malla que tiene debajo y solo crea las subdivisiones necesarias, sobre cada arista, para adaptarse perfectamente.

Share this post


Link to post
Share on other sites

Os dejo una imagen casi final de la linea. Ahora toca ajustar parámetros, texturas y mil chorraditas mas para dejarla como quiero. Pero digamos que lo que es el núcleo, ya lo doy por finiquitado.

4uasK1t.png

Como podéis ver(cuesta un poquito por los colores). Ahora la linea se adapta mas fielmente a la malla del suelo y solo genera cortes donde son necesarios. Genero dos cortes por arista encontrada. Un corte un poco antes de la arista y otro un poco después. Aun así acabo generando menos triángulos que la versión anterior donde hacia cortes equidistantes durante todo el recorrido.
También se generan cortes adicionales para controlar el color por zonas. Ya que la ralla esta coloreada usando VertexColor.

Edited by Quel

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...