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);

//                }
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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())
            {
            }
        }
Пример #5
0
        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;
        }
Пример #6
0
 public void SimplifyImmidiate(HLODBuildInfo buildInfo)
 {
 }
Пример #7
0
 public IEnumerator Simplify(HLODBuildInfo info)
 {
     yield break;
 }