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); } } } }
private void DestroyOutputs() { if (_generatedOutputs != null) { for (int i = 0; i < _generatedOutputs.Count; ++i) { HEU_GeneratedOutput.DestroyGeneratedOutput(_generatedOutputs[i]); _generatedOutputs[i] = null; } _generatedOutputs.Clear(); } }
private void DestroyOutputs() { if (_generatedOutputs != null) { for (int i = 0; i < _generatedOutputs.Count; ++i) { HEU_GeneratedOutput.DestroyGeneratedOutput(_generatedOutputs[i]); _generatedOutputs[i] = null; } _generatedOutputs.Clear(); } if (_outputCacheFilePaths != null && _outputCacheFilePaths.Count > 0) { foreach(string filepath in _outputCacheFilePaths) { HEU_AssetDatabase.DeleteAssetAtPath(filepath); } _outputCacheFilePaths.Clear(); } }