Interlocking
SOLARIS / NODE SYSTEMHOUDINI 22.0 · USD
13 NODES / 135 PRIMS
INTERLOCKING · HOUDINI 22.0 · SOLARIS / USD

Solaris 节点结构标准化工作流

以当前 /stage 的 13 个节点(12 LOP + 1 ROP)与 /obj/geo1 的 HS logo 案例为样本:先拆连接逻辑,再把 6 个执行环节逐节点讲清,最后落到玻璃/金属材质、灯光、OCIO 与 Karma 渲染。不是节点词典,而是一张可以照着接的工作图。

HFS22.0.368 HIPHSLOGO_grid_options.hipnc DISPLAY/stage/renderpass1 STAGE135 prims
DATA SCOPE本页数值读取自 2026-10-27 07:03 保存的 HSLOGO_grid_options.hipnc(Houdini 22.0.368);未包含窗口内尚未保存的修改。节点说明依据 SideFX Houdini 22.0 文档与 OpenUSD 26.x 文档。
ONE-LINE一句话
结构

场景底座 → 选变体 → 两条外观路线 → 开关选择 → Karma 设置 → Pass → USD Render ROP。

material_lookdev→set_scene_variants→materiallibrary1/texturemateriallibrary1→switch1→karmarendersettings1→renderpass1→usdrender_rop1
01

先看清这张网络

13 NODES · 135 PRIMS
DISPLAY = /stage/renderpass1

主链是一条“场景 → 外观 → 渲染”的直线;左上还有一条全部 bypass、没有 merge 的旁路分支。读图时先看红色实线,再看虚线;节点右上角的数字是该节点输出的 prim 数,不是节点参数。

悬停节点展开 · HOVER TO EXPAND
主链从 material_lookdev 经 set_scene_variants 分成两条材质路线,经 switch 进入 Karma 渲染设置、Render Pass 与 USD Render ROP。左上角为全部 bypass 且未接入主链的旁路分支。 BYPASSED BRANCH · 旁路分支 全部节点 bypass;输出停在 spotlight1,没有 merge 到主链。 ✕ 未接入最终 Stage · 不影响下面的渲染结果 MAIN CHAIN · 主链 SCENE · 场景底座 LOOK · 两条外观路线 SELECT RENDER · 设置与执行 +68 +5 +2 +6 +2 FINAL STAGE · 135 PRIMS ROP 只执行渲染,不产生新的 Stage active stage data bypassed / not connected 127 prim count at node output DISPLAY → final stage
读图顺序:红色实线 = 参与最终 Stage 的数据;灰色虚线 = bypass / 未连接;节点右上角 = 该节点输出的 prim 数。交互:悬停节点展开“干什么 / 参数含义 / 上手提示”,触屏点击固定,Esc / × 关闭。switch1 的 Select Input = 0,所以路线 A 生效;路线 B 仍存在于 switch 的上游,但被 switch 丢弃。Display flag 在 renderpass1,共 135 prims。

连接清单:谁接到谁,哪个端口

EDGE LIST · 13 NODES
FromToInputState含义
material_lookdevset_scene_variants0ACTIVE底座 → 变体选择;/World 路径不变
set_scene_variantsmateriallibrary10ACTIVE展开 StandardShaderBall 后生成 MTLX 材质
set_scene_variantstexturemateriallibrary10COOKED第二条外观路线;上游存在但未被选中
materiallibrary1switch10SELECTED当前 input 0,最终使用深蓝 my_material
texturemateriallibrary1switch11NOT SELECTED同一 material path,被 switch 丢弃
switch1karmarendersettings10ACTIVE选定外观进入 RenderSettings
karmarendersettings1renderpass10ACTIVEPass 的 renderSource 指向设置
renderpass1usdrender_rop10ACTIVEROP 执行 husk;不产生新 Stage
shaderballmateriallibrary0BYPASS旁路:资产 → 红色备用材质
materiallibrarycamera10BYPASS旁路:材质 → 相机
camera1pointlight10BYPASS旁路:相机 → 点光
pointlight1spotlight10BYPASS旁路:点光 → 聚光
spotlight1(无输出)—NO MERGE分支终止;没有接回主链
HERE / 左侧 sticky note

“Here we can start building our MaterialX-based shading network, by diving into the my_material builder within the material library.”

→ 对应 materiallibrary1:直接改 shader 图。

THERE / 右侧 sticky note

“This approach re-uses the MaterialX based Quick Surface Material, and allows you to control the look with Copernicus textures, rather than editing the shader graph.”

→ 对应 texturemateriallibrary1:用 COP 纹理控制外观。

135primsdisplay 节点
12meshes主球 5,914 点
18materials17 + 1
5lights全部为 RectLight
2cameras2 × Camera
1switchinput 0

为什么这样连:五条判断

不是“能连上”,而是“顺序有意义”
01

先底座,后覆盖

sublayer 放在最前,保持 /World 的绝对路径不变;后面的变体、材质和相机都在这个底座上叠加 opinion。

02

先场景,后材质

setvariant 先展开 /World/shader_ball,materiallibrary 才能把材质绑到一个真实存在的 prim 上。

03

两条路线,不能 merge

两条材质路线都写 /World/Materials/my_material;merge 会产生同一路径的冲突,switch 只放行一个。

04

设置属于 Stage

Karma Render Settings 写 RenderSettings/Product/Var;RenderPass 封装配方;ROP 只负责执行 husk。

05

旁路不是主链

左上分支全部 bypass 且没有 merge;当前 135 prims 中它贡献 0。不能因为“节点在图里”就认为它参与渲染。

Prim 数阶梯:每个节点实际增加了什么

display = 135 / branch B = 124
material_lookdev
54base
set_scene_variants
122+68 · variant
materiallibrary1
127+5 · material
texturemateriallibrary1
124+2 · alt
switch1
127input 0
karmarendersettings1
133+6 · render settings
renderpass1
135+2 · pass
usdrender_rop1
ROPexecutes

当前 Stage 的实际证据

HOM / USD 读取 · 不是估算
观察项值说明
Display 节点/stage/renderpass1135 prims;其中 12 Mesh、18 Material、5 RectLight、2 Camera。
Switch 选择input 0materiallibrary1(127 prims),不是 texturemateriallibrary1(124 prims)。
最终材质/World/Materials/my_material绑定在 /World/shader_ball 的父级 Xform;base_color=(0.075,0.1875,0.30),roughness=0.1。
渲染设置1280×1280 / CPU / 9 sppcamera=/World/Camera;delegate=BRAY_HdKarma;beauty 为 color4f LPE。
Stage 根defaultPrim = 空渲染可用;发布资产/被 reference 时应补 defaultPrim。
02

Solaris 标准化工作流

FOR NEWCOMERS
SCENE → LOOK → RENDER

Solaris 的“标准”不是某个固定节点,而是稳定的数据顺序:先把场景组合出来,再做外观,再放灯光/相机,最后把渲染设置写成 USD prim,交给 husk。每一步都能被下游检查,而不是靠一个巨大的 ROP 参数页。

00

先建立 USD 心智模型

Stage 是组合结果,Layer 是文件/内存层,Prim 是场景树节点,Property 分为 Attribute 与 Relationship。先理解 sublayer 与 reference 的区别,再看 LOP 节点。

Stage / LayerPrim / PropertyComposition
01

场景装配

用 SOP Import / Scene Import / Asset Reference / Sublayer / Reference 把内容放进 /stage。整场用 sublayer,资产用 reference,重资产用 payload。

sopimportassetreferencesublayerreference
02

布局与层级

用 Xform / Edit 摆放,用 Merge / Graft 合并分支。把几何放在 Xform 父级下,不要在 gprim 下再放 gprim;用 kind 维护模型层级。

xformmergekindxformOp
03

材质与外观

在 Material Library 里做 MaterialX/Karma 材质,或用 Texture Material Library 做纹理驱动外观;再单独 Assign Material。官方建议把“创作”和“绑定”分开。

materiallibraryassignmaterialtexturemateriallibrarymtlxstandard_surface
04

灯光与相机

用 Camera 创建 USD 相机,用 Light / Dome Light 建立灯光。确认 /Render 使用的相机路径,避免“场景里有相机但 RenderSettings 没指向它”。

cameralightdomelight/World/Camera
05

渲染设置与 Product

Karma Render Settings 生成 RenderSettings、RenderProduct、RenderVar;设置相机、分辨率、引擎、采样、AOV 与输出图。需要可见性/matte 时加 Render Pass。

karmarendersettingsrenderpassrenderproductrendervar
06

执行与交付

USD Render ROP 调 husk 出图;USD ROP 写 USD 图层/资产。交付前补 defaultPrim、检查 layer break、清理绝对路径,并保存 HIP。

