Пример #1
0
        private void BuildShaderVariant(ShaderVariant variant, WaterQualityLevel qualityLevel)
        {
            bool flag = this._TransparencyMode == WaterTransparencyMode.Refractive && qualityLevel.AllowAlphaBlending;

            variant.SetWaterKeyword("_WATER_REFRACTION", flag);
            variant.SetWaterKeyword("_CUBEMAP_REFLECTIONS", this._ReflectionProbeUsage != ReflectionProbeUsage.Off);
            variant.SetWaterKeyword("_WATER_RECEIVE_SHADOWS", this._ReceiveShadows);
            variant.SetWaterKeyword("_ALPHABLEND_ON", flag);
            variant.SetWaterKeyword("_ALPHAPREMULTIPLY_ON", !flag);
            variant.SetUnityKeyword("_TRIANGLES", this._CustomTriangularGeometry);
            if (this._ProjectionGrid)
            {
                variant.SetAdditionalSurfaceCode("_PROJECTION_GRID", "\t\t\t#pragma multi_compile _PROJECTION_GRID_OFF _PROJECTION_GRID");
            }
            variant.SetUnityKeyword("_WATER_OVERLAYS", this._LocalEffectsSupported);
            variant.SetUnityKeyword("_LOCAL_MAPS_DEBUG", this._LocalEffectsSupported && this._LocalEffectsDebug);
            WindWavesRenderMode windWavesRenderMode = this.BuildWindWavesVariant(variant, qualityLevel);

            variant.SetWaterKeyword("_WATER_FOAM_WS", this._Foam && !this._LocalEffectsSupported && windWavesRenderMode == WindWavesRenderMode.FullFFT);
            variant.SetUnityKeyword("_BOUNDED_WATER", this._DisplayOnlyInAdditiveVolumes);
            variant.SetUnityKeyword("_WAVES_ALIGN", this._WavesAlign);
            variant.SetWaterKeyword("_NORMALMAP", this._NormalMappingMode == NormalMappingMode.Always || (this._NormalMappingMode == NormalMappingMode.Auto && windWavesRenderMode > WindWavesRenderMode.GerstnerAndFFTNormals));
            variant.SetWaterKeyword("_EMISSION", this._SupportEmission);
            variant.SetWaterKeyword("_PLANAR_REFLECTIONS", this._PlanarReflections == PlanarReflectionsMode.Normal);
            variant.SetWaterKeyword("_PLANAR_REFLECTIONS_HQ", this._PlanarReflections == PlanarReflectionsMode.HighQuality);
        }
Пример #2
0
        public void FindBestShaders(out Shader surfaceShader, out Shader volumeShader)
        {
            ShaderVariant shaderVariant = new ShaderVariant();

            this.BuildShaderVariant(shaderVariant, WaterQualitySettings.Instance.CurrentQualityLevel);
            string[] array = shaderVariant.GetKeywordsString().Split(new char[]
            {
                ' '
            });
            surfaceShader = null;
            volumeShader  = null;
            if (this._SurfaceShaders != null)
            {
                for (int i = 0; i < this._SurfaceShaders.Length; i++)
                {
                    if (!(this._SurfaceShaders[i] == null))
                    {
                        string name = this._SurfaceShaders[i].name;
                        for (int j = 0; j < array.Length; j++)
                        {
                            if (name.Contains(array[j]))
                            {
                                surfaceShader = this._SurfaceShaders[i];
                                break;
                            }
                        }
                        if (surfaceShader != null)
                        {
                            break;
                        }
                    }
                }
            }
            if (this._VolumeShaders != null)
            {
                for (int k = 0; k < this._VolumeShaders.Length; k++)
                {
                    if (!(this._VolumeShaders[k] == null))
                    {
                        string name2 = this._VolumeShaders[k].name;
                        for (int l = 0; l < array.Length; l++)
                        {
                            if (name2.Contains(array[l]))
                            {
                                volumeShader = this._VolumeShaders[k];
                                break;
                            }
                        }
                        if (volumeShader != null)
                        {
                            break;
                        }
                    }
                }
            }
        }
Пример #3
0
        private WindWavesRenderMode BuildWindWavesVariant(ShaderVariant variant, WaterQualityLevel qualityLevel)
        {
            WaterWavesMode      wavesMode = qualityLevel.WavesMode;
            WindWavesRenderMode windWavesRenderMode;

            if (this._WindWavesMode == WindWavesRenderMode.Disabled || wavesMode == WaterWavesMode.DisallowAll)
            {
                windWavesRenderMode = WindWavesRenderMode.Disabled;
            }
            else if (this._WindWavesMode == WindWavesRenderMode.FullFFT && wavesMode == WaterWavesMode.AllowAll)
            {
                windWavesRenderMode = WindWavesRenderMode.FullFFT;
            }
            else if (this._WindWavesMode <= WindWavesRenderMode.GerstnerAndFFTNormals && wavesMode <= WaterWavesMode.AllowNormalFFT)
            {
                windWavesRenderMode = WindWavesRenderMode.GerstnerAndFFTNormals;
            }
            else
            {
                windWavesRenderMode = WindWavesRenderMode.Gerstner;
            }
            if (windWavesRenderMode != WindWavesRenderMode.FullFFT)
            {
                if (windWavesRenderMode != WindWavesRenderMode.GerstnerAndFFTNormals)
                {
                    if (windWavesRenderMode == WindWavesRenderMode.Gerstner)
                    {
                        variant.SetUnityKeyword("_WAVES_GERSTNER", true);
                    }
                }
                else
                {
                    variant.SetWaterKeyword("_WAVES_FFT_NORMAL", true);
                    variant.SetUnityKeyword("_WAVES_GERSTNER", true);
                }
            }
            else
            {
                variant.SetUnityKeyword("_WAVES_FFT", true);
            }
            if (this._DynamicSmoothnessMode == DynamicSmoothnessMode.Physical)
            {
                variant.SetWaterKeyword("_INCLUDE_SLOPE_VARIANCE", true);
            }
            return(windWavesRenderMode);
        }
Пример #4
0
 public void BuildShaderVariant(ShaderVariant variant, Water water, WindWaves windWaves, WaterQualityLevel qualityLevel)
 {
     variant.SetUnityKeyword("_WAVES_GERSTNER", this._Enabled);
 }