@@ -693,10 +693,6 @@ bool ExportMesh (MeshInfo meshInfo, FbxNode fbxNode)
693
693
/// </summary>
694
694
protected bool ExportSkinnedMesh ( GameObject unityGo , FbxScene fbxScene , FbxNode fbxNode )
695
695
{
696
- /*Animator unityAnimator = unityGo.GetComponent<Animator> ();
697
- if (unityAnimator == null)
698
- return;*/
699
-
700
696
SkinnedMeshRenderer unitySkin
701
697
= unityGo . GetComponent < SkinnedMeshRenderer > ( ) ;
702
698
@@ -709,10 +705,6 @@ SkinnedMeshRenderer unitySkin
709
705
return false ;
710
706
}
711
707
712
- // TODO: do we need this?
713
- // create node hierarchy
714
- //ExportNodeHierarchy (unityGo, fbxNode);
715
-
716
708
// export skeleton
717
709
if ( ! ExportSkeleton ( unitySkin , fbxScene ) ) {
718
710
Debug . LogError ( "failed to export skeleton" ) ;
@@ -732,24 +724,11 @@ SkinnedMeshRenderer unitySkin
732
724
return false ;
733
725
}
734
726
735
- // lookup node w skin renderer
736
- FbxNode fbxMeshNode = fbxNode ; //MapUnityObjectToFbxNode[unitySkin.gameObject];
737
-
738
- // export material for mesh
739
- //var fbxMaterial = ExportMaterial (meshInfo.Materials, fbxScene);
740
- //fbxMeshNode.AddMaterial (fbxMaterial);
741
-
742
- // set the fbxNode containing the mesh
743
- //fbxMeshNode.SetNodeAttribute (fbxMesh);
744
- //fbxMeshNode.SetShadingMode (FbxNode.EShadingMode.eWireFrame);
745
-
746
- //fbxRootNode.AddChild (fbxMeshNode);
747
-
748
727
// bind mesh to skeleton
749
- ExportSkin ( unitySkin , meshInfo , fbxScene , fbxMesh , fbxMeshNode ) ;
728
+ ExportSkin ( unitySkin , meshInfo , fbxScene , fbxMesh , fbxNode ) ;
750
729
751
730
// add bind pose
752
- ExportBindPose ( fbxNode , fbxMeshNode , fbxScene ) ;
731
+ ExportBindPose ( fbxNode , fbxScene ) ;
753
732
754
733
if ( Verbose )
755
734
Debug . Log ( string . Format ( "exporting {0} {1}" , "Skin" , fbxNode . GetName ( ) ) ) ;
@@ -795,16 +774,10 @@ private bool ExportSkeleton (SkinnedMeshRenderer skinnedMesh, FbxScene fbxScene)
795
774
// its corresponding parent, or to the scene if there is none.
796
775
FbxNode fbxBoneNode ;
797
776
if ( ! MapUnityObjectToFbxNode . TryGetValue ( unityBoneTransform . gameObject , out fbxBoneNode ) ) {
798
- /*var unityParent = unityBoneTransform.parent;
799
- FbxNode fbxParent;
800
- if (MapUnityObjectToFbxNode.TryGetValue(unityParent.gameObject, out fbxParent)) {
801
- fbxBoneNode = FbxNode.Create (fbxParent, unityBoneTransform.name);
802
- } else {*/
803
- if ( ExportSettings . mayaCompatibleNames ) {
804
- unityBoneTransform . name = ConvertToMayaCompatibleName ( unityBoneTransform . name ) ;
805
- }
806
- fbxBoneNode = FbxNode . Create ( fbxScene , unityBoneTransform . name ) ;
807
- //}
777
+ if ( ExportSettings . mayaCompatibleNames ) {
778
+ unityBoneTransform . name = ConvertToMayaCompatibleName ( unityBoneTransform . name ) ;
779
+ }
780
+ fbxBoneNode = FbxNode . Create ( fbxScene , unityBoneTransform . name ) ;
808
781
MapUnityObjectToFbxNode . Add ( unityBoneTransform . gameObject , fbxBoneNode ) ;
809
782
}
810
783
@@ -814,26 +787,26 @@ private bool ExportSkeleton (SkinnedMeshRenderer skinnedMesh, FbxScene fbxScene)
814
787
var fbxSkeletonType = index . ContainsKey ( unityBoneTransform . parent )
815
788
? FbxSkeleton . EType . eLimbNode : FbxSkeleton . EType . eRoot ;
816
789
fbxSkeleton . SetSkeletonType ( fbxSkeletonType ) ;
817
- fbxSkeleton . Size . Set ( 1.0f ) ;
790
+ fbxSkeleton . Size . Set ( 1.0f * UnitScaleFactor ) ;
818
791
fbxBoneNode . SetNodeAttribute ( fbxSkeleton ) ;
819
- if ( Verbose ) { Debug . Log ( "Converted " + unityBoneTransform . name + " to a " + fbxSkeletonType + " bone" ) ; }
792
+ // if (Verbose) { Debug.Log("Converted " + unityBoneTransform.name + " to a " + fbxSkeletonType + " bone"); }
820
793
}
821
794
}
822
795
823
796
// Step 2: connect up the hierarchy.
824
- /*foreach (var unityBone in bones) {
825
- var fbxBone = MapUnityObjectToFbxNode[unityBone.gameObject];
826
- var fbxParent = MapUnityObjectToFbxNode[unityBone.parent.gameObject];
827
- fbxParent.AddChild(fbxBone);
828
- }*/
797
+ foreach ( var unityBone in bones ) {
798
+ var fbxBone = MapUnityObjectToFbxNode [ unityBone . gameObject ] ;
799
+ if ( unityBone . parent != null ) {
800
+ var fbxParent = MapUnityObjectToFbxNode [ unityBone . parent . gameObject ] ;
801
+ fbxParent . AddChild ( fbxBone ) ;
802
+ }
803
+ }
829
804
830
805
// Step 3: set up the transforms.
831
806
for ( int boneIndex = 0 , n = bones . Length ; boneIndex < n ; boneIndex ++ ) {
832
807
var unityBone = bones [ boneIndex ] ;
833
808
var fbxBone = MapUnityObjectToFbxNode [ unityBone . gameObject ] ;
834
809
835
- Debug . Log ( "bone: " + unityBone . name ) ;
836
-
837
810
Matrix4x4 pose ;
838
811
if ( fbxBone . GetSkeleton ( ) . GetSkeletonType ( ) == FbxSkeleton . EType . eRoot ) {
839
812
// bind pose is local -> root. We want root -> local, so invert.
@@ -860,7 +833,7 @@ private bool ExportSkeleton (SkinnedMeshRenderer skinnedMesh, FbxScene fbxScene)
860
833
matrix . GetElements ( out translation , out rotation , out shear , out scale , out sign ) ;
861
834
862
835
// Bones should have zero rotation, and use a pivot instead.
863
- fbxBone . LclTranslation . Set ( new FbxDouble3 ( translation . X , translation . Y , translation . Z ) ) ;
836
+ fbxBone . LclTranslation . Set ( new FbxDouble3 ( translation . X * UnitScaleFactor , translation . Y * UnitScaleFactor , translation . Z * UnitScaleFactor ) ) ;
864
837
fbxBone . LclRotation . Set ( new FbxDouble3 ( 0 , 0 , 0 ) ) ;
865
838
fbxBone . LclScaling . Set ( new FbxDouble3 ( scale . X , scale . Y , scale . Z ) ) ;
866
839
@@ -952,9 +925,9 @@ boneWeights [i].weight3
952
925
/// <summary>
953
926
/// Export bind pose of mesh to skeleton
954
927
/// </summary>
955
- protected bool ExportBindPose ( FbxNode fbxRootNode , FbxNode fbxMeshNode , FbxScene fbxScene )
928
+ protected bool ExportBindPose ( FbxNode fbxMeshNode , FbxScene fbxScene )
956
929
{
957
- FbxPose fbxPose = FbxPose . Create ( fbxScene , fbxRootNode . GetName ( ) ) ;
930
+ FbxPose fbxPose = FbxPose . Create ( fbxScene , fbxMeshNode . GetName ( ) ) ;
958
931
959
932
// set as bind pose
960
933
fbxPose . SetIsBindPose ( true ) ;
@@ -985,43 +958,6 @@ protected bool ExportBindPose (FbxNode fbxRootNode, FbxNode fbxMeshNode, FbxScen
985
958
return true ;
986
959
}
987
960
988
- /// <summary>
989
- /// Get a mesh renderer's mesh.
990
- /// </summary>
991
- /*private MeshInfo GetSkinnedMeshInfo (GameObject gameObject)
992
- {
993
- // Verify that we are rendering. Otherwise, don't export.
994
- var renderer = gameObject.GetComponentInChildren<SkinnedMeshRenderer> ();
995
- if (!renderer || !renderer.enabled) {
996
- Debug.LogError ("could not find renderer");
997
- return new MeshInfo ();
998
- }
999
-
1000
- var mesh = renderer.sharedMesh;
1001
- if (!mesh) {
1002
- Debug.LogError ("Could not find mesh");
1003
- return new MeshInfo ();
1004
- }
1005
-
1006
- return new MeshInfo (gameObject, mesh, renderer);
1007
- }*/
1008
-
1009
- /// <summary>
1010
- /// Create the node hierarchy and store the mapping from Unity
1011
- /// object to FBX node.
1012
- /// </summary>
1013
- /*protected void ExportNodeHierarchy (GameObject unityGo, FbxNode fbxParentNode)
1014
- {
1015
- FbxNode fbxNode = FbxNode.Create (fbxParentNode, unityGo.name);
1016
-
1017
- MapUnityObjectToFbxNode [unityGo] = fbxNode;
1018
-
1019
- foreach (Transform unityChild in unityGo.transform)
1020
- {
1021
- ExportNodeHierarchy (unityChild.gameObject, fbxNode);
1022
- }
1023
- }*/
1024
-
1025
961
/// <summary>
1026
962
/// Takes a Quaternion and returns a Euler with XYZ rotation order.
1027
963
/// Also converts from left (Unity) to righthanded (Maya) coordinates.
@@ -1251,7 +1187,6 @@ protected int ExportComponents (
1251
1187
if ( ! alreadyExported ) {
1252
1188
Debug . Log ( "here: " + unityGo . name ) ;
1253
1189
1254
-
1255
1190
ExportTransform ( unityGo . transform , fbxNode , newCenter , exportType ) ;
1256
1191
1257
1192
// try export mesh
0 commit comments