Limitations#
SPG is under active development. The API surface, Lua bindings and supported workflows can evolve across releases. This is what it does not do today.
GPU sources are limited to CUDA (
.cu, or precompiled.ptx,.cubin,.fatbin) and Slang (.slang, or precompiled.slang-moduleor.spv), each with its.lualaunch script and a.usdashader definition. They are loaded from the local filesystem, from a.usdzpackage, or from a URI the Omniverse client can fetch.A CUDA node is one translation unit, compiled against a single include directory, and the directory holding the
.cuis not it, so a header beside the source does not resolve. Slang has no such limit: a shader imports modules beside itself.SPG Shader nodes must not be nested under a
Materialprim, and shaders under an instance prototype are ignored.Standard library nodes operate on 2D textures only. Integer texture formats (
SINT,UINT) and buffer-backed resources are not supported by them.Slang shaders need the renderer to be running on Vulkan, and cannot use 64-bit integer types because the
shaderInt64feature is not enabled.A ray-generation node cannot use a
.spvbinary.No node is given geometry. There are no vertex or index buffers and no material data; a ray-generation node gets hit distance and surface identity from a trace and nothing more.
A launch script reads the scene as the renderer has it. Custom attributes are there only when the load names their prim, and a
stringattribute published that way reads as a number, so custom text is authored as atoken. Refer to Read the Scene.A launch script cannot write the scene. Prim tables are read-only.
A product bound to more than one camera is rendered in tiles, one camera per tile. The layout comes from
rtx.product.tiling; nothing in the image itself says which tile a pixel is in.A node cannot reach the CPU mid-frame. No pixel data is readable from the launch script, and the GPU code cannot call back to the host.
A node cannot reach other frames, beyond what a stateful output or a previous-frame read carries.
A launch script cannot reach the filesystem or the OS; its sandbox has neither.
A launch script cannot catch errors or use the string pattern functions. Refer to the sandbox.
A shader output can be bound to one RenderVar at a time.
A node cannot read an AOV and publish under that same name within one RenderProduct.
A previous-frame read reaches at most 8 frames back.
Cross-product reads can be one frame stale when the consuming product renders before the producing one, and converge once the dependency has rendered.