76 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|