gb的渲染中的几个类

文章学自于:http://www.cppblog.com/rise-worlds/archive/2009/04/22/80688.html


gb的渲染中的几个类:

RenderFrame

RenderStep

RenderClick

RenderView

******************************************************************************************************************************

RenderFrame 一个完整的渲染帧,它封装了上层对渲染系统调用的接口,每一个RenderFrame中又包括多个NiRenderStep;

RenderStep 一帧中一个渲染步骤,每一个步骤又包含着n个渲染批 NiRenderClick;

NiRenderClick 一个渲染批,代表了图形硬件的一次绘制操作,对渲染队列中所有的对象的顶点缓存调用DrawPrimitive,每个RenderClick对应了一个RenderTarget(相当于一组顶点流),RenderClick精确的字面意思就是一次描画,这个类的功能也基本是这样,知道了要画的东西,但是要画到什么上去就需要RenderClick了,每个RenderClick对应了一个RenderTarget。就是要描画的地方。一个描画的过程是这样的,首先找到RenderTarget就是要描画的地方,因为如果是后期特效,有时候会有多个RenderTarget。

RenderView 相当于是我们要渲染的一个物件,通过AppendScene这个接口挂接到我们当前的场景节点上;RenderView里还有个重要的工具叫做Culler,Culler是做什么用的呢?是负责裁剪的,这里的裁剪是逻辑上的裁剪,就是精确到几何体级别的裁剪。(注意不是三角面级别的)。Culler是作为Processor被加进去的,就是一个裁剪的过程。Culler提供了一些抽象接口,来满足用户的自定义裁剪。就是说你可以根据你的需要来在渲染前进行裁剪。

 

调用方式:

        当应用程序调用NiRenderFrame的Display接口时, NiRenderFrame会依次调用每一个NiRenderStep的Render()接口,NiRenderStep就会执行所有的NiRenderClick操作。

 

对于每个NiRenderClick来说,首先要设置视口和渲染目标,也就是渲染数据流的入口和出口。视口建立以后就可以通过关联的摄影机对场景图中的对象进行裁剪(默认的有视口裁剪和遮挡裁剪,此外还可以通过回调函数加入自己的裁剪方式),将未被裁剪的对象放入渲染队列。然后Gambyro会根据材质来对渲染队列中的对象进行排序,让材质相同的对象处于相邻位置,这样可以减少切换shader的开销。

01.<pre class="cpp" name="code"> // 创建渲染纹理视口.通过关联的摄影机对场景图中的对象进行裁剪   
02.  Ni3DRenderView* pkRenderedTextureRenderView = NiNew Ni3DRenderView(  
03.      m_spExtraCamera, m_spCuller);  
04.  pkRenderedTextureRenderView->SetName(m_kRenderedTextureRenderViewName);  
05. //挂接到场景中   
06.  pkRenderedTextureRenderView->AppendScene(m_spScene);  
07.  
08.  // 创建渲染纹理的NiRenderClick.   
09.  NiViewRenderClick* pkRenderedTextureRenderClick = NiNew NiViewRenderClick;  
10.  pkRenderedTextureRenderClick->SetName(m_kRenderedTextureRenderClickName);  
11.  pkRenderedTextureRenderClick->AppendRenderView(  
12.      pkRenderedTextureRenderView);  
13.  //设置渲染目标   
14.pkRenderedTextureRenderClick->SetRenderTargetGroup(m_spRenderTargetGroup);  
15.  pkRenderedTextureRenderClick->SetClearAllBuffers(true);  
16.  pkRenderedTextureRenderClick->SetPreProcessingCallbackFunc(  
17.      RenderedTextureRenderClickPre, this);  
18.  pkRenderedTextureRenderClick->SetPostProcessingCallbackFunc(  
19.      RenderedTextureRenderClickPost, this);  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用AE渲染视频时,由于AE会使用大量的内存来处理和缓存图像、效果和动画,因此会导致视频内存需求较高。 为了解决这个问题,我们可以采取以下几个措施: 1. 增加计算机的内存:将计算机的内存升级到更高的容量,如16GB或32GB,可以有效提升AE渲染视频时的性能和速度,减少内存压力。 2. 增加磁盘缓存设置:在AE,可以通过调整磁盘缓存设置来减少对内存的需求。将磁盘缓存设置为较大的值,可以将渲染所需的数据暂存到磁盘,从而减轻内存的负担。 3. 降低渲染设置:在渲染视频时,可以尝试降低渲染设置,如降低分辨率、减少层的数量或关闭某些效果。这些操作可以减少AE所需的内存,从而降低视频内存的占用。 4. 合理使用预合成和缓存:在AE,预合成是将多个层合并为一个层的技术,可以减少层的数量,从而减少内存的需求。此外,对频繁使用的图层或效果进行缓存,可以减轻内存的压力。 5. 定期清理内存和关闭无用程序:在渲染视频之前,及时关闭其他无用的程序或进程,并使用系统的内存清理工具,释放未使用的内存,以便为AE提供更多的可用内存。 总之,在处理AE渲染视频时,我们可以通过增加计算机内存、调整磁盘缓存设置、降低渲染设置、合理使用预合成和缓存,以及定期清理内存等方法,来有效减少视频内存的需求,提升渲染效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值