示例#1
0
 public void Execute(int index)
 {
     if (bakingSettings[index].instanceID != 0)
     {
         Physics.BakeMesh(bakingSettings[index].instanceID, bakingSettings[index].convex);
     }
 }
示例#2
0
    /// <summary>
    /// Execute the job and bake the mesh
    /// </summary>
    public void Execute() {
      try {
        Physics.BakeMesh(meshID, false);
      } catch (Exception e) {
#if DEBUG
        World.Debug.logWarning($"MeshID Missing: {meshID}, can't bake mesh; {e.Message}");
      }
#endif
    }
示例#3
0
文件: MapView.cs 项目: imkoi/voxcake
    private void LateUpdate()
    {
        _chunkRenderer.Execute();

        if (_chunkRequestQueue.Count > 0)
        {
            var geometryRequests  = _chunkRequestQueue.Pull(4, _cameraTransform.position);
            var geometryResponses = _voxelGeometryController.Execute(geometryRequests);

            var length = geometryResponses.Length;

            if (length > 0)
            {
                var bakeChunks = new VolumeChunk[geometryResponses.Length];

                for (var i = 0; i < length; i++)
                {
                    var geometryResponse = geometryResponses[i];

                    var chunk = _chunks[geometryResponse.ChunkIndex];
                    chunk.SetMesh(geometryResponse);

                    bakeChunks[i] = chunk;
                }

                var tasks = new Task[length];

                for (var i = 0; i < length; i++)
                {
                    var bakeId = bakeChunks[i].MeshId;
                    tasks[i] = Task.Run(() => Physics.BakeMesh(bakeId, false));
                }

                Task.WaitAll(tasks);

                for (var i = 0; i < length; i++)
                {
                    bakeChunks[i].UpdateColliderMesh();
                }
            }
        }

        if (_fallingRequestQueue.Count > 0)
        {
            var geometryRequests  = _fallingRequestQueue.Pull(4, _cameraTransform.position);
            var geometryResponses = _voxelGeometryController.Execute(geometryRequests);

            foreach (var geometryResponse in geometryResponses)
            {
                var fallingConstruction = _fallingConstructions[geometryResponse.ConstructionIndex];
                fallingConstruction.SetMesh(geometryResponse);
            }
        }
    }
示例#4
0
    private void Update()
    {
        offset += Time.deltaTime * speed;

        Vector3[] vertices = meshFilter.mesh.vertices;
        for (int i = 0; i < vertices.Length; i++)
        {
            //for (int j = 0; j < 4; j++)
            //{
            vertices[i /*+ j*/].y = GetWaveHeight(transform.position.x + vertices[i].x);
            //}
        }

        meshFilter.mesh.vertices = vertices;
        meshFilter.mesh.RecalculateNormals();
        Physics.BakeMesh(meshFilter.mesh.GetInstanceID(), false);
    }
示例#5
0
        /// <summary>
        /// Move a vertex of the polygon and recreate the mesh
        /// </summary>
        /// <param name="data">MoveArgs</param>
        public void ShapeMoveVertex(MoveArgs data)
        {
            Mesh         mesh = Shape.GetComponent <MeshFilter>().mesh;
            MeshCollider mc   = Shape.GetComponent <MeshCollider>();
            MeshRenderer mr   = Shape.GetComponent <MeshRenderer>();
            Material     mat  = mr.material;

            Destroy(mc);
            mc = Shape.AddComponent <MeshCollider>();
            Vector3[] vertices = mesh.vertices;
            vertices[VertexTable.Find(item => item.Id == data.id).pVertex] = Shape.transform.InverseTransformPoint(data.pos);
            mesh.vertices = vertices;
            mesh.uv       = BuildUVs(vertices);
            mesh.RecalculateBounds();
            mesh.RecalculateNormals();
            try {
                Physics.BakeMesh(mesh.GetInstanceID(), false);
                mc.sharedMesh = mesh;
            } catch (Exception e) {
                Debug.Log(e.ToString());
            }
            mat.SetVector("_Tiling", new Vector2(scaleX / _tiling_size, scaleY / _tiling_size));
        }
 public void Execute(int index)
 {
     Physics.BakeMesh(meshIds[index], false);
 }
 /// <summary>
 /// Execute the job and bake the mesh
 /// </summary>
 public void Execute()
 {
     Physics.BakeMesh(meshID, false);
 }
