@@ -174,88 +174,93 @@ void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unmergedTr
174
174
// Set the normals on Layer 0.
175
175
FbxLayer fbxLayer = GetOrCreateLayer ( fbxMesh ) ;
176
176
177
- using ( var fbxLayerElement = FbxLayerElementNormal . Create ( fbxMesh , "Normals" ) ) {
178
- fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
179
- fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
177
+ if ( mesh . Normals != null && mesh . Normals . Length > 0 && mesh . Normals . Length == unmergedTriangles . Length ) {
178
+ using ( var fbxLayerElement = FbxLayerElementNormal . Create ( fbxMesh , "Normals" ) ) {
179
+ fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
180
+ fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
180
181
181
- // Add one normal per each vertex face index (3 per triangle)
182
- FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
182
+ // Add one normal per each vertex face index (3 per triangle)
183
+ FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
183
184
184
- for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
185
- int unityTriangle = unmergedTriangles [ n ] ;
186
- fbxElementArray . Add ( ConvertNormalToRightHanded ( mesh . Normals [ unityTriangle ] ) ) ;
187
- }
185
+ for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
186
+ int unityTriangle = unmergedTriangles [ n ] ;
187
+ fbxElementArray . Add ( ConvertNormalToRightHanded ( mesh . Normals [ unityTriangle ] ) ) ;
188
+ }
188
189
189
- fbxLayer . SetNormals ( fbxLayerElement ) ;
190
+ fbxLayer . SetNormals ( fbxLayerElement ) ;
191
+ }
190
192
}
191
193
192
- /// Set the binormals on Layer 0.
193
- using ( var fbxLayerElement = FbxLayerElementBinormal . Create ( fbxMesh , " Binormals" ) )
194
- {
195
- fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
196
- fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
194
+ /// Set the binormals on Layer 0.
195
+ if ( mesh . Binormals != null && mesh . Binormals . Length > 0 && mesh . Binormals . Length == unmergedTriangles . Length ) {
196
+ using ( var fbxLayerElement = FbxLayerElementBinormal . Create ( fbxMesh , "Binormals" ) ) {
197
+ fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
198
+ fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
197
199
198
- // Add one normal per each vertex face index (3 per triangle)
199
- FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
200
+ // Add one normal per each vertex face index (3 per triangle)
201
+ FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
200
202
201
- for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
202
- int unityTriangle = unmergedTriangles [ n ] ;
203
- fbxElementArray . Add ( ConvertNormalToRightHanded ( mesh . Binormals [ unityTriangle ] ) ) ;
203
+ for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
204
+ int unityTriangle = unmergedTriangles [ n ] ;
205
+ fbxElementArray . Add ( ConvertNormalToRightHanded ( mesh . Binormals [ unityTriangle ] ) ) ;
206
+ }
207
+ fbxLayer . SetBinormals ( fbxLayerElement ) ;
204
208
}
205
- fbxLayer . SetBinormals ( fbxLayerElement ) ;
206
209
}
207
210
208
211
/// Set the tangents on Layer 0.
209
- using ( var fbxLayerElement = FbxLayerElementTangent . Create ( fbxMesh , "Tangents" ) )
210
- {
211
- fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
212
- fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
213
-
214
- // Add one normal per each vertex face index (3 per triangle)
215
- FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
216
-
217
- for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
218
- int unityTriangle = unmergedTriangles [ n ] ;
219
- fbxElementArray . Add ( ConvertNormalToRightHanded (
220
- new Vector3 (
221
- mesh . Tangents [ unityTriangle ] [ 0 ] ,
222
- mesh . Tangents [ unityTriangle ] [ 1 ] ,
223
- mesh . Tangents [ unityTriangle ] [ 2 ]
224
- ) ) ) ;
212
+ if ( mesh . Tangents != null && mesh . Tangents . Length > 0 && mesh . Tangents . Length == unmergedTriangles . Length ) {
213
+ using ( var fbxLayerElement = FbxLayerElementTangent . Create ( fbxMesh , "Tangents" ) ) {
214
+ fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
215
+ fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eDirect ) ;
216
+
217
+ // Add one normal per each vertex face index (3 per triangle)
218
+ FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
219
+
220
+ for ( int n = 0 ; n < unmergedTriangles . Length ; n ++ ) {
221
+ int unityTriangle = unmergedTriangles [ n ] ;
222
+ fbxElementArray . Add ( ConvertNormalToRightHanded (
223
+ new Vector3 (
224
+ mesh . Tangents [ unityTriangle ] [ 0 ] ,
225
+ mesh . Tangents [ unityTriangle ] [ 1 ] ,
226
+ mesh . Tangents [ unityTriangle ] [ 2 ]
227
+ ) ) ) ;
228
+ }
229
+ fbxLayer . SetTangents ( fbxLayerElement ) ;
225
230
}
226
- fbxLayer . SetTangents ( fbxLayerElement ) ;
227
231
}
228
232
229
233
ExportUVs ( fbxMesh , mesh , unmergedTriangles ) ;
230
234
231
- using ( var fbxLayerElement = FbxLayerElementVertexColor . Create ( fbxMesh , "VertexColors" ) )
232
- {
233
- fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
234
- fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eIndexToDirect ) ;
235
-
236
- // set texture coordinates per vertex
237
- FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
238
-
239
- // (Uni-31596) only copy unique UVs into this array, and index appropriately
240
- for ( int n = 0 ; n < mesh . VertexColors . Length ; n ++ ) {
241
- // Converting to Color from Color32, as Color32 stores the colors
242
- // as ints between 0-255, while FbxColor and Color
243
- // use doubles between 0-1
244
- Color color = mesh . VertexColors [ n ] ;
245
- fbxElementArray . Add ( new FbxColor ( color . r ,
246
- color . g ,
247
- color . b ,
248
- color . a ) ) ;
249
- }
235
+ if ( mesh . VertexColors != null && mesh . VertexColors . Length > 0 ) {
236
+ using ( var fbxLayerElement = FbxLayerElementVertexColor . Create ( fbxMesh , "VertexColors" ) ) {
237
+ fbxLayerElement . SetMappingMode ( FbxLayerElement . EMappingMode . eByPolygonVertex ) ;
238
+ fbxLayerElement . SetReferenceMode ( FbxLayerElement . EReferenceMode . eIndexToDirect ) ;
239
+
240
+ // set texture coordinates per vertex
241
+ FbxLayerElementArray fbxElementArray = fbxLayerElement . GetDirectArray ( ) ;
250
242
251
- // For each face index, point to a texture uv
252
- FbxLayerElementArray fbxIndexArray = fbxLayerElement . GetIndexArray ( ) ;
253
- fbxIndexArray . SetCount ( unmergedTriangles . Length ) ;
243
+ // (Uni-31596) only copy unique UVs into this array, and index appropriately
244
+ for ( int n = 0 ; n < mesh . VertexColors . Length ; n ++ ) {
245
+ // Converting to Color from Color32, as Color32 stores the colors
246
+ // as ints between 0-255, while FbxColor and Color
247
+ // use doubles between 0-1
248
+ Color color = mesh . VertexColors [ n ] ;
249
+ fbxElementArray . Add ( new FbxColor ( color . r ,
250
+ color . g ,
251
+ color . b ,
252
+ color . a ) ) ;
253
+ }
254
254
255
- for ( int i = 0 ; i < unmergedTriangles . Length ; i ++ ) {
256
- fbxIndexArray . SetAt ( i , unmergedTriangles [ i ] ) ;
255
+ // For each face index, point to a texture uv
256
+ FbxLayerElementArray fbxIndexArray = fbxLayerElement . GetIndexArray ( ) ;
257
+ fbxIndexArray . SetCount ( unmergedTriangles . Length ) ;
258
+
259
+ for ( int i = 0 ; i < unmergedTriangles . Length ; i ++ ) {
260
+ fbxIndexArray . SetAt ( i , unmergedTriangles [ i ] ) ;
261
+ }
262
+ fbxLayer . SetVertexColors ( fbxLayerElement ) ;
257
263
}
258
- fbxLayer . SetVertexColors ( fbxLayerElement ) ;
259
264
}
260
265
}
261
266
@@ -1257,13 +1262,17 @@ public Vector3 [] Binormals {
1257
1262
var normals = Normals ;
1258
1263
var tangents = Tangents ;
1259
1264
1260
- m_Binormals = new Vector3 [ normals . Length ] ;
1265
+ if ( normals != null && normals . Length > 0 &&
1266
+ tangents != null && tangents . Length > 0 &&
1267
+ normals . Length == tangents . Length
1268
+ ) {
1269
+ m_Binormals = new Vector3 [ normals . Length ] ;
1261
1270
1262
- for ( int i = 0 ; i < normals . Length ; i ++ )
1263
- m_Binormals [ i ] = Vector3 . Cross ( normals [ i ] ,
1264
- tangents [ i ] )
1271
+ for ( int i = 0 ; i < normals . Length ; i ++ )
1272
+ m_Binormals [ i ] = Vector3 . Cross ( normals [ i ] ,
1273
+ tangents [ i ] )
1265
1274
* tangents [ i ] . w ;
1266
-
1275
+ }
1267
1276
}
1268
1277
return m_Binormals ;
1269
1278
}
0 commit comments