3
$\begingroup$

Is there a material or render setting which makes the whole rendered image transparent at the spot of an object? I.e. not to create only a transparent object where the background is visible, but a transparent „hole“ with Alpha=0? I know that this can be achieved post-rendering by the Compositor and e.g. Cryptomatte, but I would like to define the transparent areas before rendering. Greetings from Germany, Tschöbbel

$\endgroup$
3
  • 3
    $\begingroup$ Have you tried using the Holdout shader? $\endgroup$ Commented Dec 22, 2019 at 13:04
  • $\begingroup$ Looks as if this is what I need! Many thanks and Schöne Weihnachten! $\endgroup$
    – Tschöbbel
    Commented Dec 22, 2019 at 13:42
  • $\begingroup$ Setting up Cryptomatte might be easier in some cases... $\endgroup$
    – brockmann
    Commented Dec 22, 2019 at 16:16

1 Answer 1

8
$\begingroup$

Holdout based on a material

The Holdout shader node sets the alpha to zero for the area occupied by the object in the rendered image. This is documented in Blender's manual:

The Holdout shader node is used to create a “hole” in the image with zero alpha transparency, which is useful for compositing (see alpha channel).

Note that the holdout shader can only create alpha when Properties ‣ Render ‣ Film ‣ Transparent is enabled. If it is disabled, the holdout shader will be black.

Node setup


Holdout for a collection in the current view layer

As Jachym Michal noted, you can also use the holdout restriction toggle to mask all objects inside a collection for the current view layer. It will not affect the visibility of the same collection in a different view layer.

  1. Display the holdout restriction toggle: Restriction toggles

  2. Activate the holdout for, e.g. Collection 2: Holdout for collection enabled

This approach sets the holdout attribute for the LayerCollection in the current view layer.

Alternatively you can also set/clear the holdout from the context menu in the outliner, if you're using Cycles as render engine. This can be accomplished by right-clicking on the collection to open the context menu and then using either View Layer > Set Holdout or View Layer > Clear Holdout. At the time of writing this option is unavailable when using any other render engine, due to a hard coded check in OUTLINER_MT_collection_view_layer (space_outliner.py).

Outliner context menu

$\endgroup$
7
  • 1
    $\begingroup$ Holdout can also be enabled for whole collections through the outliner restriction toggles. Blender manual on restriction toggles $\endgroup$ Commented Dec 22, 2019 at 14:10
  • $\begingroup$ @ᴊᴀᴄʜʏᴍᴍɪᴄʜᴀʟ that is another option. $\endgroup$ Commented Dec 22, 2019 at 14:19
  • $\begingroup$ @brockmann I don't know in what version you've tested this, but I'm not seeing any masking option in the submenu in 2.80, 2.81a and current master. $\endgroup$ Commented Dec 22, 2019 at 16:30
  • $\begingroup$ Set the engine to cycles @RobertGützkow I think we've found a missing menu item when using eevee. $\endgroup$
    – brockmann
    Commented Dec 22, 2019 at 16:33
  • $\begingroup$ @brockmann will check after dinner and add a a bug report if that's the case $\endgroup$ Commented Dec 22, 2019 at 16:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .