A modo de sugerencia, les aconsejo que sigan la siguiente secuencia de pasos para el desarrollo del primer obligatorio: 1) Trabajen en primera instancia con un único mapa de fotones. 2) Utilicen al principio únicamente superficies de reflexión difusa. En ese caso, al generar la imagen, tiren un rayo del observador a cada píxel, vean qué superficie interseca, y definan el color a partir de la cantidad de fotones que hay alrededor de ese punto intersección. Esto servirá para saber si están distribuyéndose bien los fotones, si la cantidad de fotones es la adecuada, etc. 3) Utilicen escenas sencillas, cosa que puedan predecir más o menos cómo debería lucir. Por ejemplo: si hay una luz, un piso y un cubo sobre el piso, el cubo debe proyectar sombra en la dirección opuesta a la luz. 4) Luego de dominar los puntos anteriores, comiencen a ver los temas de persistencia y de input de archivos (antes, las escenas sencillas podían haber sido "hardcoded"). 5) Como siguiente paso, comiencen a agregarle complejidad al algoritmo de a un paso por vez, es decir: 5a)Trabajen con varios tipos de interacciones luz-superficie (hay 4 tipos), agregándolos de a uno. 5b) Agreguen los otros mapas de fotones. 5c) Trabajen con diversos tipos de escenas, de diferente complejidad. 6) Ahora están en condiciones de comenzar a pensar en la eficiencia. Quizá es bueno haber pensado desde un principio en los aspectos de eficiencia, pero muchas veces uno dedica tiempo a pensar eficiencias que no son necesarias porque el verdadero cuello de botella está en otro lado. Como dice Knuth: "premature optimization is the root of all evil". La realidad no es tan tajante, pero se parece. 7) También están en condiciones de pensar los extras. El tema de considerar medios participativos creo que es un buen extra. Espero que esto sirva de ayuda. Eduardo