Пример #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);
        }
    }
Пример #2
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);

            for (int i = 0; i < iteration; i++)
            {
                MyMaterial.SetFloat("_BlurRadio", blurRadio);

                Graphics.Blit(rt1, rt2, MyMaterial);
                Graphics.Blit(rt2, rt1, MyMaterial);
            }

            //还原
            Graphics.Blit(rt1, dest);

            RenderTexture.ReleaseTemporary(rt1);
            RenderTexture.ReleaseTemporary(rt2);
        }
        else
        {
            Graphics.Blit(src, dest);
        }
    }
Пример #3
0
 IEnumerator <float> PlayAnimation()
 {
     for (int i = 0; i < totalFrames; i++)
     {
         MyMaterial.SetFloat("_fbcurrenttileindex6", i);
         yield return(Timing.WaitForSeconds(FrameLength));
     }
     opacityAnim.Animate(CoroutineName);
     clipAnim.Animate(CoroutineName);
 }
Пример #4
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);
     }
 }
Пример #5
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);
     }
 }
 //覆写OnRenderImage函数  
 void OnRenderImage(RenderTexture src, RenderTexture dest)
 {
     //仅仅当有材质的时候才进行后处理,如果material为空,不进行后处理  
     if (MyMaterial)
     {
         //通过Material.SetXXX("name",value)可以设置shader中的参数值  
         MyMaterial.SetFloat("_Brightness", brightness);
         MyMaterial.SetFloat("_Saturation", saturation);
         MyMaterial.SetFloat("_Contrast", contrast);
         //使用Material处理Texture,dest不一定是屏幕,后处理效果可以叠加的!  
         Graphics.Blit(src, dest, MyMaterial);
     }
     else
     {
         //直接绘制  
         Graphics.Blit(src, dest);
     }
 }
Пример #7
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);
        }
    }
Пример #8
0
    public void Play()
    {
        MyMaterial           = splatMaterials.GetRandom();
        opacityAnim.OnUpdate = FadeOpacity;
        clipAnim.OnUpdate    = FadeCutoff;

        if (loopAnimation)
        {
            opacityAnim.onComplete = Play;
        }
        else
        {
            opacityAnim.onComplete = DeActivate;
        }

        MyMaterial.SetFloat("_Cutoff", startMaskClipVal);
        MyMaterial.SetFloat("_Opacity", 1f);

        Timing.RunCoroutine(PlayAnimation(), CoroutineName);
    }
Пример #9
0
 private void OnRenderImage(RenderTexture source, RenderTexture destination)
 {
     if (MyMaterial)
     {
         MyMaterial.SetFloat("_BlurRadius", blurRadius);
         RenderTexture rt1 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0, source.format);
         RenderTexture rt2 = RenderTexture.GetTemporary(source.width >> downSample, source.height >> downSample, 0, source.format);
         Graphics.Blit(source, rt1);
         for (int i = 0; i < iteration; i++)
         {
             MyMaterial.SetFloat("_BulrRadius", blurRadius);
             Graphics.Blit(rt1, rt2, MyMaterial);
             Graphics.Blit(rt2, rt1, MyMaterial);
         }
         Graphics.Blit(rt1, destination);
         //Graphics.Blit(source, destination, MyMaterial);
         RenderTexture.ReleaseTemporary(rt1);
         RenderTexture.ReleaseTemporary(rt2);
     }
 }
Пример #10
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);
        }
    }
Пример #11
0
 void FadeCutoff(float val)
 {
     MyMaterial.SetFloat("_Cutoff", val);
 }
Пример #12
0
 void FadeOpacity(float val)
 {
     MyMaterial.SetFloat("_Opacity", val);
 }