Las animaciones o películas de CG (computación gráfica) comúnmente tienen reflejos altamente realistas, lo cual es importante para darle un sentido de “conectividad” a los objetos en la escena. No obstante, la precisión de estos reflejos tienen un alto costo en tiempo de procesamiento y mientras este no es un problema para las películas, esto altamente limita el uso de objetos reflectivos en juegos de tiempo real.
Tradicionalmente, los juegos han utilizado una técnica llamada reflection mapping para simular los reflejos de objetos mientras se mantiene la sobre-carga de procesamiento en un nivel aceptable. Esta técnica asume que todos los objetos reflectivos en la escena pueden “ver” (y por lo tanto reflejar) los alrededores exactos. Esto funciona bien para el personaje principal del juego (un carro brillante, digamos) si está en un espacio abierto pero no es convincente cuando el personaje pasa a unos alrededores diferentes; esto se ve raro si un carro maneja dentro de un túnel pero el cielo se sigue reflejando visiblemente en sus ventanas.
Unity mejora el reflection mapping básico mediante el uso de Reflection Probes, los cuales permiten que el ambiente visual sea muestrado en puntos estratégicos en la escena. Usted generalmente los coloca en cada punto dónde la apariencia de un objeto reflectante cambie notablemente (eg, túneles, áreas cerca de edificios y lugares dónde cambie el color del suelo). Cuando un objeto reflectivo pasa cerca de un probe, el reflejo muestrado por el probe será utilizado para el mapa de reflexión del objeto. Adicionalmente, cuando varios probes estén cerca, Unity puede interpolar entre esto para permitir cambios graduales en los reflejos. Por lo tanto, el uso de reflection probes puede crear reflejos convincentes con una sobre-carga de procesamiento aceptable.
El ambiente visual para un punto en la escena se puede representar por un cubemap. Esto conceptualmente es como una caja con unas imágenes planas de la vista desde seis direcciones (arriba, abajo, izquierda, derecha, hacia adelante, y hacia atrás) pintadas en las superficies internas.
Para que un objeto muestre los reflejos, su shader debe tener acceso a las imágenes representado el cubemap. Cada punto de la superficie de un objeto puede “ver” una área más pequeña del cubemap en la dirección de las caras de la superficie (ie, la dirección del vector normal de la superficie). El shader utiliza el color del cubemap en este punto para calcular qué color tendrá la superficie del objeto; un material mirror (espejo) puede reflejar el color exactamente mientras que un carro brillante podría desvanecerse y teñirlo un poco.
Como se menciono arriba, el reflection mapping tradicional hace uso de un solo cubemap para representar los alrededores de la escena entera. El cubemap se puede pintar por un artista o puede ser obtenido al tomar seis “snapshots” (tomas) de un punto de la escena, con una toma para cada cara del cubo. Los Reflection probes mejoran esto al permitirle a usted configurar varios puntos predefinidos en la escena dónde los snapshots (tomas) del cubemap se pueden tomar. Usted por lo tanto graba la vista de los alrededores en cualquier punto en la escena dónde los reflejos difieren notablemente.
Adicionalmente a su punto de vista, un probe también tiene una zona de efecto definida por una forma de caja invisible en la escena. Un objeto reflectivo que pase dentro de la zona de un probe tiene su propio reflection cubemap proporcionado temporalmente por ese probe. A medida que el objeto se mueve de una zona a otra, el cubemap cambia de acuerdo a esto.