Aprendizaje por lotes de UGUI

Procesamiento por lotes de UGUI del procesamiento por lotes de Unity

1. Conocimientos previos:

procesamiento por lotes dinámico

Unity procesa automáticamente el procesamiento por lotes dinámico, pero en realidad existen muchas limitaciones, por ejemplo: para modelos con menos de 300 vértices, Shader solo puede contener 1 pasada y los datos de vértice utilizados en Shader no superan los 3 (como coordenadas de vértice, vértice normal, vértice tangente).

lote estático

La ventaja es reducir Draw Call.
Las desventajas son las siguientes:
① El procesamiento por lotes estático solo es válido para objetos estáticos en la escena antes de ejecutarse. ¿Qué significa? Es decir, primero debe colocar objetos estáticos en la escena antes de que estos objetos puedan procesarse estáticamente. Los objetos creados dinámicamente con código, incluso si el objeto está marcado como estático, no se pueden agrupar de forma estática y se agregará una Llamada de sorteo. (Excepto si este objeto se puede agrupar dinámicamente, por supuesto)
②Los objetos agrupados estáticos no se pueden mover, es decir, el componente Transformar no es válido y el componente de cuerpo rígido Rigidbody tampoco es válido.
③ Para modelos con animación, no configure el atributo de lote estático, porque el valor de Lotes no se reducirá, y para modelos con animación, incluso si se configura lote estático, es lo mismo que si no hubiera configuración.
④ El procesamiento por lotes estático ocupará más memoria, porque el procesamiento por lotes estático también copiará una cuadrícula en la memoria.

En resumen, las condiciones para el procesamiento por lotes estático:
1. Existe en la escena y no se puede crear dinámicamente mediante código.
2. No se puede mover, es decir, no puede haber animación, etc., y no se puede mover (Transformar y Rigidbody no serán válidos).

2. Procesamiento por lotes de UGUI:

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-uSP8ddXQ-1665738977357) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014143115168.png)]

El control UGUI también es una cuadrícula en esencia . La única diferencia con el modelo 3D es que la cuadrícula del modelo 3D se modela y construye en 3D Max o Maya, mientras que la cuadrícula del control UGUI se crea automáticamente en el código de control. de

El análisis paso a paso de cómo se renderiza Unity es una herramienta de preparación Frame Debug ubicada en Window/Analysis/Frame Debugger

[La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-9UpPgJDD-1665738977358) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014144119339.png)]

**UGUI.Rendering.RenderOverlays ** La cámara está configurada en Superposición, por lo que el dibujo de UGUI está al final.

[La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-0CipJ3VO-1665738977358) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014144336191.png)]

[La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-vrIoy8GO-1665738977359) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014144345643.png)]

Dos DrawMesh dibuja Texto e Imagen, es decir, Texto e Imagen son dibujados por dos DrawCalls.

Se recomienda utilizar Profiler varias veces para el análisis de situaciones múltiples.

1. Orden de lona
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-L6SFtnA0-1665738977359) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014151140505.png)]

2. Orden de dibujo
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-MwU5i8tI-1665738977359) (C:\Users\gy\AppData\Roaming\Typora\ typora-user-images\ image-20221014151228425.png)]

3. Imagen de efecto:
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-uwmpnuSU-1665738977359) (C:\Users\gy\AppData\Roaming\Typora \typora-user-images\ image-20221014151435423.png)]

4. Motivos de interrupción del lote (diferentes texturas):
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-7E8HS9FC-1665738977360) (C:\Users\gy\AppData\Roaming\Typora \typora-user-images\ image-20221014151515678.png)]

Reglas de lote:

Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "WangShade", siguiendo el acuerdo de derechos de autor CC 4.0 BY-SA, adjunte el enlace de la fuente original y esta declaración para su reimpresión.
Enlace de texto original: texto original

La unidad de procesamiento por lotes de UGUI es Canvas, y la operación de procesamiento por lotes está en el subproceso.

