@@ -953,87 +953,89 @@ private void AddUnityClothInstance()
953953 }
954954
955955
956- private void DoCloth ( GameObject clothTarget , string meshName )
957- {
958- SkinnedMeshRenderer renderer = clothTarget . GetComponent < SkinnedMeshRenderer > ( ) ;
959- if ( ! renderer ) return ;
960- Mesh mesh = renderer . sharedMesh ;
961- if ( ! mesh ) return ;
962-
963- List < WeightMapper . PhysicsSettings > settingsList = new List < WeightMapper . PhysicsSettings > ( ) ;
964-
965- bool hasPhysics = false ;
966-
967- for ( int i = 0 ; i < mesh . subMeshCount ; i ++ ) //
968- {
969- Material mat = renderer . sharedMaterials [ i ] ;
970-
971- if ( ! mat ) continue ;
972- string sourceName = mat . name ;
973- if ( sourceName . iContains ( "_2nd_Pass" ) ) continue ;
974- if ( sourceName . iContains ( "_1st_Pass" ) )
975- {
976- sourceName = sourceName . Remove ( sourceName . IndexOf ( "_1st_Pass" ) ) ;
977- }
978-
979- foreach ( SoftPhysicsData data in softPhysics )
980- {
981- if ( data . materialName == sourceName &&
982- data . meshName == meshName &&
983- CanAddPhysics ( data ) )
984- {
985- WeightMapper . PhysicsSettings settings = new WeightMapper . PhysicsSettings ( ) ;
986-
987- settings . name = sourceName ;
988- settings . activate = data . activate ;
989- settings . gravity = data . gravity ;
990- settings . selfCollision = Importer . USE_SELF_COLLISION ? data . selfCollision : false ;
991- settings . softRigidCollision = data . softRigidCollision ;
992- settings . softRigidMargin = data . softRigidMargin ;
993-
994- if ( data . isHair )
995- {
996- // hair meshes degenerate quickly if less than full stiffness
997- // (too dense, too many verts?)
998- settings . bending = 0f ;
999- settings . stretch = 0f ;
1000- }
1001- else
1002- {
1003- settings . bending = data . bending ;
1004- settings . stretch = data . stretch ;
1005- }
1006-
1007- settings . solverFrequency = data . solverFrequency ;
1008- settings . stiffnessFrequency = data . stiffnessFrequency ;
1009- settings . mass = data . mass ;
1010- settings . friction = data . friction ;
1011- settings . damping = data . damping ;
1012- settings . selfMargin = data . selfMargin ;
1013- settings . maxDistance = 20f ;
1014- settings . maxPenetration = 10f ;
1015- settings . colliderThreshold = PHYSICS_WEIGHT_MAP_DETECT_COLLIDER_THRESHOLD ;
1016-
1017- Texture2D weightMap = GetTextureFrom ( data . weightMapPath , data . materialName , "WeightMap" , out string texName , true ) ;
1018- if ( ! weightMap ) weightMap = Texture2D . blackTexture ;
1019- settings . weightMap = weightMap ;
1020-
1021- settingsList . Add ( settings ) ;
1022- hasPhysics = true ;
1023- }
1024- }
1025- }
1026-
1027- if ( hasPhysics )
1028- {
1029- WeightMapper mapper = clothTarget . GetComponent < WeightMapper > ( ) ;
1030- if ( ! mapper ) mapper = clothTarget . AddComponent < WeightMapper > ( ) ;
1031-
1032- mapper . settings = settingsList . ToArray ( ) ;
1033- mapper . characterGUID = characterGUID ;
1034- mapper . ApplyWeightMap ( ) ;
1035- }
1036- }
956+ private void DoCloth ( GameObject clothTarget , string meshName )
957+ {
958+ SkinnedMeshRenderer renderer = clothTarget . GetComponent < SkinnedMeshRenderer > ( ) ;
959+ if ( ! renderer ) return ;
960+ Mesh mesh = renderer . sharedMesh ;
961+ if ( ! mesh ) return ;
962+
963+ List < WeightMapper . PhysicsSettings > settingsList = new List < WeightMapper . PhysicsSettings > ( ) ;
964+
965+ bool hasPhysics = false ;
966+
967+ for ( int i = 0 ; i < mesh . subMeshCount ; i ++ )
968+ {
969+ if ( i >= renderer . sharedMaterials . Length ) break ;
970+
971+ Material mat = renderer . sharedMaterials [ i ] ;
972+
973+ if ( ! mat ) continue ;
974+ string sourceName = mat . name ;
975+ if ( sourceName . iContains ( "_2nd_Pass" ) ) continue ;
976+ if ( sourceName . iContains ( "_1st_Pass" ) )
977+ {
978+ sourceName = sourceName . Remove ( sourceName . IndexOf ( "_1st_Pass" ) ) ;
979+ }
980+
981+ foreach ( SoftPhysicsData data in softPhysics )
982+ {
983+ if ( data . materialName == sourceName &&
984+ data . meshName == meshName &&
985+ CanAddPhysics ( data ) )
986+ {
987+ WeightMapper . PhysicsSettings settings = new WeightMapper . PhysicsSettings ( ) ;
988+
989+ settings . name = sourceName ;
990+ settings . activate = data . activate ;
991+ settings . gravity = data . gravity ;
992+ settings . selfCollision = Importer . USE_SELF_COLLISION ? data . selfCollision : false ;
993+ settings . softRigidCollision = data . softRigidCollision ;
994+ settings . softRigidMargin = data . softRigidMargin ;
995+
996+ if ( data . isHair )
997+ {
998+ // hair meshes degenerate quickly if less than full stiffness
999+ // (too dense, too many verts?)
1000+ settings . bending = 0f ;
1001+ settings . stretch = 0f ;
1002+ }
1003+ else
1004+ {
1005+ settings . bending = data . bending ;
1006+ settings . stretch = data . stretch ;
1007+ }
1008+
1009+ settings . solverFrequency = data . solverFrequency ;
1010+ settings . stiffnessFrequency = data . stiffnessFrequency ;
1011+ settings . mass = data . mass ;
1012+ settings . friction = data . friction ;
1013+ settings . damping = data . damping ;
1014+ settings . selfMargin = data . selfMargin ;
1015+ settings . maxDistance = 20f ;
1016+ settings . maxPenetration = 10f ;
1017+ settings . colliderThreshold = PHYSICS_WEIGHT_MAP_DETECT_COLLIDER_THRESHOLD ;
1018+
1019+ Texture2D weightMap = GetTextureFrom ( data . weightMapPath , data . materialName , "WeightMap" , out string texName , true ) ;
1020+ if ( ! weightMap ) weightMap = Texture2D . blackTexture ;
1021+ settings . weightMap = weightMap ;
1022+
1023+ settingsList . Add ( settings ) ;
1024+ hasPhysics = true ;
1025+ }
1026+ }
1027+ }
1028+
1029+ if ( hasPhysics )
1030+ {
1031+ WeightMapper mapper = clothTarget . GetComponent < WeightMapper > ( ) ;
1032+ if ( ! mapper ) mapper = clothTarget . AddComponent < WeightMapper > ( ) ;
1033+
1034+ mapper . settings = settingsList . ToArray ( ) ;
1035+ mapper . characterGUID = characterGUID ;
1036+ mapper . ApplyWeightMap ( ) ;
1037+ }
1038+ }
10371039
10381040 private void AddMagicaMeshCloth ( )
10391041 {
@@ -1111,6 +1113,8 @@ private bool CanAddMagicaCloth(GameObject clothTarget, string meshName) // adds
11111113
11121114 for ( int i = 0 ; i < mesh . subMeshCount ; i ++ )
11131115 {
1116+ if ( i >= renderer . sharedMaterials . Length ) break ;
1117+
11141118 Material mat = renderer . sharedMaterials [ i ] ;
11151119
11161120 if ( ! mat ) continue ;
0 commit comments