usdrender_ropusd_ropconfigurelayerlayerbreak
整场 vs 资产整场覆盖用 sublayer;把一个资产挂到某个分支用 reference。sublayer 不改变路径,reference 会改变路径。
强弱顺序同一个 Stage 里,后写的 LOP 进入更强层。不要把两个写同一路径的分支 merge 在一起,除非你明确要冲突。
不要在 gprim 下放 gprimUSD 的 activation/visibility/purpose 是层级继承的;几何应放在 Xform 下,便于整体控制。
材质与绑定分开Material Library 负责“写材质”,Assign Material/Material Linker 负责“绑材质”。这样别人能看懂,也方便复用。
设置写在 Stage 上相机、分辨率、采样、AOV 属于 USD prim;ROP 只是执行器。换渲染器/农场时,这些设置仍然可读。
路径要可迁移避免写死 $HFS 绝对路径;用 $HIP/$JOB/相对路径/asset resolver,并在 USD ROP 里加 relative-path 处理器。
# 一个最小可运行的 Solaris 主链(节点名示意) /stage sopimport # 或 assetreference / sublayer → xform / merge → materiallibrary → assignmaterial → camera + domelight / light → karmarendersettings → renderpass → usdrender_rop # 当前样本的“外观 A/B”结构 material_lookdev → set_scene_variants ├─ materiallibrary1 # MTLX · blue └─ texturemateriallibrary1 # QuickSurface + COP └────────→ switch1 → karmarendersettings1 → renderpass1 → usdrender_rop1

六个执行环节:逐节点拆解

00 CONCEPT + 01–06 STEPS
Stage组合结果root layer + 子层 + 引用 + 变体组合后的场景
Layer数据来源文件层 / 内存层 / 外部层;LOP 编辑进入最强层
Prim场景树节点/World、/Render、/World/Logo_Upper
Property属性与关系Attribute 是值;Relationship 是链接
00

先建立“级 / 层 / prim”的心智模型

CONCEPT · BEFORE NODES

CONCEPT / 概念锚点Stage 是组合后的结果,Layer 是组成它的文件/内存层,Prim 是场景树节点,Property 分为 Attribute 与 Relationship。Solaris 的“标准”首先是把这四件事分开。

不要一上来就找 ROP。先确认你现在在哪个级:是在 /obj 里改 Houdini 几何,还是在 /stage 里写 USD,还是在 /out 里执行渲染。三个级的数据不同,不能混着说。

执行顺序

  1. 在 /obj 里找到 HS logo 的 SOP 源(/obj/geo1);这是 OBJ/SOP 级,不是 USD。
  2. 在 /stage 里用 SOP Import 把 SOP 几何转成 USD Mesh;从这里开始才是 LOP 级。
  3. 把材质、灯光、相机、RenderSettings 都写成 /stage 里的 prim;它们都是 USD 数据。
  4. 最后在 /out 里用 ROP 执行 husk;ROP 只执行,不产生新的 Stage。

关键设置

Stage组合结果,不是单个文件
/stageLOP 网络的容器;display 节点决定最终 Stage
/outROP 网络;执行渲染或写文件
/objHoudini 对象级;不是 USD 命名空间
级(Level)OBJ(对象/变换)→ SOP(几何)→ LOP(USD)→ ROP(执行)。
层(Layer)root layer、sublayer、anonymous in-memory layer、外部 USD 文件;LOP 编辑进入最强层。
Prim / PropertyPrim 是 /World/Logo_Upper;Attribute 是 points、resolution;Relationship 是 material:binding、camera。
TIP把“层”和“级”分开说:级是网络上下文,层是 USD 数据来源;同一个 /stage 里可以有多个 layer。
STEP 00 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
01
/obj/geo1OBJ / SOP 源
OBJ/SOP

HS logo 的 polyextrude、trace、remesh 链;这是 Houdini 几何,不是 USD。

怎么设 / PARAM确认 display 节点;两条 extrusion 分别是下层 green 与上层 blue。
输出 / OUTSOP geometry(点/面/UV)
output → input · USD Stage
02
/stageLOP 网络
LOP

每个 LOP 节点输入一个 USD Stage,输出修改后的 Stage。

怎么设 / PARAMSOP Import 把 SOP 变成 USD;Material/Assign/Light/Camera 写 opinion。
输出 / OUTComposed USD Stage
output → input · USD Stage
03
/outROP 执行
ROP

USD Render ROP / USD ROP 负责执行渲染或写 USD 文件。

怎么设 / PARAM设置 loppath、rendersettings、outputimage;调用 husk。
输出 / OUT图片或 USD 文件
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
01

场景装配:把 HS logo 拆成四条 USD 分支

ASSEMBLY · SOP IMPORT

CONCEPT / 概念锚点sopimport 把 SOP 几何转成 USD。关键不是“导入”,而是决定每个分支的 prim path、层归属和后续绑定对象。

当前工程的 /obj/geo1 已经有两条 extrusion:polyextrude1 是 0.062 高的下层(green),polyextrude2 是 0.104 高的上层(blue)。再把底座与地面作为独立分支导入,后面才能分别赋材质。

执行顺序

  1. 创建 import_lower_metal:soppath=/obj/geo1/polyextrude1,pathprefix=/World/Logo_Lower。
  2. 创建 import_upper_glass:soppath=/obj/geo1/polyextrude2,pathprefix=/World/Logo_Upper。
  3. 创建 import_base 与 import_floor:底座来自 /obj/logo_base/bevel,地面来自 /obj/logo_floor/floor。
  4. 用 merge(geo_mats)把四条分支合成一个 Stage;检查每条 Mesh 都有 points,而不是空 prim。

关键设置

soppath/obj/geo1/polyextrude1 / polyextrude2
pathprefix/World/Logo_Lower / Logo_Upper / Base / Floor
import group空:导入整个 SOP 输出
检查每条 Mesh 的 points 数量 > 0;bounding box 在 1 个单位以内
源/obj/geo1 的两个 polyextrude 是 SOP 级;不要在这里找 material:binding。
目标/World 下的 Xform 与 Mesh;USD prim path 由 pathprefix 决定。
注意primpath 和 pathprefix 不是同一个参数;本案例用 pathprefix 控制目标路径。
TIP如果导入后 Mesh 是空的,先看两点:soppath 是否指向有几何的 SOP,以及生成时是否只写了 time sample。
STEP 01 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
PARALLEL BRANCHES · 多条输入 Stage
01
import_lower_metalSOP Import
LOP

下层 green:polyextrude1,导入为 /World/Logo_Lower。

怎么设 / PARAMsoppath=/obj/geo1/polyextrude1;pathprefix=/World/Logo_Lower;primpath 留空。
输出 / OUTXform + Mesh
02
import_upper_glassSOP Import
LOP

上层 blue:polyextrude2,导入为 /World/Logo_Upper。

怎么设 / PARAMsoppath=/obj/geo1/polyextrude2;pathprefix=/World/Logo_Upper。
输出 / OUTXform + Mesh
03
import_baseSOP Import
LOP

底座:bevel 后的 box,导入为 /World/Base。

怎么设 / PARAMsoppath=/obj/logo_base/bevel;pathprefix=/World/Base。
输出 / OUTXform + Mesh
04
import_floorSOP Import
LOP

地面:8×8 grid,导入为 /World/Floor。

怎么设 / PARAMsoppath=/obj/logo_floor/floor;pathprefix=/World/Floor。
输出 / OUTXform + Mesh
merge → 同一个 Stage
05
geo_matsMerge
LOP

把四条分支的 layer stack 合成一个 Stage;这是“合流”,不是“合并几何”。

怎么设 / PARAM按顺序接入四个 import;保持各自 prim path 不变。
输出 / OUT一个含 /World/Logo_*、/World/Base、/World/Floor 的 Stage
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
02

布局与层级:Xform 下放 Mesh,不把 gprim 塞进 gprim

LAYOUT · XFORM / KIND

CONCEPT / 概念锚点USD 的 activation、visibility、purpose 都是沿层级继承的。把多个 Mesh 放在一个 Xform 下,才能整体移动/隐藏;不要在一个 Mesh 下再放 Mesh。

案例中的 logo 是一条竖直的招牌:X/Y 是版面,Z 是厚度。底座在 Y 方向下方,地面在 XZ 平面;所有物体应挂在 /World 下的 Xform 分支,而不是散落在 root。

执行顺序

  1. 检查 /World/Logo_Lower、/World/Logo_Upper、/World/Base、/World/Floor 都是 Xform 父级下的 Mesh。
  2. 需要整体旋转/移动时,用 xform LOP 匹配 /World/Logo_* 与 /World/Base,而不是逐个改 Mesh。
  3. 给模型根 prim 设置 kind=component;/World 用 group;组件内部不要再出现 model kind。
  4. 如果以后要合并别的资产,用 merge 或 graft;不要在 gprim 下追加 gprim。

关键设置

Xform ordertranslate → rotate → scale;USD 用 xformOpOrder 记录
kind/World=group;Logo_*=component
轴本案例 Z 是厚度;地面在 XZ 平面;相机在 +Z/+X 方向
对象级/obj/geo1 的 transform 与 /World 的 xformOp 是两级不同变换。
USD 级Xform 父级承载变换;Mesh 只承载 points/primvars。
层级规则gprim 下不要放 gprim;装配用 Xform/Scope/Assembly。
TIP“看起来动了”不等于“层级对了”。在 Scene Graph Tree 里看父子关系,不要只看视口。
STEP 02 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
01
xform (可选)Transform
LOP

对匹配的 prim 施加整体变换;本案例也可以用 /obj 级变换。

怎么设 / PARAMprimpattern=/World/Logo_* /World/Base;translate/rotate/scale。
输出 / OUT带 xformOp 的 Stage
output → input · USD Stage
02
mergeMerge
LOP

把主场景与灯光/相机/设置合流;不是把几何焊在一起。

怎么设 / PARAM按依赖接入:先几何/材质,后灯光/相机/设置。
输出 / OUT完整 Stage
output → input · USD Stage
03
kind / hierarchyConfigure Primitive
LOP

