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 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); } }
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); }
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); } }
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); } }
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); } }
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); }
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); } }
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); } }
void FadeCutoff(float val) { MyMaterial.SetFloat("_Cutoff", val); }
void FadeOpacity(float val) { MyMaterial.SetFloat("_Opacity", val); }