Jump to content
JuanKa

Quitar arboles de terreno por codigo

Recommended Posts

Que tal, la situación es la siguiente:

Tengo unos árboles con su respectivo collider y los he puesto con la herramienta de terreno. Deseo poder eliminar cada arbol al que me acerque o apunte (por ejemplo para recolectar madera de ese arbol y eliminarlo una vez que termine) funciona muy bien con arboles puestos manualmente, pero los colocados con la herramienta de terreno no se puede. Use un raycast, por ejemplo, y todos los arboles creados por terrenos me los detecta como "terrain" y no encuentro la forma de saber o detectar cada uno de manera individual. Alguna sugerencia? o de que manera puedo interactuar con los objetos creados con la herramienta de terrain, ya que colocar tantos arboles, hierba, rocas, etc. es demasiado laborioso. Gracias.

Share this post


Link to post
Share on other sites

los "terrain" def unity guardan los arboles en un array....

hace 7 horas, JuanKa said:

Use un raycast, por ejemplo, y todos los arboles creados por terrenos me los detecta como "terrain" y no encuentro la forma de saber o detectar cada uno de manera individual. Alguna sugerencia?

los arboles tiene collider "capsule" pero unity mexcla (une) los collider de los arboles con los del terreno, por eso te los detecta como terrain...

tienes que mirar "hit.normal.Y" ... porque si es >1 es el suelo... pero si es ==0 es un arbol

dentro de "terrain.treeInstances" estan los arboles... su posicion y mas informacion...

tendrias que comparar la posicion que te ha dado tu raCastHit" con la de cada arbol en "treeInstanced"... y el arbol que este mas cerca dfe una unidad (por poner una cantidad)... pues ese arbol es....  

tendrias que crear otro "treeInstance[] nuevosArboles" en el que esten todo los arboles menos el que has buscado.... y volverlos a asignar al terreno

Share this post


Link to post
Share on other sites

Gracias por la respuesta, intentaré realizarlo de esa manera. Y no sé si pueda preguntar aqui mismo: los diseñadores utilizan herramientas para colocar este tipo de objetos, árboles, arbustos, rocas, etc. o lo hacen todo manualmente y objeto por objeto? y me refiero a todos aquellos objetos que tendrán interacción y un comportamiento determinado en el videojuego. Saludos.

Share this post


Link to post
Share on other sites
hace 32 minutos, JuanKa said:

Gracias por la respuesta, intentaré realizarlo de esa manera. Y no sé si pueda preguntar aqui mismo: los diseñadores utilizan herramientas para colocar este tipo de objetos, árboles, arbustos, rocas, etc. o lo hacen todo manualmente y objeto por objeto? y me refiero a todos aquellos objetos que tendrán interacción y un comportamiento determinado en el videojuego. Saludos.

pues también es una de mis dudas esto, estaré atento a la respuesta de los expertos jajaj

aún no me puse a programar esto, pero yo pensé en programarme una herramienta parecida a la que se usa en el terrain pero para instanciar prefabs (arboles) para modificarlos por ejemplo para cortarlos, hacer que ardan etc..
ya que dudo que se pueda hacer con el terrain.

 

Share this post


Link to post
Share on other sites
8 hours ago, JuanKa said:

los diseñadores utilizan herramientas para colocar este tipo de objetos, árboles, arbustos, rocas, etc. o lo hacen todo manualmente y objeto por objeto? y me refiero a todos aquellos objetos que tendrán interacción y un comportamiento determinado en el videojuego. Saludos.

Bueno, en líneas generales sí, se ubican con herramientas, según todas las GDC que me clavé y los inumerables juegos que jugué te diría que se nota eso, aunque no está tallado en piedra, podrías hacerlo a mano uno por uno lo más bien... pensá un skyrim poniendo manualmente todos estos elementos, una eternidad tardás, aunque existen detalles muy importantes (y que siempre ignoré) que le dan ese realismo que solo se obtiene cuidadosamente poniendolos a mano.

