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