public void BaseInit() { TestInitialized = true; _test = new object(); // Explode(); // ObjectTracker.Default.ResetCollection(); _testTime = Stopwatch.StartNew(); Profiling.Start(); if (ClassObjectTracker == null) { ClassObjectTracker = ObjectTracker.Default; } ObjectTracker.Default = (ObjectTracker)Activator.CreateInstance(typeof(ObjectTracker), true); ObjectTracker.Default.EnableCollection(); _trackers[TestContext.TestName] = ObjectTracker.Default; }
private void OnValueChanged(float value) { polycountLabel.text = $"{Math.Round(100 * value)}% ({Math.Round(value * _polycount)}/{_polycount} triangles)"; Profiling.Start("Convert"); var connectedMeshes = _originalMeshes.Select(x => UnityConverter.ToSharedMesh(x).ToConnectedMesh()).ToArray(); Debug.Log(Profiling.End("Convert")); Profiling.Start("Clean"); foreach (var connectedMesh in connectedMeshes) { // Important step : // We merge positions to increase chances of having correct topology information // We merge attributes in order to make interpolation properly operate on every face connectedMesh.MergePositions(0.0001f); connectedMesh.MergeAttributes(); connectedMesh.Compact(); } Debug.Log(Profiling.End("Clean")); Profiling.Start("Decimate"); SceneDecimator sceneDecimator = new SceneDecimator(); sceneDecimator.Initialize(connectedMeshes); sceneDecimator.DecimateToRatio(value); Debug.Log(Profiling.End("Decimate")); Profiling.Start("Convert back"); for (int i = 0; i < connectedMeshes.Length; i++) { _meshes[i].Clear(); connectedMeshes[i].ToSharedMesh().ToUnityMesh(_meshes[i]); _meshes[i].bindposes = _originalMeshes[i].bindposes; } Debug.Log(Profiling.End("Convert back")); }