Wrinkle Maps or Tension Maps in Unity?

Hello everyone,

I do not consider myself a programmer per say, I am in fact an artist and I wanted to create Tension Maps (Or as they’re also called “Wrinkle Maps”) for my characters in unity capable to read the stretches and compressions on the mesh formed by the facial rig and based on It Lerp the Normalmaps, something similar to this:

I know a bit of the Shader Graph but I do not know how to do this. I’ve known of some Blacksmith Wrinkle Maps but apparently it is no longer available, does anyone know how to do this?

Thanks,
Arthur.

You probably didn’t happen to add the blacksmith wrinkle map asset earlier to your account? If you did, it’s still downloadable for your account. I guess it’s forever lost for accounts where it wasn’t added to.

No, I didn’t, In fact, I did not know It when It was Up.

Do you know If It still works with the newer versions of Unity? If so, can you share It with me or do you know how to make something like this from scratch in the newer version?

You couldn’t use it with SRPs anyway, but you could get some ideas from it. Unfortunately I can’t share the package myself as it’s against asset store EULA.

I’m sure there are some tutorials out there on how to do this on some node graph shader setup. You could then try to mirror the setup on shader graph. Basically you mainly want to blend between normal maps that you’ve masked to affect only certain part of your UVs, it shouldn’t be horribly difficult to implement.

Well, you’ve already said how its done in your post- lerp the normals based on the normalized input from your animation driver(morph target/blendshape value). You can mask out the effect to localized parts of the face by using vertex colors or a separate mask map. The hard part of this is generating the art assets for the wrinkles.

I am not using blendshapes, In facet, It’s rig-based. And that’s the part that bugs me, how to actually get the stretching (or compressing) of the mesh made by the bone animation and then converting It into a dynamic stretchmap I can use as a mask.

I too am not sure wether It can be done 100% on Shader Graph or If It has to involve C# code.

I doubt you can do this purely with SG but feeding the shader few values doesn’t require a lot of code.

I’ve managed to create the Shader Graph part. Still didn’t get to make the part where It analyses the stretching in Real time but I think that would add too much processing consumption anyway. Thanks you two!

To anyone wondering. This is the Shader Graph Config for HDRP (The blue selected part). Each leaf Sample Texture 2D is an individual mask on a character’s body I want to affect (nose, left cheek, right cheek, etc), then It is multiplied by the wrinkle factor (0 - 1) and added to the other masks to act as T on the Lerp node between both normals:

3 Likes

for info… asked asset store support if could share the deprecated wrinkle maps asset (since i have it downloaded),
but sadly they said no (which i don’t really understand why… but anyways)

2 Likes