Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
ZOOSTAGE

Problema de temblor de objetos y textura

Recommended Posts

14 hours ago, Braltor said:

es mejor aprovechar la precision del float, limitar la distancia de simulacion, y falsear el desplazamiento en el mundo con "trucos de camara"

Totalmente de acuerdo, es lo mas logico a realizar.

9 hours ago, Kvashir said:

aqui está mi fumada mental, voy medio taja pero creo que se puede hacer

recorrido.jpg

Eso no es nada nuevo, creo que casi todos los juegos de mundo abierto cargan sus assets y partes del terreno de esa forma, te das cuenta con solo jugarlo, sea que esté jugador en el centro o este se mueva.

Igual me parece que mover el mundo entero es una completa tonteria, sobretodo si la mayor cantidad de assets son estaticos y le sumas que tenes muchisimas drawcalls, perdes todo lo relacionado a lo static, el static batching, occlusion culling, navigation mesh estatica,etc, ni hablar que mover 1 objeto es muy distinto a mover cientos,miles, o decenas de miles de objetos.

 

Share this post


Link to post
Share on other sites

Pregunta.... ¿Y si usas varios float para sacar de la ecuacion el problema de mover un mundo entero?

¿No se puede calcular las posiciones usando float adicionales?, es decir, concatenar float tras float en un string, y despues convertirlo en un float de nuevo, o mismo usar ese string como un numero, osea, asignar dicho string a la posicion para mantener la exactitud, aunque no se si lo permitiria el unity... no se... nunca lo intente y no soy tan conocedor como para intentarlo jaja

Share this post


Link to post
Share on other sites
hace 13 horas, arjmaj said:

Pregunta.... ¿Y si usas varios float para sacar de la ecuacion el problema de mover un mundo entero?

¿No se puede calcular las posiciones usando float adicionales?, es decir, concatenar float tras float en un string, y despues convertirlo en un float de nuevo, o mismo usar ese string como un numero, osea, asignar dicho string a la posicion para mantener la exactitud, aunque no se si lo permitiria el unity... no se... nunca lo intente y no soy tan conocedor como para intentarlo jaja

Para eso existe el double que tiene el "doble" de precisión, puedes hacer calculos con System.Math y convertirlos a float, pero el problema es que Unity no lo maneja internamente entonces da lo mismo para el problema de la temblorina jajaj

Share this post


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

Para eso existe el double que tiene el "doble" de precisión, puedes hacer calculos con System.Math y convertirlos a float, pero el problema es que Unity no lo maneja internamente entonces da lo mismo para el problema de la temblorina jajaj

Exacto.

La única solución es intentar que siempre se juegue lo más cerca posible del centro, ya sea moviendo el mundo mientras se juega o con tiempos de carga que lo desplacen. Sea como sea la solución no es sencilla.

Share this post


Link to post
Share on other sites
hace 4 horas, TheBullet said:

Exacto.

La única solución es intentar que siempre se juegue lo más cerca posible del centro, ya sea moviendo el mundo mientras se juega o con tiempos de carga que lo desplacen. Sea como sea la solución no es sencilla.

Otra consulta: Basandome en lo que dicen, y suponiendo que lo haya entendido (cosa que dudo), ¿No es mas facil en ese caso, cuando se esta alejado del centro, indicar que todos los objetos que se renderizan en la distancia desactiven todas sus funciones?, me explico, un script generico para cuando el player esta a mas de X distancia, todos los objetos "pierdan" las colisiones, sistemas de sombras, etc. y que pasada distancia directamente no se renderice nada de eso (si objetos, pero no sombras ni particulas, ni luces dinamicas ni nada), el objeto con su textura y punto. Desde la posicion de player no se notaria nada, y asi te ahorras tener una cantidad ingente de calculos al pedo, lo que tambien haria facil uno de los ejemplos que lei, sobre un cubo y un hijo y hacer uno a 1millon global y el otro a menos 1millon local hijo del otro... simplemente hace un script doble que los emparente, olvidate un hijo de un padre a esas distancias, sincroniza 2 scripts y ambos obtienen los mismos valores, si hablas de angulo podes tomar el angulo del "supuesto padre" y hacer la operacion matematica en el "hijo" para moverlo, obviamente es un calculo algo complejo, 1 grado en un punto, a la distancia puede ser movimientos de cientos de metros, pero con un script doble no seria problema, si un poco mas de laburo, pero te ahorras lo de mover el mundo entero (lo cual de momento es una idea tan nueva para mi que me asusta de pensarlo nomas)

