Update Times and Frequencies in general

Hello there,

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:

  1. Feedback on if I’ve understood the following correctly :

    Isaac Sim has a main thread update loop that runs as fast as possible, updating UI and doing background stuff. The number of loop iterations per second are what’s displayed as changing fps in the viewport (in my case just shy of 120) (source). Test Graphs I have set up suggest that On Tick Action 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 PhysX with 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 Delta t).

    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)

  2. An explanation on how the playback fps and time codes per second tie into this and what Preferences->Rendering->Use Fixed Time Stepping does 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?)

1 Like

There is a similar question here: Nvidia Omniverse Isaac Sim timeline sampling frquency? - #3 by jade.cong

However it is still unanswered. Especially your questions under 2. would be interesting for me. Did you come to any more conclusions @lust1003 ?

Sadly I haven’t gained any more insights that would help me understand what’s going on here.

All I’ve found in the meantime is while looking up how USD works is that time codes are a generic unitless way of storing time information in USD and can be converted to different units of time via a factor of timeCodesPerSecond

Thank you for the second topic though, I’ll be following that one since it seems to attract more attention.