Exemplo n.º 1
0
        public Texture Apply(Texture2D fogtexture, Vector2i resolution, int amount, int iterations, FogOfWarBlurType type)
        {
            if (amount <= 0 || iterations <= 0)
            {
                return(fogtexture);
            }

            if (_blurMaterial == null)
            {
                _blurMaterial = new Material(Shader.Find("Hidden/FogOfWarBlurShader"));
            }

            _blurMaterial.SetFloat("_BlurAmount", amount);
            _blurMaterial.SetKeywordEnabled("GAUSSIAN3", type == FogOfWarBlurType.Gaussian3);
            _blurMaterial.SetKeywordEnabled("GAUSSIAN5", type == FogOfWarBlurType.Gaussian5);
            _blurMaterial.SetKeywordEnabled("ANTIALIAS", type == FogOfWarBlurType.Antialias);

            SetupRenderTarget(resolution, ref _target);
            if (iterations > 1)
            {
                SetupRenderTarget(resolution, ref _source);
            }

            RenderTexture lastrt = RenderTexture.active;

            RenderTexture.active = _target;
            Graphics.Blit(fogtexture, _blurMaterial);

            for (int i = 1; i < iterations; ++i)
            {
                FogOfWarUtils.Swap(ref _target, ref _source);
                RenderTexture.active = _target;
                Graphics.Blit(_source, _blurMaterial);
            }

            RenderTexture.active = lastrt;

            return(_target);
        }