Skip to content
WangSnowchenPublic

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Solarnold

Four Solaris (LOP) nodes for rendering with Arnold in Houdini. They came out of a feature-animation lighting pipeline, where they handled the boring half of lighting setup — writing AOVs into USD, naming output files, and wiring a light blocker to a piece of control geometry. They have been stripped of everything studio-specific so they work on their own.

Node Type name What it does
Arnold Render Setup solarnold::arnold_render_setup::1.0 Turns a list of AOV names into RenderVar prims, groups them into RenderProduct prims, names the output files, links it all to the RenderSettings
Arnold Custom AOV solarnold::arnold_custom_aov::1.0 A material library preloaded with an Arnold AOV shader chain (AO, UV, rim, cryptomatte) ready to extend
Light Blocker Transform solarnold::light_blocker_transform::1.0 Drives the matrix of an Arnold light_blocker from the world transform of any prim, so you can place a blocker with ordinary geometry
Arnold Ass Procedural solarnold::arnold_ass_procedural::1.0 Points an ArnoldProcedural prim at a .ass file and reads its .asstoc for bounds

Full parameter reference for each one is in docs/.

Requirements

  • Houdini 19.5 or newer. The HDAs are saved from 21.0 and verified to load in 19.5, 20.0, 20.5 and 21.0.
  • HtoA. Arnold Render Setup reads its AOV table from htoa.lop, and the other three author Arnold prim types. Without HtoA installed the nodes will load but do nothing useful.

Light Blocker Transform is the one node with no HtoA Python dependency — it only needs the arnold:light_blocker shader to exist on the stage.

Install

Clone the repository into your Houdini packages directory and put the package file one level up:

cd $HOUDINI_USER_PREF_DIR/packages        # e.g. ~/houdini21.0/packages
git clone https://github.com/WangSnowchen/solarnold.git
cp solarnold/packages/solarnold.json .

Restart Houdini. The nodes appear in the LOP tab menu under Solarnold.

If you keep the repository somewhere else, copy packages/solarnold.json into your packages directory and point SOLARNOLD at wherever you cloned it:

{
    "enable": true,
    "env": [
        { "SOLARNOLD": "/where/you/cloned/solarnold" }
    ],
    "path": "$SOLARNOLD"
}

Or skip packages entirely and load otls/*.hda by hand from Assets ▸ Install Digital Asset Library.

Environment variables

Both are optional. Everything works without them.

Variable Default Meaning
SOLARNOLD_RENDER_ROOT unset Where published renders go. Arnold Render Setup prefixes output paths with it when Render Directory is set to Publish Root. If it is unset, output falls back to $HIP/render.
SOLARNOLD_RENDER_DIR_MARKER images The publish root is trimmed back to this directory name when it appears in the path, so a deep per-shot path collapses to its images root. Set it to your own convention, or to something that never matches to disable the trimming.

Typical setup

    your scene
         │
    ┌────┴─────────────┐
    │ Arnold Custom AOV│   (optional — adds AO / UV / rim shader AOVs)
    └────┬─────────────┘
         │
    ┌────┴──────────────┐
    │ Arnold Render     │   ← needs a RenderSettings prim and a RenderPass
    │ Setup             │     prim upstream (or use the legacy pass name)
    └────┬──────────────┘
         │
      USD Render ROP / husk

Add AOV names in the AOVs multiparm, tick Light Group on the ones you want split per light, set the version, and the node writes the render vars, products and file paths for you. Turn on Enable Custom AOV and it also picks up any shader-authored AOV names it finds on the stage, which is what the Arnold Custom AOV node is for.

Building from source

src/ holds the expanded, diffable form of every asset — that is what to edit and what to review in a pull request. otls/ holds the built HDAs, which are committed so the repository is usable without Houdini's command line tools.

HFS=/opt/hfs21.0 ./scripts/build.sh          # src/ -> otls/
HFS=/opt/hfs21.0 $HFS/bin/hython scripts/verify.py
HFS=/opt/hfs21.0 python3 scripts/scan.py
  • build.sh collapses each src/<node>/ into otls/<node>.hda with hotl.
  • verify.py installs every built HDA, creates each node, and checks type names, labels, icons, parameters, subnet contents and that all embedded Python compiles.
  • scan.py fails if any internal identifier, address or non-English string survives, in the sources or inside the packed HDAs.

There is also an end-to-end test that needs HtoA on HOUDINI_PATH. It builds a small stage, runs the nodes, and checks what they authored into USD:

HOUDINI_PATH="/path/to/htoa:&" $HFS/bin/hython scripts/functional_test.py

If you edit an asset from inside Houdini instead, save it to otls/ and then re-expand it so the diff shows up:

$HFS/bin/hotl -t src/<node> otls/<node>.hda

Licence

MIT. See LICENSE.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages