Few things: - reflect() takes arguments in this order: N, I, it was swapped in the previous code for some reason. - Normal and view vectors are to be normalized. For the view vector we're now using shade_view() in order to deal with the ortho camera. However, Cycles does not support ortho camera for reflection, but this is easy to do in a separate commit. - Reflection vector is to be in the world space. Kudos to Antony Riakiotakis for figuring this out!