chore: use WD blend tree to avoid getting facial expressions stuck

This commit is contained in:
bd_ 2023-04-05 21:34:16 +09:00
parent 8e76d0225f
commit c7d3cb6fa4

View File

@ -59,6 +59,8 @@ namespace nadena.dev.modular_avatar.core.editor
avatar.baseAnimationLayers = animLayers; avatar.baseAnimationLayers = animLayers;
var parameters = controller.parameters.ToList(); var parameters = controller.parameters.ToList();
var actions = GenerateActions(avatar, actionMenus, parameters);
parameters.Add(new AnimatorControllerParameter() parameters.Add(new AnimatorControllerParameter()
{ {
name = DIRECT_BLEND_TREE_PARAM, name = DIRECT_BLEND_TREE_PARAM,
@ -66,11 +68,9 @@ namespace nadena.dev.modular_avatar.core.editor
defaultFloat = 1, defaultFloat = 1,
}); });
var actions = GenerateActions(avatar, actionMenus, parameters);
controller.parameters = parameters.ToArray(); controller.parameters = parameters.ToArray();
int layersToInsert = 2; // TODO int layersToInsert = 1; // TODO
var rootBlendTree = GenerateRootBlendLayer(actions); var rootBlendTree = GenerateRootBlendLayer(actions);
AdjustAllBehaviors(controller, b => AdjustAllBehaviors(controller, b =>
@ -86,8 +86,8 @@ namespace nadena.dev.modular_avatar.core.editor
} }
var layerList = controller.layers.ToList(); var layerList = controller.layers.ToList();
layerList.Insert(0, GenerateBlendshapeBaseLayer(avatar)); //layerList.Insert(0, GenerateBlendshapeBaseLayer(avatar));
rootBlendTree.defaultWeight = 1; //rootBlendTree.defaultWeight = 1;
layerList.Insert(0, rootBlendTree); layerList.Insert(0, rootBlendTree);
layerList[1].defaultWeight = 1; layerList[1].defaultWeight = 1;
controller.layers = layerList.ToArray(); controller.layers = layerList.ToArray();
@ -120,6 +120,8 @@ namespace nadena.dev.modular_avatar.core.editor
} }
} }
_context.SaveAsset(clip);
layer.stateMachine = new AnimatorStateMachine(); layer.stateMachine = new AnimatorStateMachine();
_context.SaveAsset(layer.stateMachine); _context.SaveAsset(layer.stateMachine);
@ -128,6 +130,7 @@ namespace nadena.dev.modular_avatar.core.editor
state.writeDefaultValues = false; state.writeDefaultValues = false;
layer.defaultWeight = 1; layer.defaultWeight = 1;
layer.name = "Write blendshape defaults";
return layer; return layer;
} }
@ -182,6 +185,9 @@ namespace nadena.dev.modular_avatar.core.editor
var rootState = layer.stateMachine.AddState("Root"); var rootState = layer.stateMachine.AddState("Root");
rootState.motion = motion; rootState.motion = motion;
// WD off causes other write default states to fail to write their defaults (facial expressions get stuck
// on e.g. kikyo)
rootState.writeDefaultValues = true;
return layer; return layer;
} }