Isaac Sim Version
5.1.0
Operating System
Ubuntu 22.04
GPU Information
- Model: RTX 3090
- Driver Version: 575.64.03
Topic Description
Detailed Description
In IsaacSim 5.1, If I create a material from a MDL file, the simulation will hang when I call sim.reset(), and with full experience file
No such problem in IsaacSim 5.0
Code:
import os
import isaacsim
use_full_exp_file = True
simulation_app = isaacsim.SimulationApp(
launch_config={"headless": False},
experience=os.path.join(os.path.dirname(isaacsim.__file__), "apps/isaacsim.exp.full.kit") if use_full_exp_file else "",
)
import omni
from pxr import UsdGeom
from isaacsim.core.api import SimulationContext
def create_minimal_mdl_material():
stage = omni.usd.get_context().get_stage()
# Get the path to the minimal MDL file
script_dir = os.path.dirname(os.path.abspath(__file__))
mdl_path = os.path.join(script_dir, "minimal_test.mdl")
print(f" MDL file: {mdl_path}")
print(f" File exists: {os.path.exists(mdl_path)}")
# Create material
UsdGeom.Scope.Define(stage, "/World/Looks")
material_path = "/World/Looks/TestMaterial"
omni.kit.commands.execute(
"CreateMdlMaterialPrim",
mtl_url=mdl_path,
mtl_name="MinimalMaterial",
mtl_path=material_path,
select_new_prim=False,
)
print(f" ✓ Material created at: {material_path}")
def demonstrate_bug():
sim = SimulationContext(
physics_dt=1/60,
rendering_dt=1/60,
backend='torch',
device='cuda:0',
)
create_minimal_mdl_material()
print(" ⚠ THIS IS WHERE IT HANGS - IsaacSim will become unresponsive")
sim.reset()
# If we get here, the bug is fixed in your version
print(" ✓ sim.reset() completed successfully!")
def main():
demonstrate_bug()
if __name__ == "__main__":
try:
main()
finally:
simulation_app.close()
minimal_test.mdl:
mdl 1.5;
import ::base::*;
import ::df::*;
import ::anno::*;
export material MinimalMaterial()
[[
::anno::display_name("Minimal Material"),
::anno::description("Simplest possible MDL material for bug reproduction")
]]
= material(
surface: material_surface(
scattering: df::diffuse_reflection_bsdf(
tint: color(0.5, 0.5, 0.5) // Simple gray color
)
)
);
Additional Information
What I’ve Tried
Switch back to isaac sim 5.0 version, it works.
Or set the use_full_exp_file to false, it works
Hi @flm8620
we can reproduce the issue and an internal ticket has been created to track this. Thanks for reporting it!
Update: Workaround Confirmed & Additional Findings
I’ve found a workaround and additional context for this issue.
Root Cause Analysis:
The hang occurs when ALL of the following conditions are met:
- Async rendering is enabled (/app/asyncRendering = True)
- External MDL material is loaded (either directly via CreateMdlMaterialPrim or indirectly via USD assets that reference external MDL files)
- SimulationContext.reset() or initialize_physics() is called
The deadlock happens inside SimulationContext.play() which calls self._app.update() synchronously while the async rendering thread is blocked waiting for MDL material compilation.
Workaround:
Disable async rendering before calling reset() or initialize_physics():
import carb
settings = carb.settings.get_settings()
settings.set("/app/asyncRendering", False)
settings.set("/app/asyncRenderingLowLatency", False)
sim.reset() # Now works without hanging
Additional Finding:
This issue also affects USD assets that internally reference external MDL materials. In my RL training project, loading a wood crate USD asset (which uses external MDL materials) caused the same hang, while assets using only built-in OmniPBR materials worked fine.
Affected configurations:
isaacsim.exp.full.kit (has async rendering enabled by default)
Any custom kit file with exts.“isaacsim.core.throttling”.enable_async = true
Not affected:
Default experience file without async rendering
Assets using only built-in materials (e.g., FixedCuboid, DynamicCuboid)
Hope this helps others encountering the same issue!
Hi @flm8620, We independently verified your root cause analysis on Isaac Sim 5.1.0 (RTX 6000 Ada, driver 580.126.09, Ubuntu). Your findings are spot-on. Here’s what we confirmed:
Test Results: - Default experience + external MDL → sim.reset() completes in ~6s - Full experience + external MDL → sim.reset() deadlocks indefinitely
- Full experience + external MDL + your workaround → sim.reset() completes in ~0.1s
Root Cause (verified via source): The chain is: 1. isaacsim.exp.full.kit sets exts.“isaacsim.core.throttling” .enable_async = true 2. The throttling extension (isaacsim.core.throttling/extension.py) on startup reads this and sets /app/asyncRendering = True + /app/asyncRenderingLowLatency = True
- When you call SimulationContext.reset() → it calls play() → which calls self._app.update() synchronously on the main thread
- With async rendering enabled, _app.update() needs to synchronize with the render thread to complete one frame – but the render thread is blocked doing neuraylib MDL compilation for the external material 5. Deadlock: main thread waits on render thread (frame sync), render thread is stuck compiling MDL and can’t yield back
The default experience file (isaacsim.exp.base.kit) explicitly sets asyncRendering = false and asyncRenderingLowLatency = false, which is why it works there.
Your workaround is correct: import carb
settings = carb.settings.get_settings()
settings.set("/app/asyncRendering", False)
settings.set("/app/asyncRenderingLowLatency", False)
sim.reset() # Works without hanging This forces synchronous rendering so MDL compilation happens inline during _app.update() rather than on a contended async render thread.