Torque学习笔记之二粒子系统

        Torque粒子系统一直是一个头疼的问题,被外界认为非常烂,粒子系统编辑器也是非常之烂,跟unreal编辑器比起来相去甚远,不过TGEA在商业引擎中的性价比绝对是数一数二的了。原先只是看了下粒子系统的参数,试着调过一些粒子效果,不过都不合口味。这必须得深入研究下Torque粒子系统的实现了。

  Torque粒子系统主要有两个类和Particle结构体组成,ParticleEmitterNode,ParticleEmitter,说到这里不得不提下Torque的数据块(datablock)这个概念了,数据块可以理解为一个类,但是设计上负责存放数据,而且数据能够用于网络传输,这个类似于Serialize功能,其中packData和unpackData负责将数据打包和解包,设计上和MFC的Serialize如出一辙。Torque引用数据块还有一个非常重要的作用就是为了数据共享,顺便也节省资源了。

  说得有些远了,话回主题ParticleEmitterNode和ParticleEmitter都是集成之GameBase类,于ShapeBase同级。前者的是用于表示放在场景内的粒子系统,也是用于对后者的一种管理,在torque里一个ParticleEmitterNode只能绑定一个粒子系统,一个粒子发射器最多只能绑定4个粒子,绑定四个粒子的意思就是产生粒子的时候从这四个里面随机的抽一个作为粒子的属性,这点有些限制,不过看懂了也是可以改的。ParticleEmitter负责粒子发射的责任,包含以下这三个最主要的函数emitParitcles,advaceTime,prepBatchRender。基本上看懂这三个函数,Torque的粒子系统原理就弄明白了。

         emitParticles这个函数主要用于产生粒子,这里面大有文章,也有些内存分配的小技巧,首先,粒子发射器不一开始就开辟一块大的空间用于存放粒子的信息,而是后面产生的,它是以16个位单位产生粒子块,用完了在生产16个,这样当然是提高效率的做法了。产生的粒子加入待渲染的列表内。这里面再细说一下,其中这几个对象比较重要, part_freelist, part_list_head,其中part_freelist用于保存未使用的粒子列表,采用在头部插入的链表管理,每次开辟16个粒子空间就将其加入到这个链表内,part_list_head跟part_freelist类似,用于存放待渲染的粒子。

         advaceTime这个函数是processList管理器执行调用的,是Torque中十分重要的函数,顾名思义,就是每帧渲染前调用的函数,在这里用于执行更新粒子信息的工作,首先更新粒子的age,如果年龄太大,就让他去死,话是这么说,不过死就是让它重新回到空闲的列表里,内存是不释放的,待产生新的粒子利用它的内存。然后更新完age后就是更新一些关键帧的信息,我们可以做在关键帧内设定粒子的大小、颜色信息。其中间过程采用线性插值。

         prepBatchRender这个函数就是渲染函数,实际上也就是将ParticleEmitter的VertexBuffer信息加入到渲染管道渲染,这个不展开说了,在加入管道前要做很多工作,就是copeVB这个函数要做的事情,首先检查下是否要扩充VertexBuffer,因为可能原来申请的空间不够用,达到可用空间后,就是将每个粒子的信息做渲染前的一次调整,包括Billboard和UV变化,在这里可以看到torque其实是有粒子序列帧的接口的,只是它并没有用到。这个以后在把我修改后的代码附上,可以在torque中播放序列帧的粒子了。

           总结,Torque粒子系统并不是想外界所认为的那样非常烂,其实它五脏俱全,除了软粒子,曲线插值哪些比较高级的特性没有外,基本算是一个完整的粒子系统。不过不得不说它的粒子编辑器实在太差,让人无法接受,可能是为了留个机会给别人做粒子编辑器的生存,或者是它们那帮了为了偷懒,我也不得而知了。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值