Esempio n. 1
0
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (MyMaterial)
        {
            //申请两块降低了分辨率的RT
            RenderTexture rt1 = RenderTexture.GetTemporary(source.width >> downSampleFactor, source.height >> downSampleFactor, 0, source.format);
            RenderTexture rt2 = RenderTexture.GetTemporary(source.width >> downSampleFactor, source.height >> downSampleFactor, 0, source.format);
            Graphics.Blit(source, rt1);

            //使用降低分辨率的rt进行模糊:pass0
            MyMaterial.SetFloat("_BlurFactor", blurFactor);
            MyMaterial.SetVector("_BlurCenter", blurCenter);
            Graphics.Blit(rt1, rt2, MyMaterial, 0);

            //使用rt2和原始图像lerp:pass1
            MyMaterial.SetTexture("_BlurTex", rt2);
            MyMaterial.SetFloat("_LerpFactor", lerpFactor);
            Graphics.Blit(source, destination, MyMaterial, 1);

            //释放RTs
            RenderTexture.ReleaseTemporary(rt1);
            RenderTexture.ReleaseTemporary(rt2);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (MyMaterial)
        {
            if (vignetteTexture)
            {
                MyMaterial.SetTexture("_VignetteTex", vignetteTexture);
            }

            var rt1 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0, source.format);
            var rt2 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0, source.format);
            Graphics.Blit(source, rt1);
            for (int i = 0; i < iteration; i++)
            {
                MyMaterial.SetVector("_offsets", new Vector4(0, blurRadius));
                Graphics.Blit(rt1, rt2, MyMaterial);
                MyMaterial.SetVector("_offsets", new Vector4(blurRadius, 0));
                Graphics.Blit(rt2, rt1, MyMaterial);
            }
            Graphics.Blit(rt1, destination);
            RenderTexture.ReleaseTemporary(rt1);
            RenderTexture.ReleaseTemporary(rt2);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
Esempio n. 3
0
 private void OnRenderImage(RenderTexture source, RenderTexture destination)
 {
     if (MyMaterial)
     {
         MyMaterial.SetFloat("_BlurFactor", blurFactor);
         MyMaterial.SetVector("_BlurCenter", blurCenter);
         Graphics.Blit(source, destination, MyMaterial);
     }
     else
     {
         Graphics.Blit(source, destination);
     }
 }
Esempio n. 4
0
 private void OnRenderImage(RenderTexture source, RenderTexture destination)
 {
     if (MyMaterial)
     {
         MyMaterial.SetTexture("_NoiseTex", NoiseTexture);
         MyMaterial.SetFloat("_DistortFactor", distortFactor);
         MyMaterial.SetVector("_DistortCenter", distortCenter);
         MyMaterial.SetFloat("_DistortStrength", distortStrength);
         Graphics.Blit(source, destination, MyMaterial);
     }
     else
     {
         Graphics.Blit(source, destination);
     }
 }
Esempio n. 5
0
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (MyMaterial)
        {
            float curWaveDistance = (Time.time - waveStartTime) * waveSpeed;
            MyMaterial.SetFloat("_distanceFactor", distanceFactor);
            MyMaterial.SetFloat("_timeFactor", timeFactor);
            MyMaterial.SetFloat("_totalFactor", totalFactor);
            MyMaterial.SetFloat("_waveWidth", waveWidth);
            MyMaterial.SetFloat("_curWaveDis", curWaveDistance);
            MyMaterial.SetVector("_startPos", startPos);

            Graphics.Blit(source, destination, MyMaterial);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
Esempio n. 6
0
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (MyMaterial && renderTexture)
        {
            RenderTexture temp1 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0);
            RenderTexture temp2 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0);

            //高斯模糊,两次模糊,横向纵向,使用pass0进行高斯模糊
            MyMaterial.SetVector("_offsets", new Vector4(0, samplerScale, 0, 0));
            Graphics.Blit(renderTexture, temp1, MyMaterial, 0);
            MyMaterial.SetVector("_offsets", new Vector4(samplerScale, 0, 0, 0));
            Graphics.Blit(temp1, temp2, MyMaterial, 0);

            //如果有叠加再进行迭代模糊处理
            for (int i = 0; i < iteration; i++)
            {
                MyMaterial.SetVector("_offsets", new Vector4(0, samplerScale, 0, 0));
                Graphics.Blit(temp2, temp1, MyMaterial, 0);
                MyMaterial.SetVector("_offsets", new Vector4(samplerScale, 0, 0, 0));
                Graphics.Blit(temp1, temp2, MyMaterial, 0);
            }

            //用模糊图和原始图计算出轮廓图
            //MyMaterial.SetTexture("_BlurTex", temp2);
            //Graphics.Blit(renderTexture, temp1, MyMaterial, 1);

            //轮廓图和场景图叠加
            MyMaterial.SetTexture("_BlurTex", temp1);
            Graphics.Blit(source, destination, MyMaterial, 2);

            RenderTexture.ReleaseTemporary(temp1);
            RenderTexture.ReleaseTemporary(temp2);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
Esempio n. 7
0
    private void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        if (MyMaterial != null)
        {
            RenderTexture rt1 = RenderTexture.GetTemporary(src.width >> downSample, src.height >> downSample, 0, src.format);
            RenderTexture rt2 = RenderTexture.GetTemporary(src.width >> downSample, src.height >> downSample, 0, src.format);

            //缩小
            Graphics.Blit(src, rt1);

            //阈值分割处理
            //MyMaterial.SetVector("_ColorThreshold", colorThreshold);
            MyMaterial.SetFloat("_LuminanceThreshold", luminanceThreshold);
            Graphics.Blit(rt1, rt2, MyMaterial, 0);

            //高斯模糊处理
            MyMaterial.SetVector("_Offsets", new Vector4(1, 0, 0, 0));
            Graphics.Blit(rt2, rt1, MyMaterial, 1);

            MyMaterial.SetVector("_Offsets", new Vector4(0, 1, 0, 0));
            Graphics.Blit(rt1, rt2, MyMaterial, 1);

            //Bloom混合
            MyMaterial.SetTexture("_BlurTex", rt2);
            MyMaterial.SetVector("_BloomColor", bloomColor);
            MyMaterial.SetFloat("_BloomFactor", bloomFactor);
            Graphics.Blit(src, dest, MyMaterial, 2);

            RenderTexture.ReleaseTemporary(rt1);
            RenderTexture.ReleaseTemporary(rt2);
        }
        else
        {
            Graphics.Blit(src, dest);
        }
    }