> Entiendo la filosofía de la ecuación, por asi decirlo. "Luz saliente
> en el punto X y dirección W es igual a la luz emitida en el punto X
> hacia W mas el sumatorio(integral) de todo un hemisferio de las luces
> incidentes y reflejadas hacia W aplicando la ley del coseno y una
> BRDF, bla bla bla bla, jeje. Pero me cuesta concretar a la hora de
> sacar una ecuación "programable".
> Mi problema actual y concreto, es que para los rayos primarios y la
> iluminación directa aplico el COSENO sobre la normal de la superficie
> respecto la dirección del rayo de sombra(luz), y luego divido por el
> CUADRADO de la distancia. Hasta ahí bien, pero cuando lanzo rayos
> secundarios para la luz indirecta si aplico la "Ley inversa de los
> cuadrados", o atenuación en función de la distancia. Entonces aparece
> luz en las esquinas. he deducido que es porque cuando la distancia es
> menor que la unidad la funcion (1/d^2) devuelve números muy grandes en
> vez de pequeños que es el objetivo de atenuar. Si elimino la
> atenuación por distancia, dejando sola la atenuación angular, la
> imagen "parece" correcta, pero no soporto no saber si lo estoy
> haciendo bien.
>
> Haber si podéis orientarme un poco porque los papers que leo son un
> poco cripticos con tanta integral y diferenciales, jeje. Merci por
> todo.
ok, hay 2 formas de formular la ecuación de renderizado. Una es como
hablas al principio.. la radiancia saliente en una direccion es la
emitida, mas la integral de todo lo que entra por el hemisferio, pesado
por el coseno y por el BRDF. Concretamente la integral de todos los
diferenciales (cachitos) de ángulo solido que forma el hemisferio.
la otra es la que usas en la segunda parte. La radiancia saliente en
una dirección, es la emitida más la suma de toda la radiancia saliente
de todas los diferenciales de superficies visibles projectadas de la
escena, atenuado por la distancia.
http://wiki.codepixel.com/index.php/Ecuaci%C3%B3n_de_renderizado
La atenuacion viene de transformar el angulo sólido en área.
Porque tenemos 2 formulas? porque se usan en casos distintos. Para
calcular el GI, lanzamos rayos en el hemisferio (sampleamos el
hemisferio), pero para cacular la iluminacion directa, es más eficiente
samplear el area de las luces. Asi la segunda forma de la ecuacion se
reduce a la integral de todas las superficies visibles projectadas que
emiten luz.
Cuando sampleamos luces, tenemos que atenuar porque estamos sumando
energia que viene de muy lejos, pero si sampleamos el hemisferio,
digamos que nos dá igual de donde viene, por eso no atenuamos por
distancia.
El tema es que si sampleas las luces directas, estas haciendo
radiancia = Lemitida + Ldirecta + Lindirecta
Asi que si lanzas un rayo para buscar Lindirecta, y casualmente das en
una luz directa, entonces no puedes usar ese valor, porque lo has sumado
anteriormente. Matematicamente es lo que se llama "next event
estimation". (lo que haces es que las luces no estén en la misma
jerarquia que el resto)
Espero que te ayude... el GI es complicado en un primer momento, pero
no vas nada mal encaminado.
Lo de usar las dos técnicas se llama "next event estimation". O sea,
samplear las luces por area y la indirecta por angulo sólido. Pero tener
cuidado de no sumar las luces en la indirecta, porque las sumarías 2
veces y el resultado no es correcto.
Para el ruido, te recomiendo mirar el paper de peter shirley para
samplear luz directa :
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.9644
y aprender a generar mejores muestras, con sampleado estratificado, etc.