private void GenerateMesh(List <HEU_LoadBufferMesh> meshBuffers) { HEU_SessionBase session = GetHoudiniSession(true); Transform parent = this.gameObject.transform; int numBuffers = meshBuffers.Count; for (int m = 0; m < numBuffers; ++m) { if (meshBuffers[m]._geoCache != null) { GameObject newGameObject = new GameObject("mesh_" + meshBuffers[m]._geoCache._partName); Transform newTransform = newGameObject.transform; newTransform.parent = parent; HEU_GeneratedOutput generatedOutput = new HEU_GeneratedOutput(); generatedOutput._outputData._gameObject = newGameObject; bool bResult = false; int numLODs = meshBuffers[m]._LODGroupMeshes != null ? meshBuffers[m]._LODGroupMeshes.Count : 0; if (numLODs > 1) { bResult = HEU_GenerateGeoCache.GenerateLODMeshesFromGeoGroups(session, meshBuffers[m]._LODGroupMeshes, meshBuffers[m]._geoCache, generatedOutput, meshBuffers[m]._defaultMaterialKey, meshBuffers[m]._bGenerateUVs, meshBuffers[m]._bGenerateTangents, meshBuffers[m]._bGenerateNormals, meshBuffers[m]._bPartInstanced); } else if (numLODs == 1) { bResult = HEU_GenerateGeoCache.GenerateMeshFromSingleGroup(session, meshBuffers[m]._LODGroupMeshes[0], meshBuffers[m]._geoCache, generatedOutput, meshBuffers[m]._defaultMaterialKey, meshBuffers[m]._bGenerateUVs, meshBuffers[m]._bGenerateTangents, meshBuffers[m]._bGenerateNormals, meshBuffers[m]._bPartInstanced); HEU_GeneralUtility.UpdateGeneratedAttributeStore(session, _cookNodeID, meshBuffers[m]._id, generatedOutput._outputData._gameObject); } else { // Set return state to false if no mesh and no colliders (i.e. nothing is generated) bResult = (meshBuffers[m]._geoCache._colliderInfos.Count > 0); } if (bResult) { HEU_GenerateGeoCache.UpdateColliders(meshBuffers[m]._geoCache, generatedOutput._outputData); meshBuffers[m]._generatedOutput = generatedOutput; _generatedOutputs.Add(generatedOutput); SetOutputVisiblity(meshBuffers[m]); } else { HEU_GeneratedOutput.DestroyGeneratedOutput(generatedOutput); } } } }