¿Por qué los mapas normales son predominantemente azules en lugar de un color aleatorio?
Supongo que los vectores normales de un objeto 3D pueden apuntar en todas las direcciones, como:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
¿Por qué los mapas normales son predominantemente azules en lugar de un color aleatorio?
Supongo que los vectores normales de un objeto 3D pueden apuntar en todas las direcciones, como:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
Respuestas:
Hay dos tipos de mapas normales comúnmente utilizados en el desarrollo del juego. La forma en que piensas que deberían funcionar es la forma en que funciona un tipo (mapas normales de espacio modelo), pero la mayoría de los juegos usan otro tipo (mapas normales de espacio tangente) por lo que asocias texturas principalmente azules con mapas normales.
Con los mapas normales del espacio modelo , cada canal codifica el valor preciso de la normal utilizando el mismo sistema de coordenadas que los vértices del modelo con el que se utiliza. Esto significa que diferentes partes del mapa normal tendrán diferentes matices, pero los píxeles cercanos entre sí generalmente tendrán colores similares. Un ejemplo de un mapa normal de espacio modelo aparece arriba ( fuente ).
Los mapas normales de espacio tangente son generalmente de color azul claro. Este tipo de mapa define las normales en un espacio de coordenadas único para la posición de cada píxel en la superficie de la malla. Utiliza el vértice (interpolado) normal como eje Z, y otros dos vectores ortogonales, llamados tangente y bitangente, como los ejes X e Y. Esencialmente, puede pensar en las normales en el mapa como un "desplazamiento" de la normal para ese píxel calculado al interpolar las normales del vértice. Los vectores tangente y bitangente también se interpolan a partir de datos de vértice, y determinan qué dirección en la malla corresponde a "arriba" y "izquierda" en el mapa normal. La imagen proporcionada en la pregunta proporciona un excelente ejemplo de cómo se ve un mapa normal de espacio tangente típico, por lo que no proporcionaré otro ejemplo aquí.
Los componentes de una normal normalmente (sin juego de palabras) van desde [-1, 1]
. Pero los componentes de un color en una imagen varían de [0, 1]
(o, [0, 255]
aunque generalmente están normalizados [0, 1]
). Por lo tanto, las normales se escalan y se compensan de manera que lo normal se (0, 0, 1)
convierte en el color (0.5, 0.5, 1)
. Este es el color azul claro que se ve en los mapas normales, e indica que no hay desviación del vértice interpolado normal cuando se usan normales de espacio tangente.
La razón por la que se prefieren las normales de espacio tangente a las normales de espacio modelo se debe al hecho de que son más fáciles de crear y pueden usarse para múltiples mallas. Además, si se usa con una malla animada, las normales de espacio tangente siempre se usan, porque las normales cambian constantemente.
bitangent
y binormal
correcto.
El mapa normal apunta principalmente hacia afuera desde una superficie. Suponiendo que sigue con el mapeo habitual del componente Z de los vectores normales XYZ que es la dirección de "profundidad" y ese mapeo con el componente B del espacio de color RGB, terminará con la mayoría de los vectores normales principalmente azules.
Si la textura fuera, por ejemplo, roja, eso significaría que el mapa normal es una superficie que apunta principalmente hacia la derecha. Puede ver esa característica en su imagen de muestra ya que el borde más a la derecha de las protuberancias tiene un tinte rojizo.
Una superficie completa de color rojizo no tendría ningún sentido. Eso indicaría una superficie que está completamente orientada hacia la derecha. Eso solo se modelaría con geometría, no parte de un mapa normal.