public IEnumerator Simplify(HLODBuildInfo buildInfo) { for (int i = 0; i < buildInfo.WorkingObjects.Count; ++i) { Utils.WorkingMesh mesh = buildInfo.WorkingObjects[i].Mesh; int triangleCount = mesh.triangles.Length / 3; float maxQuality = Mathf.Min((float)m_options.SimplifyMaxPolygonCount / (float)triangleCount, (float)m_options.SimplifyPolygonRatio); float minQuality = Mathf.Max((float)m_options.SimplifyMinPolygonCount / (float)triangleCount, 0.0f); var ratio = maxQuality * Mathf.Pow((float)m_options.SimplifyPolygonRatio, buildInfo.Distances[i]); ratio = Mathf.Max(ratio, minQuality); // while (Cache.SimplifiedCache.IsGenerating(GetType(), mesh, ratio) == true) // { // yield return null; // } // Mesh simplifiedMesh = Cache.SimplifiedCache.Get(GetType(), mesh, ratio); // if (simplifiedMesh == null) // { // Cache.SimplifiedCache.MarkGenerating(GetType(), mesh, ratio); yield return(GetSimplifiedMesh(mesh, ratio, (m) => { buildInfo.WorkingObjects[i].SetMesh(m); })); // Cache.SimplifiedCache.Update(GetType(), mesh, simplifiedMesh, ratio); // } } }
public IEnumerator Simplify(HLODBuildInfo buildInfo) { buildInfo.simplifiedMeshes = new List <Mesh>(buildInfo.renderers.Count); for (int i = 0; i < buildInfo.renderers.Count; ++i) { var meshFilter = buildInfo.renderers[i].GetComponent <MeshFilter>(); var mesh = meshFilter.sharedMesh; int triangleCount = mesh.triangles.Length / 3; float maxQuality = Mathf.Min((float)m_hlod.SimplifyMaxPolygonCount / (float)triangleCount, m_hlod.SimplifyPolygonRatio); float minQuality = Mathf.Max((float)m_hlod.SimplifyMinPolygonCount / (float)triangleCount, 0.0f); var ratio = maxQuality * Mathf.Pow(m_hlod.SimplifyPolygonRatio, buildInfo.distances[i]); ratio = Mathf.Max(ratio, minQuality); while (Cache.SimplifiedCache.IsGenerating(GetType(), mesh, ratio) == true) { yield return(null); } Mesh simplifiedMesh = Cache.SimplifiedCache.Get(GetType(), mesh, ratio); if (simplifiedMesh == null) { Cache.SimplifiedCache.MarkGenerating(GetType(), mesh, ratio); yield return(GetSimplifiedMesh(mesh, ratio, (m) => { simplifiedMesh = m; })); Cache.SimplifiedCache.Update(GetType(), mesh, simplifiedMesh, ratio); } buildInfo.simplifiedMeshes.Add(simplifiedMesh); } }
private int TestImpl(float ratio, int min, int max, int level) { SerializableDynamicObject dynamicObject = new SerializableDynamicObject(); dynamic options = dynamicObject; options.SimplifyPolygonRatio = ratio; options.SimplifyMinPolygonCount = min; options.SimplifyMaxPolygonCount = max; //original tri count is 1200. //level 0 test using (HLODBuildInfo info = new HLODBuildInfo()) { info.WorkingObjects.Add(s_testMeshRenderer.ToWorkingObject(Collections.Allocator.Persistent)); info.Distances.Add(level); var simplifer = new Simplifier.UnityMeshSimplifier(options); simplifer.SimplifyImmidiate(info); int afterTriCount = info.WorkingObjects[0].Mesh.triangles.Length; return(afterTriCount / 3); } }
public void SimplifyImmidiate(HLODBuildInfo buildInfo) { IEnumerator routine = Simplify(buildInfo); CustomCoroutine coroutine = new CustomCoroutine(routine); while (coroutine.MoveNext()) { } }
public IEnumerator Simplify(HLODBuildInfo info) { info.simplifiedMeshes = new List <Mesh>(info.renderers.Count); for (int i = 0; i < info.renderers.Count; ++i) { var mf = info.renderers[i].GetComponent <MeshFilter>(); if (mf == null) { info.simplifiedMeshes.Add(null); } else { info.simplifiedMeshes.Add(Object.Instantiate(mf.sharedMesh)); } } yield break; }
public void SimplifyImmidiate(HLODBuildInfo buildInfo) { }
public IEnumerator Simplify(HLODBuildInfo info) { yield break; }