Help ObiSolver.Lateupdate() bad performance - Printable Version +- Obi Official Forum (https://obi.virtualmethodstudio.com/forum) +-- Forum: Obi Users Category (https://obi.virtualmethodstudio.com/forum/forum-1.html) +--- Forum: Obi Rope (https://obi.virtualmethodstudio.com/forum/forum-4.html) +--- Thread: Help ObiSolver.Lateupdate() bad performance (/thread-1562.html) |
RE: ObiSolver.Lateupdate() bad performance - josemendez - 16-08-2021 (16-08-2021, 10:15 AM)TheMunk Wrote: Yea like a lasso You could use two ropes, or abuse the fact that self-collisions will ignore pairs of particles that intersect at rest. This prevents particles that overlap (such as when you have high-resolution ropes) from colliding with each other and causing a mess. The rest position of particles is stored in the restPositions array in the solver. For ropes, these are initialized assuming the rope is completely straight. If for some reason you wanted specific particles in a rope to ignore self-collisions with each other, you could programmatically set their rest positions so that certain particles overlap. From the manual: http://obi.virtualmethodstudio.com/manual/6.2/scriptingparticles.html Quote:Rest position: Rest position of the particles in the actor. These are used to ignore self-particle collisions between particles that were already intersecting in the actor's rest configuration. RE: ObiSolver.Lateupdate() bad performance - TheMunk - 16-08-2021 (16-08-2021, 10:22 AM)josemendez Wrote: You could use two ropes, or abuse the fact that self-collisions will ignore pairs of particles that intersect at rest. This prevents particles that overlap (such as when you have high-resolution ropes) from colliding with each other and causing a mess.Ah I see, just stitching the particles in the blueprint when they are exactly on top of each other fixes this. Thanks! RE: ObiSolver.Lateupdate() bad performance - TheMunk - 16-08-2021 (16-08-2021, 10:22 AM)josemendez Wrote: You could use two ropes, or abuse the fact that self-collisions will ignore pairs of particles that intersect at rest. This prevents particles that overlap (such as when you have high-resolution ropes) from colliding with each other and causing a mess. New issue; when extending the rope/lasso length from the beginning the restPositions hack breaks and collision starts happening again. I tried with the two-rope solution, but stitching together the loop and the rope so that bending constraints remain makes the physics go wonky. Tried stitching like this; (o)--------(o)---------(o)--------(o)---------(o) ! ! | (o)-------(o)--------(o) This is the loop rope | ! ! | (o)--------(o)---------(o)--------(o)---------(o) where it's a stitched loop (not an actual loop made in the blueprint edit mode). Edit: Looks like I need some way of constantly disabling self-collision for a specific particle to fix this. RE: ObiSolver.Lateupdate() bad performance - josemendez - 17-08-2021 (16-08-2021, 03:19 PM)TheMunk Wrote: New issue; when extending the rope/lasso length from the beginning the restPositions[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif] hack breaks and collision starts happening again. You need to set custom restPositions every frame, since using a cursor the extend/retract the rope re-calculates all restPositions. (16-08-2021, 03:19 PM)TheMunk Wrote: Edit: Looks like I need some way of constantly disabling self-collision for a specific particle to fix this. The only way to do this is trough settings restPositions. Filters don't work for self-collisions. RE: ObiSolver.Lateupdate() bad performance - TheMunk - 17-08-2021 (17-08-2021, 09:08 AM)josemendez Wrote: You need to set custom restPositions every frame, since using a cursor the extend/retract the rope re-calculates all restPositions.Ahh, I see. Figured it out. Here's a generic solution for anyone who wants the same behavior; Code: using Obi; Thanks a lot Josemendez! |