Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

rayman

Members
  • Content count

    299
  • Joined

  • Last visited

  • Days Won

    40

Community Reputation

352 Excellent

About rayman

  • Rank
    Illusionist

Personal Information

  • Name Pavel
  • Location Sofia, Bulgaria
  1. Hi, Tim! I'm not very familiar with chops, but there is a quick vex solution to avoid flipping artefacts. All you have to do is to check the dot product between the two quaternion vectors and based on the result to invert one of the vectors before slerp-ing them. Check the attached file - it's kind of a library for proper matrix interpolation I created for my personal projects, and it uses the exact same method. Cheers! Pavel slerpmx.vfl
  2. Hello! I think what we observing here is just wrong matrix interpolation error. I'm not sure if I posted the last version of this setup here, but I switched from computing restP on the fly from pieces matrix to simple pre-computed restP as the results are much more predictable. Fortunately all you have to do is to find these lines: restP = ptransform("space:current", "space:world", @P); restP *= mxinv; and replace them with: restP = v@rest_p; and you should be ready to go. Cheers! Pavel
  3. Try to turn off volume based collisions.
  4. use point deform after simulation - then you can deform using embeded or simulated geometry. Cheers! Fem Animated Embbed.hipnc
  5. As far as I know in case of space shuttle there is a very dense pipe system inside them, filled with their own fuel which keeps them cool.
  6. Thanks, man! Good to know!
  7. I gave this a try, as this was something I missed as a feature for a long time and found a really simple solution: just delete the id attribute when scaling to force bullet to update the collision geometry. Not sure if this is the most elegant solution but it looks that it works fine even with sims with constraints. i@id=-1 also works, so you can update it faster using Geometry wrangle instead of SOP solver + wrangle nodes. float sc = 1.01; vector scale = set(sc,sc,sc); matrix3 trn = primintrinsic(0, "transform", @primnum); matrix scalem = maketransform(0, 0, {0,0,0}, {0,0,0}, scale, @P); trn *= matrix3(scalem); setprimintrinsic(0, "transform", @primnum, trn); int pts[] = primpoints(0,i@primnum); setpointattrib(0,"id",pts[0],-1); Cheers!
  8. Your confusion comes from not understanding the order of execution. What comes inside SOP solver is the values from previous iteration, they are then passed to Bullet solver and modified by it - thats why values inside do not match the values from DOP network - they are just not shown in the same timestep. Also, keep in mind that "angle" is just a feedback attribute - even if you change it (as far as I know)- it won't affect simulation at all. You need to create vector4 "orient" or vector "r" and set it manually. It is a little tricky but not impossible. Check the docs for more info.
  9. Nice work, Johnny!
  10. One workaround I found is to create detail string attribute called for example "at" with value set to "@"; Then in wrangle node you can use detail(0,"at") to return @ as string without messing with the attributes. In your case : string grp = detail(0,"at")+"Cd<1.0"; int nearest[] = nearpoints(0, grp, @P, 1); I usually use it to check for closest pieces different from current one: string grp = detail(0,"at")+"name!="+s@name; int near = nearpoint(0,grp,v@P); If it works without @, like Yunus said, then silly me D:
  11. Well,if you play a bit more with DOPS you'll find that it's not that complicated. Data is usually processed left to right,top to bottom and if there are multiple multi solvers/merge nodes , you have to dive inside assets to find the order of execution. I think they messed it up a bit with "new" POPs, making it a bit more confusing, but if you check inside pop nodes there is usually merge node inside them, so data is still flowing the same way. In this particular case I'm attaching SOP data to flip object and it is computed only once in DOPS ,when the object is created. I'm importing it from SOPs instead of leaving it completely empty, only because I want the "name" attribute to be present at the begining. Thats the whole reason for piecesData->OUT_PCDATA nodes - they are here only for initialization and are not used during the simulation. I think you can also uncheck Use External SOP and put the piecesData->OUT_PCDATA nodes inside InitPiecesData node. Then after new points/pieces are added to flip I check this data (PiecesData) and if new piece is added to sim and not previously present , I add new point with the name of the new piece (updatePiecesData node) to PiecesData . So during the next iteration if some pieces are previously sourced inside flip, I delete them before merge them to the flip sim (/obj/FLIP_SIM/sopsolver1/attribwrangle2). As you can see its not that complex, still second file is much more easier to understand as it is basically the same thing, but instead of creating new data to store the pieces I just use the default Geometry data.
  12. I'ts the same flow of data you used, I only added another Geometry data to flip object to store used pieces. I just realized, that you already store pieces in Geometry data anyway, so you can go even simpler...just add name attribute to /obj/torus/unpack1 and check for name attribute in /obj/FLIP_SIM/sopsolver1/attribwrangle2 This will work only if you don't erase pieces from flip object Geometry data, so be careful! rbd_to_flip.v1_FIX2.hiplc.hipnc
  13. You just need some place to store the already used pieces. You can do it using another dop between the 2 sims or right inside the FLIP. I actually prefer the other solution, but this was much faster to implement without messing too much with your file. Cheers! rbd_to_flip.v1_FIX.hiplc.hipnc
  14. Well if you check the files above you can see that there is a "broken" attribute which is float. broken=1 means that all connections to that piece are broken, so it is a single chunk. broken>0 && broken<1 means that some of the connections to that piece are broken. I modified the file again, so it now works much better with non-packed. Red pieces are single chunks (broken=1.0), yellows are partially broken. SOP_PiecesRelativeBreak_v03b.hiplc
  15. Also non-pacekd version ( a bit broken with the rotations :/ ) SOP_PiecesRelativeBreak_v02.hiplc