TG9six 03a642d635 first push
first push
2025-09-06 17:17:39 +04:00

90 lines
3.2 KiB
C#

// Perfect Culling (C) 2021 Patrick König
//
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering;
namespace Koenigz.PerfectCulling
{
public static class PerfectCullingUtil
{
public static string FormatNumber(int number)
{
if (number >= 100000000) {
return (number / 1000000f).ToString("0.#M");
}
else if (number >= 1000000) {
return (number / 1000000f).ToString("0.##M");
}
else if (number >= 100000) {
return (number / 1000f).ToString("0.#k");
}
else if (number >= 10000) {
return (number / 1000f).ToString("0.##k");
}
return number.ToString("#,0");
}
// Allows to customize the behaviour easily. For instance could assign it to a different layer, etc. instead.
public static void ToggleRenderer(Renderer r, bool visible, bool forceNullCheck, ShadowCastingMode defaultShadowCastingMode)
{
if (forceNullCheck && r == null)
{
// We forced null checks for a reason and are aware. No need to output anything.
return;
}
#if UNITY_EDITOR
if (r == null)
{
// This is an unexpected null renderer. We want to log an error.
Debug.LogError("Encountered null renderer.");
return;
}
#endif
#pragma warning disable 162
switch (PerfectCullingConstants.ToggleRenderMode)
{
case PerfectCullingRenderToggleMode.ToggleRendererComponent:
r.enabled = visible;
break;
case PerfectCullingRenderToggleMode.ToggleShadowcastMode:
if (defaultShadowCastingMode == ShadowCastingMode.Off || defaultShadowCastingMode == ShadowCastingMode.TwoSided)
{
// We don't care about shadows so we might as well disable the entire Renderer.
#if UNITY_2019_3_OR_NEWER
goto case PerfectCullingRenderToggleMode.ToggleForceRenderingOff;
#else
goto case PerfectCullingRenderToggleMode.ToggleRendererComponent;
#endif
}
r.shadowCastingMode = visible ? defaultShadowCastingMode : ShadowCastingMode.ShadowsOnly;
break;
case PerfectCullingRenderToggleMode.ToggleForceRenderingOff:
#if !UNITY_2019_3_OR_NEWER
// Unsupported before Unity 2019. This is the next best thing we can do (performance wise).
// I don't like that this happens silently but printing a warning when it is unsupported doesn't help either.
goto case PerfectCullingRenderToggleMode.ToggleShadowcastMode;
#else
r.forceRenderingOff = !visible;
#endif
break;
default:
throw new System.InvalidOperationException();
break;
}
#pragma warning restore 162
}
}
}