Supported features#

A quick map of what the Nyx plugin renders and what it doesn’t. Use this page to decide whether your Genesis scene will work as-is, need a small tweak, or hit a hard limit.

Legend: ✅ supported · ⚠️ partial / has caveats · ❌ not supported

Solvers#

The plugin reads geometry from four Genesis solvers. Anything else is invisible to Nyx.

Solver

Status

Notes

Rigid

Drives rigid bodies, URDFs, MJCFs, drones, primitives, terrain.

FEM

Live vertices, fixed topology (no remeshing).

PBD

Same path as FEM. Only PBD entities backed by a mesh or primitive morph render — particle-only PBD is filtered out.

MPM

⚠️

Solids render through a skinned mesh; fluids (liquid/sand/snow) via per-frame marching-cubes reconstruction. vis_mode="particle" is unsupported and raises at build with an actionable message.

SPH

Particle fluids — no surface to render.

SF (smoke)

Eulerian grid not consumed.

Tool, Avatar

Not consumed.

Note

Genesis’s MPM tutorial defaults to vis_mode="particle". Switch it to "visual" (solids) or "recon" (fluids) when porting that tutorial to Nyx.

Entities and morphs#

Morph

Status

Notes

Box, Sphere, Cylinder, Plane

Native Nyx primitives — no mesh triangulation.

Mesh (.obj, .stl, .glb, .gltf)

.glb/.gltf keep their embedded materials.

Mesh (.dae / .usd*)

Passed through, but Nyx has no Collada or USD importer — load will fail.

URDF

Picking works at link-name granularity.

MJCF

Visual geometry is transcoded to OBJ at export time.

Drone

Renders fine; propeller spin shows up only if the rigid solver writes the propeller transforms.

Terrain

Procedural OBJ export per build.

Capsule / ellipsoid (URDF/MJCF visual geom)

⚠️

Falls back to a triangulated mesh instead of Nyx’s native capsule primitive. Renders correctly, just less efficient.

Nowhere (emitters)

No particle visualization.

For texture files, .png, .jpg, .bmp, .tga, .hdr, and .exr are all supported. .webp and .tiff will fail to load on the Nyx side.

Surfaces and materials#

The plugin maps genesis.surfaces.* to a single Disney-style PBR slot.

Surface

Status

Notes

Plastic, Rough, Smooth, Default, BSDF

Generic PBR.

Metal (incl. Gold, Copper, Iron, …)

8 named metals via a color lookup; no spectral complex IOR.

Emission

⚠️

Emission is set, but the surface’s base albedo is forced to black and metalness to 1.0 — emissive geometry reads as self-lit only.

Glass, Water

⚠️

Renders, but transmission, IOR, thickness, subsurface and transparency are dropped. Looks closer to plastic than to glass.

Collision

Treated as plastic.

PBR properties#

Property

Status

color (RGBA)

opacity

⚠️ folded into albedo alpha; not flipped to a true transparent material

roughness, metallic, emissive

double_sided

ior

smooth flag

Textures#

Slot

Status

diffuse_texture

normal_texture

emissive_texture

roughness / metallic / specular / opacity / transmission / thickness textures

❌ — only the scalar values

ColorTexture (single-color “texture”)

⚠️

BatchTexture

Lighting and environment#

Important

Lighting is configured through NyxCameraOptions, not Genesis VisOptions. Any lights you set on gs.options.VisOptions(lights=...) are ignored by Nyx — see Lights.

Feature

Status

Point light

Directional light

Spot light

Ambient light

Shadow toggle

HDRI environment map

✅ via NyxCameraOptions.env_maps; per-env switching supported for domain randomization

Light fields (gaussian splats)

Area lights (rectangle / sphere / disc / tube)

Cameras#

Property

Status

Pinhole model

Thin-lens / fisheye / orthographic

res, pos, lookat, up, fov, near, far

spp, denoise, tone_mapper, anti_aliasing

Render mode (Forward / FastPathTracer / RefPathTracer / Debug)

✅ — must be the same across all cameras in the scene

Attached camera (mount on entity/link with offset)

✅ — see Attaching a camera

Runtime pose update

aperture, focal_len

Sensors / output channels#

Channel

Status

RGB (uint8, (B, H, W, 3) on CUDA)

Depth

Segmentation

Normals / world-position / optical-flow passes

Non-visual sensors (IMU, contact, force, proximity, temperature grid) are unaffected — they run through Genesis directly.

Multi-environment#

Multi-env (n_envs > 1) works, but the plugin renders each environment in a Python loop rather than batching across the GPU. Cost grows linearly with n_envs. Each environment can show a different HDRI for domain randomization.

Bottom line#

You’re on the well-trodden path if your scene uses rigid bodies, articulated robots (URDF/MJCF), FEM/PBD cloth, MPM solids, simple PBR materials, point/directional/spot lights, and HDRI environments.

Expect rough edges if you rely on refractive glass, fluids/smoke, particle rendering, area lights, depth-of-field, depth or segmentation passes, ambient lighting from Genesis VisOptions, or runtime topology changes.

For the operational details behind these caveats (scene-lifecycle, CUDA requirement, multi-camera constraints), continue to Sensor lifecycle.