示例#1
0
        /// <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;
        }
示例#2
0
        /// <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;
        }
示例#4
0
        /// <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;
        }
示例#5
0
        /// <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);
        }
示例#6
0
 public ObjectsCuller(Camera referenceCamera, FrustumSettings settings)
 {
     _registredObjectsList = new List <T>();
     _frustumCuller        = new FrustumCuller <T>();
 }