Por ejemplo : mira estas dos imagenes (las que conseguí):

TheElderScrollsVSkyrim-12022011-03.jpg

SkyrimSE-2016-10-27-22-23-14-03.png?fit=

Fijate que en la primera debajo del árbol central, y en la segunda al lado de la roca (inf der) tenés una elevación, esa elevación es en reaidad un modelo 3D, no es parte del Terrain y está en todas las partes del mapa, hace de intermediario entre caminos (gralmente) y Terrain, aunque puede estar en cualquier lado. Por supuesto tiene el mismo color/material que esa parte terreno, a veces tienen extras (rocas o plantas) que hacen el blend entre modelo 3D y terrain mucho mejor. La cosa es que si no se colocara eso a mano sería imposible hacerlo por defecto pintando meshes (salvo que se tenga alguna herramienta más personalizada), tienen la rotación y escala justa, incluso a veces hay varias una al lado de la otra o encima.

Existen muchos "3D Placer" (creo que se llaman así) incluso yo me hice varios, la ventaja que tenés al meterlos con el Terrain es que muchos ligan propiedades de alineación, aleatoriedad, clima(wind, blending, etc si fuera grass), resolución de detalle (tamaño del patch, esto mejora mucho la performance), densidad de detalle, visibilidad, materiales (Ej con el grass, tiene un shader que responde bien al sol por ej), LOD y cualquier otro tipo de optimización que pueda haber en el sistema, vs colocandolos vos mismo a todo. Ahora, si tenés tu placer (o no) y tus versiones LOD (que para el terrain también las tenés que tener) no deberías tener ningún problema es hacer la tuya cagandote en el sistema, probablemente sea lo que muchos PRO hacen.

Share this post


Link to post
Share on other sites
hace 1 hora, Kvashir said:

pues también es una de mis dudas esto, estaré atento a la respuesta de los expertos jajaj

aún no me puse a programar esto, pero yo pensé en programarme una herramienta parecida a la que se usa en el terrain pero para instanciar prefabs (arboles) para modificarlos por ejemplo para cortarlos, hacer que ardan etc..
ya que dudo que se pueda hacer con el terrain.

 

Exacto lo que busco, tener prefabs listos para cualquier comportamiento pero poderlos agregar con la herramienta de terrain o algo parecido, he visto videos como este donde crean una pequeña escena y lo hacen de manera manual, pero es algo pequeño, quien sabe que proceso utlicen cuando es un mapa grande (o tal vez por el número de personas que lo hacen no sea tanto tampoco, tal como dice lightbug).

Seguiré investigando y tratando de buscar opciones como las que me han comentado, a parte es un tema muy interesante. He visto tambien "plugins" en el asset store que "parece" que hacen esto (como comenta lightbug) pero estan fuera de mi presupuesto :2_grimacing: asi que hay que buscar opciones.

Share this post


Link to post
Share on other sites
8 hours ago, JuanKa said:

he visto videos como este donde crean una pequeña escena y lo hacen de manera manual, pero es algo pequeño, quien sabe que proceso utlicen cuando es un mapa grande (o tal vez por el número de personas que lo hacen no sea tanto tampoco, tal como dice lightbug).

Esas escenas que se ven mucho en youtube de Level Design sobretodo (esta por ej o el canal Sykoo) por lo general suelen ser algo "confusas" o mejor dicho son mal interpretadas, ya que el objetivo de las mismas es generar "la foto" o ser usadas para un cortometraje o cinemática, pero en un entorno de juego (un gran terrain por ej tipo openworld) no se que tan bien se puede llegar a extender. Fijate que si ves este vid de quixel te re vende que el resultado con quixel es super detallado si dedicas 1 minituto por metro cuadrado de terreno xD! (sacando esto los assets están geniales) pero te quiero ver haciéndolo para un terrain tipo World of warcraft. Lo mismo se aplica al rendimiento, cuanto vas a poder cargar/mostrar teniendo esa cantidad de detalle? y además super importante, cuando vas a dedicar de tu tiempo (sobretodo si estás solo o son pocos) a darle ese nivel de detalle que querés?. igual que en la demo Book of the dead, usan assets parecidos (creo que quixel) encima del terrain de Unity, y si ves el mapa completo es muy pequeño y fue creado exclusivamente para eso, y ni hablar que ni en PS4 Pro pueden pasar todo ese detalle, que se ve algo feo respecto a Desktop.

