private void SetNoiseSource()
    {
        ToggleShaderKeyword(CalculateFogMaterial, "SNOISE", false);
        ToggleShaderKeyword(CalculateFogMaterial, "NOISE2D", false);
        ToggleShaderKeyword(CalculateFogMaterial, "NOISE3D", false);

        switch (_NoiseSource)
        {
        case NoiseSource.SimplexNoise:
            ToggleShaderKeyword(CalculateFogMaterial, "SNOISE", true);
            break;

        case NoiseSource.Texture2D:
            CalculateFogMaterial.SetTexture("_NoiseTexture", _FogTexture2D);
            ToggleShaderKeyword(CalculateFogMaterial, "NOISE2D", true);
            break;

        case NoiseSource.Texture3D:
            CalculateFogMaterial.SetTexture("_NoiseTex3D", _fogTexture3D);
            ToggleShaderKeyword(CalculateFogMaterial, "NOISE3D", true);
            break;

        case NoiseSource.SimplexNoiseCompute:
            CalculateFogMaterial.SetTexture("_NoiseTex3D", _fogTexture3DSimplex);
            ToggleShaderKeyword(CalculateFogMaterial, "NOISE3D", true);
            break;

        case NoiseSource.Texture3DCompute:
            CalculateFogMaterial.SetTexture("_NoiseTex3D", _fogTexture3DCompute);
            ToggleShaderKeyword(CalculateFogMaterial, "NOISE3D", true);
            break;
        }
    }
Esempio n. 2
0
    private void RenderFog(RenderTexture fogRenderTexture, RenderTexture source)
    {
        if (fogOptions.useRayleighScattering)
        {
            CalculateFogMaterial.EnableKeyword("RAYLEIGH_SCATTERING");
            CalculateFogMaterial.SetFloat(RayleighScatteringCoef, fogOptions.rayleighScatteringCoef);
        }
        else
        {
            CalculateFogMaterial.DisableKeyword("RAYLEIGH_SCATTERING");
        }

        ToggleShaderKeyword(CalculateFogMaterial, "LIMITFOGSIZE", fogOptions.limitFogInSize);
        ToggleShaderKeyword(CalculateFogMaterial, "HEIGHTFOG", fogOptions.heightFogEnabled);


        var performanceRatio = CalculateRaymarchStepRatio();

        CalculateFogMaterial.SetFloat(RaymarchSteps, fogOptions.rayMarchSteps * Mathf.Pow(performanceRatio, 2));

        CalculateFogMaterial.SetFloat(FogDensity, fogOptions.fogDensityCoef);
        CalculateFogMaterial.SetFloat(NoiseScale, fogOptions.noiseScale);


        CalculateFogMaterial.SetFloat(ExtinctionCoef, fogOptions.extinctionCoef);
        CalculateFogMaterial.SetFloat(Anisotropy, fogOptions.anisotropy);
        CalculateFogMaterial.SetFloat(BaseHeightDensity, fogOptions.baseHeightDensity);
        CalculateFogMaterial.SetFloat(HeightDensityCoef, fogOptions.heightDensityCoef);

        CalculateFogMaterial.SetVector(FogWorldPosition, fogOptions.fogWorldPosition);
        CalculateFogMaterial.SetFloat(FogSize, fogOptions.fogSize);
        CalculateFogMaterial.SetFloat(LightIntensity, fogOptions.lightIntensity);

        CalculateFogMaterial.SetColor(LightColor, sunLight.color);
        CalculateFogMaterial.SetColor(ShadowColor, fogOptions.fogInShadowColor);
        CalculateFogMaterial.SetColor(FogColor,
                                      fogOptions.useLightColorForFog ? sunLight.color : fogOptions.fogInLightColor);

        CalculateFogMaterial.SetVector(LightDir, sunLight.transform.forward);
        CalculateFogMaterial.SetFloat(AmbientFog, fogOptions.ambientFog);

        CalculateFogMaterial.SetVector(FogDirection, fogOptions.windDirection);
        CalculateFogMaterial.SetFloat(FogSpeed, fogOptions.speed);

        CalculateFogMaterial.SetTexture(BlueNoiseTexture, blueNoiseTexture2D);

        Graphics.Blit(source, fogRenderTexture, CalculateFogMaterial);
    }