示例#8
0
    /// <summary>
    /// 刷新网格
    /// </summary>
    public void DrawMesh()
    {
        if (chunk.isBuildChunk)
        {
            return;
        }
        try
        {
            //定点数判断
            if (chunk.chunkMeshData == null && chunk.chunkMeshData.verts.Count < 3)
            {
                chunk.isDrawMesh = false;
                return;
            }
            InitBlockMats();
            chunk.isDrawMesh = true;
            chunkMesh.Clear();
            chunkMesh.subMeshCount = meshRenderer.materials.Length;
            //设置顶点
            chunkMesh.SetVertices(chunk.chunkMeshData.verts);
            //设置UV
            chunkMesh.SetUVs(0, chunk.chunkMeshData.uvs);
            //设置颜色
            chunkMesh.SetColors(chunk.chunkMeshData.colors);
            //设置三角(单面渲染,双面渲染,液体)
            int indexMat = 0;
            for (int i = 0; i < chunk.chunkMeshData.dicTris.Length; i++)
            {
                List <int> trisData = chunk.chunkMeshData.dicTris[i];
                if (trisData.IsNull())
                {
                    continue;
                }
                chunkMesh.SetTriangles(trisData, indexMat);
                indexMat++;
            }

            //碰撞数据设置
            if (chunk.chunkMeshData.vertsCollider.Count >= 3)
            {
                chunkMeshCollider.Clear();
                chunkMeshCollider.SetVertices(chunk.chunkMeshData.vertsCollider);
                chunkMeshCollider.SetTriangles(chunk.chunkMeshData.trisCollider, 0);
            }
            //触发数据设置
            if (chunk.chunkMeshData.vertsTrigger.Count >= 3)
            {
                chunkMeshTrigger.Clear();
                chunkMeshTrigger.SetVertices(chunk.chunkMeshData.vertsTrigger);
                chunkMeshTrigger.SetTriangles(chunk.chunkMeshData.trisTrigger, 0);
            }
            //刷新
            chunkMesh.RecalculateBounds();
            chunkMesh.RecalculateNormals();

            meshFilter.mesh.Optimize();
            chunkMeshTrigger.Optimize();
            chunkMeshCollider.Optimize();

            //CombineMesh(chunk.chunkMeshData);

            Physics.BakeMesh(chunkMeshCollider.GetInstanceID(), false);
            Physics.BakeMesh(chunkMeshTrigger.GetInstanceID(), false);

            meshCollider.sharedMesh = chunkMeshCollider;
            meshTrigger.sharedMesh  = chunkMeshTrigger;

            meshCollider.enabled = true;
            meshTrigger.enabled  = true;

            if (chunkMesh.vertexCount >= 3)
            {
                meshFilter.sharedMesh = chunkMesh;
            }

            if (meshRenderer.renderingLayerMask == 0)
            {
                meshRenderer.renderingLayerMask = 1;
            }

            //初始化动画
            //AnimForInit(() =>
            //{

            //});
            //刷新寻路
            PathFindingHandler.Instance.manager.RefreshPathFinding(chunk);
            //显示
            gameObject.SetActive(true);
        }
        catch (Exception e)
        {
            LogUtil.Log("绘制出错_" + e.ToString());
            chunk.isDrawMesh = false;
        }
        finally
        {
            chunk.isDrawMesh = false;
        }
    }
