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; } } } }