public void Execute(int index) { if (bakingSettings[index].instanceID != 0) { Physics.BakeMesh(bakingSettings[index].instanceID, bakingSettings[index].convex); } }
/// <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 }
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); } } }
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); }
/// <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); }
/// <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; } }
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"); } }