Very cool. The one thing that stood out to me is the transition from screen-space to cubemap reflections. If I understand how these are typically implemented, screen-space reflections sample existing parts of the current frame. These are good for real-time reflections at shallow angles. Cubemap reflections are for the rest of the environment, when there is nothing "on screen" to sample from, and so you must resort to a pre-baked image of the environment to represent your reflection.