/// <summary> /// Constructor /// </summary> /// <param name="camera">The reference camera, for culling purposes</param> /// <param name="frustumSettings">The frustum settings</param> public SpotLightsManager(Camera camera, FrustumSettings frustumSettings) { _referenceCamera = camera; _frustumSettings = frustumSettings; _culler = new ObjectsCuller <AuraLight>(_referenceCamera, this._frustumSettings); for (int i = 0; i < AuraCamera.CommonDataManager.LightsCommonDataManager.RegisteredSpotLightsList.Count; ++i) { _culler.Register(AuraCamera.CommonDataManager.LightsCommonDataManager.RegisteredSpotLightsList[i]); } Camera.onPreRender += Camera_onPreRender; AuraCamera.CommonDataManager.LightsCommonDataManager.OnRegisterSpotLight += LightsCommonDataManager_OnRegisterSpotLight; AuraCamera.CommonDataManager.LightsCommonDataManager.OnUnregisterSpotLight += LightsCommonDataManager_OnUnregisterSpotLight; }
/// <summary> /// Updates the culler. /// </summary> public void Update(Camera referenceCamera, FrustumSettings settings) { if (HasRegistredObjects) { for (int i = 0; i < _registredObjectsList.Count; ++i) { _boundingSpheres[i] = _registredObjectsList[i].BoundingSphere; } _visibleObjectsArray = _frustumCuller.GetVisibleObjects(referenceCamera, referenceCamera.nearClipPlane, settings.QualitySettings.farClipPlaneDistance, _registredObjectsList); } else { _visibleObjectsArray = null; } }
/// <summary> /// Constructor /// </summary> /// <param name="camera">The reference camera, for culling purposes</param> /// <param name="frustumSettings">The frustum settings</param> public VolumesManager(Camera camera, FrustumSettings frustumSettings) { _referenceCamera = camera; this._frustumSettings = frustumSettings; _culler = new ObjectsCuller <AuraVolume>(_referenceCamera, this._frustumSettings); for (int i = 0; i < AuraCamera.CommonDataManager.VolumesCommonDataManager.RegisteredVolumesList.Count; ++i) { _culler.Register(AuraCamera.CommonDataManager.VolumesCommonDataManager.RegisteredVolumesList[i]); } Camera.onPreRender += Camera_onPreRender; AuraCamera.CommonDataManager.VolumesCommonDataManager.OnRegisterVolume += VolumesCommonDataManager_OnRegisterVolume; AuraCamera.CommonDataManager.VolumesCommonDataManager.OnUnregisterVolume += VolumesCommonDataManager_OnUnregisterVolume; }
/// <summary> /// Initialize the Aura component and its variables /// </summary> private void Initialize() { InitializeResources(); CameraComponent.depthTextureMode |= DepthTextureMode.Depth; if (frustumSettings == null) { frustumSettings = new FrustumSettings(); } _frustum = new Frustum(frustumSettings, _cameraComponent, this); _postProcessMaterial = new Material(_postProcessShader); Shader.SetGlobalTexture("_blueNoiseTexturesArray", _blueNoiseTexturesArray); Shader.EnableKeyword("AURA"); IsInitialized = true; }
/// <summary> /// Constructor /// </summary> public Frustum(FrustumSettings frustumSettings, Camera camera, AuraCamera auraComponent) { _frustumSettings = frustumSettings; _frustumSettings.OnFrustumQualityChanged += _frustumSettings_OnFrustumQualityChanged; _cameraComponent = camera; _auraComponent = auraComponent; _volumesManager = new VolumesManager(_cameraComponent, _frustumSettings); _spotLightsManager = new SpotLightsManager(_cameraComponent, _frustumSettings); _pointLightsManager = new PointLightsManager(_cameraComponent, _frustumSettings); _frustumSettingsToId = new FrustumSettingsToId(_frustumSettings, _auraComponent, _volumesManager, _spotLightsManager, _pointLightsManager); InitializeResources(); _computeDataComputeShader.GetKernelThreadGroupSizes(0, out _threadSizeX, out _threadSizeY, out _threadSizeZ); SetFrustumGridResolution(_frustumSettings.QualitySettings.frustumGridResolution); _previousOcclusionCullingState = _frustumSettingsToId.HasFlags(FrustumParameters.EnableOcclusionCulling); _previousLightProbesState = _frustumSettingsToId.HasFlags(FrustumParameters.EnableLightProbes); }
public ObjectsCuller(Camera referenceCamera, FrustumSettings settings) { _registredObjectsList = new List <T>(); _frustumCuller = new FrustumCuller <T>(); }