From a9895a90e59c8678a13cdc70be31077bcfe9578b Mon Sep 17 00:00:00 2001 From: David Back Date: Tue, 22 Jan 2019 17:03:09 -0800 Subject: [PATCH] add rules for unity version and bone count limit --- .../Assets/Editor/AvatarExporter.cs | 62 +++++++++++++++--- .../avatarExporter.unitypackage | Bin 12627 -> 13046 bytes 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter.cs b/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter.cs index 81834c860e..8f4d5a7962 100644 --- a/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter.cs +++ b/tools/unity-avatar-exporter/Assets/Editor/AvatarExporter.cs @@ -18,7 +18,36 @@ class AvatarExporter : MonoBehaviour { static readonly float HIPS_GROUND_MIN_Y = 0.01f; static readonly float HIPS_SPINE_CHEST_MIN_SEPARATION = 0.001f; + static readonly int MAXIMUM_USER_BONE_COUNT = 256; static readonly string EMPTY_WARNING_TEXT = "None"; + + static readonly string[] RECOMMENDED_UNITY_VERSIONS = new string[] { + "2018.2.12f1", + "2018.2.11f1", + "2018.2.10f1", + "2018.2.9f1", + "2018.2.8f1", + "2018.2.7f1", + "2018.2.6f1", + "2018.2.5f1", + "2018.2.4f1", + "2018.2.3f1", + "2018.2.2f1", + "2018.2.1f1", + "2018.2.0f2", + "2018.1.9f2", + "2018.1.8f1", + "2018.1.7f1", + "2018.1.6f1", + "2018.1.5f1", + "2018.1.4f1", + "2018.1.3f1", + "2018.1.2f1", + "2018.1.1f1", + "2018.1.0f2", + "2017.4.18f1", + "2017.4.17f1", + }; static readonly Dictionary HUMANOID_TO_HIFI_JOINT_NAME = new Dictionary { {"Chest", "Spine1"}, @@ -136,19 +165,19 @@ class AvatarExporter : MonoBehaviour { }; // Humanoid mapping name suffixes for each set of appendages - static readonly string[] legMappingSuffixes = new string[] { + static readonly string[] LEG_MAPPING_SUFFIXES = new string[] { "UpperLeg", "LowerLeg", "Foot", "Toes", }; - static readonly string[] armMappingsSuffixes = new string[] { + static readonly string[] ARM_MAPPING_SUFFIXES = new string[] { "Shoulder", "UpperArm", "LowerArm", "Hand", }; - static readonly string[] handMappingsSuffixes = new string[] { + static readonly string[] HAND_MAPPING_SUFFIXES = new string[] { " Index Distal", " Index Intermediate", " Index Proximal", @@ -167,6 +196,7 @@ class AvatarExporter : MonoBehaviour { }; enum BoneRule { + RecommendedUnityVersion, SingleRoot, NoDuplicateMapping, NoAsymmetricalLegMapping, @@ -183,10 +213,11 @@ class AvatarExporter : MonoBehaviour { EyesMapped, HipsNotOnGround, HipsSpineChestNotCoincident, + TotalBoneCountUnderLimit, BoneRuleEnd, }; // rules that are treated as errors and prevent exporting, otherwise rules will show as warnings - static readonly BoneRule[] exportBlockingBoneRules = new BoneRule[] { + static readonly BoneRule[] EXPORT_BLOCKING_BONE_RULES = new BoneRule[] { BoneRule.HipsMapped, BoneRule.SpineMapped, BoneRule.ChestMapped, @@ -280,7 +311,7 @@ class AvatarExporter : MonoBehaviour { string boneErrors = ""; string boneWarnings = ""; foreach (var failedBoneRule in failedBoneRules) { - if (Array.IndexOf(exportBlockingBoneRules, failedBoneRule.Key) >= 0) { + if (Array.IndexOf(EXPORT_BLOCKING_BONE_RULES, failedBoneRule.Key) >= 0) { boneErrors += failedBoneRule.Value + "\n\n"; } else { boneWarnings += failedBoneRule.Value + "\n\n"; @@ -635,6 +666,14 @@ class AvatarExporter : MonoBehaviour { // to the failed bone rules map with appropriate error or warning text for (BoneRule boneRule = 0; boneRule < BoneRule.BoneRuleEnd; ++boneRule) { switch (boneRule) { + case BoneRule.RecommendedUnityVersion: + if (Array.IndexOf(RECOMMENDED_UNITY_VERSIONS, Application.unityVersion) == -1) { + failedBoneRules.Add(boneRule, "The current version of Unity is not one of the recommended Unity " + + "versions. If you are using a version of Unity later than 2018.2.12f1, " + + "it is recommended to apply Enforce T-Pose under the Pose dropdown " + + "in Humanoid configuration."); + } + break; case BoneRule.SingleRoot: // bone rule fails if the root bone node has more than one child bone if (userBoneTree.children.Count > 1) { @@ -659,13 +698,13 @@ class AvatarExporter : MonoBehaviour { } break; case BoneRule.NoAsymmetricalLegMapping: - CheckAsymmetricalMappingRule(boneRule, legMappingSuffixes, "leg"); + CheckAsymmetricalMappingRule(boneRule, LEG_MAPPING_SUFFIXES, "leg"); break; case BoneRule.NoAsymmetricalArmMapping: - CheckAsymmetricalMappingRule(boneRule, armMappingsSuffixes, "arm"); + CheckAsymmetricalMappingRule(boneRule, ARM_MAPPING_SUFFIXES, "arm"); break; case BoneRule.NoAsymmetricalHandMapping: - CheckAsymmetricalMappingRule(boneRule, handMappingsSuffixes, "hand"); + CheckAsymmetricalMappingRule(boneRule, HAND_MAPPING_SUFFIXES, "hand"); break; case BoneRule.HipsMapped: hipsUserBone = CheckHumanBoneMappingRule(boneRule, "Hips"); @@ -751,6 +790,13 @@ class AvatarExporter : MonoBehaviour { } } break; + case BoneRule.TotalBoneCountUnderLimit: + int userBoneCount = userBoneInfos.Count; + if (userBoneCount > MAXIMUM_USER_BONE_COUNT) { + failedBoneRules.Add(boneRule, "The total number of bones in the avatar (" + userBoneCount + + ") exceeds the maximum bone limit (" + MAXIMUM_USER_BONE_COUNT + ")."); + } + break; } } } diff --git a/tools/unity-avatar-exporter/avatarExporter.unitypackage b/tools/unity-avatar-exporter/avatarExporter.unitypackage index 2c584622d1af9ecc55112f579adec8a432363064..5e825bd0d97489f916b40aced9d764df74a7ae20 100644 GIT binary patch literal 13046 zcmVRG0AX@tXmn+5a4vLVasccd*>>B?EzkZ6UOlvS1$%kOr(@RuIrulOBAtuW|DomQ*;%nyRVZ$IA=fo z-t~Nb`*LgR?(VJ`6ToIRyV{yCp!pUr`2vAn&u=DcYl|GgoKFGE!SpJfCfi2RD4l0B zk#u^W&yySTt+{_(NZ8FLlVmst-1Fw!WSY#<;r80vZ~_CVKxXfycbHAH*U2?dHe1ZR zzpQ!iKxY@XBcQtXnbTmpxVePlW9VQ4Y4_gy6Cg!A_lDQ;^eV~WCC!Nzn_fK0GY^I= zhcS{s(y4bc*x5TAP(f-5M1P(RJz()Dn@;ZGeTE&``Ss4(&dJ5#H}8*6&ITtJzaE^N z?jIj{ue^re3>w>1*9l-e$pEW&`|nRL-kuzvAMITn?jK$J7HaxUKNxQ>t91H)|7dWr z`)+W0Mm0|d?{`ji&Y*Dyq6`LfZtflK{AT~~{P5!Z6mWihjDP@zGpHH1JKI$q9vr?u z`|ZVtos*;eqqi4lgWq7K#!)s+cxNjr|NbM8b@%x2aB#FY*tDF3yfG-tE8Hzxc)R{?XaR(azz3Nn}-JC8K|7>|Q7Nys_yuPH#aq z292+qTIM^z1oG%_At$}fA&35&IS0vj?(Kup|3cG1Jb_}A_%5D~C_O5x0RMu{yh%nW zs5PrvSX%AyomIz$-C;T!Ik96I zQAw2w^jLOSR#D++S8^eE0utmv50j&^;x=lkQdm++qE)QmLh9@qrcVb}lpd8;D8-9% z!?J1;GpmXNwZT0?7C-I$H(7?GPyRMaNa%V?c8P=RE}8AjZWNqZ0p>~uEKS4JAHFHkD4z)B6 zOI0eTw2C1FcEzx?q7(zWQeaoI^$tr`il@Ae8%3ph%4Q|Ta8MJb`O3grl5t^>V-9EHUra(|nM+Cg!geF^J+6Qhx@1&zr%?;AnSnadLdN zbEX`g>WWSild7pQ>o36D>xHdOI~s3#U~9L-ZYz1wg_jqdX1CpK_mdYLc=Mb6ey81U zjW;x!a@*7f3NDS`@AaT=A0b7}sM~L~I?0P5gm-Xa{Ei<*@Jg*3Fqu_r!vr9HE9$ob zsO2M2a4ot~*Y7ZF+u+KD{canuwL#kEu!|6YbFbsKyVToO-|zXo9yWw8K^XS?^nyL} zBgnB@aLr|QI|MFj^+SY>&^i!<3kB#-EAo*htW>8Lwe5C_Q(s9Ny-wJVcpE{t&A`%2 z1dJ4I0PkC7Uu+A#v?Y3k~ zyVvWAR$HwoY?U`uMK8vOcG%;MbODm&LN{u4L>pnd-|5(Gut{_Yxq988*K2cng;C3= zCg`Q@``ABLDvEkhSrfJB6?B76o71Zoc6-#V7xWTB;8(QT>G+*~c|*(OtKIJRg$%b~ z9a+GIQQGNB4z+>*rVQIIOxYmmM1H^<=yyA+~< z>TNmZQH*7$+891BYi5~fg@Av^d*VZjQntFFO5{tw)eCHX*p8LmLZ<^P2dLOW*y{o5 zIIW_N4|ogd?fYF&k)hg=Q~5AC z1s&g{iSjJn1EAaQwtPOq0+7Xy;A7bBcZ6gDd!wR$H62nnaG1)w5d!DGLovHW-4-xY zy>tsxo$1874GIwQsOPr?xBMt*x7xjkn-P5wb@m&yUetwo%9csx@j6?GdM)4>pL@bK zNQsb(cDLKTobS2S)J`ErK zJLpI{cSFCWUV?t)23|?@P6t$dfJm~}UZ(}>j8Pq*4yiUq_9#LNWW)0ApL+1vaRIvp zHpTb)Vu}xfPM|EWR+}^%6#@kWRIeLFu$pNh*CaHc4dW=ibfF>MeiVf`RO`eX98Cbm zeKBo;Nh(Ft_j{n=c@sSlD6k`HL@4YQdVQF;x$MKh3L?>ozz1;^^L{I8cY(pR;~6fV zw1Tdn3AUrGu2vX{nIE6=My=q7-2`-`D=Q8{8C^YiII&>lplee*u44Bj=yYL;pM#4cn4qN1)n(2V6+#1lyiqF%;}ES5428BJ zO3-C?1fx*D-4|r+_Iof2mqu({qa%X70UT97gjr3wB^{D!l0Hy`z>S +y}Fp9RlB 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