Así que el proceso que usan cuando la cosa es grande es degradar, prestar menos atención, por lo menos desde lo que uno ve, por eso siempre en lo personal tomo a bethesda como referencia, sus juegos serán lo que serán pero hablando de level design saben equilibrar muy bien este detalle para grandes terrenos (el mejor ejemplo Fallout3 o Skyrim).

Share this post


Link to post
Share on other sites

Toda la razón, eso que muestran esos videos (con ese nivel de detalle) aun no lo veo en un videojuego, pero si que veo una gran calidad en los juegos que mencionas y son mapas muy grandes, y tambien es verdad que a parte del rendimiento esta lo laborioso que puede ser crear algo asi. También vi la demo de book of the dead y se ve genial, y si, usan assets de quixel y efectivamente es un mapa muy pequeño. Otra cosa, cuando se crea un prefab, como un arbol, y se agrega con la herramienta de terrain, es igual que hacerlo manualmente? y me refiero al rendimiento, si coloco 300 arboles por terrain es igual que colocarlos de manera manual? Y esto lo digo porque si por ejemplo deseo que el arbol caiga cuando lo "corte" le puedo agregar un rigidbody, pero lo haria en el momento de "cortarlo" no lo pondria en el prefab, segun tengo entendido cada rigidbody de los 300 arboles no seria algo recomendable.

Share this post


Link to post
Share on other sites
8 hours ago, JuanKa said:

Otra cosa, cuando se crea un prefab, como un arbol, y se agrega con la herramienta de terrain, es igual que hacerlo manualmente? y me refiero al rendimiento, si coloco 300 arboles por terrain es igual que colocarlos de manera manual? Y esto lo digo porque si por ejemplo deseo que el arbol caiga cuando lo "corte" le puedo agregar un rigidbody, pero lo haria en el momento de "cortarlo" no lo pondria en el prefab, segun tengo entendido cada rigidbody de los 300 arboles no seria algo recomendable.

Con el tema de los árboles no estoy seguro, es una de esas pruebas que tenés que hacer vos mismo y fijarte, aunque no creo que cambie mucho o incluso nada. Eso si igualá condiciones, me parece que los árboles del Terrain están en "static" por default, se que el terrain sí pero no se los árboles (no se internamente que hace Unity) y cada árbol que metés (en terrain) tiene (me parece) su LOD incorporado (si son los árboles de siempre), esto ayuda bastante si tenés muchos. Los árboles te suelen liquidar (a mi por lo menos) con las sombras más que con la misma geometría.

Para el tema del rigidbody no es necesario agregar o quitar RB,podés ponerlo en kinemático y pasarlo a dinámico cuando quieras, y si lo vas a cortar quizás lo "mejor" (?) sea tener varias versiones, dependiendo de donde lo cortas, y cuando le das a la acción cortar (de estado 1 a 2) activás las versiones cortadas, osea:

  • Tree (normal, en estado 1)
  • Tree Base 1 (normal, en estado 2 )
  • Tree Top 1 (rigidbody , en estado 2)

Siguiendo esto podés crear varias versiones dependiendo de donde y como lo cortés, con 1, 2 y 3 o más (dependiendo si lo cortas a distintas alturas o simplemente querés crear algo de aleatoriedad).

 

Share this post


Link to post
Share on other sites

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