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, 0); Graphics.Blit(rt2, rt1, MyMaterial, 0); } MyMaterial.SetTexture("_BlurTex", rt1); MyMaterial.SetFloat("_foucsVal", foucsVal); Graphics.Blit(src, dest, MyMaterial, 1); RenderTexture.ReleaseTemporary(rt1); RenderTexture.ReleaseTemporary(rt2); } else { Graphics.Blit(src, dest); } }
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); } }
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); } }
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); } }
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); } }