A Unity ID allows you to buy and/or subscribe to Unity products and services, shop in the Asset Store and participate
in the Unity community.
Discussion in 'Assets and Asset Store' started by cwmanley, Feb 15, 2017.
Thanks, this solve the problem
Very much enjoying using your asset. I'm using the current version on itch.io in both Unity 2018.4 and 2019.3.
I'm using the TextFilter (Shapes > Edit Names) and trying to use that to remap Mixamo blendshape names to iPhone blendshapes.
The problem is that on certain shapes, Mixamo uses two (left/right) instead of the iPhone's one.
MouthNarrow_Left = shapes.mouthFunnel
MouthNarrow_Right = shapes.mouthFunnel
After running the filter, what I get is only the first of the two blendshapes. So in the above example, MouthNarrow_Left does become shapes.mouthFunnel, but altering the value of shapes.mouthFunnel doesn't affect the vertices in MouthNarrow_Right.
I also ran into a few problems as I've been using Skinn, which you can see in the full length workflow video I did. It seems that the Edit names editor window doesn't always seem to update correctly:
And finally (sorry, so many questions!) I couldn't work out quite how to use the Text Filter.
When i tried using the functions.
Only the first one has any effect, the other blendshape names remain unaffected. (which is why I ended up doing everything in ****Flagged Elements**** ).
Can you explain how it's meant to work? I couldn't find any documentation on it anywhere.
Hi, Thanks for your purchase.
1. "MouthNarrow_Left does become shapes.mouthFunnel, but altering the value of shapes.mouthFunnel doesn't affect the vertices in MouthNarrow_Right"
Due to Unity's API for blend-shapes shapes should have a unique name. The TextFilter does not combine shapes with the same name but I will look at adding that feature.
Right now the only way to combine shapes...
Install a package to paste a mesh as a blend-shape. package here
Set shapes that are combined to 100%.
SkinnEdit/Skin/BakeTo Mesh Renderer
Use the Clipboard/Paste//Mesh As Blend-shape
The Paste//Mesh As Blend-shape command will be updated and included in the next version.
There will also be a new command to combine two blend-shapes into one shape.
2. "Edit names editor window doesn't always seem to update correctly"
The problem seems to be that Skinn is not recognizing the skinned mesh as valid because the mesh does not have bone-weights. Not fully supporting skinned meshes with-out bones is a design flaw that I am working on fixing but it looks like it will take a few updates to completely solve the issue. I will add a fix to for the TextFilter asap.
For a workaround and to make a skinned mesh with-out bones work will all features you can use the SkinToParent Mesh Renderer Command
Assign the mesh with blend-shapes to a Mesh Renderer.
Place the Mesh Renderer as a child.
MeshRender/Skinn: Edit/Skin/Skin To Parent
Organize the new skinned mesh and bone however you see fit.
Please let me know if your still having issues.
Thanks Chris ( @cwmanley )
That's all really helpful.
Re. #1 Yeah, I gathered as much. I'm actually now looking at doing the process backwards, so rather than trying to alter the destination skinned mesh (and renaming its blendshapes to match the animation clip) I'm looking at doing a search and replace on the clips themselves. Turns out that because they're just text assets (in the YAML format) you can pretty much rename anything you want (i.e. re-target), as well as duplicate animation curves in order to apply them to any blendshape you want.
Re. #2 Thanks for the heads up. Happy to wait for updates as and when.
Great tool you've made. Thank you.
ps. you never mentioned about the Text Filter format. What's with the "Functions" and "Flagged Elements"? Any docs to explain how the file should be formatted and used?
There are not docs yet.
When you create a text-filter asset with the wizard the settings are applied to the text-filter.
Example blend-shapes named FBMSkinny, FBMFat
There are two functions you can use. Functions are applied to all elements that are not listed under Flagged Elements.
The replaceText function is used to rename blend-shapes.
Resulting names; FullBodyMorphSkinny, FullBodyMorphFat.
Resulting names; Skinny, Fat.
The containsText function is used to exclude blend-shapes
Resulting blend-shapes; Skinny
Similar to the functions there are two uses for flagged elements, but flagged elements work explicitly for the shape flagged.
FBMSkinny = BodySkinny
Resulting blend-shapes; BodySkinny.
FBMSkinny is named to BodySkinny, while is FBMFat is excluded.
The All Elements section is generated by TextFilter wizard for your reference only.
Thanks for the great question I will add this to the docs.
@cwmanley Super helpful. Thank you.
I'm running into a problem using Skinn in 2018.4.1 (tied to that version for a number of reasons)
After using Skinn:Edit > SubMesh > Combine > Selection > Merge Shared
The resulting mesh is generated without any errors and appears to be fine until I change one of the blendshapes and I then get spammed in the console with the following error: 'Thread group size must be above zero'
There's no additional information from the console:
The same skinnedMeshes combined in 2019.3.3 don't have that error. Is there any way to solve this?
I tried exporting as FBX from 2019 and using that in 2018 but when I do that, although it appears to import fine:
as soon as I use a blendshape the mesh becomes distorted:
Any help, much appreciated
ps. for info, combining skinned meshes with blendshapes using MeshBaker works fine (no errors), except that it doesn't combine the blendshapes, as Skinn does.
I cannot reproduce the error with the assets I am using. Can you send me a package with only the model/mesh assets you are using when the error happens? I will try to figure out what is going on today and send you a fix right away.
Sorry for any inconvenience.
Thank you. Sent to the email in the asset ReadMe
I will take a look right now. I will not share the asset with anyone and delete it once I figure out what is going on.
For anyone interested in the outcome of the above issues... @cwmanley has been incredibly helpful. There's a new Skinn update on the way which will fix some known issues, but I'm more of the opinion that the fault lay with the 2018.4.1 version of Unity i was using. After further testing, with 2018.4.16 and 2018.4.18 LTS the problem just disappeared.
Ahhh… silly me, I forgot that LTS versions aren't actually final…
yeah! That hub doesn't make it massively obvious... Thankfully I'm all good now, and your models are looking as wonderful as ever
I love the Unity Hub! I try to develop features in the newest version of Unity available on the Hub, then work backwards when I do a update. Hopefully when you import Skinn you are not spammed with update warnings, but sometimes those bastards can sneak by me.
Skinn 0.7 Released on UAS and itch.io
The VM does not support boneless skinned meshes as a source. Use the SkinToParent Mesh Renderer Command to create a valid skinned mesh.
Bug Fixes & Improvements.
Vertex Mapper Shape-filter not being update by the inspector. The VM Shape-filter should work as intended.
Most commands support boneless skinned mesh renders. Use the SkinToParent Mesh Renderer Command for full support.
Blend-shape Normals and Tangents not copied correctly when combining skinned meshes.
Bend-shape Normals being lost when baking meshes.
SKINN Script Defining Symbol being defined twice.
Blend-shape baking supports negative and un-clamped shapes.
32bit index format for meshes over the 16bit index format vertex limit.
TexturePacker.cs a component based texture atlas tool.
BlendshapeController.cs a blend-shape inspector for multiple skinned meshes.
Renderer/Clipboard/Paste/Blend-shapes : Pastes blend-shapes from one skinned mesh renderer to another, existing blend-shapes will be skipped
Renderer/Clipboard/Paste/Mesh As Blend-shape : Pastes mesh as a blend-shape.
Renderer/Clipboard/Paste/VertexData/Vertices : Pastes vertex data from one renderer to another.
Renderer/Clipboard/Paste/VertexData/Normals&Tangents : Pastes vertex data from one renderer to another.
Renderer/Clipboard/Paste/VertexData/Colors : Pastes vertex data from one renderer to another.
Renderer/Clipboard/Paste/VertexData/Colors32 : Pastes vertex data from one renderer to another.
Renderer/Clipboard/Paste/VertexData/UVs : Pastes vertex data from one renderer to another.
SkinnedMeshRenderer/Bones/Combine Bones : Combine one bone's weights into another bone's weights.
SkinnedMeshRenderer/Shapes/Sort : sorts blend-shapes by name
SkinnedMeshRenderer/Shapes/Log : Logs the index and name of each blend-shape in a mesh.
SkinnedMeshRenderer/Shapes/Extract/Shape : Extracts Blend-shape value at 100% as a mesh
SkinnedMeshRenderer/Shapes/Extract/All : Extracts all blend-shapes.
SkinnedMeshRenderer/Shapes/Invert : creates a new inverted blend-shape.
Renderer/Shapes/Remove/Shape : Removes a blend-shapes from a mesh.
Renderer/Shapes/Remove/Data/Vertices/Shape : Removes a blend-shapes vertices from a mesh.
Renderer/Shapes/Remove/Data/Vertices/All : Removes all blend-shapes vertices from a mesh.
Renderer/Shapes/Remove/Data/Normals/Shape : Removes a blend-shapes normals from a mesh.
Renderer/Shapes/Remove/Data/Normals/All : Removes all blend-shapes normals from a mesh.
Renderer/Shapes/Remove/Data/Tangents/Shape : Removes a blend-shapes tangents from a mesh.
Renderer/Shapes/Remove/Data/Tangents/All : Removes all blend-shapes tangents from a mesh.
Renderer/Shapes/Remove/Unused : Remove all unused blend-shapes from a mesh.
The new atlas tool the Texture Packer has built in instructions, tips, and tool-tips. You can use the standard transform tools, commands and even other assets to manipulate uv islands. Tiled textures are not fully supported yet, and the tool has only been tested with a limited number of models.
To use the BlendShapeContoller simply add the component to the root of the model and you can edit all the blend-shapes of it's children at once.The component is designed for the editor, however you can use the api at run-time if you wish. The BlendShapeContoller looks for blend-shape changes automatically and has undo support.
There should be another update very soon. Please let me know if you have any issues.
Just a tip: a more 'conventional' pdf (or html) manual would probably be an attractive plus for newcomers.
After 2019.3.1 there is a bug on Mac with Skinn's compute shaders. I am going to make the compute functions fallback to C# on platforms that don't support compute shaders and add a option to disable compute shaders all together.
I will try to get a update out asap and update the free version as well.
@wetcircuit thanks for all your help with the Mac issue.
Skinn 0.71 Released on UAS and itch.io
After 2019.3.1 there is a bug on some Macs with Skinn's compute shaders.
The VM does not support boneless skinned meshes as a source. Use the SkinToParent Mesh Renderer Command to create a valid skinned mesh.
!!!Combining Skinned Meshes with blend-shapes created a extra blend-shape frame.
VM a bug introduced in 0.7 where you could not Append To New or Apply Addition Smoothing etc.
TexturePackerInspector missing a default texture.
Nested Context Command System: Built in Material Commands not showing up when the internal asset was not loaded.
Made asset easier to use with Assembly Definitions.
The Context Command System can be accessed from hierarchy context menu under Skinn:Edit.
This is the last update for the 2017.4 LTS the minimum version going forward will be the 2018.4 LTS.
Hi @cwmanley , Love the Skinn pro and using it all the time.
I am now trying to run the Vertex Mapper from the API (SkinnEx) but its not creating the new skin mesh, no errors, not sure why.
Can you guide me how to do it? very broadly of course.
Hi, I am glad your are finding the asset useful.
Are you using the VertexMap function? The VertexMap function outputs the vertex information only it does not create a renderer. Here is a example of using the VM function to create a skinned mesh renderer.
private SkinnedMeshRenderer ProjectBlendshapesExample(SkinnedMeshRenderer source, SkinnedMeshRenderer target)
var shapeOptions = new ShapeProjection();
var weightOptions = new WeightProjection();
//Change the default radial count from 16 to one for faster projection
shapeOptions.radialCount = 1;
//Disable weight projection.
weightOptions.enabled = false;
null,//Source Baking how the source is transformed before mapping
null,//Target Baking how the target is transformed before mapping
null,//Search Options the distance to look for vertices.
//Can not compute. or meshes null.
//Clone() will Instantiate a new renderer and a new mesh or optionally leave the mesh null.
var newRenderer = target.CloneAsSkinnedMeshRenderer(false) as SkinnedMeshRenderer;
var newMesh = newRenderer.sharedMesh;
//Clear all blendshapes or handle existing blend-shapes.
//Unity's API for adding blends-shapes will throw a error if there is a existing shape with the same name.
//var existingBlendshapes = newMesh.GetBlendshapes();
foreach (var shape in blendshapes)
for (int i = 0; i < shape.frames.Count; i++)
You can take a look at the Vertex Mapper component for a more advanced example of using the VertexMap function.
Another option is to create a VM component and use one of it's public functions.
var vm = new GameObject("Temp VM").AddComponent<VertexMapper>();
vm.root = animator.gameObject;
vm.Create(sourcePrefab, targetPrefab, out smr);
Please let me know if you need anything else.
Doing it using VertexMap works perfectly and fast,
Thanks for that and your fast reply!
I hope everything is good and you are working on some cool asset for us to purchase.
I am trying out the Texture pucker and it generate a very dark / wrong textures, both for normal and albedo
Here are couple of images to show you what I mean:
I am sure that I am missing something,
Project is URP,
What do you think?
Thank you, sorry I have been so quiet lately.
The shaders I use to render textures should work in any rendering pipeline but maybe it is not picking up the right textures. I will make sure the Texture Packer is working correctly with the URP/HDRP and look into the issue.
I recommend saving the mesh with the new uvs and using Gimp/Photoshop to create the atlas textures or use the Texture Packer with the Standard Pipeline.
0.72 will be out soon.
Drag and Drop Merging skinned meshes will be less intrusive with a new contextual drop area.
VM will bind-pose existing blend-shapes.
Generic UMA support.
Drag and Drop Merge to Adjust Bones(Transform(s) with the suffix "Adjust").
Create Adjust Bone Context Command..
0.8 is in the works.
New mapping algorithms with higher quality weight and shape projection.
Mac and Mobile support.
Major API and changes .
Extensive User Documentation.
Many small improvements and new features.
Will you be testing 0.8 on 2020.1 before release?
Sorry, noob question: can skinn pro works at runtime from code? I mean, can I for example write a C# script that will delete certain blendshape from skinned mesh?
0.72+ will supports the LTS releases and 2020 releases.
Most the editor commands use a runtime api that you can use in your own scripts.
public static void SkinnEx.RemoveBlendshape(this Mesh mesh, int index)
public static void SkinnEx.RemoveBlendshape(this Mesh mesh, string name)
public static void SkinnEx.RemoveBlendshapeData(this Mesh mesh, int index, bool removeVertices, bool removeNormals, bool removeTangents)
public static void SkinnEx.RemoveBlendshapeData(this Mesh mesh, string name, bool removeVertices, bool removeNormals, bool removeTangents)
Just make sure you clone the mesh before using the functions that work on a mesh directly. Please let me know if you need anything else.
Hey all, I've got a seemingly simple problem, and someone pointed me to Skinn as possibly having a solution:
I have an already-rigged mesh, to which I want to add a handful of extra bones (e.g. so that I can animate the hair or bouncier parts of the anatomy, so they don't appear to be made out of hard plastic when the character moves). I do not want to repaint or reset all the vertex weights for the rest of the bones; I only want to affect limited parts of the mesh where the new bones have been added.
In my modeling tool (Cheetah3d), much to my surprise, this is impossible. If I add a couple of new bones, I have to rebind the entire mesh (losing the professionally done vertex weights) or it all goes to heck.
I've skimmed very quickly through this thread, and I see that Skinn has a ton of tools related to meshes and bones, and started out originally as a weight painting tool. So I'm hopeful.
Can I use Skinn to add a couple of new bones to an existing rig, and paint the weights for just those parts? And if so, how would I do that?
HI, Thanks for your interest.
Skinn is mainly for transferring weights and blend-shapes from on mesh to another. I have not included a weight-painting tool yet; although I hope to have excellent one a some point.
I think Vertexmotion would do the trick, I have used it in a few projects.
Sorry I can't help with that right now.
Thanks for your response! I'm sorry, but I don't clearly understand what do you mean by "clone the mesh before"?
That is my bad.
var clone = Mesh.Instantiate(Mesh source);
Skinn has Clone functions you can use to Instantiate as well if you like.
/// work with a Mesh Render or a SkinnedMeshRenderer
var renderer = GetComponent<Renderer>();
var newMesh = renderer.CloneSharedMesh();
//edit Mesh Here
Instantiating a mesh assigns a new InstanceID which will force the SkinnedMeshRenderer to update it's data when the new mesh is assigned.
Great! Thanks for the detailed explanation!