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