Is it possible to have a blend shape with random weights in the crowd system? I'm trying to drive a facial expression on the agents. Similar to what is discussed here with Miarmy:
https://basefount.atlassian.net/wiki/spaces/MDE/pages/58523650/Action+Attribute+and+Blendshape [basefount.atlassian.net]
Crowd blend shape
5230 9 4- mike.battcock
- Member
- 23 posts
- Joined: Oct. 2018
- Offline
- cwhite
- Staff
- 748 posts
- Joined: Oct. 2012
- Offline
Yes, if the agent has any blendshape channels defined on its rig, you can use e.g. https://www.sidefx.com/docs/houdini18.0/vex/functions/setagentchannelvalue.html [www.sidefx.com] to override the channel values from the source animation clip.
- mike.battcock
- Member
- 23 posts
- Joined: Oct. 2018
- Offline
- Sean Cunningham
- Member
- 22 posts
- Joined: Aug. 2014
- Offline
Since there's already a topic here, and seemingly as little discussion of this new capability as there is documentation, I'm running into issues with the Agent Layer SOP clobbering the blendshapes that successfully imported into the Agent SOP from either FBX on disc or Character Rig imported from FBX.
They still show up in @blendshape_channels and @blendshape_shapenames if I unpack the agent. And I can read them from the packed agent with agentchannelnames() but once I've started to define layers I can no longer get them to deform the geometry with setagentchannelvalue() as I get no effect at all.
I was initially excited that these blendshapes were working great with the FBX import. It seems like a waste for this to work if you can't define layers, requiring the shapelib_includes attribute, which is likewise without example or much of any documentation.
Anyone else run into this?
They still show up in @blendshape_channels and @blendshape_shapenames if I unpack the agent. And I can read them from the packed agent with agentchannelnames() but once I've started to define layers I can no longer get them to deform the geometry with setagentchannelvalue() as I get no effect at all.
I was initially excited that these blendshapes were working great with the FBX import. It seems like a waste for this to work if you can't define layers, requiring the shapelib_includes attribute, which is likewise without example or much of any documentation.
Anyone else run into this?
- cwhite
- Staff
- 748 posts
- Joined: Oct. 2012
- Offline
If you're setting up new shape bindings, you should set the Shape Deformer parameter to the appropriate deformer type (there are several variants of the blendshape deformer depending on whether skinning should also be performed). It's valid to switch to a different deformer type if you e.g. want to only have blendshapes enabled for foreground agents.
If you're just copying shape bindings from an existing layer, the deformer should be preserved unless there is a bug
If you're just copying shape bindings from an existing layer, the deformer should be preserved unless there is a bug
- mike.battcock
- Member
- 23 posts
- Joined: Oct. 2018
- Offline
- Sean Cunningham
- Member
- 22 posts
- Joined: Aug. 2014
- Offline
I don't see a way to specify this in the Agent Layer SOP. Are you talking about the Blend Shapes SOP? Okay, well what if I'm reading the FBX off disk? The only reason I'm even using the character rig option, importing the FBX is because I have to clean up all the meshes by hand, getting rid of the bogus @Cd and @Alpha information that I have no other way of cleaning up once they're in Agent form.
I do see that I can still invoke a blend shape if I use what's essentially the default, “catch all” Layer that has all the meshes on top of each other, but it's only after I specify a new Layer, created with the Agent Layer SOP and Layer Bindings, these new layers fail to deform. I can connect my wrangle before and after, change nothing else. Works fine before Agent Layer (but the result is useless because I have lots of overlapping meshes), doesn't work after.
Here's where it's confusing, because if I unpack the agent (prior to Agent Layer SOP) I see my meshes, and the blend shape meshes appear as attributes and channels, not as individual meshes. In the Agent Layer SOP, each of the blend shapes shows up the same as if it was an ordinary shape (in the case of reading from a Character Rig, so do bones, which is really unhelpful and oddly different than if I'd read the FBX from disc). Do I need to create an additional binding for the potentially hundreds of blend shapes? That doesn't seem right, and I anticipate then having an unmanageable Layers list.
There's definitely something missing here. This is FX 18.0.348
I do see that I can still invoke a blend shape if I use what's essentially the default, “catch all” Layer that has all the meshes on top of each other, but it's only after I specify a new Layer, created with the Agent Layer SOP and Layer Bindings, these new layers fail to deform. I can connect my wrangle before and after, change nothing else. Works fine before Agent Layer (but the result is useless because I have lots of overlapping meshes), doesn't work after.
Here's where it's confusing, because if I unpack the agent (prior to Agent Layer SOP) I see my meshes, and the blend shape meshes appear as attributes and channels, not as individual meshes. In the Agent Layer SOP, each of the blend shapes shows up the same as if it was an ordinary shape (in the case of reading from a Character Rig, so do bones, which is really unhelpful and oddly different than if I'd read the FBX from disc). Do I need to create an additional binding for the potentially hundreds of blend shapes? That doesn't seem right, and I anticipate then having an unmanageable Layers list.
There's definitely something missing here. This is FX 18.0.348
Edited by Sean Cunningham - Feb. 26, 2020 16:49:42
- cwhite
- Staff
- 748 posts
- Joined: Oct. 2012
- Offline
I think that parameter was added in 18.0.360
Each of the blendshape inputs are expected to be normal shapes in the shape library. The base shape then has those two detail attributes to describe which input shapes it uses and which channels drive those shapes - only the base shape needs to be added into a layer with a shape binding.
https://www.sidefx.com/docs/houdini18.0/crowds/agents#blendshapes [www.sidefx.com] has some more details too
Each of the blendshape inputs are expected to be normal shapes in the shape library. The base shape then has those two detail attributes to describe which input shapes it uses and which channels drive those shapes - only the base shape needs to be added into a layer with a shape binding.
https://www.sidefx.com/docs/houdini18.0/crowds/agents#blendshapes [www.sidefx.com] has some more details too
- Sean Cunningham
- Member
- 22 posts
- Joined: Aug. 2014
- Offline
Okay, well then it does appear to be broken in this version. Because what you're describing is exactly what I see, up to the point of the Agent Layer SOP.
Unfortunately, the version I'm using is out of my hands. We will be upgrading our image and moving to the latest stable production build prior. I'll see if I can try it on my own with an updated version on a personal machine.
Thanks!
Unfortunately, the version I'm using is out of my hands. We will be upgrading our image and moving to the latest stable production build prior. I'll see if I can try it on my own with an updated version on a personal machine.
Thanks!
- Sean Cunningham
- Member
- 22 posts
- Joined: Aug. 2014
- Offline
cwhite
https://www.sidefx.com/docs/houdini18.0/crowds/agents#blendshapes [www.sidefx.com] has some more details too
Though, I have to say, this page is the only reason I even know how to manipulate the channels to induce the blend shape to begin with. Nobody would ever figure that out on their own as there is nothing intuitive or terribly helpful at the SOP level for doing this at all. Crowds has mostly old information online, which makes it rather challenging, but this is some of the least documented functionality I've ever seen added to Houdini.
Don't get me wrong, it's amazing how fast it works. But most of it is obfuscated or hidden or difficult to manipulate, either due to being black boxed with few options, or inside a packed object.
EDIT: without being able to get x.391 to work in our pipeline I got the executable up and running and loaded one of the FBX files I'm using from the Animation department export. I was able to quickly determine that it's indeed the post x.360 change to the Agent Layer SOP that allows the incoming blendshapes to work. In the latest version, specifying “blendshape+linearskinning” for the new Shape Deformer parameter did the trick. Now I just have to wait for the studiowide re-image to go out to get back to work in this area. Thanks!
Edited by Sean Cunningham - Feb. 28, 2020 12:58:17
-
- Quick Links