Esempio n. 3
0
    private void RenderFog(RenderTexture fogRenderTexture, RenderTexture source)
    {
        if (_UseRayleighScattering)
        {
            CalculateFogMaterial.EnableKeyword("RAYLEIGH_SCATTERING");
            CalculateFogMaterial.SetFloat(RayleighScatteringCoef, _RayleighScatteringCoef);
        }
        else
        {
            CalculateFogMaterial.DisableKeyword("RAYLEIGH_SCATTERING");
        }

        ToggleShaderKeyword(CalculateFogMaterial, "LIMITFOGSIZE", _LimitFogInSize);
        ToggleShaderKeyword(CalculateFogMaterial, "HEIGHTFOG", _HeightFogEnabled);


        var performanceRatio = CalculateRaymarchStepRatio();

        CalculateFogMaterial.SetFloat(RaymarchSteps, _RayMarchSteps * Mathf.Pow(performanceRatio, 2));

        CalculateFogMaterial.SetFloat(FogDensity, _FogDensityCoef);
        CalculateFogMaterial.SetFloat(NoiseScale, _NoiseScale);


        CalculateFogMaterial.SetFloat(ExtinctionCoef, _ExtinctionCoef);
        CalculateFogMaterial.SetFloat(Anisotropy, _Anisotropy);
        CalculateFogMaterial.SetFloat(BaseHeightDensity, _BaseHeightDensity);
        CalculateFogMaterial.SetFloat(HeightDensityCoef, _HeightDensityCoef);

        CalculateFogMaterial.SetVector(FogWorldPosition, _FogWorldPosition);
        CalculateFogMaterial.SetFloat(FogSize, _FogSize);
        CalculateFogMaterial.SetFloat(LightIntensity, _LightIntensity);

        CalculateFogMaterial.SetColor(LightColor, SunLight.GetComponent <Light>().color);
        CalculateFogMaterial.SetColor(ShadowColor, _FogInShadowColor);
        CalculateFogMaterial.SetColor(FogColor, _UseLightColorForFog? SunLight.GetComponent <Light>().color : _FogInLightColor);

        CalculateFogMaterial.SetVector(LightDir, SunLight.GetComponent <Light>().transform.forward);
        CalculateFogMaterial.SetFloat(AmbientFog, _AmbientFog);

        CalculateFogMaterial.SetVector(FogDirection, _WindDirection);
        CalculateFogMaterial.SetFloat(FogSpeed, _Speed);

        CalculateFogMaterial.SetTexture(BlueNoiseTexture, _BlueNoiseTexture2D);

        Graphics.Blit(source, fogRenderTexture, CalculateFogMaterial);
    }
    private void RenderFog(RenderTexture fogTarget1, RenderTexture source)
    {
        if (_UseRayleighScattering)
        {
            CalculateFogMaterial.EnableKeyword("RAYLEIGH_SCATTERING");
            CalculateFogMaterial.SetFloat("_RayleighScatteringCoef", _RayleighScatteringCoef);
        }
        else
        {
            CalculateFogMaterial.DisableKeyword("RAYLEIGH_SCATTERING");
        }

        ToggleShaderKeyword(CalculateFogMaterial, "LIMITFOGSIZE", _LimitFogInSize);
        ToggleShaderKeyword(CalculateFogMaterial, "HEIGHTFOG", _HeightFogEnabled);


        var performanceRatio = CalculateRaymarchStepRatio();

        CalculateFogMaterial.SetFloat("_RaymarchSteps", _RayMarchSteps * Mathf.Pow(performanceRatio, 2));

        CalculateFogMaterial.SetFloat("_FogDensity", _FogDensityCoef);
        CalculateFogMaterial.SetFloat("_NoiseScale", _NoiseScale);


        CalculateFogMaterial.SetFloat("_ExtinctionCoef", _ExtinctionCoef);
        CalculateFogMaterial.SetFloat("_Anisotropy", _Anisotropy);
        CalculateFogMaterial.SetFloat("_BaseHeightDensity", _BaseHeightDensity);
        CalculateFogMaterial.SetFloat("_HeightDensityCoef", _HeightDensityCoef);

        CalculateFogMaterial.SetVector("_FogWorldPosition", _FogWorldPosition);
        CalculateFogMaterial.SetFloat("_FogSize", _FogSize);
        CalculateFogMaterial.SetFloat("_LightIntensity", _LightIntensity);

        CalculateFogMaterial.SetColor("LightColor", SunLight.GetComponent <Light>().color);
        CalculateFogMaterial.SetColor("_ShadowColor", _FogInShadowColor);
        CalculateFogMaterial.SetColor("_FogColor", _FogInLightColor);

        CalculateFogMaterial.SetVector("_LightDir", SunLight.GetComponent <Light>().transform.forward);
        CalculateFogMaterial.SetFloat("_AmbientFog", _AmbientFog);

        CalculateFogMaterial.SetVector("_FogDirection", _WindDirection);
        CalculateFogMaterial.SetFloat("_FogSpeed", _Speed);

        Graphics.Blit(source, fogTarget1, CalculateFogMaterial);
    }
    private void SetMieScattering()
    {
        ToggleShaderKeyword(CalculateFogMaterial, "HG_SCATTERING", false);
        ToggleShaderKeyword(CalculateFogMaterial, "CS_SCATTERING", false);
        ToggleShaderKeyword(CalculateFogMaterial, "SCHLICK_HG_SCATTERING", false);

        switch (_MieScatteringApproximation)
        {
        case MieScatteringApproximation.HenyeyGreenstein:
            ToggleShaderKeyword(CalculateFogMaterial, "HG_SCATTERING", true);
            CalculateFogMaterial.SetFloat("_MieScatteringCoef", _MieScatteringCoef);
            break;

        case MieScatteringApproximation.CornetteShanks:

            ToggleShaderKeyword(CalculateFogMaterial, "CS_SCATTERING", true);
            CalculateFogMaterial.SetFloat("_MieScatteringCoef", _MieScatteringCoef);
            break;

        case MieScatteringApproximation.Schlick:

            CalculateKFactor();

            ToggleShaderKeyword(CalculateFogMaterial, "SCHLICK_HG_SCATTERING", true);
            CalculateFogMaterial.SetFloat("_kFactor", _kFactor);
            CalculateFogMaterial.SetFloat("_MieScatteringCoef", _MieScatteringCoef);
            break;

        case MieScatteringApproximation.Off:
            break;

        default:
            Debug.LogWarning(
                $"Mie scattering approximation {_MieScatteringApproximation} is not handled by SetMieScattering()");
            break;
        }
    }