I’ve had some trouble getting behind which aspects of Isaac Sim are updated at what rate and how these rates are connected (for context: I have only been mostly using the Isaac Sim UI, Action Graphs and the ROS2 Humble Bridge). From what I was able to gather mostly from other forum posts and a few test of my own, I think I have a basic understanding of what’s going on, but I would like to ask of two things here:
Feedback on if I’ve understood the following correctly :
Isaac Sim has a
main thread update loopthat runs as fast as possible, updating UI and doing background stuff. The number of loop iterations per second are what’s displayed as changing
fpsin the viewport (in my case just shy of 120) (source). Test Graphs I have set up suggest that
On TickAction Graph nodes are ticked with this frequency, meaning they are not ticked with a set frequency but rather depending on how much workload the main update loop has.
Physics calculations are done by
PhysXwith a rate of
TimeStepsPerSecond(a property of the
physicsScene, with a default of 60). The main update loop calls PhysX, giving it the TimeStepsPerSecond and the variable elapsed time since it last called PhysX from which PhysX itself determines how many, if any, physics steps it has to calculate to guarantee a stable physics calculation once every 1/TimeStepsPerSecond seconds.
If TimeStepsPerSecond > main loop fps PhysX does multiple physics steps per one call by the main loop, which is called
substepping. The number of substeps is determined via the formula TimeStepsPerSecond x Time since last PhysX call (aka
Since an increasing amount of substeps results in a larger workload and thus in a longer main loop time yielding more physics steps in the next loop, the maximum number of physics steps taken per second can be capped with the physics setting
Min Simulation Frame Rate, which effectively limits the used Delta t to a maximum of 1/(Min Simulation Frame Rate) (source)
An explanation on how the
time codes per secondtie into this and what Preferences->Rendering->
Use Fixed Time Steppingdoes to all these update rates
Thank you for reading through this novel and sorry for the possibly noobish questions in advance.
(PS: Am I missing anything regarding update loops and frequencies?)