Files
2026-03-04 10:03:45 +08:00

76 lines
2.3 KiB
C#

using MTAssets.UltimateLODSystem.MeshSimplifier;
using UnityEngine;
namespace MTAssets.UltimateLODSystem
{
[AddComponentMenu("")]
public class UltimateLevelOfDetailGlobal : MonoBehaviour
{
private static bool enableGlobalUlodSystem = true;
private static float lodDistanceMultiplier = 1f;
public static Camera currentCameraThatIsOnTopOfScreenInThisScene = null;
public static bool isGlobalULodSystemEnabled()
{
return enableGlobalUlodSystem;
}
public static void EnableGlobalULodSystem(bool enable)
{
enableGlobalUlodSystem = enable;
}
public static void SetGlobalLodDistanceMultiplier(float multiplier)
{
lodDistanceMultiplier = multiplier;
}
public static float GetGlobalLodDistanceMultiplier()
{
return lodDistanceMultiplier;
}
public static Mesh GetSimplifiedVersionOfThisMesh(Mesh meshToSimplify, bool isSkinnedMesh, bool skinnedAnimsCompatibilityMode, bool simplificationDestroyerMode, bool preventArtifacts, float percentOfVerticesOfSimplifyiedVersion)
{
float num = 1E-05f;
MTAssets.UltimateLODSystem.MeshSimplifier.MeshSimplifier meshSimplifier = new MTAssets.UltimateLODSystem.MeshSimplifier.MeshSimplifier();
SimplificationOptions simplificationOptions = default(SimplificationOptions);
if (!simplificationDestroyerMode)
{
simplificationOptions.Agressiveness = 7.0;
num = 1f;
}
if (simplificationDestroyerMode)
{
simplificationOptions.Agressiveness = 12.0;
num = 0.4f;
}
if (preventArtifacts)
{
simplificationOptions.EnableSmartLink = true;
}
if (!preventArtifacts)
{
simplificationOptions.EnableSmartLink = false;
}
simplificationOptions.MaxIterationCount = 100;
simplificationOptions.PreserveBorderEdges = false;
simplificationOptions.PreserveSurfaceCurvature = false;
simplificationOptions.PreserveUVFoldoverEdges = false;
simplificationOptions.PreserveUVSeamEdges = false;
simplificationOptions.VertexLinkDistance = double.Epsilon;
meshSimplifier.SimplificationOptions = simplificationOptions;
meshSimplifier.Initialize(meshToSimplify);
meshSimplifier.SimplifyMesh(percentOfVerticesOfSimplifyiedVersion / 100f * num);
Mesh mesh = meshSimplifier.ToMesh();
if (isSkinnedMesh && skinnedAnimsCompatibilityMode)
{
mesh.bindposes = meshToSimplify.bindposes;
}
return mesh;
}
}
}