コード例 #1
0
        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);
                    }
                }
            }
        }