private void VolumetricLightRenderer_PreRenderEvent(VolumetricLightRenderer renderer, Matrix4x4 viewProj) { // light was destroyed without deregistring, deregister now if (_light == null || _light.gameObject == null) { VolumetricLightRenderer.PreRenderEvent -= VolumetricLightRenderer_PreRenderEvent; } if (!_light.gameObject.activeInHierarchy || _light.enabled == false) { return; } _material.SetVector("_CameraForward", Camera.current.transform.forward); _material.SetInt("_SampleCount", 32); _material.SetVector("_MieG", new Vector4(1.0f, 1.0f, 0.0f, 1.0f / (4.0f * Mathf.PI))); _material.SetVector("_VolumetricLight", new Vector4(1.0f, 0.0f, _light.range, 1.0f)); _material.SetTexture("_CameraDepthTexture", renderer.GetVolumeLightDepthBuffer()); _material.SetFloat("_ZTest", (int)UnityEngine.Rendering.CompareFunction.Always); if (_light.type == LightType.Point) { SetupPointLight(renderer, viewProj); } else if (_light.type == LightType.Spot) { SetupSpotLight(renderer, viewProj); } }
/// <summary> /// /// </summary> /// <param name="renderer"></param> /// <param name="viewProj"></param> private void VolumetricLightRenderer_PreRenderEvent(VolumetricLightRenderer renderer, Matrix4x4 viewProj) { // light was destroyed without deregistring, deregister now if (_light == null || _light.gameObject == null) { VolumetricLightRenderer.PreRenderEvent -= VolumetricLightRenderer_PreRenderEvent; return; } if (!_light.gameObject.activeInHierarchy || _light.enabled == false) { return; } _material.SetVector("_CameraForward", Camera.current.transform.forward); _material.SetInt("_SampleCount", SampleCount); _material.SetVector("_NoiseVelocity", new Vector4(NoiseVelocity.x, NoiseVelocity.y) * NoiseScale); _material.SetVector("_NoiseData", new Vector4(NoiseScale, NoiseIntensity, NoiseIntensityOffset)); _material.SetVector("_MieG", new Vector4(1 - (MieG * MieG), 1 + (MieG * MieG), 2 * MieG, 1.0f / (4.0f * Mathf.PI))); _material.SetVector("_VolumetricLight", new Vector4(ScatteringCoef, ExtinctionCoef, _light.range, 1.0f - SkyboxExtinctionCoef)); _material.SetTexture("_CameraDepthTexture", renderer.GetVolumeLightDepthBuffer()); //if (renderer.Resolution == VolumetricLightRenderer.VolumtericResolution.Full) { //_material.SetFloat("_ZTest", (int)UnityEngine.Rendering.CompareFunction.LessEqual); //_material.DisableKeyword("MANUAL_ZTEST"); } //else { _material.SetFloat("_ZTest", (int)UnityEngine.Rendering.CompareFunction.Always); // downsampled light buffer can't use native zbuffer for ztest, try to perform ztest in pixel shader to avoid ray marching for occulded geometry //_material.EnableKeyword("MANUAL_ZTEST"); } if (HeightFog) { _material.EnableKeyword("HEIGHT_FOG"); _material.SetVector("_HeightFog", new Vector4(GroundLevel, HeightScale)); } else { _material.DisableKeyword("HEIGHT_FOG"); } if (_light.type == LightType.Point) { SetupPointLight(renderer, viewProj); } else if (_light.type == LightType.Spot) { SetupSpotLight(renderer, viewProj); } else if (_light.type == LightType.Directional) { SetupDirectionalLight(renderer, viewProj); } }
/// <summary> /// /// </summary> /// <param name="renderer"></param> /// <param name="viewProj"></param> private void VolumetricLightRenderer_PreRenderEvent(VolumetricLightRenderer renderer, Matrix4x4 viewProj) { // light was destroyed without deregistring, deregister now if (_light == null || _light.gameObject == null) { VolumetricLightRenderer.PreRenderEvent -= VolumetricLightRenderer_PreRenderEvent; } if (!_light.gameObject.activeInHierarchy || _light.enabled == false) { return; } _material.SetVector("_CameraForward", Camera.current.transform.forward); _material.SetInt("_SampleCount", SampleCount); _material.SetVector("_NoiseVelocity", new Vector4(NoiseVelocity.x, NoiseVelocity.y) * NoiseScale); _material.SetVector("_NoiseData", new Vector4(NoiseScale, NoiseIntensity, NoiseIntensityOffset)); _material.SetVector("_MieG", new Vector4(1 - (MieG * MieG), 1 + (MieG * MieG), 2 * MieG, 1.0f / (4.0f * Mathf.PI))); _material.SetVector("_VolumetricLight", new Vector4(ScatteringCoef, ExtinctionCoef, _light.range, 1.0f - SkyboxExtinctionCoef)); _material.SetTexture("_CameraDepthTexture", renderer.GetVolumeLightDepthBuffer()); if (HeightFog) { _material.EnableKeyword("HEIGHT_FOG"); _material.SetVector("_HeightFog", new Vector4(GroundLevel, HeightScale)); } else { _material.DisableKeyword("HEIGHT_FOG"); } if (_light.type == LightType.Point) { SetupPointLight(renderer, viewProj); } else if (_light.type == LightType.Spot) { SetupSpotLight(renderer, viewProj); } else if (_light.type == LightType.Directional) { SetupDirectionalLight(renderer, viewProj); } }
private void VolumetricLightRenderer_PreRenderEvent( VolumetricLightRenderer renderer, Matrix4x4 viewProj) { if (Object.op_Equality((Object)this._light, (Object)null) || Object.op_Equality((Object)((Component)this._light).get_gameObject(), (Object)null)) { VolumetricLightRenderer.PreRenderEvent -= new Action <VolumetricLightRenderer, Matrix4x4>(this.VolumetricLightRenderer_PreRenderEvent); } if (!((Component)this._light).get_gameObject().get_activeInHierarchy() || !((Behaviour)this._light).get_enabled()) { return; } this._material.SetVector("_CameraForward", Vector4.op_Implicit(((Component)Camera.get_current()).get_transform().get_forward())); this._material.SetInt("_SampleCount", this.SampleCount); this._material.SetVector("_NoiseVelocity", Vector4.op_Multiply(new Vector4((float)this.NoiseVelocity.x, (float)this.NoiseVelocity.y), this.NoiseScale)); this._material.SetVector("_NoiseData", new Vector4(this.NoiseScale, this.NoiseIntensity, this.NoiseIntensityOffset)); this._material.SetVector("_MieG", new Vector4((float)(1.0 - (double)this.MieG * (double)this.MieG), (float)(1.0 + (double)this.MieG * (double)this.MieG), 2f * this.MieG, 0.07957747f)); this._material.SetVector("_VolumetricLight", new Vector4(this.ScatteringCoef, this.ExtinctionCoef, this._light.get_range(), 1f - this.SkyboxExtinctionCoef)); this._material.SetTexture("_CameraDepthTexture", (Texture)renderer.GetVolumeLightDepthBuffer()); this._material.SetFloat("_ZTest", 8f); if (this.HeightFog) { this._material.EnableKeyword("HEIGHT_FOG"); this._material.SetVector("_HeightFog", new Vector4(this.GroundLevel, this.HeightScale)); } else { this._material.DisableKeyword("HEIGHT_FOG"); } if (this._light.get_type() == 2) { this.SetupPointLight(renderer, viewProj); } else if (this._light.get_type() == null) { this.SetupSpotLight(renderer, viewProj); } else { if (this._light.get_type() != 1) { return; } this.SetupDirectionalLight(renderer, viewProj); } }
private void VolumetricLightRenderer_PreRenderEvent(VolumetricLightRenderer renderer, Matrix4x4 viewProj) { if (!this._light.gameObject.activeInHierarchy || !this._light.enabled) { return; } this._material.SetVector("_CameraForward", Camera.current.transform.forward); this._material.SetInt("_SampleCount", this.SampleCount); this._material.SetVector("_NoiseVelocity", new Vector4(this.NoiseVelocity.x, this.NoiseVelocity.y) * this.NoiseScale); this._material.SetVector("_NoiseData", new Vector4(this.NoiseScale, this.NoiseIntensity, this.NoiseIntensityOffset)); this._material.SetVector("_MieG", new Vector4(1f - this.MieG * this.MieG, 1f + this.MieG * this.MieG, 2f * this.MieG, 0.07957747f)); this._material.SetVector("_VolumetricLight", new Vector4(this.ScatteringCoef, this.ExtinctionCoef, this._light.range, 1f - this.SkyboxExtinctionCoef)); this._material.SetTexture("_CameraDepthTexture", renderer.GetVolumeLightDepthBuffer()); this._material.SetFloat("_ZTest", 8f); if (this.HeightFog) { this._material.EnableKeyword("HEIGHT_FOG"); this._material.SetVector("_HeightFog", new Vector4(this.GroundLevel, this.HeightScale)); } else { this._material.DisableKeyword("HEIGHT_FOG"); } if (this._light.type == LightType.Point) { this.SetupPointLight(renderer, viewProj); } else if (this._light.type == LightType.Spot) { this.SetupSpotLight(renderer, viewProj); } else if (this._light.type == LightType.Directional) { this.SetupDirectionalLight(renderer, viewProj); } }
/// <summary> /// /// </summary> /// <param name="renderer"></param> /// <param name="viewProj"></param> private void VolumetricLightRenderer_PreRenderEvent(VolumetricLightRenderer renderer, Matrix4x4 viewProj) { if (!_light.gameObject.activeInHierarchy) return; _material.SetVector("_CameraForward", Camera.current.transform.forward); _material.SetInt("_SampleCount", SampleCount); _material.SetVector("_NoiseVelocity", new Vector4(NoiseVelocity.x, NoiseVelocity.y) * NoiseScale); _material.SetVector("_NoiseData", new Vector4(NoiseScale, NoiseIntensity, NoiseIntensityOffset)); _material.SetVector("_MieG", new Vector4(1 - (MieG * MieG), 1 + (MieG * MieG), 2 * MieG, 1.0f / (4.0f * Mathf.PI))); _material.SetVector("_VolumetricLight", new Vector4(ScatteringCoef, ExtinctionCoef, _light.range, 1.0f - SkyboxExtinctionCoef)); _material.SetTexture("_CameraDepthTexture", renderer.GetVolumeLightDepthBuffer()); //if (renderer.Resolution == VolumetricLightRenderer.VolumtericResolution.Full) { //_material.SetFloat("_ZTest", (int)UnityEngine.Rendering.CompareFunction.LessEqual); //_material.DisableKeyword("MANUAL_ZTEST"); } //else { _material.SetFloat("_ZTest", (int)UnityEngine.Rendering.CompareFunction.Always); // downsampled light buffer can't use native zbuffer for ztest, try to perform ztest in pixel shader to avoid ray marching for occulded geometry //_material.EnableKeyword("MANUAL_ZTEST"); } if (HeightFog) { _material.EnableKeyword("HEIGHT_FOG"); _material.SetVector("_HeightFog", new Vector4(GroundLevel, HeightScale)); } else { _material.DisableKeyword("HEIGHT_FOG"); } if(_light.type == LightType.Point) { SetupPointLight(renderer, viewProj); } else if(_light.type == LightType.Spot) { SetupSpotLight(renderer, viewProj); } else if (_light.type == LightType.Directional) { SetupDirectionalLight(renderer, viewProj); } }