示例#9
0
        static void ImportSingle(double OriginX, double OriginY)
        {
            double originX      = OriginX;
            double originY      = OriginY;
            string basefilepath = "E:/TiledData/Terrain1000x1000/";

            string jsonfilename = originX.ToString() + "-" + originY.ToString() + ".json";

            float  tileSize = 1000;
            string filepath = basefilepath;

            Debug.Log(filepath);

            if (File.Exists(filepath + jsonfilename))
            {
                CityModel cm = new CityModel(filepath, jsonfilename);

                //type voetpad
                Mesh RoadsvoetpadMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "voetpad", "voetgangersgebied", "ruiterpad", "voetpad op trap"
                }, true);
                Mesh LandUseVoetpadMesh = CreateCityObjectMesh(cm, "LandUse", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "open verharding"
                }, true);
                LandUseVoetpadMesh = SimplifyMesh(LandUseVoetpadMesh, 0.05f);
                //combine meshes of type "voetpad"
                CombineInstance[] voetpadcombi = new CombineInstance[2];
                voetpadcombi[0].mesh = RoadsvoetpadMesh;
                voetpadcombi[1].mesh = LandUseVoetpadMesh;
                Mesh voetpadmesh = new Mesh();
                voetpadmesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                voetpadmesh.CombineMeshes(voetpadcombi, true, false);
                //type fietspad
                Mesh fietspadMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "fietspad"
                }, true);

                //type parkeervak
                Mesh parkeervlakMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "parkeervlak"
                }, true);
                //type spoorbaan
                Mesh spoorbaanMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "spoorbaan"
                }, true);
                //type woonerf
                Mesh WoonerfMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "transitie", "woonerf"
                }, true);

                // type weg
                Mesh roadsMesh = CreateCityObjectMesh(cm, "Road", originX, originY, tileSize, "bgt_functie", new List <string> {
                    "fietspad", "parkeervlak", "ruiterpad", "spoorbaan", "voetgangersgebied", "voetpad", "voetpad op trap", "woonerf"
                }, false);
                Mesh LandUseVerhardMesh = CreateCityObjectMesh(cm, "LandUse", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "gesloten verharding"
                }, true);
                LandUseVerhardMesh = SimplifyMesh(LandUseVerhardMesh, 0.05f);
                // combine meshes of type "weg"
                CombineInstance[] wegcombi = new CombineInstance[2];
                wegcombi[0].mesh = roadsMesh;
                wegcombi[1].mesh = LandUseVerhardMesh;
                Mesh wegmesh = new Mesh();
                wegmesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                wegmesh.CombineMeshes(wegcombi, true, false);

                // type groen
                Mesh plantcoverMesh = CreateCityObjectMesh(cm, "PlantCover", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "alles"
                }, false);
                Mesh LanduseGroenMesh = CreateCityObjectMesh(cm, "LandUse", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "groenvoorziening"
                }, true);
                LanduseGroenMesh = SimplifyMesh(LanduseGroenMesh, 0.05f);
                //combine meshes of type "groen"
                CombineInstance[] groencombi = new CombineInstance[2];
                groencombi[0].mesh = plantcoverMesh;
                groencombi[1].mesh = LanduseGroenMesh;
                Mesh groenMesh = new Mesh();
                groenMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                groenMesh.CombineMeshes(groencombi, true, false);

                //type erf
                Mesh erfMesh = CreateCityObjectMesh(cm, "LandUse", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "erf"
                }, true);
                erfMesh = SimplifyMesh(erfMesh, 0.05f);

                //type onverhard
                Mesh LandUseMesh = CreateCityObjectMesh(cm, "LandUse", originX, originY, tileSize, "bgt_fysiekvoorkomen", new List <string> {
                    "erf", "groenvoorziening", "gesloten verharding", "open verharding"
                }, false);
                LandUseMesh = SimplifyMesh(LandUseMesh, 0.05f);

                Mesh genericCityObjectMesh = CreateCityObjectMesh(cm, "GenericCityObject", originX, originY, tileSize, "bgt_type", null, true);
                Mesh waterBodyMesh         = CreateCityObjectMesh(cm, "WaterBody", originX, originY, tileSize, "bgt_type", null, true);
                Mesh bridgeMesh            = CreateCityObjectMesh(cm, "Bridge", originX, originY, tileSize, "bgt_type", null, true);



                //create LOD1 Mesh
                CombineInstance[] combi = new CombineInstance[12];
                combi[0].mesh  = voetpadmesh;     //
                combi[1].mesh  = fietspadMesh;    //
                combi[2].mesh  = parkeervlakMesh; //
                combi[3].mesh  = wegmesh;         //
                combi[4].mesh  = groenMesh;       //
                combi[5].mesh  = erfMesh;         //
                combi[6].mesh  = LandUseMesh;     //
                combi[7].mesh  = spoorbaanMesh;   //
                combi[8].mesh  = WoonerfMesh;     //
                combi[9].mesh  = genericCityObjectMesh;
                combi[10].mesh = bridgeMesh;
                combi[11].mesh = waterBodyMesh;
                ;

                Mesh lod1Mesh = new Mesh();
                lod1Mesh.CombineMeshes(combi, false, false);
                lod1Mesh.uv2 = RDuv2(lod1Mesh.vertices, CoordConvert.RDtoUnity(new Vector3RD(originX, originY, 0)), tileSize);
                Physics.BakeMesh(lod1Mesh.GetInstanceID(), false);
                AssetDatabase.CreateAsset(lod1Mesh, "Assets/terrainMeshes/LOD0/terrain_" + originX + "-" + originY + "-lod1.mesh");
                //for debug

                //GetComponent<MeshFilter>().sharedMesh = lod1Mesh;



                //create LOD0MEsh
                combi         = new CombineInstance[5];
                combi[0].mesh = voetpadmesh;
                combi[1].mesh = fietspadMesh;
                combi[2].mesh = parkeervlakMesh;
                combi[3].mesh = wegmesh;
                combi[4].mesh = spoorbaanMesh;


                Mesh Roads = new Mesh();
                Roads.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                Roads.CombineMeshes(combi, true, false);
                Roads = SimplifyMesh(Roads, 0.05f);

                combi         = new CombineInstance[3];
                combi[0].mesh = erfMesh;
                combi[1].mesh = LandUseMesh;
                combi[2].mesh = WoonerfMesh;

                Mesh landuse = new Mesh();
                landuse.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                landuse.CombineMeshes(combi, true, false);
                landuse = SimplifyMesh(landuse, 0.05f);

                combi = new CombineInstance[12];


                combi[0].mesh  = CreateEmptyMesh();              //
                combi[1].mesh  = CreateEmptyMesh();              //
                combi[2].mesh  = CreateEmptyMesh();              //
                combi[3].mesh  = Roads;                          //
                combi[4].mesh  = SimplifyMesh(groenMesh, 0.05f); //
                combi[5].mesh  = CreateEmptyMesh();              //
                combi[6].mesh  = landuse;                        //
                combi[7].mesh  = CreateEmptyMesh();              //
                combi[8].mesh  = CreateEmptyMesh();              //
                combi[9].mesh  = genericCityObjectMesh;
                combi[10].mesh = bridgeMesh;
                combi[11].mesh = waterBodyMesh;


                Mesh lod0Mesh = new Mesh();
                lod0Mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
                lod0Mesh.CombineMeshes(combi, false, false);
                lod0Mesh.uv2 = RDuv2(lod0Mesh.vertices, CoordConvert.RDtoUnity(new Vector3RD(originX, originY, 0)), tileSize);
                Physics.BakeMesh(lod0Mesh.GetInstanceID(), false);
                AssetDatabase.CreateAsset(lod0Mesh, "Assets/terrainMeshes/LOD0/terrain_" + originX + "-" + originY + "-lod0.mesh");
            }
        }