示例#1
0
    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);
        }
    }
示例#2
0
    /// <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);
        }
    }
示例#3
0
    /// <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);
        }
    }