<aside>

Part 1 Part 1 — Essential USD/Solaris Attributes — Preparing Geometry for Solaris 🟢

Part 2 Part 2 — HDA Solaris USD Prep Stage 🟡

Part 3 Part 3 — HDA LOP Scatter with Proxies 🟡

Part 4 Part 4 — HDA Solaris Master Material v1.01 🟢

Part 5 Part 5 — Karma and USD Render Visibility (Not the same) 🟡

</aside>

<aside>

TL;DR: USD Visibility controls whether geometry is visible in the scene, while Karma Render Visibility controls which ray types can see or interact with it.

USD visibility answers: Should this geometry be visible at all?

Karma Render Visibility answers: Which ray types can see it or interact with it?

</aside>

Expression Result
* Visible to all ray categories (default).
-primary Invisible to the camera, but retains visibility to other ray categories. AKA: Phantom Object
-shadow Does not cast shadows.
-reflect Invisible in reflections.
-refract Invisible through refraction.
-diffuse Invisible to indirect diffuse rays.
primary Visible only to camera rays.
`primary shadow`
Empty string Unrenderable to all ray categories.

USD Visibility vs. Karma Render Visibility

USD Visibility Karma Render Visibility
Purpose Controls whether geometry is visible or invisible. Controls which ray categories can interact with geometry.
Scope General USD scene visibility. Renderer-specific visibility control.
Values inherited / invisible Ray-category expressions.
Camera visibility Can hide geometry completely. Can hide geometry only from camera rays.
Shadows Hiding geometry also removes its shadow contribution. Can independently control shadow visibility.
Reflections No independent control. Can independently control reflection visibility.
Refractions No independent control. Can independently control refraction visibility.

1. What is USD's general visibility property?

USD has a built-in property called visibility

Its purpose is to control whether a geometry prim is visible in the scene.

It has two possible values:

Value Meaning
inherited Inherits visibility from its parent.
invisible Hides the prim and its descendants.

By default, visibility is inherited.

For example, imagine this USD hierarchy:

/World
  /Environment **invisible**
     /Tree_01 **inherited**
     /Tree_02 **inherited**
     /Rock_01 **inherited**

Even if the children have visibility = inherited, they will all be invisible because their parent is invisible.

This is called inherited visibility.

2. How is USD visibility different from Karma Render Visibility?

USD visibility is a general visibility switch, whereas Karma provides more granular control over ray interactions.

Example:

Scenario USD Visibility Karma Render Visibility
Hide an object completely invisible Empty expression
Hide from camera, keep shadows Not possible by itself -primary
Hide from reflections Not possible by itself -reflect
Hide from refractions Not possible by itself -refract
Hide from shadow rays Not possible by itself -shadow

3. Example

image.png

Imagine you have a box in your scene, and you want:

With USD visibility, setting the environment to invisible would hide it completely.

With Karma Render Visibility, you can use:

-primary

The box disappears from the camera's primary rays but remains visible to the other ray categories.

image.png

Default Visibility of the Box is set to inherited

Default Visibility of the Box is set to inherited


image.png

LOP Edit Properties is used to change Visibility of the BOX to Invisible

LOP Edit Properties is used to change Visibility of the BOX to Invisible

image.png

Karma Render Visibility

<aside>

$$ \Large \textbf{Control what sees your geometry — and what your geometry can see.} $$

</aside>

1. What is Render Visibility?

Render Visibility determines which types of rays can see or interact with a geometry object during rendering.

In a path-traced renderer like Karma XPU, not every ray serves the same purpose. For example:

Render Visibility lets you control which of these ray categories can interact with a given object.

<aside> ⚠️

</aside>

3. Ray categories

4. What is it used for?