Lately I have been thinking a lot about dynamic (and therefore sometimes heavy) UIs and it made me wonder if there are some techniques / thoughts / plans on how to approach situations where UI is causing unacceptable frame drops.
I feel like UI should be separated from everything else, just so that it can be as heavy as needed, while nothing important is being slowed down. However if one wants to separate UI into something like Engine or another TD instance, he looses quite a lot of functionality (which is available with UI placed withitn a single solution). For example Python calls can’t reach the separate thread or references to operators won’t work (just an example).
What would be an ideal solution for situations where networks must be running without any frame drops, but they are tightly coupled with UIs that are slowing them down? I don’t know if there are any valid solutions, but I would love to start a discussion on this topic
the direction we usually choose is indeed UI in a separate instance, and then as many slave instances as you need for your project. You can send Python commands and receive callbacks over TCP/IP to other instances. There are very useful protocols for this like JSON-RPC (Remote Procedure Calls), which I’ve used successfully on numerous multi-instance projects.
Another approach is something like a Node.js webserver to make a slick HTML UI, and use a WebSocket link to TD to power all the realtime moving graphs & knobs in your UI.
Also see the multi GPU system design workshop my colleague Keith Lostracco gave on this subject in Montreal:
And the project that goes with that, called Fusion:
Fusion-Public/project/components at master · IntentDev/Fusion-Public · GitHub
+1 fo JsonRPC. Also, MQTT can be nice. Both not meant to continous data-streams, but stable, powerfull network protocolls.
Also, check UberGUI by Lukas Morgan, offloading a lot to the webRenderTOP, which in itself is already multithreaded.
Thank you very much for these ideas. I didn’t know about JSON-RPC and MQTT, it looks nice.
Web-based UIs are great for this (I love UberGui concept), but unfortunately I usually find myself in a situation where it isn’t practical to use them (as my UIs are heavily dependent on TD-related stuff and moving it over there would be too hard to do). Nevertheless for UIs that could be moved to web, it is definitely a great choice