Raycast Reflection Catcher in Blender

| 2 min read

In this tutorial, I show how I build a reflection catcher in Blender using the Raycast node. I start with a standard shadow-catcher workflow, then extend it into a reflection mask that works directly in the shader. I also demonstrate how to add ripple and roughness behavior so the reflection integrates cleanly with live-action footage.

Blender's Updated Raycast Node

Seeing all the interesting creations using Blender's updated raycast node got me thinking about how those use cases could fit into what we do at Girraphic.

You see raycasting has been in geonodes for a while not but this is the first time the same thing has been available at a shading level and it opens up alot of interesting uses.

Fake translucency is a cool trick although I am much more excited for decals in Blender.

Still one thing I had not seen yet is what this can do for reflections. It seems compositing reflections onto live action footage is and always has been a pain, at least in Blender, and has always involved separate mirror, render passes and trickery in fusion/nuke.

Now however thanks to raycasting we can get a pixel accurate mask of the reflections of objects, making composting reflections over live action, as easy as, if not easier that using the shadow catcher.

This new raycast node sure is going to make compositing reflections easy.

Aiden Wilson (@aiden-wilson.bsky.social) 2026-02-23T08:12:30.540Z

The Nodes

The node setup is rather straight forward we scale the incoming vector (shading point to the camera) by -1 giving us the vector going from the camera to the shading point on the geometry. We then us the reflection calculation in the vector math to calculate the bounce off the surface (Using the surfaces normal) and see if it hits anything.

In this setup I use the output of the bump map (Which combines the surface normal and the height map to create the shading normal of the surface). The output of a normal map node would also work and ensures we get an accurate calculation from the raycast.

Thus giving us a perfect black/white mask we can use in the alpha to cut out the reflection of the object.

The Final Shader Setup

You can see the match visualised in the video bellow (Using GeoNodes raycast to create this visualisation):

Blue is out negated incoming vector, purple is the objects surface normal and orange is the calculated reflection.

Roughing It Up

The next question you probably have is how do I use roughness? For that we need to break down what "roughness" in a PBR shader actually is.

Microfacet From: The PBR Book

Essentially roughness is self explanatory, it's lots of tiny variations, called microfacets, in the shading normal to scatter light is different directions. Now I am sure this is implemented in a more efficient way than actually altering the shading normals in cycles however we can go back to this more rudimentary method and feed those normals into the raycast as well.

So a noise texture with ample roughness/detail plugged into a bump map will simulate the same result as a rough surface in cycles, with all the benefit of also scatting the results of the raycast node.

Practical Uses

So what's this all for? Well recently we have really been pushing our offline content delivery at Girraphic with one biggest and most recent being Stadium Series.

However with our continual push for high quality offline content in a short timeframe, any quick and easy solution to increase quality is always welcome.

We did not use Blender 5.1 for this render however as soon as it's release I look forward to implementing this workflow.

Project Files:

Credits:

Video Footage Used: Stunning Aerial View of Iceland's Westfjords

3D Model Used: Pirate ship (Rigged)