PathTracing y sus Formulas

Visto 50 veces
Saltar al primer mensaje no leído

IRTHUS

no leída,
28 jun 2011, 16:01:2428/6/11
a codepixel
Buenas, hace mucho que visito codepixel pero hasta ahora no había
participado en ningún debate, ¿ Por cierto que pasa con la web no se
actualiza desde hace mucho ?

Bueno mi dilema empieza en que estoy implementando un pathtracing, y
tengo algunas dudas a la hora de entender las ecuaciones
diferenciales, integrales, etc. Sobre iluminación global. Mas
concretamente la ecuación de rendering, jeje.

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.

javier loureiro varela

no leída,
28 jun 2011, 18:34:0828/6/11
a code...@googlegroups.com
On Tue, 2011-06-28 at 13:01 -0700, IRTHUS wrote:

> 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.

IRTHUS

no leída,
29 jun 2011, 10:01:4429/6/11
a codepixel
Gracias por responder tan deprisa.

Me he mirado la wiki que has puesto, y lo que he entendido mas lo que
has contado es que, cuando se "samplean" direcciones, o ángulos
sólidos, se aplica solo el COSENO. Mientras que para las áreas se
aplica, COSENO y DISTANCIA.

#Resumiendo que para la luz emitida o directa: (cosA*cosB/d^2) o
((N·W)*(N'·W')/d^2)
#Y para la luz indirecta por reflexión interdifusa: (N·W) o (cosA)
#En el caso de que un rayo indirecto impacte sobre una superficie
emisora lo descarto. O como he acabado haciendo le aplico la
atenuación de luz directa, así aprovecho el rayo, es correcto?

De lo que he resumido dirías que lo he entendido bien?, jeje.

Gracias os mando unos renders de antes y después:

Haciéndolo mal: atenuando siempre por distancia y coseno
http://irthus.webcindario.com/Renders/DP-Indirecta-MAL.jpg
Haciéndolo bien atenuando por distancia solo la luz directa, y todo lo
demás por coseno.
http://irthus.webcindario.com/Renders/DP-Indirecta.jpg
http://irthus.webcindario.com/Renders/DP-Caustica.jpg

Gracias por la respuesta.

IRTHUS

no leída,
30 jun 2011, 10:56:0930/6/11
a codepixel
Bien, creo que ya lo tengo. Todo era por un cacao mental mio y un
error de concepto de como es en realidad el PathTracing. Me estaba
empeñando en mezclar rayos de luz directos a las luces, a lo
RayTracing, con rayos secundarios indirectos, el PathTracing. Cuando
en realidad el algoritmo pathtracing original no lanzo rayos hacia las
luces, sino que los lanza a lo loco teniendo en cuenta las propiedades
de los materiales y ya llegaran algún día a la luz, XD.

De hecho esta era la causa de que cierto ruido nunca desapareciese,
como me pasa en este render que he dejado trabajando toda la noche:
http://irthus.webcindario.com/Renders/DP-CornellSphere.jpg (En formato
JPEG no se notan tanto los puntitos)

Después de revisar este error de concepto mio he suprimido los rayos
de luz directa (RayTracing) dejando solo las de luz indirecta
(PathTracing).
http://irthus.webcindario.com/Renders/DP-CornellSphere-Indirecta.jpg
http://irthus.webcindario.com/Renders/DP-CornellBox-Indirecta.jpg
Las imágenes no están terminadas pero se percibe que el ruido tiene a
fundirse con el resto de muestras.

Ahora cobra mas sentido la explicación de la wiki:
http://wiki.codepixel.com/index.php/Ecuaci%C3%B3n_de_renderizado
Las 2 posibles formas de samplear:
1) Por superficie como por ejemplo RayTracing.
2) O por hemisferio como PathTracing.

Supongo que es posible mezclar los 2 algoritmos para ir mas deprisa
pero si la luz obtenida de las 2 maneras no coincide el ruido no se va.

javier loureiro varela

no leída,
1 jul 2011, 5:21:001/7/11
a code...@googlegroups.com

Si, las imágenes parecen correctas para mí.

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.

IRTHUS

no leída,
1 jul 2011, 11:03:561/7/11
a codepixel
Merci por la información, aunque tendré que mirarme la con calma
porque me cuesta un poco la lectura de ecuaciones de ese tipo, XD. Por
otro lado he hecho una búsqueda en google de "Path Tracing Next Event
Estimation" y he encontrado esta presentación que resume de una forma
bastante clara todo el tema de la mezcla de técnicas. Ademas he visto
algo en las ecuaciones que no estoy teniendo en cuenta y podría ser la
causa de que no me encajen las iluminaciones, Directa e Indirecta. Se
trata de la probabilidad de elegir algo, o eso he entendido, es decir
que si voy a elegir una dirección aleatoria dentro de todo un
hemisferio debo dividir por la probabilidad total del hemisferio 2PI,
y algo parecido para las áreas de las luces. Quizás añadiendo esto
consiga combinar mejor las 2 técnicas. Ya te contare.

La presentación: http://www.cs.dartmouth.edu/~fabio/teaching/graphics08/lectures/18_PathTracing_Web.pdf

Merci.
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos