コード例 #1
0
        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");
        }
コード例 #2
0
        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.");
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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");
        }
コード例 #5
0
        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");
        }
コード例 #6
0
        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");
        }
コード例 #7
0
        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");
        }
コード例 #8
0
        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");
        }
コード例 #9
0
        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.");
        }
コード例 #10
0
        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");
        }
コード例 #11
0
        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");
        }
コード例 #12
0
        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");
        }
コード例 #13
0
        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");
        }
コード例 #14
0
        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.");
        }