维护模型层级:/World group;Logo_* component。

怎么设 / PARAM用 Configure Primitives 设置 kind,不在每个 Mesh 上乱写 model。
输出 / OUT可被引用的模型层级
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
03

材质与外观:玻璃、金属、COP 取色

LOOKDEV · MATERIALX

CONCEPT / 概念锚点Material 是 prim;Shader 是 Material 下的子 prim;material:binding 是 relationship。材质创作与绑定最好分开:Material Library 写材质,Assign Material 绑几何。

上层 blue 用玻璃:transmission=1、低 roughness、IOR 1.47、蓝色 transmission tint;下层 green 用金属:metalness 0.92、roughness 0.22、anisotropy 0.65。颜色来自当前工程 /img/copnet1 的两个 constant,而不是凭感觉调。

执行顺序

  1. 创建 materiallibrary(materials),里面建 metal_green、glass_blue、metal_base、floor_dark 四个 mtlxstandard_surface。
  2. 用 assignmaterial 把 /World/Logo_Lower 指到 /materials/metal_green,/World/Logo_Upper 指到 /materials/glass_blue。
  3. 把 base 与 floor 分别绑 metal_base、floor_dark;绑定关系落在父 Xform 上,沿层级继承。
  4. 从 /img/copnet1 的 constant1/constant2 读取 green/blue,作为金属与玻璃的 tint;如果要纹理细节,再走 Texture Material Library/COP。

关键设置

Glasstransmission=1;IOR=1.47;roughness=0.012;depth=0.20;dispersion=0.012;coat=0
Metalmetalness=0.92;roughness=0.22;anisotropy=0.65;base=(0.035,0.38,0.095)
Basemetalness=1;roughness=0.20;base≈0.56 灰
COPconstant1=(0,0.3452,0.0447);constant2=(0,0.3555,0.7661)
MaterialMaterial 是容器;Shader 在其下;输出是 outputs:mtlx:surface / surface。
Bindingrelationship 在消费者 prim 上;父 Xform 的 binding 会向下继承。
颜色空间材质输入是 linear;纹理若为 sRGB,必须设置 sRGB 色彩空间,不能直接当 linear 用。
TIP“没有塑料感”的第一步不是加 coat,而是减少 coat、降低 roughness、给金属真实的环境反射,并让玻璃有厚度/吸收色。
STEP 03 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
01
/img/copnet1COP Network
COP

当前工程的遮罩/颜色来源;constant1=green,constant2=blue。

怎么设 / PARAM读取 f4r/f4g/f4b;本案例直接用颜色,不把棋盘格当纹理。
输出 / OUTgreen/blue 颜色值
output → input · USD Stage
02
materialsMaterial Library
LOP

把 VOP 材质网络翻译成 USD Material + Shader prim。

