Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué significa el proceso de renderizado de formas de Unity y cómo aplicarlo?

¿Qué significa el proceso de renderizado de formas de Unity y cómo aplicarlo?

El llamado proceso de renderizado de GPU suena muy profundo. De hecho, podemos entenderlo como un proceso, es decir, le decimos a la GPU un montón de datos y finalmente obtenemos una imagen bidimensional, y estos datos incluyen "punto de vista, objeto tridimensional, fuente de luz, modelo de iluminación, textura" y otros elementos.

En varios libros de gráficos, el proceso de renderizado se divide principalmente en tres etapas: etapa de aplicación, etapa de geometría y etapa de ráster.

1. Etapa de solicitud.

Esta etapa es más fácil de entender. Por ejemplo, desarrollamos un juego en Unity. De hecho, Unity nos ha ayudado a implementar muchas cosas de bajo nivel, como la detección de colisiones y el recorte del frustum. Esta etapa se ocupa principalmente de la CPU y la memoria. Una vez completados todos los cálculos, al final de esta etapa, estos datos calculados (coordenadas de vértice, vectores normales, coordenadas de textura y texturas) se transferirán al hardware de gráficos a través del bus de datos para su posterior procesamiento.

2. Escenario geométrico.

Es el principal responsable de la transformación de coordenadas de vértice, iluminación, recorte, proyección y mapeo de pantalla. Al final de esta etapa, las coordenadas de vértice, color y textura transformadas y proyectadas se obtienen en función de la GPU. En resumen, el trabajo principal de la etapa de geometría es "convertir coordenadas de vértice 3D" y "cálculo de iluminación".

Surge la pregunta, ¿por qué necesitamos transformar las coordenadas de los vértices? Así lo entiendo yo. Por ejemplo, si tiene una escena de juego tridimensional, cada modelo en la escena puede usar un vector para determinar su posición, pero ¿cómo dibuja la computadora el modelo correcta y jerárquicamente en la pantalla en función de estas coordenadas? Es por eso que necesitamos convertir las coordenadas de los vértices 3D, con el objetivo final de permitir que la GPU dibuje estos datos 3D en una pantalla 2D.

Según el orden de transformación de las coordenadas del vértice, existen principalmente los siguientes espacios de coordenadas: espacio de objetos, espacio de coordenadas del modelo; espacio de coordenadas del mundo, espacio de coordenadas de observación, espacio de proyección; La pantalla coordina el espacio. La siguiente figura muestra todo el flujo de procesamiento de la GPU. El área negra es el proceso de transformación del espacio de coordenadas de vértice. Sólo echa un vistazo. A lo que debemos prestar atención es al significado específico de cada espacio de coordenadas y al método de conversión entre espacios de coordenadas.

2.1, Del espacio de objetos al espacio mundial

El espacio de objetos tiene dos significados centrales. Primero, los valores de las coordenadas en el espacio de objetos son los valores de los vértices en el archivo del modelo, que se obtienen al construir el modelo, como un archivo max, que contiene las coordenadas del espacio de objetos. En segundo lugar, las coordenadas del espacio de objetos no tienen relación de referencia con otros objetos, lo cual es la clave para distinguir el espacio de objetos del espacio mundial. El significado real de las coordenadas del espacio mundial es que existe un origen de coordenadas. Sólo comparándolo con el origen de las coordenadas se puede conocer la posición exacta de un objeto. Por ejemplo, en Unity, cuando importamos un modelo a la escena, su transformación son coordenadas mundiales.

2.2. Del espacio mundial al espacio ocular

El llamado espacio ocular es un trapezoide con la cámara como origen, que consta de la dirección de la línea de visión, el ángulo de visión, Planos lejanos y cercanos, * * *, como se muestra en la siguiente figura Pantalla, llamada visualización frustum. El plano cercano es la superficie rectangular más pequeña del trapezoide y el plano cercano a la cámara, y el plano lejano es el rectángulo más grande del trapezoide como plano de proyección. Los datos en este trapezoide son visibles y el punto de vista eliminará la parte sobrante, lo que también se denomina recorte truncado.

Por ejemplo, en la función de itinerancia del juego, el contenido de la pantalla cambia a medida que la cámara se mueve porque la GPU convierte las coordenadas de vértice del objeto del espacio mundial al espacio ocular.

2.3.Del espacio ocular al espacio de proyección y recorte

El proceso de convertir las coordenadas del espacio ocular en coordenadas espaciales de proyección y recorte es en realidad un proceso de proyección, recorte y mapeo. Debido a que es muy difícil recortar un tronco de visualización irregular, la gente organiza el recorte en un cubo unitario, que se denomina cubo canónico (CCV). Las coordenadas X e Y del plano cercano CVV (correspondiente al plano cercano de la vista frustum) corresponden a las coordenadas de píxeles de la pantalla (0 y 0 en la esquina inferior izquierda), y Z representa la profundidad de píxeles de la pantalla.

Entonces, este proceso de conversión en realidad incluye tres pasos:

(1), usar la matriz de transformación de perspectiva para transformar los vértices de la vista frustum a cono

(2) Cortar en CVV;

p>

(3) Mapeo de pantalla: asigne las coordenadas obtenidas en los dos primeros pasos al sistema de coordenadas de la pantalla.

2.4. Conjunto primitivo y configuración de triángulos.

Hasta ahora, hemos obtenido una gran cantidad de datos de vértices. Este paso es restaurar la estructura de la cuadrícula en función de las relaciones de conexión originales de estos vértices. La malla consta de vértices e índices. En esta etapa, los vértices se unen según sus índices para formar elementos de línea y superficie, que luego se recortan. Si un triángulo está fuera de la pantalla, por ejemplo, dos vértices están dentro de la pantalla y un vértice está fuera de la pantalla, lo que vemos en la pantalla es un cuadrilátero, y luego el cuadrilátero se corta en dos triángulos pequeños.

Ahora obtenemos un montón de parches triangulares en las coordenadas de la pantalla para la rasterización.

3. Etapa de rasterización.

Después de los pasos anteriores, obtuvimos el valor de las coordenadas de pantalla de cada punto y el elemento gráfico que debe dibujarse, pero hay dos problemas en este momento:

(1) Las coordenadas de la pantalla son flotantes. Número de puntos, pero los píxeles se expresan como números enteros. ¿Cómo determinar el píxel correspondiente al valor de las coordenadas de la pantalla?

(2) ¿Cómo dibujar un segmento de recta o un triángulo en la pantalla a partir de un punto cuya posición ha sido determinada?

Para la pregunta 1, la posición del dibujo solo puede estar cerca de la posición real del segmento de línea entre los dos puntos finales especificados. Por ejemplo, la posición del segmento de línea es (10.48, 20.51), que se convierte en una posición de píxel (10, 21).

La pregunta 2 implica algoritmos específicos de dibujo y llenado de líneas. Si está interesado, puede estudiarlo.

Después de este proceso, los vértices y las primitivas se han asignado a píxeles. El siguiente proceso es cómo procesar los píxeles, es decir, asignar valores de color a los píxeles.

La etapa de asignación de colores a los píxeles se denomina operaciones de píxeles, que es una serie final de operaciones realizadas en cada segmento antes de actualizar el frame buffer, con el propósito de calcular el valor de color de cada píxel. En esta etapa, las superficies ocluidas se eliminan mediante un proceso llamado prueba de profundidad.

Las operaciones de píxeles incluyen los siguientes procesos:

(1) Eliminar superficies de oclusión

(2) Operaciones de textura, consultar los valores de textura correspondientes según; las coordenadas de textura de los píxeles;

(3) La mezcla, a menudo llamada mezcla alfa, mezcla el color dibujado actualmente con el valor alfa del color que se está calculando para formar un nuevo color.

(4) Filtrado, genera el color que se calcula después de pasar un filtro determinado.

Después de esta etapa, el valor de color del píxel se escribe en el framebuffer.