Share this post


Link to post
Share on other sites
7 hours ago, arjmaj said:

¿No es mas facil en ese caso, cuando se esta alejado del centro, indicar que todos los objetos que se renderizan en la distancia desactiven todas sus funciones?, me explico, un script generico para cuando el player esta a mas de X distancia, todos los objetos "pierdan" las colisiones, sistemas de sombras, etc. y que pasada distancia directamente no se renderice nada de eso (si objetos, pero no sombras ni particulas, ni luces dinamicas ni nada), el objeto con su textura y punto.

Lo primero que tenes que pensar es que si tenes miles de objetos primero tenes que medirlos (ya es algo de calculo) o separarlos en "trees" , como funcionan la deteccion de colision, o usar triggers lo cual es preferible si tenes muchisima cantidad de objetos, entonces sabes que activar o desactivar basado en donde este cada cosa respecto al player(por ejemplo). Aunque para lo que mencionas existen tecnicas que hacen lo suyo basados en la ubicacion, una muy conocida es el LOD, pasas de mucho detalle, a medio, bajo e incluso aveces a un billboard (los arboles default de Unity creo que son asi), por nombrar una.

Lo de las sombras esas cosas se manejan directamente desde el mundo shader/render , para eso tenes el shadowDistance y el shadowcascade, normalmente viene como en 200 o 500 ? no recuerdo, una pelotudez, yo lo tengo en 50 jaja y me ahora muchiisiiimoo, a eso le pones el primer nivel del cascade muy bajo (donde hay mayor detalle para sombras cercanas) y que funcionen los demas (menor detalle para sombras alejadas) para alivianar.

--> Hacer esto midiendo distancias, metiendote en cada mesh renderer de cada objeto y activando/desactivando sombras es totalmente ineficiente por el procesamiento "extra y de mas" que involucra.

 

On 8/13/2017 at 6:56 PM, arjmaj said:

Pregunta.... ¿Y si usas varios float para sacar de la ecuacion el problema de mover un mundo entero?

¿No se puede calcular las posiciones usando float adicionales?, es decir, concatenar float tras float en un string, y despues convertirlo en un float de nuevo, o mismo usar ese string como un numero, osea, asignar dicho string a la posicion para mantener la exactitud, aunque no se si lo permitiria el unity... no se... nunca lo intente y no soy tan conocedor como para intentarlo jaja

Concatenar "floats" en una string y pasarlos a "float" denuevo? pasas de plural a singular, esta claro que no va funcionar jaja, pero si, si tenes Vector3 = <float , float ,float> cagaste.

Todos de pronto todos estan aterrados de la precision :6_smile:, Las mejores soluciones salen de pensar y administrar recursos, si no se quiere mover el mundo (lo cual apoyo totalmente) hay que buscar un balance, preguntarse si es necesario tener tanta distancia alejado del centro, si no habra que reducir todo, es mas es una ventaja esto te da lo se llama "restricción".

Fuera del Topic, yo he jugado toda, pero toda, pero absolutamente toda clase de juegos, me crie con juegos, y puedo decir esto: de todo lo que jugué los juegos de mundo abierto resultaron los menos interesantes, mas marketineros y mas aburridos de todos (salvo algunas joyas), porque? porque los creadores dedicaban su tiempo en pensar en distancias en vez de argumentos y jugabilidad.

 

Share this post


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

Lo primero que tenes que pensar es que si tenes miles de objetos primero tenes que medirlos (ya es algo de calculo) o separarlos en "trees" , como funcionan la deteccion de colision, o usar triggers lo cual es preferible si tenes muchisima cantidad de objetos, entonces sabes que activar o desactivar basado en donde este cada cosa respecto al player(por ejemplo). Aunque para lo que mencionas existen tecnicas que hacen lo suyo basados en la ubicacion, una muy conocida es el LOD, pasas de mucho detalle, a medio, bajo e incluso aveces a un billboard (los arboles default de Unity creo que son asi), por nombrar una.

Lo de las sombras esas cosas se manejan directamente desde el mundo shader/render , para eso tenes el shadowDistance y el shadowcascade, normalmente viene como en 200 o 500 ? no recuerdo, una pelotudez, yo lo tengo en 50 jaja y me ahora muchiisiiimoo, a eso le pones el primer nivel del cascade muy bajo (donde hay mayor detalle para sombras cercanas) y que funcionen los demas (menor detalle para sombras alejadas) para alivianar.

--> Hacer esto midiendo distancias, metiendote en cada mesh renderer de cada objeto y activando/desactivando sombras es totalmente ineficiente por el procesamiento "extra y de mas" que involucra.

 

Concatenar "floats" en una string y pasarlos a "float" denuevo? pasas de plural a singular, esta claro que no va funcionar jaja, pero si, si tenes Vector3 = <float , float ,float> cagaste.

Todos de pronto todos estan aterrados de la precision :6_smile:, Las mejores soluciones salen de pensar y administrar recursos, si no se quiere mover el mundo (lo cual apoyo totalmente) hay que buscar un balance, preguntarse si es necesario tener tanta distancia alejado del centro, si no habra que reducir todo, es mas es una ventaja esto te da lo se llama "restricción".

Fuera del Topic, yo he jugado toda, pero toda, pero absolutamente toda clase de juegos, me crie con juegos, y puedo decir esto: de todo lo que jugué los juegos de mundo abierto resultaron los menos interesantes, mas marketineros y mas aburridos de todos (salvo algunas joyas), porque? porque los creadores dedicaban su tiempo en pensar en distancias en vez de argumentos y jugabilidad.

 

Y la parte de hacer scripts mellizos?, vamos, que estaba un poco mas abajo. Tomar valores de uno para calcular las posiciones del otro, asi evitas ese tipo de saltos. Nunca lo he intentado, de hecho he vuelto a unity hace muy poquito. La verdad me he encontrado con cosas muy interesantes, como por ejemplo, para juegos 2D hay MUCHO ya pre hecho, lo cual soluciona varias cosas, yyyyyyy se aprende si te pones a leer los codigos... 

Por cierto, algun tutorial de C# en unity para la version 5 por algun lado?, siempre use java, y nunca me puse a aprender C#, aparte, los que he encontrado, no me sirven, los de unity V3 no sirven... muy desactualizados...

Share this post


Link to post
Share on other sites
7 hours ago, arjmaj said:

Y la parte de hacer scripts mellizos?, vamos, que estaba un poco mas abajo

Es que no entendi ni jota jajaj

7 hours ago, arjmaj said:

La verdad me he encontrado con cosas muy interesantes, como por ejemplo, para juegos 2D hay MUCHO ya pre hecho, lo cual soluciona varias cosas, yyyyyyy se aprende si te pones a leer los codigos... 

Personalmente no me agrada lo "pre" hecho, da lugar a confusion, errores y a la falta de aprendizaje.

7 hours ago, arjmaj said:

Por cierto, algun tutorial de C# en unity para la version 5 por algun lado?, siempre use java, y nunca me puse a aprender C#, aparte, los que he encontrado, no me sirven, los de unity V3 no sirven... muy desactualizados...

uh v3? jajaj, la pagina oficial de Unity learn, ahi tenes de todo, por pasarte un tema (scripting):

https://unity3d.com/es/learn/tutorials/s/scripting

pasar de javascript a c# es una de las cosas mas iteligentes que podes hacer en Unity

