SDS Wrinkle Maps
Hi everyone, we’re looking into polishing up our character wrinkle maps implementation a bit and releasing it as a package on the Asset Store.
Before going through with that, we’re looking for people interested in beta testing the package and providing feedback and suggestions.
Let’s get the obvious question out of the way first: How does this package differ from Unity’s free “Blacksmith: Wrinkle Maps” package?
They’re both loosely based on the same idea (Chris Oat’s Siggraph course about Animated Wrinkle Maps), and as such you can expect them to roughly require similar inputs, and provide similar output.
However, our implementation is - in our own humble opinions - a bit more modern and performant, relying on texture arrays instead of per-frame screen-space composition, thus requiring both less memory and using less bandwidth. It’s also up to date for modern Unity versions, works in VR out of the box and will be kept updated for future Unity releases.
Features:
- Per wrinkle set occlusion maps and/or normal maps by default - fairly trivial to add additional channels.
- Supports using a dedicated UV set and atlased wrinkle maps for reduced memory footprint and minimal pixels shaded.
- Supports targeting multiple renderers from the same wrinkle map component.
- Face / body part masking with per wrinkle set weights (e.g. have specific wrinkle sets only affect pixel on forehead, nose area, neck, forearm etc)
- Wrinkle sets can be automatically mapped to and driven by blendshape influence weights.
- Wrinkle sets can be manually controlled by an exposed API - and that API can trivially be exposed to fields that can be keyed in the animation window (see animated Volund character below).
- Pixel shader branches on pixels that have wrinkle weight>0 (some multiplatform work needed)
- No offscreen/intermediate rendering required, wrinkles applied directly in the shader.
- Works as an extension of the Standard shader, both metallic and specular workflows are implemented.
- Automatically packs source textures (currently normal maps and/or occlusion maps) tightly into a single texture array significantly reducing source data memory footprint.
- Packed data is re-usable across multiple characters, and there’s no extra overhead per character beyond the slightly more expensive standard shader variant.
- Works anywhere that has texture array support (in theory - some platform testing help would be much appreciated)
- Just-works-tm in VR / stereo rendering both single and multi pass.
System requirements:
- 2D Texture Arrays which translates to Unity 5.4+ and Shader Model 3.5+ (~= d3d11+, gl3.2+, gles3+, metal, ps4, xbox1)
What now?
Please get in touch directly if you’re interested in trying it out for your project, or just post in this thread if you have questions or suggestions.
6 Likes
Hi, looks cool I really like to test this wrinkle maps solution. 
It’s really cool I like it. Please continue your good work.
I just worked a bit more with this asset and should say it’s really a solution for who need Wrinkle maps. just if it could support a shader like Alloy skin shader that would make this asset really unique.
Also Uber shader can be good to compatible with this asset because it’s same as Unity standard material and should be easy to implement with this asset.
Anyway I hope to see this sooner on the store.
@Crossway Thanks for your feedback. I’ll be looking into integrating with those shaders, and frankly I expect the technical part of it to be easy. The challenge is in how to distribute such integrations without infringing on their property, since I expect I’ll have to inject a couple of lines into their shaders. I’ll ask around for how others are doing these kind of things.
1 Like
While you’re at it, an integration with this, as the most established skin shader for unity, would be cool.
Pre-Integrated Skin Shader Is a forward only shader!!! you can’t use it with SEGI or other assets that doesn’t support forward shaders. I think you can achieve better result with Alloy skin shader or Uber specular shader.
@ksam2 thank you.
As far as samplers go: it’s a bit of an old fashioned way of thinking about things; this effect uses exactly two additional texture samplers, regardless of how many wrinkle sets you use (one for the face mask, and one for the wrinkle data). pre-composing the wrinkles through render textures in a separate pre-pass does make it a little easier to integrate with various off the shelf shaders - provided you write the data out in in an unpacked manner compatible with such shaders - but that also makes it a less performant solution to the problem, which is why we chose not to take that route.
1 Like
@abatcat we’ve gotten some good feedback, but with GDC looming it’s been impractical to submit to AS right now. it’ll be submitted when we’re back from GDC.
2 Likes
Will it also have an option to generate stress/tension maps to drive the wrinkles automatically?
@abatcat this is currently not planned, but if you’re able to provide us with some test data and input on how you envision it it might be possible to add.
DISCLAIMER: I am not a technical person and don’t know if unity has anything like tension maps or how to generate them.
I found some videos to illustrate what I mean by stress/tension map. It is a feature available in many 3d apps.
It compares edge length of a deformed mesh and undeformed mesh and then outputs the difference between the two(I think).
If you had access to a tension map you would just need to make 2 normal maps, one with everything bulging and wrinkly
and another with all the surfaces smoothed out, then use a tension map to blend between the two.
This is a very useful feature to go together with wrinkle maps.
Hi. I have PMed you. Just posting here in case you miss it.
Hi. What happened to this cool asset? Are you still planed to release it? I’m still waitting for alloy skin shader integeration. Thanks.
1 Like