<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>
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 | 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. |
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.
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 |

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.


Default Visibility of the Box is set to inherited


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

<aside>
$$ \Large \textbf{Control what sees your geometry — and what your geometry can see.} $$
</aside>
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>