Representación basada en la física
Estás en el camino correcto cuando dices "trata de imitar cómo se refleja la luz en la vida real, que generalmente se divide en dos componentes, especular y difuso dependiendo del tipo de material".
Pero hemos estado modelando materiales con juegos especulares y difusos en juegos y gráficos por computadora durante mucho tiempo. El truco es que solíamos manejar estas cosas como completamente independientes: cambiar la especularidad no cambió lo difuso:
Este es un ejemplo de sombreado de Phong del wiki de Blender . Puede ver que ofrece dos parámetros de intensidad especular y dureza especular, y estos parámetros solo cambian la parte blanquecina de la reflexión. El reflejo difuso azul no cambia en absoluto.
La forma en que los juegos usarían esto es que a un artista se le encargaría ajustar manualmente estos valores para cada material hasta que "se vea bien". Debido a que la "dureza especular" no es una propiedad física real de los materiales que podemos medir con precisión, tuvo que hacerse a simple vista.
Este método es un poco frágil. A medida que cambia la iluminación (por ejemplo, un objeto dinámico que se mueve a través de diferentes áreas, o en un entorno con hora del día y clima), puede verse sutilmente mal, demasiado brillante u demasiado oscuro, ya que las condiciones de visualización no son las mismas que para los que se ajustaron sus parámetros especulares.
Ingrese el renderizado basado en la física, que es un intento de fundamentar nuestras descripciones de materiales en propiedades más objetivas y medibles de superficies reales. Una de las propiedades más aparentes es la conservación de la energía: una superficie más rugosa dispersará la luz de manera difusa, y una superficie más lisa / metálica reflejará la luz más directamente, pero es el mismo grupo de luz del que ambos están dibujando. Entonces, si todo lo demás es igual, a medida que hacemos un material más brillante, el componente difuso debería oscurecerse:
Este ejemplo es de un artículo de Marmoset que explica PBR originalmente compartido por Syntac_
La representación basada en la física tiene más que la conservación de la energía, pero esta es probablemente la señal más reveladora de que está trabajando con un sistema basado en la física.
Al mantener los modelos de reflexión similares a la forma en que funcionan los materiales en la vida real, reducimos la necesidad de factores falsos y la subjetividad del artista para lograr que un material del mundo real como la madera, el concreto o el cuero se vea real en una amplia variedad de condiciones de iluminación.
Tenga en cuenta que otra respuesta describe esto en términos de iluminación indirecta de la luz que rebota en otros objetos de la escena. Si bien muchos sistemas de iluminación que usan modelos basados en la física también incluirán herramientas para modelar esto, generalmente se conoce con un nombre separado de Iluminación Global . Este es el efecto que hace que un lado de la cabeza difusa en esta imagen parezca verde, iluminado por la luz que rebota en la pared verde:
Imagen de este artículo sobre iluminación global
Reflejo del espacio de pantalla
Mientras que PBR intenta modelar cómo el material refleja la luz, Screenspace Reflection intenta capturar lo que se refleja, específicamente, para una superficie brillante como un espejo, ¿qué debería ver en el reflejo?
Nuevamente, esta es una técnica de renderización relativamente reciente que probablemente sea más clara de entender en contraste con cómo los juegos lo hacían antes:
Renderizado invertido : común para los planos de agua o los espejos planos, literalmente renderizamos toda la geometría reflejada por segunda vez reflejada en el plano de la superficie reflectante. Esto proporciona reflejos de alta calidad (detalles completos, los objetos en contacto con la superficie se alinean con sus reflejos) pero solo funciona correctamente para superficies planas. Cuanto más ondulada o irregular es una superficie, menos se comporta como reflejos reales, que deberían distorsionarse o desenfocarse de formas complejas.
Mapas de cubos : almacenemos el color que vería cualquier rayo de vista que irradie desde su punto central. Al representar dinámicamente los mapas de cubos de los puntos seleccionados en la escena, podemos estimar qué color debe reflejarse en cualquier superficie curva arbitraria. El problema aquí es que el mapa del cubo solo es completamente correcto en su punto central: como el punto donde estamos simulando la reflexión se mueve alrededor de la escena, debería ver algo de paralaje, que no está presente en el mapa del cubo. Esto significa que los objetos no tienden a alinearse con sus reflejos.
Screen Space Reflection intenta abordar estas limitaciones utilizando la escena renderizada como fuente de información de reflexión. Es rayos-marcha una vista rayo reflejado, el uso de la profundidad de la escena, hasta que se cortaría algo en la escena renderizada.
Aquí hay una diapositiva de una presentación de EA DICE sobre su enfoque de las reflexiones en el motor Frostbite .
Esto significa (con algo de trabajo algorítmico inteligente) que podemos obtener reflejos con una precisión razonablemente similar al trazado de rayos de las superficies arbitrarias en los juegos, teniendo una alineación correcta de las superficies en contacto, distorsión y desenfoque, siempre que la parte reflejada de la superficie sea visible en -pantalla (es decir, no fuera de la pantalla u ocluida por otra cosa). Cuando el reflejo no puede determinarse con precisión mediante el marcado de rayos, generalmente se aproxima utilizando muestras cercanas o un mapa de cubos alternativo que representa la escena al lado / detrás de la vista de la cámara.
Puede ver en este ejemplo el reflejo del espacio de pantalla , la impresión puede ser muy convincente, aunque se notan pequeños errores (vea el reflejo de la parte inferior de los cubos, que no son visibles en el marco renderizado y simplemente difumina y repite los píxeles adyacentes, o los agujeros en el reflejo de la cortina verde derecha al lado de la maceta y en la parte inferior de la pantalla, donde el raymarching no pudo encontrar los píxeles reflejados a la derecha). Es común usar esta técnica para superficies moderadamente brillantes / ligeramente rugosas para ayudar a que el error ocasional sea menos visible.