Hey all,
I've wanted to try this out for a while but wasn't sure how to go about it until learning that feedback ports can be used on the top inputs/outputs. I'm not using particles or anything built-in so I probably didn't go about this the smartest way, but at least it works! I'm attaching the scene for anyone who is interested to look through the graph (sorry for the mess). If you have any ways to optimize it then feel free to give some pointers!
The top inputs include sliders to tweak the point count, the minimal distance the lines will show up at, and the start frame it will reset it on.
Hey all,
I've wanted to try this out for a while but wasn't sure how to go about it until learning that feedback ports can be used on the top inputs/outputs. I'm not using particles or anything built-in so I probably didn't go about this the smartest way, but at least it works! I'm attaching the scene for anyone who is interested to look through the graph (sorry for the mess). If you have any ways to optimize it then feel free to give some pointers!
The top inputs include sliders to tweak the point count, the minimal distance the lines will show up at, and the start frame it will reset it on.
This is really cool. I have to study the graph. Thanks for sharing your experiments.
Could you explain what feedback ports are doing?
This is really cool. I have to study the graph. Thanks for sharing your experiments.
Could you explain what feedback ports are doing?
Thank you! The feedback ports make it behave like a sim, so that when the graph evaluates the positions and velocities accumulate from last calculations instead of resetting. Then when the frame is back to the start frame it will reset the values.
Thank you! The feedback ports make it behave like a sim, so that when the graph evaluates the positions and velocities accumulate from last calculations instead of resetting. Then when the frame is back to the start frame it will reset the values.
Hi Jason, very cool stuff!
So I've had a quick look at your graph. I don't fully understand what's happening inside, but I immediately spotted something: you are inputting / outputting arrays ports to Maya's top level, and these array are updated each frames. Translating Bifrost data other than amino objects to Maya costs SO MUCH performance, you should never do it unless you really need to access these data from Maya. Here is a look at the profiler. As you can see, 95% of the computation time is translation to maya, the ~5% at the beginning is your graph...
I made a compound which sort of does the similar thing. I planned to add to the next version of my library but I'll post it here first in case you want to study the inside (create_plexus). This graph generates points inside a sphere, add turbulence to it, and finally create a plexus from the points using geometry queries.
Keep up the good stuff!
Hi Jason, very cool stuff!
So I've had a quick look at your graph. I don't fully understand what's happening inside, but I immediately spotted something: you are inputting / outputting arrays ports to Maya's top level, and these array are updated each frames. Translating Bifrost data other than amino objects to Maya costs SO MUCH performance, you should never do it unless you really need to access these data from Maya. Here is a look at the profiler. As you can see, 95% of the computation time is translation to maya, the ~5% at the beginning is your graph...
I made a compound which sort of does the similar thing. I planned to add to the next version of my library but I'll post it here first in case you want to study the inside (create_plexus). This graph generates points inside a sphere, add turbulence to it, and finally create a plexus from the points using geometry queries.
Keep up the good stuff!
Very cool, reminds me of the MASH trails option connect to nearest, I think. Have to check out the graph
Very cool, reminds me of the MASH trails option connect to nearest, I think. Have to check out the graph
Wow yours has insane speed!
Thanks for the tip to avoid passing values to the top ports. In this case I'm not sure how to avoid getting around that as those 2 ports define the particle's position and velocity, so I'm using feedbacks to make the values stick for its next evaluation.
I did a pass to optimize my graph and realized I did tons of silly things that's slowing it down.
Before I was using a loop to check distances for each point to see if a strand needed to be drawn there. I knew this was a massive funnel point since it was creating tons of duplicate strands, but I didn't think about using `get points in radius` before so I switched it to that.
I'm also drawing points in mine, so I switched it to Bifrost instances and that helped boost the speed by 10fps.
Before I was also creating a separate strand for each segment and this was killing performance. I optimized this a bit but it can still be pushed way more. Making single strand improves it to be super fast like yours but I need to study your graph to understand how to use a single strand without having one continuous line throughout the points.
I'll post my updated scene here. Hope it's also a little easier to read now too 🙂
I dropped the animated opacity & thickness for now, so it's looking a bit more plain!
Wow yours has insane speed!
Thanks for the tip to avoid passing values to the top ports. In this case I'm not sure how to avoid getting around that as those 2 ports define the particle's position and velocity, so I'm using feedbacks to make the values stick for its next evaluation.
I did a pass to optimize my graph and realized I did tons of silly things that's slowing it down.
Before I was using a loop to check distances for each point to see if a strand needed to be drawn there. I knew this was a massive funnel point since it was creating tons of duplicate strands, but I didn't think about using `get points in radius` before so I switched it to that.
I'm also drawing points in mine, so I switched it to Bifrost instances and that helped boost the speed by 10fps.
Before I was also creating a separate strand for each segment and this was killing performance. I optimized this a bit but it can still be pushed way more. Making single strand improves it to be super fast like yours but I need to study your graph to understand how to use a single strand without having one continuous line throughout the points.
I'll post my updated scene here. Hope it's also a little easier to read now too 🙂
I dropped the animated opacity & thickness for now, so it's looking a bit more plain!
Ok I managed to get it working at a decent speed! So as a lesson for anyone reading this, don't be an idiot like me and make a bunch of strands! You can do it all in a one single strand and prevent slowdowns.
Ok I managed to get it working at a decent speed! So as a lesson for anyone reading this, don't be an idiot like me and make a bunch of strands! You can do it all in a one single strand and prevent slowdowns.
Messing around with how the points are spawning.
Messing around with how the points are spawning.
Another quick test with text.
Also attached the scene file.
Another quick test with text.
Also attached the scene file.
Can't find what you're looking for? Ask the community or share your knowledge.