怎么设 / PARAM在内部建 mtlxstandard_surface;路径 /materials/*。
输出 / OUT/materials/metal_green、glass_blue、metal_base、floor_dark
output → input · USD Stage
03
assignmaterialAssign Material
LOP

把 Material prim 绑到几何;创建 material:binding relationship。

怎么设 / PARAMprimpattern=/World/Logo_Lower 等;matspecpath1=/materials/...。
输出 / OUT带 binding 的 Stage
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
04

灯光与相机:让玻璃有环境,让金属有高光

LIGHTING · CAMERA

CONCEPT / 概念锚点UsdLux 灯光是 prim;Camera 是 UsdGeomCamera;RenderSettings 通过 relationship 指向它们。灯光/相机路径错了,材质再好也看不出来。

案例用 HDRI 做环境底,三盏矩形灯做 key/fill/rim;相机用 45mm、略高于主体的 3/4 视角。玻璃需要环境中的亮暗变化,金属需要大面积高光;只加一盏正面灯会非常“塑料”。

执行顺序

  1. 创建 domelight(hdri),加载 HDRI,intensity≈0.75,illumbackground=1;让环境成为反射和背景。
  2. 创建三盏 RectLight:key 250、fill 80、rim 900;面积要大,避免点光源式硬高光。
  3. 创建 cam_hero:位置 (1.8,1.0,4.6),目标 (0,0,0.02),focal 45mm;相机看向主体中心。
  4. 在 stage_out 中合并灯光/相机/设置,确认 RenderSettings 的 camera 指向 /cameras/cam_hero。

关键设置

HDRIdome intensity 0.75;背景可见;提供环境反射
Key250;2.4×1.5;暖白
Fill80;1.6×1.0;冷白
Rim900;1.4×0.8;冷蓝
Camera45mm;t=(1.8,1.0,4.6);target=(0,0,0.02)
/lightsUsdLux prim;灯光强度/颜色/尺寸都在 prim 属性里。
/camerasUsdGeomCamera;focalLength 的 Houdini 参数是毫米,USD 里是场景单位(本案例 45 → 0.45)。
/World几何与材质;不要和 /Render 的设置混在一起。
TIP玻璃的“高级感”来自环境反射和边缘透光;金属的“高级感”来自大面积高光和粗糙度变化。不要让灯只从相机方向直打。
STEP 04 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
PARALLEL BRANCHES · 多条输入 Stage
01
hdriDome Light
LOP

环境穹顶;给玻璃/金属提供反射与背景。

怎么设 / PARAMtexturefile=HDRI;intensity≈0.75;illumbackground=1。
输出 / OUTDomeLight prim
02
light_keyLight
LOP

主光:大面积矩形,塑造主体。

怎么设 / PARAMprimtype=RectLight;width 2.4、height 1.5;intensity 250。
输出 / OUTRectLight prim
03
light_fillLight
LOP

补光:压低对比,给暗部细节。

怎么设 / PARAMRectLight;width 1.6、height 1.0;intensity 80。
输出 / OUTRectLight prim
04
light_rimLight
LOP

轮廓光:勾出边缘,让玻璃/金属分离背景。

怎么设 / PARAMRectLight;width 1.4、height 0.8;intensity 900。
输出 / OUTRectLight prim
merge → 同一个 Stage
05
cam_heroCamera
LOP

3/4 视角,略高于主体;45mm 比广角更接近产品摄影。

怎么设 / PARAMt=(1.8,1.0,4.6);目标 (0,0,0.02);focal=45;focusDistance≈4.8。
输出 / OUTCamera prim
output → input · USD Stage
06
stage_outMerge
LOP

合并几何/材质/灯光/相机/RenderSettings。

怎么设 / PARAM顺序:assign_floor → hdri → lights → camera → render_settings。
输出 / OUT最终 Stage
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
05

渲染设置与 Product / Pass:把设置写成 USD

RENDER · SETTINGS

CONCEPT / 概念锚点RenderSettings、RenderProduct、RenderVar 都是 USD prim;它们不在 ROP 参数里。ROP 只负责选择 Stage 和启动 husk。

案例的 /Render/render_settings 指向 cam_hero,1280×720,Karma CPU,64 spp,OIDN 降噪,输出 PNG。标准网络还可以加 RenderPass,把可见性/matte/多 pass 配方封成 prim;本案例只做单 pass,所以 /out/logo_render 直接引用 RenderSettings。

执行顺序

  1. 在 /stage 创建 karmarendersettings(render_settings);设置 camera、resolution、engine、samples、picture。
  2. 需要 pass 级可见性/matte 时,再加 renderpass,把 renderSource 指到 render_settings。
  3. 在 /out 创建 USD Render ROP(logo_render),loppath=/stage/stage_out,rendersettings=/Render/render_settings。
  4. 开启 OIDN 降噪;输出 EXR/PNG;确认 RenderVar 的 beauty 是 color4f。

关键设置

Resolution1280×720(本案例)
EngineKarma CPU(XPU 可切换)
Samples64 + OIDN denoiser
AOVbeauty(color4f)
Output/Users/.../solaris_doc/case/current_beauty.png
/RenderUsdRender 约定:RenderSettings/Product/Var/Pass 都在 /Render 下。
设置级RenderSettings 是全局;Product 可覆盖分辨率;Var 是 AOV。
执行级ROP 不写设置;它读取 /Render 的 relationship 并启动 husk。
TIP如果渲染结果是黑的/空的,先查 RenderSettings 的 camera 和 ROP 的 loppath/rendersettings 路径,不要先怀疑材质。
STEP 05 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
01
render_settingsKarma Render Settings
LOP

创建 RenderSettings + RenderProduct + RenderVar,配置相机/分辨率/引擎/采样。

怎么设 / PARAMcamera=/cameras/cam_hero;1280×720;CPU;64 spp;OIDN。
输出 / OUT/Render/render_settings + Product/Var
output → input · USD Stage
02
renderpass (可选)Render Pass
LOP

把 RenderSettings 包成 pass 配方;可加 render/camera/matte/prune。

怎么设 / PARAMrenderSource=/Render/render_settings;collections 默认空。
输出 / OUT/Render/Passes/*
output → input · USD Stage
03
/out/logo_renderUSD Render ROP
ROP

把 Stage 写成临时 USD,调用 husk 出图。

怎么设 / PARAMloppath=/stage/stage_out;rendersettings=/Render/render_settings;outputimage=…。
输出 / OUTPNG/EXR 图像
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。
06

输出与交付:图片、USD、defaultPrim

OUTPUT · DELIVERY

CONCEPT / 概念锚点渲染输出和 USD 输出是两条路:USD Render ROP 出图;USD ROP 写图层/资产。交付 USD 时,defaultPrim、相对路径、层边界比“看起来对”更重要。

本案例的交付物是 current_beauty.png + HS_logo_current_case.hip;如果要给下游一个 USD 资产,还需要用 USD ROP 写 /World,设置 defaultPrim,并处理绝对路径。

执行顺序

  1. 渲染图:确认输出文件存在、分辨率正确、无未解释的 render error。
  2. USD 资产:用 USD ROP 写 /World,设置 defaultPrim=/World;用 Configure Layer 设置层元数据。
  3. 路径:把 Houdini 安装目录/工程绝对路径改成 $HIP/$JOB/相对路径;用 USD ROP 的 relative-path 处理器。
  4. 保存 HIP;在 Scene Graph Details 的 Layer Stack 检查最终层结构,确认不是只保存了临时层。

关键设置

ImagePNG/EXR;sRGB display;保留 EXR 线性版更好
USDdefaultPrim=/World;upAxis=Y;metersPerUnit=1
Paths$HIP / $JOB / 相对路径;不要写死 /Applications/Houdini/...
输出层root layer + sublayers;USD ROP 决定哪些层写成文件。
Layer Break在交付前切断“只用于上下文”的层;避免把别人的资产重复写出。
defaultPrim被 reference 时的入口;本案例发布资产时应设为 /World。
TIP渲染成功 ≠ 资产可交付;发布 USD 前再检查 defaultPrim、层路径和引用依赖。
STEP 06 / 节点顺序TOP → BOTTOM
悬停节点查看参数与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
01
/out/logo_renderUSD Render ROP
ROP

输出图片;本案例的 PNG 结果。

怎么设 / PARAMloppath=/stage/stage_out;rendersettings=/Render/render_settings;outputimage=…。
输出 / OUTcurrent_beauty.png
output → input · USD Stage
02
usd_rop (发布)USD ROP
LOP/ROP

把 LOP 网络写成 USD 图层;用于资产/镜头交付。

怎么设 / PARAMloppath=/stage/stage_out;outputpath=…/logo.usd;savestyle=flatten implicit layers。
输出 / OUTUSD 文件
output → input · USD Stage
03
configurelayerConfigure Layer
LOP

设置 defaultPrim、保存路径、upAxis 等层元数据。

怎么设 / PARAMdefaultprim=/World;save path=…;upaxis=Y。
输出 / OUT可被 reference 的层
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。

在 Houdini 里怎么验证

UI + HOM

Scene Graph Tree 看层级

选中 prim,确认路径、kind、visibility;用 pin 固定查看,不要只在视口里点物体。

Scene Graph Details 看 opinion

Attributes / Relationships / Metadata 三个页签;Layer Stack 与 Composition 看哪一层贡献了值。

Inspect Flattened Stage 看最终 USD

右键 LOP → LOP Actions → Inspect Flattened Stage;确认最终结构,而不是节点参数。

Python Shell 读事实

hou.node('/stage/renderpass1').stage();用 GetPrimAtPath / Traverse 读 prim、属性和关系。

03

案例:HS logo 玻璃与金属

CURRENT PROJECT
/obj/geo1 → /stage → /out

这一节把前面的六步落在一个真实案例上:当前工程 OBJ 层级里的 HS 服务器 logo。上层 blue 做玻璃,下层 green 做金属;颜色来自当前工程 COP,最后用 Karma 渲染成 1280×720 的产品图。重点是“每个 prim 为什么在那里”,而不是只给一个漂亮结果。

HS logo 上层玻璃下层金属 Karma 渲染
当前案例渲染:1280×720,Karma CPU,64 spp,OIDN。上层 blue(polyextrude2)玻璃;下层 green(polyextrude1)金属;底座/地面为金属与暗面。Houdini Apprentice 水印来自软件输出。

HS logo:上层玻璃,下层金属

案例完全基于当前工程 /obj/geo1 的 HS logo:polyextrude1(green,0.062 高)做下层金属,polyextrude2(blue,0.104 高)做上层玻璃;底座与地面单独导入。颜色从当前工程 /img/copnet1 的 constant1/constant2 读取。

案例文件:solaris_doc/case/HS_logo_current_case.hip · 渲染:current_beauty.png

1280×720Karma CPU
64samples
OIDNdenoiser
2 + 1logo + base

两条 extrusion,分别赋材质

不是把整个 logo 当一个整体。两条分支有不同的 prim path、不同的 material binding,才能一条玻璃、一条金属。

UPPER / GLASSpolyextrude2 · 0.104 高
/World/Logo_Upper
/materials/glass_blue
LOWER / METALpolyextrude1 · 0.062 高
/World/Logo_Lower
/materials/metal_green

颜色从 COP 来,不是猜的

当前工程 /img/copnet1 的 constant1/constant2 就是 logo 的 green/blue。把它们作为金属与玻璃的 tint;如果要做图案,再走 Texture Material Library。

constant1green
(0.0, 0.3452, 0.0447)
polyextrude1 / metal_green 的取色来源
constant2blue
(0.0, 0.3555, 0.7661)
polyextrude2 / glass_blue 的取色来源

案例节点图:从 SOP 到最终 Stage

CURRENT PROJECT /obj/geo1
CASE / CURRENT PROJECTTOP → BOTTOM
悬停节点查看 soppath、prim path、材质与输出 · 线 = Stage 数据流
output → input · USD Stage / opinion
PARALLEL BRANCHES · 多条输入 Stage
01
import_lower_metalSOP Import
LOP

polyextrude1 → /World/Logo_Lower;green 下层,金属。

怎么设 / PARAMsoppath=/obj/geo1/polyextrude1;pathprefix=/World/Logo_Lower。
输出 / OUTXform + Mesh
02
import_upper_glassSOP Import
LOP

polyextrude2 → /World/Logo_Upper;blue 上层,玻璃。

怎么设 / PARAMsoppath=/obj/geo1/polyextrude2;pathprefix=/World/Logo_Upper。
输出 / OUTXform + Mesh
03
import_baseSOP Import
LOP

bevel box → /World/Base。

怎么设 / PARAMsoppath=/obj/logo_base/bevel;pathprefix=/World/Base。
输出 / OUTXform + Mesh
04
import_floorSOP Import
LOP

8×8 grid → /World/Floor。

怎么设 / PARAMsoppath=/obj/logo_floor/floor;pathprefix=/World/Floor。
输出 / OUTXform + Mesh
merge → 同一个 Stage
05
materialsMaterial Library
LOP

metal_green、glass_blue、metal_base、floor_dark。

怎么设 / PARAMMaterialX Standard Surface;颜色取 COP。
输出 / OUT/materials/*
output → input · USD Stage
06
geo_matsMerge
LOP

把四个几何分支与材质库合流。

怎么设 / PARAM合并的是 layer stack,不是焊几何。
输出 / OUTStage + /materials
output → input · USD Stage
07
assign_lower_metalAssign Material
LOP

下层 → metal_green。

怎么设 / PARAMprimpattern=/World/Logo_Lower;matspecpath1=/materials/metal_green。
输出 / OUTmaterial:binding
output → input · USD Stage
08
assign_upper_glassAssign Material
LOP

上层 → glass_blue。

怎么设 / PARAMprimpattern=/World/Logo_Upper;matspecpath1=/materials/glass_blue。
输出 / OUTmaterial:binding
output → input · USD Stage
09
assign_baseAssign Material
LOP

底座 → metal_base。

怎么设 / PARAMprimpattern=/World/Base;matspecpath1=/materials/metal_base。
输出 / OUTmaterial:binding
output → input · USD Stage
10
assign_floorAssign Material
LOP

地面 → floor_dark。

怎么设 / PARAMprimpattern=/World/Floor;matspecpath1=/materials/floor_dark。
输出 / OUTmaterial:binding
output → input · USD Stage
PARALLEL BRANCHES · 多条输入 Stage
11
hdriDome Light
LOP

HDRI 环境;背景与反射。

怎么设 / PARAMintensity=0.75;illumbackground=1。
输出 / OUTDomeLight
12
light_keyLight
LOP

主光 250 / 2.4×1.5。

怎么设 / PARAMRectLight;暖白。
输出 / OUTRectLight
13
light_fillLight
LOP

补光 80 / 1.6×1.0。

怎么设 / PARAMRectLight;冷白。
输出 / OUTRectLight
14
light_rimLight
LOP

轮廓光 900 / 1.4×0.8。

怎么设 / PARAMRectLight;冷蓝。
输出 / OUTRectLight
15
cam_heroCamera
LOP

45mm,3/4,略高于主体。

怎么设 / PARAMt=(1.8,1.0,4.6);target=(0,0,0.02)。
输出 / OUTCamera
16
render_settingsKarma Render Settings
LOP

1280×720,CPU,64 spp,OIDN。

怎么设 / PARAMpicture=…/current_beauty.png。
输出 / OUTRenderSettings
merge → 同一个 Stage
17
stage_outMerge
LOP

最终 Stage:几何/材质 + 灯光 + 相机 + 设置。

怎么设 / PARAMdisplay flag 在 stage_out。
输出 / OUTComposed Stage
output → input · USD Stage
18
/out/logo_renderUSD Render ROP
ROP

执行 husk,输出 current_beauty.png。

怎么设 / PARAMloppath=/stage/stage_out;rendersettings=/Render/render_settings。
输出 / OUT1280×720 PNG
箭头表示下游节点读取上游输出的 USD Stage;每一段都可能叠加/覆盖 opinion,不是图片流的“连线”。

材质参数(实际值)

glass_blue上层 glass
蓝色吸收 + 清晰高光;不要靠 coat 做玻璃。
metal_green下层 metal
绿色阳极氧化金属;宽高光、弱漫反射。
metal_base底座 metal
银色底座;压住画面,给玻璃提供接触阴影。
floor_dark地面
暗地面;让轮廓光和玻璃反射跳出来。

灯光 / 相机 / 渲染

HDRI intensity 0.75,illumbackground=1;Key 250,Fill 80,Rim 900。相机 45mm,t=(1.8,1.0,4.6),target=(0,0,0.02)。

RenderSettings:1280×720;Karma CPU;64 spp;OIDN;beauty AOV。输出 current_beauty.png。

为什么不做成塑料:玻璃不加厚 coat,靠 transmission/IOR/depth;金属靠 metalness + anisotropy + 大面积反射;不是靠提高高光强度。

OCIO / ACES:颜色到底在哪一步变

COLOR MANAGEMENT
01 / TEXTUREsRGB 贴图
先按 sRGB 解码到 scene-linear;不要直接当线性值。
→
02 / WORKINGACEScg
材质/灯光/渲染的场景线性工作空间;EXR 保持线性。
→
03 / RENDERKarma
按 USD 材质/灯光计算;输出线性 EXR,保留高光。
→
04 / VIEWOCIO Display
ACES 2.0 → sRGB Display;这一步才是“看起来的颜色”。

术语

OCIOOpenColorIO:统一管理色彩空间、显示变换和 LUT 的配置系统。
ACESAcademy Color Encoding System:场景线性的色彩框架;不是“一个滤镜”。
ACEScgACES 的 scene-linear 工作空间;渲染/合成常用的 RGB 线性空间。
ACEScct带 toe 的 ACES 对数空间;合成/调色时比线性更均匀。
Output TransformACES 的输出/显示变换(旧称 RRT+ODT);决定“看起来怎样”。
Display / ViewOCIO 的显示端变换,例如 sRGB - Display;不是材质颜色。
Look在 view transform 前应用的创作 LUT/grade;不要和 display 混淆。
Scene-linear光照/材质计算的线性空间;EXR 渲染结果通常保持线性。

Houdini 里怎么配

用 HOUDINI_OCIO_CONFIG 指向 Houdini 自带的 ACES 2.0 / OCIO 2.5 配置($HFS/packages/ocio/houdini-config-v3.0.0_aces-v2.0_ocio-v2.5.ocio),或在 Preferences ▸ Color Management 选择配置;Karma Render Settings 里设置 OCIO Display/View。贴图标 sRGB,渲染保留线性 EXR;合成端用 ACEScct,不要在贴图/材质里再套一次 display LUT。

本案例的显示输出是 sRGB - Display;工作空间取决于当前 OCIO 配置。上面的 ACEScg/ACEScct 是生产建议,不改变已渲染的 PNG。

“没有塑料感”检查表

MATERIAL + LIGHT + CAMERA + COLOR
GLASStransmission=1、IOR=1.47、roughness 0.012;用 transmission depth/tint 做蓝色,不用 coat 堆“亮”。
METALmetalness 0.92、roughness 0.22、anisotropy 0.65;绿色要暗,靠环境反射提亮。
LIGHTHDRI + 大面积 key/fill/rim;rim 900 勾边;不要让灯全部从相机方向来。
CAMERA45mm、3/4、略高于主体;广角会拉歪 logo,长焦会压扁层次。
SAMPLES64 spp + OIDN;12 spp 的噪点会把玻璃看成塑料。
COLOR线性渲染、sRGB 显示;ACEScg 工作空间;不要把 display LUT 烘进贴图。
当前案例工程在 Houdini 中的界面截图
当前案例工程在 Houdini 中的界面:/obj/geo1 的 trace / polyextrude / remesh 链与视口。这里展示的是 OBJ/SOP 级,不是 USD 级;Solaris 的 Stage 从 /stage 开始。
04

当前 13 个节点:参数与作用

ACTUAL VALUES
FROM THE SAVED HIP

每张卡片给出“它做什么、关键参数、为什么在这个位置”。带 ACTIVE 的节点参与主链;带 BYPASS 的节点当前不贡献 Stage。参数值为读取到的实际值,路径做了省略显示。

主链 A · 场景与外观

SCENE / LOOK4 NODES
sublayer

material_lookdev

ACTIVE

把 Houdini 自带的 material_lookdev.usd 作为整场底座叠进当前 Stage。它不改变原文件的绝对路径,是后续所有 /World 编辑的地基。

INPUT —(源头)
File…/houdini/usd/scenes/material_lookdev/material_lookdev.usd $HFS 下的官方 lookdev 场景
Reload0 文件缓存;改盘上文件后手动重载
Stage output54 prims 仅底座,尚未展开变体
WHY HERE / 为什么在这里整场底座放在最前:sublayer 保持 /World 路径不变,后面的变体、材质绑定和相机才能按官方场景的路径工作。
补充 / 陷阱
  • sublayer 是“整场覆盖”,不是“把资产挂到一个分支”;挂资产应该用 reference / assetreference。
  • 当前文件路径是绝对路径,换机器或升级 Houdini 会断;生产上应改成 $HFS 或发布到工程目录。
setvariant

set_scene_variants

ACTIVE

在 /World 上选择 LookDevScene = StandardShaderBall,把官方场景里的完整 shader ball 变体展开。54 个 prim 在这一步变成 122 个。

INPUT material_lookdev
Primitives/World 变体所在 prim
Variant SetLookDevScene 场景级变体集
Variant NameStandardShaderBall 选择标准 shader ball
Selection 2CatalogThumbnails / MaterialX(enable=0) 第二条未启用
Stage output122 prims (+68) 变体选择后才出现 shader_ball、灯光、box 等
WHY HERE / 为什么在这里变体是 USD 的组合弧;只有选中 StandardShaderBall,/World/shader_ball 等 prim 才完整出现,后面的材质绑定才有目标。
补充 / 陷阱
  • 变体集不存在时节点不改变 prim;变体名不存在时会清空选择,不报错。
  • 这一步也解释了为什么“Stage 里看到的”不等于“底座文件里全部内容”:变体只展开当前选择。
materiallibrary

materiallibrary1

ACTIVE

外观路线 A:从 VOP 材质网络生成 USD 材质 /World/Materials/my_material,并直接绑到 /World/shader_ball。当前 switch 选中它。

INPUT set_scene_variants
Material Path Prefix/World/Materials/ USD 材质父路径
Material VOP* 匹配库内带 material flag 的 VOP;当前只有 my_material
Assign to GeometryOn 在生成材质的同时绑定
Geometry Path/World/shader_ball /World/ShaderBall 第二个路径在当前组合中不存在
Base Color(0.075, 0.1875, 0.30) 深蓝;来自内部 mtlxstandard_surface
Specular Roughness0.1 低粗糙度,偏亮面
Stage output127 prims (+5) Material + 3 个 shader + 父 Scope
WHY HERE / 为什么在这里它把“写材质 + 绑材质”放在一个节点里,适合教学和快速 lookdev;当前渲染实际使用的就是这条路线。
补充 / 陷阱
  • 官方文档建议把材质创作和 Assign Material 分开,网络更容易被别人接手。
  • `*` 会导入所有匹配的 VOP;以后在库内新增材质时,注意它们也会被自动发布。
  • 自动生成的 `mtlxstandard_preview` 是给 viewport / 不支持 MaterialX 的 renderer 的兜底,不是第二个正式材质。
texturemateriallibrary

texturemateriallibrary1

ACTIVE

外观路线 B:引用 QuickSurfaceMaterial,用 COP 的 checkerboard1 驱动纹理输入。它和路线 A 写同一个 /World/Materials/my_material,但当前没有被 switch 选中。

INPUT set_scene_variants
Material COPmy_material 内部 USD Material COP
Material Path Prefix/World/Materials/ 与路线 A 相同的命名空间
Assign to GeometryOn 同时绑定到 shader ball
Geometry Primitives/World/shader_ball /World/ShaderBall 第二个路径不存在
Base Asset…/houdini/usd/materials/quick_materials/quick_materials.usd Houdini 自带 Quick Materials
Base Prim/Materials/QuickSurfaceMaterial 被引用的基础材质
Texture inputcheckerboard1 · 16×16 当前是占位棋盘格
Stage output124 prims (+2) Material + 父 Scope;内部 shader 由引用带入
WHY HERE / 为什么在这里它演示 H22 的 Texture Material Library 路线:不改 shader 图,用 COP 纹理控制 Quick Surface 的外观。两条路线写同一路径,所以不能用 merge,必须用 switch。
补充 / 陷阱
  • checkerboard 只是占位;生产上应换成真实 COP/图像纹理,并检查 UV 与颜色空间。
  • 把 switch 的 Select Input 改为 1 即可实时切到这条路线,不需要重接网络。

主链 B · 选择与渲染

SELECT / RENDER4 NODES
switch

switch1

ACTIVEINPUT 0

在两条外观路线之间做实时选择。当前 Select Input = 0,所以路线 A(MTLX 深蓝材质)通过,路线 B 被丢弃。

INPUT materiallibrary1 (0) / texturemateriallibrary1 (1)
Choose InputBy Index 按输入编号选择
Select Input0 0 = materiallibrary1
Fallback Input0 非法输入时的回退
Bad Input ResponseIgnore 非法索引时输出空 Stage,且不报错
Input namesmateriallibrary1 / texturemateriallibrary1 来自连接的节点名
Stage output127 prims 与选中的 input 0 相同
WHY HERE / 为什么在这里两条路线都写 /World/Materials/my_material;merge 会让同一路径出现冲突 opinion。switch 只让一个 Stage 通过,是最干净的 A/B 机制。
补充 / 陷阱
  • 文档明确:Select Input 不合法时会输出空 Stage,不产生 warning;切换后一定检查下游 prim 数。
  • 可以用表达式或 context option 驱动 Select Input,做镜头/版本变体。
karmarendersettings

karmarendersettings1

ACTIVE

在 /Render 下创建 RenderSettings、RenderProduct 和 RenderVar。相机、分辨率、引擎、采样和输出图都写进 USD,而不是写在 ROP 上。

INPUT switch1
RenderSettings Prim/Render/karmarendersettings1 设置 prim 路径
Camera/World/Camera 来自官方底座,不是被旁路的 camera1
Resolution1280 × 1280 方形构图
EngineCPU Karma CPU
Samples per Pixel9 当前偏预览质量
Path Traced Samples128 XPU 路径追踪参数;当前 CPU 主要看 spp
Output Picture…/houdini_bridge/render/HSLOGO_grid_options.karmarendersettings1.0001.exr 绝对路径
DelegateBRAY_HdKarma husk 默认 delegate
AOVbeauty · C · color4f LPE C.*[LO]
Stage output133 prims (+6) Render/Products/Vars 子树
WHY HERE / 为什么在这里USD 的渲染设置是 Stage 数据;RenderPass 和 ROP 都只是引用它。这样同一个 USD 文件可以被不同 Hydra client 读取,而不是锁死在 Houdini ROP 参数里。
补充 / 陷阱
  • `enable_dof = True`,但相机 fStop=0、focusDistance=0,当前没有可用的景深参数;不要仅凭开关判断画面有 DOF。
  • 9 spp 适合 lookdev 预览;最终图需要提高 spp、开启 denoise 或使用 XPU。
  • 输出路径建议改用 $HIP / $JOB / @shot,不要写死本机绝对路径。
renderpass

renderpass1

DISPLAY

创建 /Render/Passes/renderpass1,并把 renderSource 指向 Karma Render Settings。它是“渲染配方”,不是渲染本身;Display flag 当前在它上面。

INPUT karmarendersettings1
Primitive Path/Render/Passes/renderpass1 必须在 /Render 下
Render Source/Render/karmarendersettings1 这个 pass 使用哪套设置
Collectionsrender / camera / matte / prune 默认空 空 = 不额外裁剪
Pass Type— 自定义 pipeline 可用
Stage output135 prims (+2) Passes Scope + RenderPass
WHY HERE / 为什么在这里Pass 把渲染配方(可见性、matte、prune、依赖)封装成 USD prim;ROP 一次只能选一个 pass,但一个 Stage 可以带多个 pass。
补充 / 陷阱
  • 当前没有集合覆盖,所以 pass 主要起“明确入口 + 可扩展”的作用。
  • 如果不需要 pass 级覆盖,ROP 也可以直接引用 RenderSettings;保留 pass 更利于以后加 matte/visibility。
usdrender_rop

usdrender_rop1

ROP

最后一步:把 /stage 写成临时 USD,再调用 husk/Karma 渲染。真正的相机、分辨率、输出图来自 RenderSettings,不来自这个 ROP。

INPUT renderpass1
Render Pass/Render/Passes/renderpass1 指定要执行的 pass
LOP Path—(默认 display) 未显式设置时用显示节点
Disable Motion Blur0 不强制关闭运动模糊
Resolver Context— 使用默认 asset resolver
Output由 RenderSettings picture 决定 ROP 本身不写 picture
Actionwrite temp USD → husk 外部进程渲染
WHY HERE / 为什么在这里它把“Stage 数据”与“执行渲染”分开:LOP 网络只负责生成 USD,ROP 负责启动 husk。这样同一张 Stage 可以被本地、农场或 USD 工具复用。
补充 / 陷阱
  • ROP 不是 LOP,不产生新的 Stage;它读取上游 Stage。
  • 排查渲染问题时,先看 RenderSettings / RenderPass 的 prim 路径是否存在,再看 husk 日志。

旁路分支 · 不参与渲染

BYPASSED / NOT MERGED5 NODES
assetreference

shaderball

BYPASS

引用官方 shaderball.usd 到 /World/shaderball,并预留 4 组变体选择;当前全部为空。整个节点被 bypass,且不在主链上。

INPUT —(源)
Reference File…/houdini/usd/assets/shaderball/shaderball.usd 官方资产
Destination Primitive/World/shaderball 注意小写、无下划线
Make Instanceable1 native instancing
Variant Setsmodel / previewObject / coreMode / graphic 未选择具体 variant
Stage output1 prim(仅 HoudiniLayerInfo) bypass + 无输入
WHY HERE / 为什么在这里它当前被 bypass,且没有连接到主链;因此不参与最终 Stage。保留在这里只作为备选/残留参考。
补充 / 陷阱
  • 如果要用它,需要把它的输出接到主链(或 merge),并关闭 bypass;仅打开 bypass 不会自动连上。
materiallibrary

materiallibrary

BYPASS

旁路分支的备用材质库:发布红色 my_material 到 /World/materials/,并指向 /World/shaderball。当前被 bypass,不进入最终 Stage。

INPUT shaderball
Material Path Prefix/World/materials/ 小写 materials,和主链不同
Material VOPmy_material 单个 VOP
Material Pathmy_material 相对前缀
Geometry Path/World/shaderball 小写 shaderball
Base Color(1, 0, 0) 红色
Stage output1 prim bypass,材质未发布
WHY HERE / 为什么在这里它当前被 bypass,且没有连接到主链;因此不参与最终 Stage。保留在这里只作为备选/残留参考。
补充 / 陷阱
  • 主链用的是 /World/Materials/my_material(大写 M、下划线路径);两条分支的路径并不相同,不能假设它们会互相覆盖。
camera

camera1

BYPASS

旁路分支的相机:目标 /World/Camera,位置在 (4.19, 1.43, 0),Y 旋转 90°、Z 旋转 17.81°,焦距 50mm。被 bypass,最终渲染不使用它。

INPUT materiallibrary
Primitive Path/World/Camera 与主链相机同路径
Translate(4.189, 1.434, 0) 世界空间位置
Rotate(0, 90, 17.811) Y 90° + Z 17.811°
Aperturesetratio 按画幅比例
Focus Distance4.687 对焦距离
Stage output1 prim bypass,不写相机
WHY HERE / 为什么在这里它当前被 bypass,且没有连接到主链;因此不参与最终 Stage。保留在这里只作为备选/残留参考。
补充 / 陷阱
  • 最终 Stage 里的 /World/Camera 来自官方底座;不是这个节点写的。
light::2.0

pointlight1

BYPASS

旁路分支的点光:强度 10,位置 (-0.04, 1.41, 4.72),X 旋转 -15.37°、Y 旋转 4.96°;Spotlight 关闭。被 bypass。

INPUT camera1
Primitive Path/World/lights/pointlight1 独立灯光分支
Translate(-0.041, 1.411, 4.719) 世界空间位置
Rotate(-15.369, 4.957, 0) 角度制
Intensity10 Karma light intensity
SpotlightOff 点光模式
Stage output1 prim bypass,不写灯光
WHY HERE / 为什么在这里它当前被 bypass,且没有连接到主链;因此不参与最终 Stage。保留在这里只作为备选/残留参考。
补充 / 陷阱
  • 最终 Stage 的 5 盏灯都是官方底座的 RectLight,不是这里的 point/spot。
light::2.0

spotlight1

BYPASS

旁路分支的聚光:强度 20,Spotlight 开启,锥角 22.5°,位置 (-0.03, 3.24, -3.28),Y 旋转 -177.16°。被 bypass,分支到此结束。

INPUT pointlight1
Primitive Path/World/lights/spotlight1 分支末端
Translate(-0.0275, 3.2397, -3.284) 世界空间位置
Rotate(-41.166, -177.160, 0) 角度制
Intensity20 Karma light intensity
SpotlightOn 聚光模式
Cone Angle22.5° shaping:coneAngle
Stage output1 prim bypass,不写灯光
WHY HERE / 为什么在这里它当前被 bypass,且没有连接到主链;因此不参与最终 Stage。保留在这里只作为备选/残留参考。
补充 / 陷阱
  • 这个节点没有输出连接;即使关闭 bypass,也不会自动进入主链。
05

常用节点速查

28 NODES
BY JOB

这张表按“你要做什么”组织,而不是按 Tab 菜单字母序。初学者先掌握每行的第一个节点;等网络稳定后,再引入 Material Linker、Stage Manager、Layer Break 这类规模化工具。

节点 / 类型作用关键参数典型使用场景
sopimportSOP Import · Geometry把 SOP 几何转成 USD 几何(Mesh/Points/Curves/Volume)。soppath / path / importstyle / pack已有 Houdini 模型,要进 /stage
sceneimportScene Import · Geometry把 OBJ/SOP 场景层级、材质、灯光整体导入。scene / path / importmaterials从传统 OBJ 场景迁移
assetreferenceAsset Reference · Assembly引用 USD 资产,同时做变换与变体选择。filepath / primpath / instanceable / variants引用一个已发布的 USD 资产
referenceReference · Assembly把 USD 文件或上游分支挂到场景树的一个分支;可选 payload。filepath / primpath / reftype把资产挂到 /World/Props 下
sublayerSublayer · Layers把整层 USD 叠进当前 Stage;路径不变,做整场覆盖。filepath1 / sublayerposition / mute加载灯光/场景/部门的整层
mergeMerge · Layers把多条分支的 layer stack 合成一个 Stage。输入顺序 / enable场景 + 灯光 + 特效合并
xformTransform · Layout对匹配的 prim 施加变换。primpattern / translate / rotate / scale / pivot摆放、旋转、缩放资产
materiallibraryMaterial Library · Lookdev从 VOP 生成 USD 材质,并可同时绑定。matnode1 / matpathprefix / assign1 / geopath1创建 MaterialX / Karma 材质
assignmaterialAssign Material · Lookdev把已有材质绑定到 prim 或 collection。primpattern / materialpath / method / strength材质创作与绑定分开
materiallinkerMaterial Linker · Lookdev按规则批量分配材质。规则表 / primpattern / materialpath大量资产按命名规则上材质
texturemateriallibraryTexture Material Library · Lookdev引用 Quick Surface 等 USD 材质,用 COP 纹理驱动输入。matnode1 / assign1 / geoprims1纹理驱动外观,不动 shader 图
cameraCamera · Camera创建/编辑 USD Camera。primpath / focal / aperture / clipping设置渲染相机
lightLight · Lighting创建/编辑 USD Light(点/面/聚光等)。primpath / intensity / color / shaping添加灯光
domelightDome Light · Lighting创建环境穹顶光。primpath / intensity / textureHDRI / 环境照明
karmarendersettingsKarma Render Settings · Render创建 RenderSettings、RenderProduct、RenderVar。camera / resolution / engine / samples / picture配置 Karma 最终渲染
renderpassRender Pass · Render创建 RenderPass,封装渲染配方与可见性集合。renderSource / collections / passType多 pass / matte / prune
renderproductRender Product · Render创建输出产品(图像或文件型产物)。camera / productType / productName一个设置输出多张图
rendervarRender Var · Render创建 AOV / LPE 输出通道。sourceName / sourceType / dataTypeBeauty、深度、Cryptomatte
usdrender_ropUSD Render ROP · Render把 Stage 写成临时 USD,调用 husk 渲染。renderpass / loppath / override camera / output最终出图 / 农场渲染
usd_ropUSD ROP (LOP) · Output把 LOP 网络写成 USD 文件/图层。loppath / outputpath / savestyle / defaultprim发布 USD 资产或镜头
configurelayerConfigure Layer · Layers设置图层元数据:defaultPrim、保存路径等。defaultprim / savepath / upaxis交付前补 defaultPrim
configurestageConfigure Stage · Layers控制 payload 加载、asset resolver 等 Stage 级行为。loadmask / resolver大场景按需加载
layerbreakLayer Break · Layers开启新活动层;保存时丢弃它之前的层。—只输出本部门覆盖层
prunePrune · Edit隐藏/停用匹配的 prim,常用于清理。primpattern / deactivate去掉不需要渲染的物体
copytopointsCopy to Points · Assembly把 prim 复制/实例化到点上。prototypes / points / instancingmode大量重复物件
pointinstancerPoint Instancer · Assembly创建/编辑 USD PointInstancer。prototype / points / primvars海量实例
stagemanagerStage Manager · Assembly在一个界面里引用大量 USD 文件并摆放。文件列表 / 目标路径快速搭场景
setvariantSet Variant · Variants选择 prim 上的 variant。primpattern / variantset / variantname切换 LOD / 外观 / 场景版本
switchSwitch · Flow按编号/名字/模式选择一个输入通过。chooseinput / input / fallbackA/B 外观、版本切换
06

USD 结构、属性与类

COMPOSITION
ATTRIBUTES / CLASSES

LOP 节点只是“写 USD 的 UI”。真正决定画面的是 Stage 里的 prim 类型、属性、关系与组合弧。这一节把当前 Stage 里实际出现的结构,和新人最容易混淆的概念放在一起。

Sublayer 整场覆盖

把另一层叠到当前 Stage 上,路径不变。当前 material_lookdev 就是这样加载官方场景。

Reference 挂一个分支

把资产挂到 /World/Props/xxx 这样的分支;可选 payload 延迟加载。

Variant 切换版本

同一 prim 上保存多个版本(外观/LOD/场景),Set Variant 选择。当前 LookDevScene=StandardShaderBall。

Payload 按需加载

本质是 reference,但可以卸载;大资产/大场景用它控制加载。

LIVRPS opinion 强弱

Local > Inherits > Variants > References > Payloads > Specializes;后写的 LOP 进入更强层。

Stage 组合结果

不是文件;是 root layer + 子层 + 引用 + 变体组合后的结果。每个 LOP 输出一个 Stage。

参数 → 属性 not 1:1

LOP 参数是操作界面;cook 后才写成 USD 属性/关系。例:Render Settings 的 resolutiony 写成 RenderSettings.resolution;camera 写成 rel camera;Material Library 的前缀 + VOP 名写成 Material prim 路径。不要到 USD 里找同名参数。

Stage / Layer 结构

Stage(组合结果,不是文件)
├─ upAxis=Y · metersPerUnit=1
├─ Root Layer  anon:LOP:rootlayer
├─ Sublayer 1..3  Houdini in-memory LOP layers
├─ Sublayer 4     material_lookdev.usd
│                 └─ StandardShaderBall 资产
└─ 结果:/World + /Render + /HoudiniLayerInfo

当前 /World 的 Prim 树(节选)

/World  Xform · kind=group
├─ shader_ball  Xform · component
│  ├─ material_surface  Mesh (5,914 pts)
│  ├─ neutral_objects  Scope
│  │  ├─ core / base / sss_bars  Mesh
│  └─ rel material:binding → my_material
├─ materials  Scope (17 个资产材质)
├─ lights  Scope (5 个 RectLight)
├─ box  Xform (5 个面)
├─ ground  Xform
└─ Camera  Camera (focal 50mm)

当前 Stage 里真实存在的类与实例

135 prims · 抽样 13 类
Prim 路径Type观察值 / 结构
/WorldXformkind=group;场景根,所有资产在其下
/World/shader_ballXformkind=component;rel material:binding → /World/Materials/my_material
/World/shader_ball/material_surfaceMesh5,914 points / 5,838 faces;primvars:st (faceVarying)
/World/materials/neutralMaterialoutputs:surface + mtlx:surface;内部 mtlxstandard_surface + usdpreviewsurface
/World/materials/box_baseMaterial6 个 shader 子 prim;同时有 MaterialX 与 UsdPreviewSurface
/World/lights/emitterLeft/lightRectLightinputs:intensity=9;width/height=14.96
/World/lights/emitterTop/light0..3RectLightinputs:intensity=6;width/height=24.36
/World/CameraCamerafocalLength=50;aperture=20.955;clipping=(0.1,1000)
/Render/karmarendersettings1RenderSettingsresolution=(1280,1280);camera=/World/Camera;husk:default_delegate=BRAY_HdKarma
/Render/.../Products/renderproductRenderProductproductType=raster;orderedVars → beauty
/Render/.../Vars/beautyRenderVardataType=color4f;sourceName=C.*[LO];sourceType=lpe
/Render/Passes/renderpass1RenderPassrenderSource → /Render/karmarendersettings1
/HoudiniLayerInfoHoudiniLayerInfoHoudini 写入层信息的辅助 prim,不属于资产内容

12 个 Mesh 的实际计数

points / faces / binding
MeshPointsFacesMaterial binding
/World/shader_ball/material_surface5,9145,838父级 Xform 绑定 my_material
/World/shader_ball/neutral_objects/core770768/World/materials/neutral
/World/shader_ball/neutral_objects/base794792/World/materials/neutral
/World/shader_ball/neutral_objects/sss_bars588584/World/materials/sss_bars
/World/ground/grid42—
/World/lights/emitterLeft/backplane42—
/World/lights/emitterTop/backplane42—
/World/box/back42—
/World/box/right42—
/World/box/top42—
/World/box/front42—
/World/box/left42—
# 结构示意(不是当前 Stage 的逐字导出) #usda 1.0 ( defaultPrim = "World" upAxis = "Y" metersPerUnit = 1 ) def Xform "World" (kind = "group") { def Xform "shader_ball" ( kind = "component" prepend references = @./shaderball.usd@ ) { rel material:binding = </World/Materials/my_material> } } def Scope "Render" { def RenderSettings "karmarendersettings1" { rel camera = </World/Camera> int2 resolution = (1280, 1280) rel products = </Render/karmarendersettings1/Products/renderproduct> } }

USD / HOM 类速查

读 Stage 时会遇到的类
Usd.Stage

组合后的场景;Traverse / GetPrimAtPath / GetDefaultPrim。

Sdf.Layer

单个文件或内存层;subLayerPaths、defaultPrim、upAxis。

Usd.Prim

场景树节点;GetTypeName、GetChildren、IsA、GetPrimStack。

Usd.Attribute

带类型的值;Get / Set / GetTimeSamples。

Usd.Relationship

prim 之间的链接;material:binding、products、camera。

UsdGeom.Xformable

变换 API;xformOp:translate/orient/scale。

UsdGeom.Mesh

多边形网格;points、faceVertexCounts/Indices、primvars。

UsdGeom.Camera

相机;focalLength、aperture、clippingRange。

UsdShade.Material

材质容器;输出 surface / mtlx:surface。

UsdShade.Shader

着色节点;info:id + inputs/outputs。

UsdShade.NodeGraph

嵌套着色网络;可被引用/实例化。

UsdLux.RectLight

矩形面光;inputs:intensity/width/height。

UsdRender.Settings

渲染设置 prim;resolution、camera、products。

UsdRender.Product

输出产品;orderedVars、productType。

UsdRender.Var

AOV / LPE 通道;sourceName、dataType。

UsdRender.Pass

多 pass 配方;renderSource、collections。

Pcp / Usd.Stage.GetLayerStack

组合弧与层栈;检查 sublayer/reference/variant。

属性与命名空间

inputs / outputs / primvars / relationships
pointsfaceVertexCountsfaceVertexIndicesprimvars:stprimvars:displayColorprimvars:displayOpacitymaterial:bindingxformOp:translate / orient / scalevisibilitypurposekindinputs:intensityinputs:coloroutputs:surface / mtlx:surfaceinfo:idinfo:implementationSourcehusk:default_delegatedriver:parameters:husk:*karma:global:*
属性 / 命名空间类型作用
pointsfloat3[]Mesh 顶点位置数组;长度定义点数。
faceVertexCountsint[]每个面的顶点数;与 faceVertexIndices 一起定义拓扑。
faceVertexIndicesint[]按面展开的顶点索引。
primvars:sttexCoord2f[]UV;当前 interpolation=faceVarying。
primvars:displayColorcolor3f[]显示色;constant,可被 Hydra 预览使用。
primvars:displayOpacityfloat[]显示不透明度;constant。
material:bindingrelationship指向 Material prim;在父 Xform 上绑定会向下继承。
xformOp:translate / orient / scaledouble3 / quat / float3Xformable 的变换操作;xformOpOrder 决定顺序。
visibilitytokeninherited / invisible;沿场景树继承。
purposetokendefault / render / proxy / guide;渲染目的。
kindtokengroup / assembly / component;模型层级。
inputs:intensityfloat灯光强度;UsdLux 约定。
inputs:colorcolor3f灯光颜色。
outputs:surface / mtlx:surfacetokenMaterial 的输出终端;连接 shader 输出。
info:idtokenShader 的节点类型(如 ND_standard_surface_surfaceshader)。
info:implementationSourcetokenid / sourceAsset 等实现来源。
husk:default_delegatestringhusk 选择 Hydra delegate。
driver:parameters:husk:*varioushusk 输出/编码参数(EXR 压缩等)。
karma:global:*variousKarma 全局渲染设置,写在 RenderSettings 上。

变量、时间与迁移

在参数里真正会用到的东西

Houdini 路径变量

$HIP / $HIPNAME$JOB$HFS$F / $F4 / $FF$OS / $TEMP

用于文件路径与输出命名;比绝对路径可迁移。

LOP 局部变量

@primpath@elemnum@numelem@numprim@prim

VEXpression / Assign Material / Set Variant 中逐 prim 计算。

Set Variant 变量

@numvariantsets@numvariants@prim@primpath

按 prim/变体集数量做条件选择。

Context Options

@shot_name@version@option

HIP 级参数;适合让一张网络服务多个镜头/版本。

USD 时间元数据

startTimeCodeendTimeCodetimeCodesPerSecondframesPerSecond

动画/序列的时间基准;不是 Houdini 的 $F。

环境与 resolver

PXR_PLUGINPATH_NAMEPXR_AR_DEFAULT_SEARCH_PATHHOUDINI_HUSK_DEFAULT_DELEGATE

USD 插件、资产搜索路径、husk 默认 delegate。

Prim Pattern

* / ** / ? / [abc]%type:Material%kind:component%rel:/Render/...

LOP 的 Primitives 参数不是普通 glob;它是 Houdini 的 prim pattern,可组合类型/关系/集合。

Houdini 属性 → USD 常见映射

迁移 SOP 数据时先看这张表
HoudiniUSD说明
Cdprimvars:displayColor顶点/面颜色,constant 时向下继承。
Alphaprimvars:displayOpacity显示不透明度。
uvprimvars:st纹理坐标;当前 shader ball 为 faceVarying。
Nnormals法线;USD 的 Mesh 法线是属性。
vvelocities渲染期速度模糊;不是普通 primvar。
groupmaterial:binding / subsetUSD 没有 SOP group;用 subset 或 collection 表达。
nameprim name / pathUSD 用 prim 路径而不是 name 属性。
07

现状诊断与修正

HONEST READ
OF THE SAVED NETWORK

主链可以出图,但“能出图”不等于“好接手”。下面的问题按影响排序;前两条会影响下一次换机器/换人,后两条主要影响最终质量。

现状诊断

READ FROM THE SAVED HIP · 07:03

主链是自洽的:底座 → 变体 → 两条外观路线 → switch → Karma 设置 → pass → ROP。问题主要集中在“旁路分支没有清理”和“路径不可迁移”,不影响这次出图,但会影响下一次接手。

  • P1
    左上分支完全没有接入主链 — shaderball → materiallibrary → camera1 → pointlight1 → spotlight1 全部 bypass,且 spotlight1 没有输出连接。它不贡献任何 prim;当前渲染的 5 盏灯、相机和几何都来自官方底座。
  • P1
    底座路径写死 Houdini 安装目录 — material_lookdev 的 filepath1 是绝对路径;换机器/升级 Houdini 会断。生产上应使用 $HFS 或把场景发布到工程目录。
  • P2
    Stage 没有 defaultPrim — 根层 defaultPrim 为空。渲染通常不要求,但发布 USD 资产/被 reference 时应该补;可在 Configure Layer 或 USD ROP 里设置。
  • P2
    输出图路径是绝对路径 — Output Picture 指向本机 houdini_bridge/render;建议改为 $HIP/render/$HIPNAME.$F4.exr 或 @shot 形式。
  • P2
    几何匹配里有一个不存在的路径 — geopath1 同时写了 /World/shader_ball 和 /World/ShaderBall;后者在当前组合中不存在。当前无害,但会误导维护者。
  • P3
    路线 B 仍是占位棋盘格 — texturemateriallibrary1 的 checkerboard1 是 16×16 占位;要用它出图,应换成真实纹理并检查 UV/颜色空间,再把 switch 改为 1。
  • P3
    9 spp 是预览质量 — Karma CPU 9 spp 对 lookdev 足够,但最终图会有噪声;提高 spp、开启 denoise,或改用 XPU 前先做成本评估。

最小修正清单

按优先级排序
先清理旁路删除或折叠左上 5 个节点;如果确实要保留备选资产,给它们单独的 network box,并写明“未接入”。
路径工程化把 material_lookdev 的绝对路径改成 $HFS/... 或发布到 $JOB;输出图改成 $HIP/render/...。
补 defaultPrim在 USD ROP 的 Default Primitive 或 Configure Layer 里设置 /World;再检查被 reference 时的行为。
明确 A/B 选择当前 input 0 是 MTLX 路线;如果要做纹理路线,把 switch 改为 1,并替换 checkerboard。
清理匹配模式geopath1 只保留 /World/shader_ball,避免维护者以为还有一个 ShaderBall 分支。
提高最终质量最终渲染前把 spp 提到 64–256(按预算),开启 denoise,确认相机 fStop/focus 再决定是否启用 DOF。
08

术语、参考与继续学习

GLOSSARY
PRIMARY SOURCES

术语表用于把 Houdini 的叫法和 USD 的叫法对上;参考链接优先选 SideFX 官方文档与 OpenUSD 规范,而不是二手教程。读完后建议按“USD Basics → How LOPs work → Material Library → Karma Render Settings → USD Render ROP”的顺序走一遍。

Stage

组合后的完整场景;LOP 网络的输出。

Layer

USD 文件或内存层;root layer 通常只有 sublayer 列表。

Prim

场景树节点;有类型、属性、关系和子 prim。

Attribute

带类型的值,例如 points、resolution、inputs:intensity。

Relationship

指向其他 prim 的链接,例如 material:binding、camera。

Schema

定义 prim 类型/API 的规范,例如 UsdGeomMesh、UsdLuxRectLight。

Primvar

primvars: 命名空间下的插值属性;常用于 UV、颜色、遮罩。

Composition

把多层/多文件组合成一个 Stage 的机制。

Sublayer

整场叠加,路径不变。

Reference

把资产挂到一个分支,路径改变。

Payload

可卸载的 reference,用于大资产。

Variant

同一 prim 的命名版本;用 Set Variant 选择。

LIVRPS

Local/Inherits/Variants/References/Payloads/Specializes 的强弱顺序。

Hydra

USD 的渲染抽象层;Karma 是 render delegate,husk 是 Hydra client / 渲染宿主。

husk

Houdini 的无头 USD 渲染工具;USD Render ROP 调它。

Karma

Houdini 的 USD 渲染器;CPU / XPU 两种引擎。

MaterialX

跨软件材质规范;Karma 支持 mtlxstandard_surface 等节点。

LOP

Lighting Operator;输入/输出 USD Stage 的节点。

ROP

Render Operator;执行渲染/写文件,不是 Stage 节点。

HDA

Houdini Digital Asset;可复用的节点网络封装。

一手资料

SIDEXX + OPENUSD