La Subida Asincrónica de Texturas le habilita a usted la carga asincrónica de Datos de una Textura en disco y habilita la subida en rodajas de tiempo al GPU en el Render-thread. Esto reduce las espera de subidas del GPU en el thread principal. La Subida Asincrónica de Texturas será utilizado automáticamente para todas las texturas que no estén habilitadas para escritura-lectura, por lo que para usar esta característica, no se requiere de una acción directa. Usted sin embargo puede controlar algunos aspectos de cómo la subida asincrónica opera, y algún entendimiento del proceso es útil para ser capaz de utilizar estos controles.
Cuando el proyecto se construye, los datos de texturas de texturas que se pueden subir asincrónicamente se almacenan como archivos de recurso de streaming y son cargados asincrónicamente.
Un solo ring-buffer se re-utiliza para cargar los datos de la textura y subirla a la GPU, lo cual reduce la cantidad de asignaciones de memoria requeridas. Por ejemplo, si usted tiene 20 texturas pequeñas, Unity configurará una solicitud de carga asincrónica para esas 20 texturas en un solo paso. Si usted tiene una textura gigante, Unity solo solicitará una.
Si el tamaño del buffer no es lo suficientemente grande para las texturas solicitadas, automáticamente se re-dimensiona para acomodarse, no obstante, siempre es óptimo intentar configurar el tamaño para que encaje la textura de mayor tamaño que será subido desde el principio, para que el buffer no tenga que re-dimensionarse por cada nueva textura grande que encuentra.
El tiempo que se gasta en la subida de textura cada frame puede ser controlado, con unos valores grandes que significan que las texturas se volverán disponibles en el GPU más temprano pero con la sobre-carga de más tiempo de CPU siendo utilizado durante esos frames para otro procesamiento. Este tiempo de CPU solamente se utiliza si hay texturas que esperan en el buffer en ser cargadas al GPU.
El tamaño del buffer y el time-slice se pueden especificar a través del panel de los Quality Settings:
Nosotros proporcionamos la habilidad de controlar el valor del Buffer Size y Time-Slice desde script.
Mirar la referencia de Script: QualitySettings.asyncUploadTimeSlice.
Configura el Time-Slice en mili-segundos del tiempo de CPU gastado en las Subidas Asincrónicas de Texturas por frame. Dependiendo en el plataforma objetivo y el API, usted podría configurar esto. El tiempo solo se gasta en la llamada a la función si hay texturas para subir, de lo contrario se sale temprano.
Mirar la referencia de Script: QualitySettings.asyncUploadBufferSize
Configura el Ring Buffer Size para las Subidas Asincrónicas de Texturas. El tamaño está en mega-bytes. Asegura que usted configure un tamaño razonable dependiendo en la plataforma destino. También por favor asegure que siempre será posible cargar cualquier textura gigante en su juego. Por ejemplo, si usted tiene un Cubemap de tamaño 22MB y si usted configura el tamaño del RingBuffer a 16MB, la App automáticamente re-dimensiona el RingBuffer a 22MB mientras carga la escena.
Para texturas no habilitadas para escritura/lecturas, el TextureData es parte de resS (Recurso Streaming) y la subida ahora ocurre en el Render-Thread. La disponibilidad de la textura se garantiza durante la llamada a AwakeFromLoad justo como antes, por lo que no hay cambios en términos del orden de carga o la disponibilidad de texturas en el Rendering.
Para otros tipos de carga de texturas, como texturas habilitadas para escritura/lectura, las texturas se cargan directamente con la función LoadImage(byte[] data), o cargando desde la carpeta Resources, la carga al buffer asincrónico no se utiliza - el método Sincrónico viejo se utiliza.