Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

¿pre-carga de objetos?

Iniciado por Abramelin, Mayo 04, 2016, 12:10:35 PM

Tema anterior - Siguiente tema
¿Se puede hacer una precarga de todos los objetos al inicio del juego o la escena? Lo digo porque al enfocar los objetos por primera vez se relentiza un poco la escena. Supongamos que el jugador entra en una habitacion donde hay un trigger que activa un grupo de objetos, al mostrar ese grupo de objetos se relentiza un poco al principio, despues al volver a pasar por la misma zona no vuelve a pasar... parece que fuese por el esfuerzo de cargarlos la primera vez que se muestran en pantalla, si se pudiese hacer una carga inicial para evitar esto sería perfecto... a ver alguien que sepa mas del tema.

Busca en el foro: object pooling o pool de gameobjects

No se si su problema es de instanciamiento, mas bien parece de memoria(texturas de gran tamaño), o muchos Draw Calls..debido al uso de distintos materiales.O ya si ha cogido por ahi modelos no preparados para videojuegos, puede encontrarse con millones de triangulos.Saludos.

Mayo 04, 2016, 01:43:34 PM #3 Ultima modificación: Mayo 04, 2016, 02:07:03 PM por Abramelin
ok iRobb gracias por el dato, voy a mirar.Ionog intento bajarlos siempre en lowpoly de warehouse3d, pero seguro que hay algo ahi que mete la pata al cargar. Saludos. *Vale ya he leido sobre la pool, pero el pool manager solo ayudaría a limpiar los objetos instanciados como balas, particulas, etc?... Los objetos que quiero precargar no son instanciados, se activan y desactivan desde un trigger... ya van colocados en la escena desde un principio... de todas formas mirare mas a fondo el tema de la pool por si me puede ser de ayuda.

El problema radica en que estas exigiendo a cargar objetos de repente.. Es decir si vas caminando y de repente se activan 30 Objetos es muy obvio que se va a tildar, ni hablar de si tienen muchos polígonos, esto tambien puede ser causa del PC que estas utilizando... Pero todo tiene una solución...Trata de activar los Objetos desde una Corrutina.. con un For
private IEnumerator ActiveObjects(GameObject[] objs)
{
    foreach(var o in objs)
    {
        o.SetActive(true);
        yield return null;
    }
    yield break;
}
De esta manera entonces no tildamos el hilo "UPDATE" que es el que "hace" que nuestro juego se actualice Frame por Frame... (Explicacion algo mala, porque la verdad no es de esta manera, es mucho mas complejo). Espero ayudarte.. 

Buenas,No puedes dejar los objetos activados, y usar tecnicas como oclussion culling?(De este modo, no se renderizarán los objetos si están detras de otro objeto...etc)Saludos.

[quote author=Ionog" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35786" data-ipsquote-contentcommentid="130561 date=1462441305]Buenas,No puedes dejar los objetos activados, y usar tecnicas como oclussion culling?(De este modo, no se renderizarán los objetos si están detras de otro objeto...etc)Saludos.[/quote]Claro, pero suponiendo que el problema no radica en el Rendimiento de renderizado, como entendí yo, el necesitaba activar objetos.
Pero volviendo a leer me di cuenta que el problema radica en el primer Backeado de la Escena, eso se puede solucionar haciendo un Backeado de la Iluminación y Sombras, y luego dejar solo los Objetos dinámicos, y tambien utilizando la técnica de Lonog para reducir los polígonos a procesar. Suerte -. 

Pero en el caso de que fuera problema de iluminacion, calidad de sombras, etc... si sería problema de rendimiento.Pero claro que depende del proyecto, la plataforma, el realismo etc, pues puede interesar mas tener bakeada la luz en las texturas.saludos.

Las luces las cambie todas de realtime a baked, pero no he notado ninguna diferencia ¿quizas es porque tengo que hacerle lightmaps y quitar las luces?. Estoy usando tambien el oclussion culling, pero no se si lo estaré usando bien. El oclussion culling me sirve para los objetos pequeños, pero estoy empezando a darme cuenta de que he tenido un fallo garrafal con la estructura del pueblo al exportar zonas demasiado grandes de sketchup a unity... en estas zonas grandes el culling no funciona correctamente...y ya es demasiado tarde para rehacer todas las zonas en modelos mas pequeños, Aunque cuando se vuelve un poco lento es al cargar 'grupos de objetos pequeños/habitaciones' (al entrar en el trigger que los activa solo la primera vez)... Se me ocurre la siguiente chapuza: hacer una copia de la escena y "mostrar" todos los objetos previamente en una especie de precarga con una gui en negro y un texto "cargando" o algo asi.La intro inicial que es lo que más se relentiza, para no esperar el tiempo completo que dura la escena (x2) en la escena clonada que hace de precarga podría poner un time scale mas alto... aunque no se si funcionara la chapuza, seguro que la estoy liando parda y la solucion es mas facil.

Mayo 09, 2016, 11:02:18 PM #9 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Hola Abramelin.

Esa idea de la escena intermedia con todos los objetos puestos y la pantalla negra de precarga, será cutre, pero es útil para solucionar dicho problema. (No necesitas poner todos los objetos de la escena, sólo aquellos que se vayan a cargar en tiempo real). A lo mejor si es algo chico (una bala, una pisada, etc...) pues puede que no haga falta, porque al ser un material pequeño y sencillo, pues se carga tan rápido que no se aprecia el retraso. (Aunque ya puestos a cargar cosas, yo cargaría también las balas y las pisadas...) Pero ahora claro, si tienes que instanciar una zona del mapa, o enemigos que tienen varios materiales con texturas más grandes, pues sí se notará más el retraso cuando se carguen por 1º vez, (una vez se han cargado en la memoria, ya no volverán a dar parones hasta que se borren al quitar el juego o a menos que ordenes la limpieza de memoria manualmente). Pero bueno, la cosa es que por poner otra opción, están las opciones del resources  http://docs.unity3d.com/ScriptReference/Resources.html Que sirven para evitar ese tipo de cosas, son un salvavidas para el caso de los sonidos (también me pasa eso de que al entrar en el agua por 1º vez, se produce un pequeño parón por culpa del sonido del chapuzón, ¿Cómo precargo esto con la "escena escondida" de carga? sería muy raro ver el Cargando y escuchar de fondo toda clase de ruidos ambientales mezclados tan solo para que estén cargados, no, en este caso el Resources va bien, aunque sea algo más latoso por eso de los caminos para las carpetas.

Me mirare el resources con detalle, a ver si pudiera corregirlo. gracias por el enlace.

Etiquetas: