public void CompensateOtherChannels_KeepsMasterChannelWeight_NormalizeUsingOthers() { var e = new EditableBoneWeight(); e.AddChannel(0, 0.25f, true); e.AddChannel(1, 0f, true); e.AddChannel(2, 0f, true); e.AddChannel(3, 0f, true); e.CompensateOtherChannels(0); Assert.AreEqual(0.25f, e[0].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[1].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[2].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[3].weight, "Weight should be normalized"); }
public void SortChannels_SortByWeightDescending() { EditableBoneWeight e = new EditableBoneWeight(); e.AddChannel(0, 0.1f, true); e.AddChannel(0, 0.5f, true); e.AddChannel(0, 0.4f, true); e.AddChannel(0, 0.6f, true); e.Sort(); Assert.AreEqual(0.6f, e[0].weight, "Channel has incorrect data."); Assert.AreEqual(0.5f, e[1].weight, "Channel has incorrect data."); Assert.AreEqual(0.4f, e[2].weight, "Channel has incorrect data."); Assert.AreEqual(0.1f, e[3].weight, "Channel has incorrect data."); }
public void NormalizeChannels_OutputsNormalizedWeights() { var e = new EditableBoneWeight(); e.AddChannel(0, 1f, true); e.AddChannel(1, 1f, true); e.AddChannel(2, 1f, true); e.AddChannel(3, 1f, true); e.Normalize(); Assert.AreEqual(0.25f, e[0].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[2].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[1].weight, "Weight should be normalized"); Assert.AreEqual(0.25f, e[3].weight, "Weight should be normalized"); }
public void NormalizeChannels_OutputsNormalizedWeights() { EditableBoneWeight editableBoneWeight = new EditableBoneWeight(); editableBoneWeight.AddChannel(new BoneWeightData(0, 1f), true); editableBoneWeight.AddChannel(new BoneWeightData(1, 1f), true); editableBoneWeight.AddChannel(new BoneWeightData(2, 1f), true); editableBoneWeight.AddChannel(new BoneWeightData(3, 1f), true); editableBoneWeight.NormalizeChannels(); Assert.AreEqual(0.25f, editableBoneWeight.GetBoneWeightData(0).weight, "Weight should be normalized"); Assert.AreEqual(0.25f, editableBoneWeight.GetBoneWeightData(1).weight, "Weight should be normalized"); Assert.AreEqual(0.25f, editableBoneWeight.GetBoneWeightData(2).weight, "Weight should be normalized"); Assert.AreEqual(0.25f, editableBoneWeight.GetBoneWeightData(3).weight, "Weight should be normalized"); }
public void UnifyChannelsWithSameBoneIndex_AddsWeightsInSameChannel_DisablesRepeatedChannels() { var e = new EditableBoneWeight(); e.AddChannel(0, 0.1f, true); e.AddChannel(1, 0.2f, true); e.AddChannel(0, 0.3f, true); e.AddChannel(3, 0.4f, true); e.UnifyChannelsWithSameBoneIndex(); Assert.AreEqual(0.4f, e[0].weight, "Incorrect boneWeight"); Assert.AreEqual(0.2f, e[1].weight, "Incorrect boneWeight"); Assert.AreEqual(0f, e[2].weight, "Incorrect boneWeight"); Assert.False(e[2].enabled, "Channel should be disabled"); Assert.AreEqual(0.4f, e[3].weight, "Incorrect boneWeight"); }
public void UnifyChannelsWithSameBoneIndex_AddsWeightsInSameChannel_DisablesRepeatedChannels() { EditableBoneWeight editableBoneWeight = new EditableBoneWeight(); editableBoneWeight.AddChannel(new BoneWeightData(0, 0.1f), true); editableBoneWeight.AddChannel(new BoneWeightData(1, 0.2f), true); editableBoneWeight.AddChannel(new BoneWeightData(0, 0.3f), true); editableBoneWeight.AddChannel(new BoneWeightData(3, 0.4f), true); editableBoneWeight.UnifyChannelsWithSameBoneIndex(); Assert.AreEqual(0.4f, editableBoneWeight.GetBoneWeightData(0).weight, "Incorrect boneWeight"); Assert.AreEqual(0.2f, editableBoneWeight.GetBoneWeightData(1).weight, "Incorrect boneWeight"); Assert.AreEqual(0f, editableBoneWeight.GetBoneWeightData(2).weight, "Incorrect boneWeight"); Assert.False(editableBoneWeight.IsChannelEnabled(2), "Channel should be disabled"); Assert.AreEqual(0.4f, editableBoneWeight.GetBoneWeightData(3).weight, "Incorrect boneWeight"); }
public void FilterChannels_DisablesChannelsWithWeightBelowTolerance() { var e = new EditableBoneWeight(); e.AddChannel(0, 0.2f, true); e.AddChannel(1, 0.2f, true); e.AddChannel(2, 0.3f, true); e.AddChannel(3, 0.3f, true); e.FilterChannels(0.25f); Assert.False(e[0].enabled, "Channel should be disabled"); Assert.False(e[1].enabled, "Channel should be disabled"); Assert.True(e[2].enabled, "Channel should be enabled"); Assert.True(e[3].enabled, "Channel should be enabled"); Assert.AreEqual(0f, e[0].weight, "Incorrect boneWeight"); Assert.AreEqual(0f, e[1].weight, "Incorrect boneWeight"); Assert.AreEqual(0.3f, e[2].weight, "Incorrect boneWeight"); Assert.AreEqual(0.3f, e[3].weight, "Incorrect boneWeight"); }
public void ClampChannels_WithSortWeights_ReducesChannelCount_GraterWeightsFirst() { var e = new EditableBoneWeight(); e.AddChannel(0, 0.4f, true); e.AddChannel(1, 0.3f, true); e.AddChannel(2, 0.2f, true); e.AddChannel(3, 0.1f, true); e.AddChannel(4, 0.7f, true); e.AddChannel(5, 0.6f, true); e.AddChannel(6, 0.5f, true); e.Clamp(4, true); Assert.AreEqual(4, e.Count(), "Should contain four channels after clamp"); Assert.AreEqual(4, e[0].boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(5, e[1].boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(6, e[2].boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(0, e[3].boneIndex, "Channel does not contain the right bone index"); }
public void SortChannels_SortByWeightDescending() { EditableBoneWeight e = new EditableBoneWeight(); BoneWeightData d1 = new BoneWeightData(0, 0.1f); BoneWeightData d2 = new BoneWeightData(0, 0.5f); BoneWeightData d3 = new BoneWeightData(0, 0.4f); BoneWeightData d4 = new BoneWeightData(0, 0.6f); e.AddChannel(d1, true); e.AddChannel(d2, true); e.AddChannel(d3, true); e.AddChannel(d4, true); e.SortChannels(); Assert.AreEqual(d4, e.GetBoneWeightData(0), "Channel has incorrect data."); Assert.AreEqual(d2, e.GetBoneWeightData(1), "Channel has incorrect data."); Assert.AreEqual(d3, e.GetBoneWeightData(2), "Channel has incorrect data."); Assert.AreEqual(d1, e.GetBoneWeightData(3), "Channel has incorrect data."); }
public void FilterChannels_DisablesChannelsWithWeightBelowTolerance() { EditableBoneWeight editableBoneWeight = new EditableBoneWeight(); editableBoneWeight.AddChannel(new BoneWeightData(0, 0.2f), true); editableBoneWeight.AddChannel(new BoneWeightData(1, 0.2f), true); editableBoneWeight.AddChannel(new BoneWeightData(2, 0.3f), true); editableBoneWeight.AddChannel(new BoneWeightData(3, 0.3f), true); editableBoneWeight.FilterChannels(0.25f); Assert.False(editableBoneWeight.IsChannelEnabled(0), "Channel should be disabled"); Assert.False(editableBoneWeight.IsChannelEnabled(1), "Channel should be disabled"); Assert.True(editableBoneWeight.IsChannelEnabled(2), "Channel should be enabled"); Assert.True(editableBoneWeight.IsChannelEnabled(3), "Channel should be enabled"); Assert.AreEqual(0f, editableBoneWeight.GetBoneWeightData(0).weight, "Incorrect boneWeight"); Assert.AreEqual(0f, editableBoneWeight.GetBoneWeightData(1).weight, "Incorrect boneWeight"); Assert.AreEqual(0.3f, editableBoneWeight.GetBoneWeightData(2).weight, "Incorrect boneWeight"); Assert.AreEqual(0.3f, editableBoneWeight.GetBoneWeightData(3).weight, "Incorrect boneWeight"); }
public void ClampChannels_WithSortWeights_ReducesChannelCount_GraterWeightsFirst() { EditableBoneWeight editableBoneWeight = new EditableBoneWeight(); editableBoneWeight.AddChannel(new BoneWeightData(0, 0.4f), true); editableBoneWeight.AddChannel(new BoneWeightData(1, 0.3f), true); editableBoneWeight.AddChannel(new BoneWeightData(2, 0.2f), true); editableBoneWeight.AddChannel(new BoneWeightData(3, 0.1f), true); editableBoneWeight.AddChannel(new BoneWeightData(4, 0.7f), true); editableBoneWeight.AddChannel(new BoneWeightData(5, 0.6f), true); editableBoneWeight.AddChannel(new BoneWeightData(6, 0.5f), true); editableBoneWeight.ClampChannels(4, true); Assert.AreEqual(4, editableBoneWeight.GetChannelCount(), "Should contain four channels after clamp"); Assert.AreEqual(4, editableBoneWeight.GetBoneWeightData(0).boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(5, editableBoneWeight.GetBoneWeightData(1).boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(6, editableBoneWeight.GetBoneWeightData(2).boneIndex, "Channel does not contain the right bone index"); Assert.AreEqual(0, editableBoneWeight.GetBoneWeightData(3).boneIndex, "Channel does not contain the right bone index"); }
public void ToBoneWeight_WithSortWeights_OutputsSortedBoneWeight() { EditableBoneWeight editableBoneWeight = new EditableBoneWeight(); editableBoneWeight.AddChannel(new BoneWeightData(0, 0.1f), true); editableBoneWeight.AddChannel(new BoneWeightData(1, 0.4f), true); editableBoneWeight.AddChannel(new BoneWeightData(2, 0.2f), true); editableBoneWeight.AddChannel(new BoneWeightData(3, 0.3f), true); BoneWeight boneWeight = new BoneWeight(); boneWeight.boneIndex0 = 1; boneWeight.boneIndex1 = 3; boneWeight.boneIndex2 = 2; boneWeight.boneIndex3 = 0; boneWeight.weight0 = 0.4f; boneWeight.weight1 = 0.3f; boneWeight.weight2 = 0.2f; boneWeight.weight3 = 0.1f; Assert.AreEqual(boneWeight, editableBoneWeight.ToBoneWeight(true), "ToBoneWeight should output a sorted BoneWeight"); }
public void ToBoneWeight_WithSortWeights_OutputsSortedBoneWeight() { var e = new EditableBoneWeight(); e.AddChannel(0, 0.1f, true); e.AddChannel(1, 0.4f, true); e.AddChannel(2, 0.2f, true); e.AddChannel(3, 0.3f, true); var boneWeight = new BoneWeight() { boneIndex0 = 1, boneIndex1 = 3, boneIndex2 = 2, boneIndex3 = 0, weight0 = 0.4f, weight1 = 0.3f, weight2 = 0.2f, weight3 = 0.1f }; Assert.AreEqual(boneWeight, e.ToBoneWeight(true), "ToBoneWeight should output a sorted BoneWeight"); }
public void CreateFromBoneWeight_WithBoneIndicesDistinct_CreatesFourEnabledChannels() { BoneWeight boneWeight = new BoneWeight(); boneWeight.boneIndex0 = 0; boneWeight.boneIndex1 = 1; boneWeight.boneIndex2 = 2; boneWeight.boneIndex3 = 3; boneWeight.weight0 = 0.1f; boneWeight.weight1 = 0.2f; boneWeight.weight2 = 0.3f; boneWeight.weight3 = 0.4f; EditableBoneWeight editableBoneWeight = EditableBoneWeightUtility.CreateFromBoneWeight(boneWeight); Assert.AreEqual(4, editableBoneWeight.GetChannelCount(), "Incorrect number of channels."); Assert.True(editableBoneWeight.IsChannelEnabled(0), "Channel should be enabled."); Assert.True(editableBoneWeight.IsChannelEnabled(1), "Channel should be enabled."); Assert.True(editableBoneWeight.IsChannelEnabled(2), "Channel should be enabled."); Assert.True(editableBoneWeight.IsChannelEnabled(3), "Channel should be enabled."); Assert.AreEqual(new BoneWeightData(0, 0.1f), editableBoneWeight.GetBoneWeightData(0), "Channel has incorrect data."); Assert.AreEqual(new BoneWeightData(1, 0.2f), editableBoneWeight.GetBoneWeightData(1), "Channel has incorrect data."); Assert.AreEqual(new BoneWeightData(2, 0.3f), editableBoneWeight.GetBoneWeightData(2), "Channel has incorrect data."); Assert.AreEqual(new BoneWeightData(3, 0.4f), editableBoneWeight.GetBoneWeightData(3), "Channel has incorrect data."); }