Getting curved motion blur (substeps?) in Solaris

   1098   10   3
User Avatar
Member
129 posts
Joined: Sept. 2021
Offline
Hi!

I'm working on a film that has a lot of leaves on the ground that get blown around in a kind of twirly motion.

The animated leaves are pulled in from a USD. When we enable motion blur, quick moving leaves are streaked out, like the one pointed to here:


The streaking motion blur doesn't properly express the correct motion of the leaves, which is more circular. How would I handle this in Solaris? Do I need to somehow export the animated leaves with substeps? If so, how? (And after doing so, I'm assuming I'd also need to increase the cache substeps?)

Thanks!
Anson

Attachments:
2024-02-02_10-23.png (2.9 MB)

User Avatar
Staff
451 posts
Joined: June 2020
Offline
The shortest answer I'd give is: yes, more time samples.

As for the how & where ... it depends a bit on how you're authoring the animation for the leaves.

Some of the LOPs have a "Frame Range / Subframes" section at the top of the parm dialog where you can directly author subframe data just for the specific work being done by that LOP. The Cache LOP is a broader brush for time sample generation otherwise.
User Avatar
Member
8583 posts
Joined: July 2007
Offline
if your leaves animation is a geometry cache with velocities on points, you can potentially include accelerations and use acceleration MB to get some for of curved MB without any timesamples

if you are relying on deformation MB then you would have to have proper deformation timesamples cached, either from sim or at least interpolated using Cubic or Subd retime mode and stored as timesamples on points in LOPs

if however they are animated transforms and using transform MB then just more proper xform timesamples would suffice
Edited by tamte - Feb. 2, 2024 18:17:52
Tomas Slancik
FX Supervisor
Method Studios, NY
User Avatar
Member
129 posts
Joined: Sept. 2021
Offline
Okay neat, thank you for the responses.

So, if I have a pop sim that I'm instancing some geo on and then I SOP import that into Solaris, I'm looking for the ability to USD Rop it out with the needed substeps. The SOP context had all the substeps I need, but I'm not sure how to put them into the USD.

Would it be by lowering this `inc` value to something below 1? I'm going to try it and see if it does what I need.


Thanks again!

Attachments:
2024-02-03_15-38.png (212.8 KB)

User Avatar
Staff
451 posts
Joined: June 2020
Offline
AnsonSavage
if I have a pop sim that I'm instancing some geo on and then I SOP import that into Solaris, I'm looking for the ability to USD Rop it out with the needed substeps. The SOP context had all the substeps I need, but I'm not sure how to put them into the USD.

If using SOP Import then I'd consider a setup like the attached hip where you split the SOP import off to the side in its own branch, specifically Cache that branch with a bunch of substeps, and then Merge those time samples into the rest of your scene.

Attachments:
arc.hip (537.9 KB)

User Avatar
Member
129 posts
Joined: Sept. 2021
Offline
robp_sidefx
AnsonSavage
if I have a pop sim that I'm instancing some geo on and then I SOP import that into Solaris, I'm looking for the ability to USD Rop it out with the needed substeps. The SOP context had all the substeps I need, but I'm not sure how to put them into the USD.

If using SOP Import then I'd consider a setup like the attached hip where you split the SOP import off to the side in its own branch, specifically Cache that branch with a bunch of substeps, and then Merge those time samples into the rest of your scene.


Hey, this fixed it! Thanks so much!

Edited by AnsonSavage - Feb. 5, 2024 15:50:32

Attachments:
2024-02-05_13-49.png (337.3 KB)

User Avatar
Member
31 posts
Joined: Feb. 2016
Offline
I have a propeller animation originally export from anim as an alembic. It has intrinsic:packedfulltransform and when I step through the subframes in sops, I get nice motion blur. However, in Solaris, the motion blur is not correctly interpolating in the subframes. The propeller is "shrinking" in the subframes (see attached). How can I fix this? Is my only option to export with lots of subframes baked into the abc/usd?

Edit: So if I sop import, I get correct blur. It seems this is because the xformOp:transform matrix is there. So do I need that transform when I reference in the anim abc/usd?

Final Edit: resampletransforms lop FTW.... <facepalm>.
Edited by jarjarshaq - March 13, 2024 20:09:30

Attachments:
subframe.jpg (85.9 KB)

User Avatar
Staff
451 posts
Joined: June 2020
Offline
It's possible there's something lacking in the Alembic file format plugin for USD. Is there any chance you can share this asset for us to take a look at (either here or via support)?
User Avatar
Member
31 posts
Joined: Feb. 2016
Offline
Here's just the propeller. In the rop alembic I set Packed Transform = Transform Geometry. The resulting abc correctly spins in the subframe in sops for me, but interpolates linearly in lops. Houdini 20.0.547

Attachments:
test_heli.abc (2.2 MB)

User Avatar
Staff
451 posts
Joined: June 2020
Offline
Thanks for that file. I see the data has been generated on the frames (e.g., 621 has data, 622 has data) and the motion is baked into a matrix.

When we import the Alembic file via Houdini code and request the transformation at 621.75 (for example), we internally decompose the matrix into translate/rotate/scale, interpolate each, and recompose the matrix. This gives you the non-shrinking result you'd expect.

USD just does component-wise linear interpolation of the matrices, which is why you get the shrinking you saw.

Your options here are:
1 - generate the subframe data up-front
2 - use the Resample Transforms LOP (which does the decomposition mentioned above)
3 - hope your rendering engine will "do the right thing" (some do, some don't)
User Avatar
Member
8583 posts
Joined: July 2007
Offline
robp_sidefx
USD just does component-wise linear interpolation of the matrices, which is why you get the shrinking you saw.
is this something that needs to be brought up with USD team?
since it has always been an issue
xform property *.xformOp:transform:xform clearly represents transform so should be interpolated as such by usd
I've never understood why there need to be crutches like Resample Transforms LOP to seemingly get around that and create more data on stage, which still can be sampled only at timesamples to be correct no matter how much resampled they are, which on top of extra steps opens issue of keeping resampling in sync with render or other processes that just need transform value at specific time etc...
Tomas Slancik
FX Supervisor
Method Studios, NY
  • Quick Links