Esempio n. 1
0
 void DisableVolumetricLight()
 {
     shadowmapCache.OnDisable();
     world2ShadowCache.OnDisable();
     lightC.RemoveAllCommandBuffers();
     VolumetricLightsManager.RemoveLight(this);
 }
        public override void Render(PostProcessRenderContext context)
        {
            CommandBuffer cb  = context.command;
            Camera        cam = context.camera;

            cb.GetTemporaryRT(_RenderTarget, -1, -1, 0, FilterMode.Bilinear, RenderTextureFormat.ARGBHalf);
            cb.SetRenderTarget(_RenderTarget);
            cb.ClearRenderTarget(false, true, new Color(0, 0, 0, 1));

            cb.SetGlobalTexture(_DitherTexture, VolumetricLightUtils.ditherTexture);

            cb.SetGlobalTexture(_NoiseTexture, RenderUtils.noiseTexture3d);
            cb.SetGlobalVector(_NoiseData, new Vector4(settings.noiseScale, settings.dirNoiseScale, settings.noiseOffset, settings.noiseSteepness));
            cb.SetGlobalVector(_NoiseVelocity, settings.noiseVelocity.value * Time.realtimeSinceStartup);

            if (VolumetricLightsManager.IsDrawingDirectional())
            {
                CalcFrustumCorners(cb, cam);
            }

            cb.SetGlobalVector(_CameraForward, cam.transform.forward);

            for (int i = 0; i < VolumetricLightsManager.allLights.Count; i++)
            {
                if (VolumetricLightsManager.allLights[i].finalIntensity > 0)
                {
                    DrawLight(VolumetricLightsManager.allLights[i], cb);
                }
            }

            // BLUR
            var sheet = context.propertySheets.Get(blur);

            cb.GetTemporaryRT(_BlurTemp, -1, -1, 0, FilterMode.Bilinear, RenderTextureFormat.ARGBHalf);
            cb.BlitFullscreenTriangle(_RenderTarget, _BlurTemp, sheet, 0);
            cb.BlitFullscreenTriangle(_BlurTemp, _RenderTarget, sheet, 1);
            cb.ReleaseTemporaryRT(_BlurTemp);

            // COMPOSITE
            cb.SetGlobalTexture(_Source, _RenderTarget);
            sheet = context.propertySheets.Get(blitAdd);
            cb.BlitFullscreenTriangle(context.source, context.destination, sheet, 0);

            cb.ReleaseTemporaryRT(_RenderTarget);
        }
Esempio n. 3
0
 void OnEnable()
 {
     shadowmapCache.OnEnable(lightC);
     world2ShadowCache.OnEnable(lightC);
     VolumetricLightsManager.AddLight(this);
 }
 public override bool IsEnabledAndSupported(PostProcessRenderContext context)
 {
     return(enabled.value && VolumetricLightsManager.PrepareLightsForRender(context.camera, maxDistance, fadeRange));
 }