HOOPS Core Converter#
The HOOPS core converter is a Kit extension that converts many CAD and interchange formats to USD. It is the GUI-less backend for omni.kit.converter.hoops.
Quick Start#
Use this recipe when running inside Kit with omni.kit.converter.hoops_core enabled.
import omni.converter.hoops
from omni.kit.converter.hoops_core import HoopsOptions, get_instance
converter = get_instance()
if converter is None:
raise RuntimeError("omni.kit.converter.hoops_core is not loaded")
options = HoopsOptions()
options.instancingStyle = omni.converter.hoops.InstancingStyle.eInstanceableReference
options.compositionStyle = omni.converter.hoops.CompositionStyle.eNone
options.filterStyle = omni.converter.hoops.FilterStyle.eOmit
options.tessLOD = 2
options.useMaterials = True
output_url, status = await converter.create_converter_task(
"C:/data/assembly.sldasm",
"C:/data/assembly.usd",
options.toArgs(),
)
if status.error_code != 0 or not output_url:
raise RuntimeError(status.error_msg)
Success means status.error_code == 0 and output_url is non-empty.
Prerequisites#
Run inside a Kit Python environment where
omni.kit.converter.hoops_coreand its native HOOPS Exchange libraries are loaded.The input CAD file must exist locally or be resolvable through supported Omniverse/Nucleus URL handling.
The output folder must be writable locally or resolvable through supported Omniverse/Nucleus URL handling.
create_converter_task(...)is async; call it from an async context.
What This Converter Does#
Reads CAD and interchange files through the HOOPS Exchange SDK and writes USD output. It handles assemblies, optional USD composition arcs, instancing, tessellation level of detail, materials, normals, hidden entity filtering, PMI/metadata, curves, physics attributes, Creo view layers, and optional Scene Optimizer post-processing.
HOOPS also supports JT and DGN as fallback formats, but the dedicated jt_core and dgn_core converters have higher priority for their native formats.
Input and Output Formats#
Format family |
Extensions |
|---|---|
CATIA V5 |
|
IFC |
|
NX |
|
Parasolid |
|
SolidWorks |
|
STL |
|
Autodesk Inventor |
|
CATIA V6 / 3DExperience |
|
AutoCAD 3D |
|
Creo / Pro-E |
|
Revit |
|
Solid Edge |
|
STEP / IGES |
|
Rhino |
|
Collada |
|
FBX |
|
OBJ |
|
3DS |
|
3MF |
|
glTF / GLB |
|
ACIS |
|
Fallback JT / DGN |
|
Output |
Notes |
|---|---|
|
USD output path supplied by the caller. |
Conversion APIs#
Use these APIs to perform conversions, in this order of preference:
API |
When to use |
|---|---|
|
Preferred core extension API when calling the loaded extension from Python. Returns |
|
Lower-level helper used by the extension implementation. Use only when bypassing extension registration intentionally. |
|
Backend SDK wrapper for local conversion paths. Use only when you do not need the core extension’s Nucleus handling, output copying, logging, and Scene Optimizer post-processing. |
|
Format support helper that checks a path against |
Minimal direct API call:
import omni.converter.hoops
from omni.kit.converter.hoops_core import HoopsOptions, get_instance
converter = get_instance()
options = HoopsOptions()
options.instancingStyle = omni.converter.hoops.InstancingStyle.eInstanceableReference
options.compositionStyle = omni.converter.hoops.CompositionStyle.eNone
options.filterStyle = omni.converter.hoops.FilterStyle.eOmit
options.tessLOD = 2
options.useMaterials = True
output_url, status = await converter.create_converter_task(
"C:/data/assembly.sldasm",
"C:/data/assembly.usd",
options.toArgs(),
)
For direct backend conversion with local paths only, pass the options object itself:
import omni.converter.hoops
from omni.kit.converter.hoops_core import HoopsOptions
options = HoopsOptions()
options.instancingStyle = omni.converter.hoops.InstancingStyle.eInstanceableReference
options.compositionStyle = omni.converter.hoops.CompositionStyle.eNone
options.filterStyle = omni.converter.hoops.FilterStyle.eOmit
options.tessLOD = 2
options.useMaterials = True
converter = omni.converter.hoops.Converter(options)
error_code, error_msg = converter.convert("C:/data/assembly.sldasm", "C:/data/assembly.usd", {})
Converter Options#
Configure these as properties on HoopsOptions. Pass options.toArgs() to create_converter_task(...); pass options directly only when calling omni.converter.hoops.Converter(options).
Enum-valued pybind property setters require enum objects, not raw integers. For example, set options.filterStyle = omni.converter.hoops.FilterStyle.eOmit and options.instancingStyle = omni.converter.hoops.InstancingStyle.eInstanceableReference. Numeric enum values are valid in JSON/dict config parsed by HoopsOptions.parse(...) and in the serialized dict returned by options.toArgs().
|
Default |
Description |
|---|---|---|
|
|
Enable USD references for instancing. Prefer |
|
|
Instancing mode: |
|
|
Assembly composition: |
|
|
Hidden/filtered entity handling: |
|
|
When instancing is disabled, choose global transforms instead of local transforms. |
|
|
Tessellation LOD preset from |
|
|
Respect surface curvature to control triangle elongation. |
|
|
Tessellate for analysis when true; keep false unless the HOOPS invalid-index issue is resolved. |
|
|
Weld mesh vertices with identical position and normal. |
|
|
Create USD materials; false writes colors as |
|
|
Material output: |
|
|
Write normals to USD. |
|
|
Omit hidden elements at load time when they would be omitted during conversion. |
|
|
Report import/export progress. |
|
|
Progress update frequency in Hz. Range |
|
|
Convert curve elements to USD BasisCurves. |
|
|
Import metadata, including PMI, as USD attributes. |
|
|
Override output up-axis: |
|
|
Compute B-rep physical properties and author |
|
|
Physical property accuracy from |
|
|
Use exact B-rep geometry instead of tessellation for physical property computation. |
|
|
Creo simplified representation or view layer to extract for |
Development Rules#
Keep
HoopsOptionsinpython/impl/options.pyas the single source for option parsing.When adding or changing an option, update
python/impl/options.py,docs/Overview.md, and tests together.Treat
HOOPS_CORE_FILTER_DATAas both user-facing extension manager data and core converter format support data.Preserve JT and DGN fallback support while respecting higher-priority dedicated converters.
Keep platform-specific native library packaging intact, including
A3DLIBSon Windows.Keep creator metadata behavior unless replacing it with equivalent extension/backend version metadata.
Verification#
Build and run the repo test suite from the repository root:
./repo.bat build -xrd
./repo.bat test
For focused changes, run the generated omni.kit.converter.hoops_core extension tests after building, or cover the affected tests under source/extensions/omni.kit.converter.hoops_core/python/tests.
Codebase Map#
File |
Role |
|---|---|
|
|
|
|
|
Supported formats and display filters. |
|
Conversion tests. |
|
User-facing behavior and converter option documentation. |
|
HOOPS-specific known limitations. |
|
Package metadata, native libraries, tests. |