Actualmente estoy tratando de entender el rastreador de rayos desarrollado por Kevin Beason (smallpt: http://www.kevinbeason.com/smallpt/) y si entiendo el código correctamente elige al azar reflejar o refractar el rayo (si la superficie es a la vez reflectante y refractiva).Trazado de rayos: Solo uso rayos simples en lugar de rayos de reflexión y refracción
Línea 71-73:
return obj.e + f.mult(depth>2 ? (erand48(Xi)<P ? // Russian roulette
radiance(reflRay,depth,Xi)*RP:radiance(Ray(x,tdir),depth,Xi)*TP) :
radiance(reflRay,depth,Xi)*Re+radiance(Ray(x,tdir),depth,Xi)*Tr);
¿Puede alguien por favor explicar las desventajas de la única fundición de un solo rayo en lugar de los dos? Nunca había escuchado acerca de esta técnica y tengo curiosidad por saber cuál es la compensación, dado que resulta en una enorme reducción de complejidad.
¿Ha visto [esta presentación] (https://docs.google.com/open?id=0B8g97JkuSSBwUENiWTJXeGtTOHFmSm51UC01YWtCZw) que explica todo y está claramente vinculado a ese sitio? – KillianDS
Sí, he leído la presentación y ¡es genial! Lo que estoy buscando es una explicación más profunda sobre cómo solo el lanzamiento de un solo rayo afecta la eficiencia del algoritmo. ¿Por qué decidió que para profundidades de hasta 2 se deben evaluar ambos rayos pero no después (es decir, hay algún razonamiento detrás de por qué es exactamente 2 o es más o menos aleatorio?). – crapper
más o menos al azar, pero la idea es que obtendrás la mayor intensidad de color de tus primeras reflexiones y absorciones. Cuanto más refleje/refracte, más contribuciones insignificantes deberían ser. – KillianDS