untiy render texture扭曲技术

https://zhuanlan.zhihu.com/p/84662573
https://blog.csdn.net/puppet_master/article/details/70199330

要把相机渲染的当前画面当做贴图传递给shader,然后通过一张动态的noise贴图来采样这张纹理,最后输出到屏幕上。
每个相机都有一个render target,可以通过Camera.targetTexture来设置。如果这个目标为空那就是直接写入到Back-Buffer里面,也就是显示在了屏幕上。

GrabPass的实现就是在相机渲染完后,从Back-Buffer中把显示的内容拷贝到一张RenderTexture上面,再通过采样这张RT来扭曲画面。
经过测试发现把Back-Buffer中的内容拷贝到RT上,这个操作的开销不小,所以我们用CommandBuffer来实现。先将相机渲染的画面直接存到一张RT上面,再把RT传递给Shader做计算,然后把结果通过CommandBuffer绘制到屏幕上。

在这里插入图片描述
需要注意的几个地方:
1、当Camera设置了TargetTexture后,原本渲染到Back-Buffer就没有东西了,而是储存在了RT里面,所以屏幕上会显示黑色并提示没有相机在执行渲染。测试:

using UnityEngine;
public class TestRT : MonoBehaviour
{
    public Camera camera;
    void Start()
    {
        RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 0);
        camera.targetTexture = rt;
    }
}

在这里插入图片描述
那么如何将这个rt显示在屏幕上呢?我们可以手动的绘制一个四边形,然后贴上这个rt即可。方法如下:

发布了610 篇原创文章 · 获赞 96 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/104362418