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

A procedural Solaris HDA for scattering USD assets onto SOP points It automatically handles asset variants, Render/Proxy geometry, proxy polygon reduction, and animation freezing.

</aside>

<aside>

💡 Want to know how it works? Scroll to the bottom of this page for a breakdown of the HDA's internal workflow.

</aside>

Before Moving Forward

Before using HDA LOP Scatter with Proxies, make sure the following two inputs are prepared. See Part 1 and Part 2 for the complete workflow.

1 Objects to Scatter

The USD geometry you want to scatter, with the required attributes and structure. Its value must match the corresponding variant index defined by the source objects.

You also need a set of points that define where the geometry will be placed.

image.png

2 Scatter Points

These points can come from a SOP Scatter node or any other suitable point-generation workflow.

You can use attributes such as @orient and @pscale to control the geometry.

The only required point attribute for variant selection is i@variant.

image.png

The Workflow

The key distinction is that the HDA builds on an existing USD asset structure, so the artist doesn't have to build the Render and Proxy representations from scratch inside the scattering tool. See Part 2 — HDA Solaris USD Prep Stage 🟡

                             HOUDINI OVERSIMPLIFIED       
                               LOP SCATTER PROXIES
                                    re1mon  
       
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%........:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%#...%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..%%%%%%%%%%%..%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..%%%%%%%%%%%%%..%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..%%..=%%%-..%%..%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..%....#%#....%..%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..%%%%%:.:%%%%%..%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%....-%%%%%%%-....%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%......%%%%%......%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%...................#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.....................%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

# Step 1 — Load the USD Assets

1. Go to Solaris (LOPs).
2. Create a Reference LOP and load the USD file containing your prepared geometry.
3. Make sure the USD assets have the required attributes and structure described in Part and Part 2.
4. Connect HDA LOP Scatter with Proxies after the Reference LOP.

At this point, the prepared USD assets are loaded and connected to the scattering tool. 
The HDA is ready to be configured in the next step.

# Step 2 — Configure the Tool
Once the USD Reference is connected, configure the parameters of HDA LOP Scatter with Proxies.

1. Name
This HDA Automatically uses the name of the connected Reference node to name the instances.
Done behind the scenes by using the Expression: `opname(opinputpath(".",0))`

2. Primitive Path
Specifies the primitive path used to identify the asset prototypes.
Example: /geo/Scatter_Cliff_Rocks/cliffrock_*

The tool automatically derives the Render and Proxy geometry paths by appending /render and /proxy.

3. Scatter Points Path
Specifies the location of the points used to scatter the geometry. 
The points can come from either a USD source or SOPs.

4. Index Attribute
Specifies the name of the attribute used to identify the variant for each point.
Example: i@variant

5. Proxy Optimization - Percent of Points
Controls the percentage of points displaying proxy geometry. Reducing this value allows you to display fewer proxies and keep the viewport lighter.

6. Proxy Optimization - Freeze Animation
Enables or disables animation on the proxy geometry.
Note: Proxy polygon reduction is handled during geometry preparation in Part 2

# Step 3 — Preview and Render
Your scatter is ready to use.

Viewport Preview: Use the Proxy purpose to preview the scattered assets with lighter geometry.
Rendering: Switch to the Render purpose to use the full-detail geometry.
Assign Materials: To assign materials to your scattered assets, add a Material Library LOP after the HDA and set up your material assignments.

Once the materials are assigned, you're ready to continue with your lighting and rendering workflow.

HOS_Solaris_Part3_Instances_red_re1mon_gerardojustel.mp4

image.png

How It Works

<aside> ⚠️

Preparation Matters

In short: prepare the USD assets correctly first, and the HDA handles the scattering workflow.

The workflow in Part 1 and Part 2 is essential for the HDA to work correctly.

The imported USD must contain the expected asset hierarchy and attributes.

</aside>

Step 1 — Flatten the Input Stage

The first node inside the HDA is a Configure Layer LOP with Flatten Input Stage enabled.

USD assets can be composed from multiple layers, references, and other composition arcs.

Flattening consolidates the composed result into a single flattened layer before the subsequent operations.

Important: flattening doesn't merge all the geometry into one mesh. The USD prim hierarchy and separate geometry prototypes can remain intact.

image.png

Step 2 — Copy to Points (LOP)

<aside> ⚠️

The only requirement is that you start with valid scatter points, with the required variant attribute.

</aside>

The HDA uses two Copy to Points LOPs: one for the Render geometry and another for the Proxy geometry.

Both nodes use the same scatter points and the variant attribute to select the appropriate prototype, but each reads a different source and creates its instances under a different USD path.

1. Primitive Path — Output Location

The Primitive Path defines where the scattered instances are created in the output USD hierarchy.

Render:/Instance/Render/chs("../name")

Proxy:/Instance/Proxy/chs("../name")

The name parameter is hidden; it automatically takes the name of the connected Reference LOP.

This keeps the output hierarchy organized according to the source asset library.

2. Source — Prototype Geometry

The Source parameter defines which geometry the Copy to Points LOP uses as its prototypes.

The HDA uses the protopattern parameter to set the base path of the source geometry.

Primitive Path (From the HDA Parameter) or PROTOtype Path :/geo/Scatter_Cliff_Rocks/cliffrock_*

Render source:chs("../protopattern")/render

Proxy source:chs("../protopattern")/proxy

This lets both nodes share the same base path while reading their respective geometry representations.

3. Prototype Selection — Attribute

Both Copy to Points nodes use:

The i@variant values on the scatter points must match the corresponding prototype indices.

Because both nodes use the same indexing convention, each point receives the matching Render and Proxy representation of the intended asset.

Customizing the Workflow

You can add SOP operations inside the LOP Copy to Points node to customize the result.

For example, in the Proxy branch:

Step 3 — Assign USD Purposes

After the two Copy to Points LOPs, each branch passes through a Configure Primitive LOP.

One branch contains the scattered Render geometry, while the other contains the scattered Proxy geometry.

The Configure Primitive nodes assign the appropriate USD purpose back to each branch.

Render Branch

The Configure Primitive LOP assigns the purpose: render

Proxy Branch

The Configure Primitive LOP assigns the purpose: proxy