Files
beyond/Assets/ThirdParty/Lux URP Essentials/Scripts/LuxURP_LayerBasedCulling.cs
2024-11-20 15:21:28 +01:00

48 lines
1.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace LuxURPEssentials
{
public class LuxURP_LayerBasedCulling : MonoBehaviour
{
[LuxURP_HelpBtn("h.2uxuzzrgrwpo", order = 0)]
[Space(5, order = 1)]
public LayerMask SmallDetailsLayer;
public float SmallDetailsDistance = 30.0f;
public LayerMask MediumDetailsLayer;
public float MediumDetailsDistance = 50.0f;
int GetLayerNumber(int LayerValue) {
int layerNumber = 0;
int layer = LayerValue;
while(layer > 0)
{
layer = layer >> 1;
layerNumber++;
}
return (layerNumber - 1);
}
void OnEnable()
{
// Get layer numbers
int smallLayerNumber = GetLayerNumber(SmallDetailsLayer.value);
int mediumLayerNumber = GetLayerNumber(MediumDetailsLayer.value);
for (int i = 0; i < Camera.allCameras.Length; i++) {
float[] distances = new float[32];
distances = Camera.allCameras[i].layerCullDistances;
if (smallLayerNumber > 0)
distances[smallLayerNumber] = SmallDetailsDistance; // small things like DetailDistance of the terrain engine
if (mediumLayerNumber > 0)
distances[mediumLayerNumber] = MediumDetailsDistance;
Camera.allCameras[i].layerCullDistances = distances;
distances = null;
}
}
}
}