帧缓存(FrameBuffer)与Kanzi Render Pass
来源: | 作者:pmo9ca4dc | 发布时间: 2019-04-12 | 392 次浏览 | 分享到:

今天要和大家分享的内容是在Kanzi中使用Render Pass的部分功能实现Render To Texture(贴图烘焙)的效果。在介绍此项技术之前,首先对其用到的几个概念做一个简单的描述。

1、什么是纹理(Texture)

凡是接触过HMI项目的人,无论是3D建模师还是动效设计师或者是具体编写代码的程序员,一定对Texture(纹理)这个概念不陌生。通常来讲,计算机图形学的目标之一就是计算出屏幕上所要显示的每一个像素点的颜色值。虽然我们可以通过着色器来计算这些像素点的颜色,但是很多情况下,仅使用着色器去计算这些像素点复杂性较高,且不易操作。(例如,我们如果想渲染一个森林的场景,仅仅通过数学计算来得出每一个像素点的颜色几乎是不可能完成的任务)。这时候,我们就可以求助于Texture。使用一张提前准备好的图像,提取其中像素点的颜色,用于实际渲染。所谓Texture,其实就是一块图像数据,从计算机的角度来讲,也可以说是一块存储了数据的内存区域。  

2、什么是帧缓存(FrameBuffer)

在了解了Texture的概念后,接下来介绍一下FrameBuffer(帧缓存对象)的概念。OpenGL中,如何在控制窗口显示各种颜色,主要是通过向缓存区(默认缓存区)写入数值来实现的。通常,在我们不做其他操作的情况下,渲染的效果都会被写入到默认缓存区之中,直接反映在窗口的显示之上。同时,OpenGL也允许我们自己开辟新的帧缓存空间。创建好自定义的帧缓存空间之后,我们就可以将部分渲染效果,绑定到自定义的空间中。

3、在Kanzi中使用Render To Texture

我们常说的Render To Texture,就是基于上述原理来实现的。例如,将一些场景Kanzi中的Scene节点呈现出的效果,渲染到帧缓存之中,之后将帧缓存作为Texture,贴到其他的物体之上;抑或是对帧缓存中的像素进行二次处理,如模糊、泛光等效果的显示。在Kanzi中,这部分的功能被集成在了Render Pass之中。

接下来,我们使用Kanzi的Render Pass,来实现一个简单的Render To Texture的操作。我们将会创建一个Scene场景,并将场景的效果,作为一张贴图,贴在另一个平面之上。


首先在Kanzi中创建两个Viewport2D的场景:



左边的平面用于接收右面场景渲染出来的贴图,右边的Viewport里是实际的场景(一个球和一个贴了森林图片的正方体)。

相关文章