2010-11-09 15 views
6

Actualmente estoy codificando un raytracer. Me pregunto cómo combinar un color primitivo con un color claro. He visto muchas combinaciones.Cómo mezclar colores

Algunos simplemente agregan los dos colores. Esto me da resultados muy extraños.

Algunos mutiply cada componente. Se ve bien, pero en el primitivo es azul ({0, 0, 1}) y la luz es roja ({1, 0, 0}), es simplemente negro. ¿Es el comportamiento normal?

También he visto el modo de fusión de pantalla (pantalla (C1, C2) = C1 + C2 - C1 * C2)) que es más lógico para mí ya que en el caso anterior, los colores realmente se mezclarán.

La misma pregunta para los colores de los rayos reflejados: ¿cómo combinarlos con el color local?

Pregunta extra: ¿debería ser un punto en una primitiva que no esté iluminado en negro? He visto cosas como "la mitad del color".

Respuesta

17

En realidad es manera más complicado. La luz y el material superficial interactúan mediante una fórmula llamada función de distribución de reflectancia bidireccional (BRDF, por sus siglas en inglés), una función de 4 dimensiones cuyas entradas son la dirección de la luz y la dirección del ángulo de visión (ambas relativas a la superficie normal, es decir el vector unitario perpendicular a la superficie), y cuya salida es la relación del resplandor saliente en la dirección de visión a la irradiancia entrante desde la dirección de la luz.

No hay una manera fácil de explicarlo en este breve espacio de tiempo. ¿Quizás podría consultar el Wikipedia article, así como sus enlaces y referencias, o incluso abrir un libro de texto de gráficos de computadora decente?

Pero baste decir que para muchos BRDF, es similar a la "multiplicación", en el sentido de que una superficie totalmente reflectante de color rojo puro de Lambert, iluminada por una luz azul perfecta, debe verse negra.

Existen varios factores complicados: Ninguna luz real, a excepción de un láser, emite un color primario puro con los otros componentes siendo 0.0. (Evite esto si quiere una imagen realista). Ninguna superficie real refleja todo en una longitud de onda con los otros componentes de color siendo 0.0. (Evite esto si quiere una imagen realista.) Y ningún material es realmente bastante lambertiano (puramente difuso): generalmente hay algún componente especular que tiende a reflejar la luz en la superficie, antes de que lleguen a cualquier pigmento subyacente, y por lo tanto ese la porción de la luz reflejada tenderá a verse como el color de la luz, no la superficie. A menos que sea metálico, en cuyo caso el "color" del metal influye en el espectro. Suspiro. Como dije, es complicado, y necesitas leer sobre la física (así como los 40 años de investigación en gráficos por computadora en los que todos estos problemas se han resuelto mucho antes de que hayas contemplado el problema).

Respuesta de bonificación ("lo que sucede con un punto que no está iluminado"): los puntos que realmente no están iluminados deben ser negros. Pero seguramente lo sabía, así como el hecho de que en cualquier situación del mundo real, no hay ningún punto que no se ilumine (y también puede fotografiarse). Una formulación más interesante de la pregunta es la siguiente: mis renderizadores solo consideran rutas de luz directas de fuentes, no todas las rutas indirectas (objeto a objeto) que iluminan las esquinas más oscuras, entonces ¿cómo evito que se vuelva negro? Una respuesta barata es agregar una luz "ambiental" que arroje una cantidad constante de luz en todas partes. Esto es lo que la gente hizo durante mucho tiempo, y se veía bastante falso como se imaginaría. Un mejor enfoque es usar varias técnicas de "iluminación global". Búscalo. Pero definitivamente no solo "ilumine la mitad", a menos que esté buscando una apariencia muy estilística (en lugar de realista).

+3

Esto está por encima de una gran respuesta. Gracias ! – Tangui

+1

Menciona la salida BRDF como "la relación de la radiancia entrante (desde la dirección de la luz) a la radiancia saliente en la dirección de visualización". ¿No es la salida la relación de radiancia saliente en la dirección de visión a la irradiancia incidente desde la dirección de la luz? – PeteUK

+0

Sí, lo arreglaré. –