paso por lotes

  • Encuentre todos los lienzos y elimine los lienzos que no necesitan renderizarse (la transparencia es 0, el ancho y la altura son 0, en el espacio RectMask2D y fuera del área RectMask2D)

  • Calcule el valor de profundidad Profundidad de cada control de UI debajo del Lienzo (la Profundidad aquí y la Profundidad en el componente Imagen no son lo mismo)

  • Reglas de cálculo de profundidad

    1. Recorra todos los elementos de la interfaz de usuario en Canvas en orden de arriba a abajo en Jerarquía
    2. Para el elemento de la interfaz de usuario actual
      • La interfaz de usuario no representa la profundidad = -1
      • La interfaz de usuario se procesa, pero ningún otro elemento de la interfaz de usuario debajo de esa interfaz de usuario se cruza con él, luego Profundidad = 0
      • Representación de la interfaz de usuario, hay una y solo una interfaz de usuario que se cruza con ella debajo de la interfaz de usuario, y la interfaz de usuario actual se puede procesar por lotes con LowerUI (el material y la textura son los mismos), entonces CurrentUI.Depth = LowerUI.Depth; si no se puede procesar por lotes , CurrentUI.Depth = LowUI.Depth + 1
      • Si se va a representar CurrentUI y hay n elementos que lo cruzan, siga el paso iii para calcular n profundidades (Depth_1, Depth_2, Depth_3...), y luego tome el valor máximo de CurrentUI.Depth, es decir, CurrentUI. Profundidad = max(Profundidad_1, Profundidad_2, Profundidad_3, ...)
      • La parte inferior y superior aquí se refieren a la altura de la capa de visualización del juego, es decir, si la imagen en el nivel físico está por encima o por debajo de la fuente.
      • La intersección de dos elementos de la interfaz de usuario significa que las cuadrículas de los dos elementos se cruzan (hay partes superpuestas). Debe tenerse en cuenta que las áreas Rect de los dos elementos no se cruzan .
  • Después de calcular la profundidad de cada interfaz de usuario, se ordena según la profundidad, el ID de material, el ID de textura, el orden de procesamiento (es decir, el orden de la cola del nivel de interfaz de usuario, es decir, el orden en el panel Jerarquía) (la prioridad de la condiciones es descendente en orden descendente, y todas están ordenadas de menor a mayor). A continuación, elimine los elementos de la interfaz de usuario con profundidad = -1 para obtener la cola de elementos de la interfaz de usuario antes de Batch. Esta cola se llama VisiableList.

    1. Primero ordenar por Profundidad en orden ascendente
    2. Después de ordenar la profundidad, los elementos con la misma profundidad se ordenan por ID de material de menor a mayor
    3. Después de ordenar el ID de material, los elementos con el mismo ID de material se clasifican por ID de textura de pequeño a grande
    4. Después de ordenar la ID de textura, los elementos con la misma ID de textura finalmente se clasifican en el orden de la Jerarquía (cuanto más alta sea la Jerarquía, más delante de la cola)
  • Después de obtener VisiableList, juzgue si los elementos adyacentes en VisiableList se pueden agrupar (mismo material y textura). Cabe señalar que aquí ya no se considera si la profundidad es la misma. Siempre que los dos elementos sean adyacentes y tengan el mismo material y textura, incluso si la profundidad de los dos elementos es diferente, los dos elementos se pueden agrupar. juntos. Luego, las cuadrículas se fusionan lote por lote y se envían a la GPU para su procesamiento.

Motivo del error del lote:

  1. Secuencias de vértices adicionales: el objeto establece secuencias de vértices adicionales mediante MeshRenderer.additionalVertexStreams.
  2. Objetos diferidos en diferentes capas de iluminación: los objetos están en una capa de iluminación diferente.
  3. Objetos diferidos divididos por distancia de sombra: uno de los dos objetos está dentro de la distancia de sombra y el otro no.
  4. Diferentes mallas combinadas: el objeto pertenece a otra malla estática que se ha combinado.
  5. Diferentes propiedades personalizadas: el objeto establece un MaterialProperyBlock diferente.
  6. Luces diferentes: el objeto se ve afectado por diferentes luces delanteras (Luz delantera)
  7. Diferentes materiales: el objeto utiliza diferentes materiales.
  8. Sondas de reflexión diferentes: el objeto se ve afectado por diferentes sondas de reflexión.
  9. Hash de lanzador de sombras diferente: este objeto utiliza otros sombreadores de proyección de sombras o establece diferentes parámetros/palabras clave de sombreado, y estos parámetros/palabras clave afectarán la salida del pase de proyección de sombras.
  10. Diferentes configuraciones de recepción de sombras: el objeto tiene diferentes parámetros de "Recibir sombras" establecidos, o algunos objetos están dentro de la distancia de la sombra mientras que otros están afuera.
  11. Distintos indicadores de procesamiento por lotes estático: este objeto utiliza diferentes configuraciones de procesamiento por lotes estático.
  12. Lotes dinámicos deshabilitados para evitar Z-Fighting: los lotes dinámicos se desactivan en la configuración del reproductor o se desactivan temporalmente para evitar conflictos de profundidad en el entorno actual.
  13. Creación de instancias de diferentes geometrías: use la creación de instancias de GPU para representar diferentes mallas o submallas.
  14. Objetos con mapa de luz: objetos que usan diferentes mapas de luz o tienen diferentes transformaciones UV de mapa de luz dentro del mismo mapa de luz.
  15. Objetos afectados por sondas de luz: objetos afectados por otras sondas de luz.
  16. Lanzadores de sombras en modo de lados mixtos: objetos con diferentes configuraciones de sombras proyectadas.
  17. Multipass: el objeto utiliza un sombreador con varios pases.
  18. Varias luces delanteras: el objeto se ve afectado por varias luces delanteras.
  19. Conjunto de propiedades no instanciables: establezca propiedades no instanciables para sombreadores instanciados.
  20. Escala negativa impar: el objeto se escala a valores negativos impares, como (1,-1,1).
  21. Shader deshabilita el procesamiento por lotes: el sombreador desactiva explícitamente el procesamiento por lotes con la etiqueta "DisableBatching".
  22. Demasiados índices en lote dinámico: demasiados índices de lote dinámico (más de 32k).
  23. Demasiados índices en lote estático: demasiados índices de malla combinados en lote estático. 48k para OpenGL ES, 32k para OSX y 64k para otras plataformas.
  24. Demasiados atributos de vértice para procesamiento por lotes dinámico: las submallas para procesamiento por lotes dinámico tienen más de 900 atributos de vértice.
  25. Demasiados vértices para procesamiento por lotes dinámico: el número de vértices de submalla que se procesarán por lotes dinámicamente supera los 300.

Supongo que te gusta

Origin blog.csdn.net/weixin_43381316/article/details/127324437
Recomendado
Clasificación