Share this post


Link to post
Share on other sites
hace 2 horas, lightbug said:

Es que no entendi ni jota jajaj

Jajaja. Digo, se hablaba de tener problemas de temblores (clipping creo que es), sobre por ejemplo, objetos hijos muy lejos del objeto padre.

Por ende, en vez de hacer ambos objetos hijo-padre, donde el hijo reacciona al movimiento del padre, porque no implementar ambos por separado, luego un script en el "padre" que tome sus valores, luego hacer un script en el "hijo" que dependiendo del movimiento del "padre", segun un calculo, el "hijo" se mueva en consecuencia.

Ejemplo: tengo un objeto que rota 1 grado, en el supuesto hijo, tomamos el valor de movimientos del padre, al rotar ese grado, en la distancia, significa que el supuesto hijo deberia mover su posicion, digamos, 100 metros, entonces mediante un calculo podemos decir en que lugar deberia estar el objeto, sin necesidad de dejar que unity haga dicho calculo por sus limitaciones en lo que se viene hablando de los float.

No se, me parece interesante probarlo, aunque no conozco mucho para poder hacer la prueba.

Y si, concuerdo con lo de "pre hecho"... pero... bueno a veces cuando todo lo que sabes lo aprendiste por tu cuenta, cuesta mucho ir a aprender de nuevo desde cero, por lo que a veces uno prefiere seguir de la manera vieja, y ahi es cuando las cosas no salen bien, por eso aunque sea para aprender que hace cada script y que hace cada linea viene bien, despues, la forma de implementarlo va por cuenta de cada uno.

Share this post


Link to post
Share on other sites
hace 4 horas, arjmaj said:

Jajaja. Digo, se hablaba de tener problemas de temblores (clipping creo que es), sobre por ejemplo, objetos hijos muy lejos del objeto padre.

Por ende, en vez de hacer ambos objetos hijo-padre, donde el hijo reacciona al movimiento del padre, porque no implementar ambos por separado, luego un script en el "padre" que tome sus valores, luego hacer un script en el "hijo" que dependiendo del movimiento del "padre", segun un calculo, el "hijo" se mueva en consecuencia.

Ejemplo: tengo un objeto que rota 1 grado, en el supuesto hijo, tomamos el valor de movimientos del padre, al rotar ese grado, en la distancia, significa que el supuesto hijo deberia mover su posicion, digamos, 100 metros, entonces mediante un calculo podemos decir en que lugar deberia estar el objeto, sin necesidad de dejar que unity haga dicho calculo por sus limitaciones en lo que se viene hablando de los float.

No se, me parece interesante probarlo, aunque no conozco mucho para poder hacer la prueba.

Y si, concuerdo con lo de "pre hecho"... pero... bueno a veces cuando todo lo que sabes lo aprendiste por tu cuenta, cuesta mucho ir a aprender de nuevo desde cero, por lo que a veces uno prefiere seguir de la manera vieja, y ahi es cuando las cosas no salen bien, por eso aunque sea para aprender que hace cada script y que hace cada linea viene bien, despues, la forma de implementarlo va por cuenta de cada uno.

Los temblores no son por estar lejos de los padres, ese ejemplo lo di porque es la manera más fácil de reproducir el error. El problema aparece cuando un objeto se aleja del centro del mundo, da igual lo que calcules en un script, en ese caso que dices no podrás saber la posición exacta del padre porque su posición no tiene suficiente precisión, por tanto el hijo hará cosas raras igualmente.

Share this post


Link to post
Share on other sites
On 12/8/2017 at 1:06, ZOOSTAGE said:

explica eso mejor por favor cuando no vayas medio taja :D

la idea es dividir el mapa del juego en celdas, el personaje siempre esta en el centro del mundo.
-digamos que el jugador esta en una celda del mundo, al estar en esa celda se cargan las celdas de alrededor. 

imaginate que el centro del mundo es como una cinta de correr, donde el personaje solo patea y el mundo es como la cinta de correr, 

si el jugador sale de la celda central y entra en otra, se cargan las celdas de alrededor de la celda a la que a entrado en ese momento, 

pongamos que el limite del mundo para calcular bien las posiciones y evitar el famoso temblor es de 100m2, 

haces que cada celda del mapa sea de 25m2 y listo.
 

aunque yo intentaría hacerlas mas pequeñas por el tema de tener que mover tantos objetos a la vez, según como quieras ver el horizonte en el juego... si quieres tener una gran visión pues buena suerte jajajaj

PD: eh buscado información de UnrealEngine y tambien utiliza floats para la posición.. entonces no me imagino que tan grande es el mapa de tu juego pero... vamos dudo que lo de mover el mundo de verdad lo usen muchos juegos jajaja

Edited by Kvashir

Share this post


Link to post
Share on other sites
18 hours ago, arjmaj said:

Jajaja. Digo, se hablaba de tener problemas de temblores (clipping creo que es), sobre por ejemplo, objetos hijos muy lejos del objeto padre.

Por ende, en vez de hacer ambos objetos hijo-padre, donde el hijo reacciona al movimiento del padre, porque no implementar ambos por separado, luego un script en el "padre" que tome sus valores, luego hacer un script en el "hijo" que dependiendo del movimiento del "padre", segun un calculo, el "hijo" se mueva en consecuencia.

Ejemplo: tengo un objeto que rota 1 grado, en el supuesto hijo, tomamos el valor de movimientos del padre, al rotar ese grado, en la distancia, significa que el supuesto hijo deberia mover su posicion, digamos, 100 metros, entonces mediante un calculo podemos decir en que lugar deberia estar el objeto, sin necesidad de dejar que unity haga dicho calculo por sus limitaciones en lo que se viene hablando de los float.

Eso no hace al problema, si tenes hijos de hijos de hijos.... se calcula una pos final respecto a las posiciones relativas, al final todo termina respecto al 0,0,0 y el float, me parece que no te serviria de nada, pero si queres intentarlo hacelo.

 

10 hours ago, Kvashir said:

PD: eh buscado información de UnrealEngine y tambien utiliza floats para la posición.. entonces no me imagino que tan grande es el mapa de tu juego pero... vamos dudo que lo de mover el mundo de verdad lo usen muchos juegos jajaja

Claro, concuerdo, apostaria a que ningun juego hace esto. Segun Unity cuando te pasas del millon te marca un warning, quien va a hacer algo mas distante que 1 millon de Unidades desde el centro?, por eso me parece que si estas usando 1 millon de unidades (segun Unity) estas haciendo las cosas claramente mal.

Alguien que tenga este problema o mejor aun el autor del topic @ZOOSTAGE podria por favor ser tan amable de hacer un pequeño rar, una escena solamente, solo para visualizarlo un poco mas, todavia este asunto no me termina de convencer.

 

Share this post


Link to post
Share on other sites
1 hour ago, lightbug said:

Claro, concuerdo, apostaria a que ningun juego hace esto. Segun Unity cuando te pasas del millon te marca un warning, quien va a hacer algo mas distante que 1 millon de Unidades desde el centro?, por eso me parece que si estas usando 1 millon de unidades (segun Unity) estas haciendo las cosas claramente mal.

Alguien que tenga este problema o mejor aun el autor del topic @ZOOSTAGE podria por favor ser tan amable de hacer un pequeño rar, una escena solamente, solo para visualizarlo un poco mas, todavia este asunto no me termina de convencer.

 

Aquí tienes el test. A partir de 35000 petardea. Si los objetos son más pequeños o se hacen cálculos más complicados (como físicas) petardeará antes.

Test Precision Float.rar

Share this post


Link to post
Share on other sites
7 hours ago, TheBullet said:

Aquí tienes el test. A partir de 35000 petardea. Si los objetos son más pequeños o se hacen cálculos más complicados (como físicas) petardeará antes.

Test Precision Float.rar

Ok gracias, luego lo pruebo.

 

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...