学习Metal:后处理

本文介绍了Metal框架中的后处理技术,包括离屏渲染的概念和实现,以及一种简单的锐化处理方法。通过离屏渲染将图像内容存储到自定义纹理中,再对纹理进行处理,例如使用像素周围点的值进行锐化计算,增强图像边缘。文中还给出了具体的Metal后处理实例,包括初始化、渲染和Shader实现,并展示了处理前后的图像效果。
摘要由CSDN通过智能技术生成

学习Metal:后处理

离屏渲染

在之前的例子中,图像的内容是直接渲染到屏幕上,也就是我们画了什么内容,在屏幕上立即就显示出来了,这种模式称之为当前屏幕渲染(on-screen rendering)。但是有些情况下,我们希望对图像的内容做一些后处理,然后在显示出来,这就需要用到离屏渲染了(off-screen rendering)。
所以离屏渲染实际上就是把我们需要显示的内容渲染到另外的内存中,而不是直接上屏。在OpenGL中用到的是帧缓冲(FBO)的概念,而在metal中我们只需要把MTLRenderPassDescriptor中的texture设置成我们自己定义的texture即可。在设置好后,渲染的内容自动在我们定义的这个texture中,这样这个texture的内容就可以作为下一步渲染的输入。我们可以访问渲染后内容的每一个像素值,然后就可以对渲染后的场景进行我们自己的处理,所以我们称这种操作为后处理(Post-Processing)。

简单的锐化处理

我们可以对一副图像做一个简单的锐化处理,它的原理是取样一个像素点的值以及它周围上下左右四个点的值。例如分别取样的值为color, color_t, color_b, color_l, color_r,然后通过如下的处理作为返回值,实际上就完成了一个最简单的锐化的处理。

5*color - (color_t + color_b + color_l + color_r)

以上公式对于边缘的部分,也就是和周围像素相比,差值比较大的点,处理后的结果会使得差值更大。但是对于平坦的区域,也就是和周围像素的差值很小的点,处理后的结果会基本保持和原图一直。

Metal后处理实例

还是利用之前的例子,只不过我们这次是进行两边的处理,第一遍先把一副图像渲染到一个纹理中,然后在对这个纹理进行取样,做锐化处理。

初始化

由于这次我们是有两次渲染,所以我们需要有两个MTLRenderPipelineState对象,来分别表示两次渲染的过程。同时需要一个MTLTexture来存储第一次渲染的结果,也就是离屏渲染的目标纹理。同时为了确定锐化后处理中,采样周围元素所需要的步长

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值