帧渲染系统
一、简介
帧渲染系统提供了负责的特效提供了一个简单的方法。它提供了一些手动的方法。
在应用程序中,通过帧渲染系统可以在初始化时做好所有的配置工作。当渲染时,可以
自动执行这些被封装好的特效绘制操作。
二、剖析一帧
该系统允许事先建立复杂的渲染特效,从而在每一帧会自动执行。系统中提供了一些列可激活、禁止、重置的对象来做这些工作。特定帧中的对象可以被另一个使用了帧系统的应用程序调用。
Render Frame
Render Frame是系统中最上层的对象。一个Render Frame代表一个完整的渲染过程,一个应用程序可以拥有多个Render Frame,但只有一个是必须的。在初始化时创建一个Render Frame,在运行idle中使用Render Frame去执行绘制工作。
Render Frame不执行具体的渲染工作,它包含一些列Render Step,每一帧中它会循环访问每一个step,由一个个step去完成相关渲染工作。Render Frame可以定制pre-和post-回调函数来执行一些绘制前和绘制后的工作。
Render Step
一个Render Step代表了一个渲染特效(rendering effect)。每一个完整的frame捆绑了一系列step,这些step完成了真正的渲染工作。它们可以通过单pass或多pass来完成绘制工作。
Render Frame可以通过控制激活step来告诉它去完成渲染工作,所以一个step可以很容易被应用程序关闭。同样,它们也可以通过定制pre-和post-回调函数来完成一些前期和收尾工作。
Render Step可以随意访问render target group,从而可以完成许多特效。
Render Click
一个render click即使一个渲染通道(rendering pass)。它封装了任何数量的渲染操作,但这些操作必须基于同一个render target group的。在一个step中许多cliks共同完成一个完整的渲染特效。每一个render click对一个render target group。
Render click能很容易被开启或关闭。首先,每个click包含了active state,这些状态是可以被应用程序修改的。作为可选,render click validator可以通过相关条件来激活或关闭click。同样click可以使用pre-和post-回调函数。
对于基于NiMesh的对象,特定的click绘制一些列NiMesh,这些NiMesh是通过一个或更多render view对象来供click使用的。一个render list processor可以被绑定到一个click上,这样在绘制前可以存储这些几何物体,甚至可以实时地改变这些几何体的materials。
Render View
Render view向render click提供一个系列可被绘制的几何体。它通过各种裁剪算法(相机裁剪或其它)来决定哪个几何体需要被渲染。由于每个render view包含了一些列几何体,随意它可以被多个click共享,但这种裁剪操作只需要被计算一次。
通常是采用相机裁剪来获取渲染的物体,但是一些render views可以产生一些屏幕元素或screen-filling quad从而实现全屏和post-processing 特效。
三、组成
Gamebryo中的帧渲染系统把一些复杂的特效创建工作移到应用程序初始化中而不是在
渲染循环中。
Render Frame
当使用多render frame时,应用程序可以选择使用那个render frame。例如应用程序可以创建多个render frame:一个用来绘制欢迎界面(splash screen),一个用来绘制全屏游戏菜单,一个用来绘制游戏内容。
Render Step(NiRenderStep)
通常应用程序在初始化时为每一个特效创建一个step,随后把这些特效按顺序添加到render frame中。
NiClickRenderStep继承NiRenderStep,它包含了一个render clicks列表。
四、用户定制
五、使用