粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。
粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSingleton().parseAllSources方法,或者是想分析单个文件,使用ParticleSystemManager::getSingletion().parseScripe. 一旦脚本被分析完,就可以基于这些代码使用SceneManager::createParticleSystem()方法实例化系统。
粒子脚本格式解析
particle_system Examples/GreenyNimbus
{
//设置这个系统中的全体粒子将要使用的材质名称。此系统中的全部粒子使用相同的材质,尽管每一个粒子可以通过使用它自己的颜色属性为材质附加颜色。
//格式:material<material_name> 示例:material Example/Flare 默认:none(空材质)
material Examples/FlarePointSprite
//在世界坐标中,设置粒子的宽度,当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_width 35
//在世界坐标中,设置粒子的高度。当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_height 35
//所有的粒子系统都被包括在一个包含这个系统所有粒子的边界盒内,这对一般的局部的有限的粒子系统,如大部分粒子是同时可见的或者是同时不可见的,是足够的,但是,
//对于那些在更大面积上扩散的粒子(例如,一个雨水系统),实际上也许想要单独的处理每一个粒子以便节约时间,因为很可能只有一小部分的粒子是可见的,可以通过设置 //cull__each的参数为真。默认的是false
cull_each false
//设置这个系统在某一时刻所允许包含的最多粒子数。当达到这个限制时,粒子发射器将不允许再发射粒子,直到某些粒子被消灭(例如,它们的time_to_live存续时间用尽)。值得注意的是,你几乎是肯定要改变这个设置的,因为默认值太短了(粒子池只能增加,而不能减少)。
格式: quota <max_particles>
示例: quota 10000
默认: 10
quota 5000
//
这实际上是'公告板'粒子渲染器(默认)的一个属性,同时也是通过在系统声明中直接声明的方法给粒子渲染器传递属性的一个示例。使用默认渲染器的粒子被用公告板进行渲染,即由2个旋转到面向指定方向的三角形组成的矩形构成的平面。但是,定向一个公告板有不止一种方法。传统方法是公告板直接面对摄像机:这也是默认的方法。但是,这种安排只是对于表现像光晕一样的模糊的球状物看上去还算可以。对于更多的诸如激光射线这样的线性效果,事实上你想要粒子有其自己的方向。
格式: billboard_type <point|oriented_common|oriented_self|perpendicular_common|perpendicular_self>
示例: billboard_type oriented_self
默认: point
此参数有如下选项:
- point
- 默认排列,它估计球状粒子和公告板总是完全面对摄像机。
- oriented_common
- 粒子面向一个共同的固定的方向向量,即它们的局部Y轴。公告板只围绕这个轴旋转,给粒子一些方向感。利于暴风雨,流星等粒子按一个方向移动的效果——较oriented_self(见下面)略快。
- oriented_self
- 粒子面向它们自己的方向向量,即它们的局部Y轴。隨着粒子改变方向,公告板也重定向它自己面向这个方向。利于激光射线,焰火,以及其它的按其自己的方向行进的粒子。
- perpendicular_common
- 粒子垂直于一个共同的固定的方向向量 (参考common_direction),即它们的局部Z轴和它们的局部Y轴共同确定的平面,有共同的方向和向上的向量(参考common_up_vector)。公告板从未旋转至面向摄像机,你可能使用双面材质以便确保粒子不会被背面包含。利于光环,圆环等粒子将垂直于地面的效果
- perpendicular_self
- 粒子垂直于它们自己的方向向量,即它们的Z轴和Y轴共同确定的平面,有它们自己的方向向量和共同的向上向量(参考common_up_vector)。公告板从未旋转至面向摄像机,你可能使用双面材质以便确保粒子不会被背面包含。利于圆环堆等粒子将垂直于它们的行进方向的效果。
billboard_type point
renderer
粒子系统并不渲染它本身,它们通过ParticleRenderer类完成这一点。那些类被带着一个管理器注册,为的是给粒子系统提供一个特殊的外观。OGRE默认配置了一个基于公告板的渲染器(billboard-based renderer),但是更多的可以通过插件增加。粒子渲染器要用一个唯一的名字注册,你可以利用这个名字决定使用哪个渲染器。默认的是'billboard'。
粒子渲染器可以有属性,并且可以通过在根粒子系统中设定属性进行传递。
格式: renderer <renderer_name>
默认: billboard
sorted
默认情况下,粒子是不排序的。若设定这个属性为'真',粒子将会根据摄影机的位置关系被排序,最远的优先。通过花费一小点儿排序的代价,就可以制作出特定的渲染效果。
格式: sorted <true|false>
默认: false
local_space
默认情况下,粒子是被发射到世界空间的,例如,如果你改变了粒子系统所在的节点,它不会影响到粒子本身(只是粒子发射器)。这就意味着给出了一般期望的行为,即建立了真实世界的粒子离开发射它们的物体后独立运动的模型。但是,要建立一些效果,你可能想让粒子保持附加在粒子发射器所在的局部空间内并直接跟随它们。这个选项就可以让你实现这一点。
格式: local_space <true|false>
默认: false
billboard_origin
指定所有公告板粒子的起始点,控制公告板粒子的出现位置。
格式: billboard_origin <top_left|top_center|top_right|center_left|center|center_right|bottom_left|bottom_center|bottom_right>
示例: billboard_origin top_right
默认: center
此参数有如下选项:
- top_left
- 公告板起始点在左上角。
- top_center
- 公告板起始点在顶边中央。
- top_right
- 公告板起始点在右上角。
- center_left
- 公告板起始点在左边中央。
- center
- 公告板起始点在中央。
- center_right
- 公告板起始点在右边中央。
- bottom_left
- 公告板起始点在左下角。
- bottom_center
- 公告板起始点在底边中央。
- bottom_right
- 公告板起始点在右下角。
billboard_rotation_type
默认情况下,公告板粒子会根据粒子旋转去旋转纹理坐标。但是旋转纹理坐标有一些缺点,例如,纹理的四角会在旋转后丢失,而当使用折叠地址模式或者子纹理采样时,公告板的四角会被不想要的纹理区域填充。这个设置允许你指定其它的旋转类型。
格式: billboard_rotation_type <vertex|texcoord>
示例: billboard_rotation_type vertex
默认: texcoord
此参数有如下选项:
- vertex
- 公告板粒子将依据粒子旋转规则绕它们面向的方向旋转它们的顶点。旋转顶点满足纹理角完全匹配公告板角,因此有上面提及的优点,但是需要花费较多的时间以生成顶点。
- texcoord
- 公告板粒子将依据粒子旋转规则旋转纹理坐标。旋转纹理坐标比旋转顶点更快,但是有上面提及的一些缺点。
common_direction
如果billboard_type被设置为oriented_common或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向量。
格式: common_direction <x> <y> <z>
示例: common_direction 0 -1 0
默认: 0 0 1
common_up_vector
如果billboard_type被设置为perpendicular_self或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向上向量。
格式: common_up_vector <x> <y> <z>
示例: common_up_vector 0 1 0
默认: 0 1 0
point_rendering
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,设置与否关系到公告板将使用点渲染而不是手动生成渲染画面。
默认情况下,公告板区域依靠内存中的一块纹理矩形生成的几何体渲染的,要考虑到大小和方向设置,以及将它装载入显卡的问题。可选择的方式是使用硬件指针渲染,即意味着每个公告板只有一个位置需要被传送而不是4个,并且硬件依据渲染状态排序如何渲染。
虽然使用点渲染较手动生成渲染区域更快,但是多了许多限制。限制如下:
- 仅支持'point'定向类型
- 每个粒子的大小和外观由材质通路控制(point_size, point_size_attenuation,point_sprites)
- 不支持每个粒子大小(源自上文)
- 不支持每个粒子旋转,且这只能通过材质定义中的纹理单元旋转控制
- 仅支持'center'起始点
- 一些驱动程序对于支持的点的大小有上限限制——甚至相同卡的不同API之间也可能区别!不要依靠点的大小让屏幕上的东西变得很大,因为它们可能会受限于某些卡。大小的上限可能在64到256像素之间。
如果你使用这个选项,你将几乎是肯定要打开材质通路中的point attenuation和point sprites。
accurate_facing
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,且设置与否关系到公告板区域将使用一个有些慢但更精确的计算使公告板面向摄像机。默认使用摄像机方向,这样更快,但同时意味着,当你旋转摄像机时,公告板不会保持相同的方向。'accurate_facing true'选项基于从每一个公告板到摄像机的向量进行计算,即意味着即使摄像机旋转方向也是一致的。
格式: accurate_facing on|off
默认: accurate_facing off 0
iteration_interval
通常粒子系统是基于帧率被更新的;但是随着更极端的帧率范围,这可以给出不同的结果,特别是低帧率。你可以使用这个选项设定升级频率为固定的间隔,在低帧率时,粒子更新会按固定的间隔重复,直到帧率恢复正常。0值意为默认帧时间循环。
格式: iteration_interval <secs>
示例: iteration_interval 0.01
默认: iteration_interval 0
nonvisible_update_timeout
当粒子系统在其已经无法可见需要停止更新时设置。默认情况下,可见粒子系统一直更新,即使不在视口内。这意味着当它们进入视口时可以保证一致性。但是,更新粒子系统所花费的代价可能是很昂贵的。
这个选项让你在粒子系统上设置一个'timeout'时限,以便如果它这么长时间不可见,即停止更新,直到它下次可见。值0表示关闭timeout,总是更新。
格式: nonvisible_update_timeout <secs>
示例: nonvisible_update_timeout 10
默认: nonvisible_update_timeout 0
粒子发射器按类型划分为几类,例如:Point发射器从单独一点发射,而Box发射器则是从一块儿区域随机发射。新的发射器可以通过插件加入到Ogre中去。向系统中增加一个发射器需要将发射器嵌入到其它块中,以关键字“emitter”后跟发射器类型名(大小写敏感)开头。Ogre现在支持'Point','Box','Cylinder','Ellipsoid','HollowEllipsoid'以及'Ring'发射器。
angle
设置发射的粒子可以偏离发射方向的最大角(按角度计算,参看 direction)。此值设置为10允许粒子在任一方向上最多偏离发射方向10度。值180意味着可以朝任意方向发射,而0意味着总是精确地沿发射器方向发射。
格式: angle <degrees>
示例: angle 30
默认: 0
colour
为所有发射的粒子设置一个静态颜色。也可参看colour_range_start和colour_range_end属性,设置一组颜色。颜色参数的格式是"r g b a",每个分量的取值范围是从0到1之间,alpha值是可选项(如果未指定,则假定alpha为1)。
格式: colour <r g b> [<a>]
示例: colour 1 0 0 1
默认: 1 1 1 1
colour_range_start和colour_range_end
除了这两个属性必须一起制定外,其它的都和'colour'属性一样,并且制定了被发射出去的粒子的可用颜色范围。实际的颜色将会在这两个值之间随机选择。
格式: 同 colour
示例(随机生成红蓝之间的颜色): colour_range_start 1 0 0 colour_range_end 0 0 1
默认: 都是 1 1 1 1
direction
设置发射器的方向。这与粒子系统所在的SceneNode有关,意思就是随着其它可移动物体改变节点方向,发射器也会随着移动。
格式: direction <x> <y> <z>
示例: direction 0 1 0
默认: 1 0 0
emission_rate
设置每秒要发射多少粒子。在连续发射过程中,个别发射器不是必须发射这些的——这是一个相对参数,发射器可能选择每半秒就发射完所有的粒子,这主要取决于发射器。此属性也会受到粒子系统的'quota'设置的限制。
格式: emission_rate <particles_per_second>
示例: emission_rate 50
默认: 10
position
设置发射器相对于粒子系统所在的场景节点所处的位置。
格式: position <x> <y> <z>
示例: position 10 0 40
默认: 0 0 0
velocity
给所有粒子设置发射时的速率。也可参看velocity_min和velocity_max两个属性,它们允许你设置一个速率范围,而不是一个固定不变的值。
格式: velocity <world_units_per_second>
示例: velocity 100
默认: 1
velocity_min & velocity_max
这两个属性除了是设置一个速率范围外,其它的与'velocity'一样。而且每一个粒子都是以在这个范围内的随机速率被发射出去的。
格式: 同 velocity
示例: velocity_min 50 velocity_max 100
默认: 都是 1
time_to_live
设置每个粒子在被销毁之前存活的秒数。粒子影响器是可以改变这个数值的,但是这个值是发射时才传给粒子的。参看time_to_live_min和time_to_live_max属性,这连个可以让你设置一个生命时间范围,而不是一个固定的数值。
格式: time_to_live <seconds>
示例: time_to_live 10
默认: 5
time_to_live_min & time_to_live_max
这两个属性除了是设置一个生命时间范围以外,其它的与time_to_live一样,并且每个粒子在发射时得到这一范围内的一个随机的数值,作为其存在时间。
格式: 同 time_to_live
示例: time_to_live_min 2 time_to_live_max 5
默认: 都是 5
duration
设置发射器处于活动状态的秒数。发射器可以被再次打开,查看repeat_delay。数值0意味着无限时。参看duration_min和duration_max属性,这两个属性可以让你设置一个时间范围,而不是一个固定值。
格式: duration <seconds>
示例: duration 2.5
默认: 0
duration_min & duration_max
除了这两个属性是设置一个可变的时间范围外,其它的与duration一样。
格式: 同 duration
示例: duration_min 2 duration_max 5
默认: 都是 0
repeat_delay
设置重新开始发射需要等待的秒数。参看repeat_delay_min和repeat_delay_max属性,这两个属性允许你设置一个repeat_delays时间范围,而不是设置一个固定的值。
格式: repeat_delay <seconds>
示例: repeat_delay 2.5
默认: 0
repeat_delay_min & repeat_delay_max
这两个属性除了是设置重新开始需要等待的时间范围外,其它的与repeat_delay一样,并且每次发射器被启动,它都会在这个范围内得到一个随机数值,作为重新开始发射需要的等待时间。
格式: 同 repeat_delay
示例: repeat_delay 2 repeat_delay 5
默认: 都是 0
Point Emitter
这个发射器从一个定点,即它所在的位置,发射粒子。除了标准发射器属性,这个发射器没有其它属性。
要创建一个点发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emmiter Point { // Settings go here }
请注意,发生器的名字('Point')是大小写敏感的。
Box Emitter
这个发射器从一个3维盒子里的随机位置发射粒子。它有额外的属性:
- width
- 设置盒子的宽度(这是盒子沿着它自己的X轴的长度,依赖于形成盒子Z坐标的'direction'属性)。
- 格式:width <units>
- 示例:width 250
- 默认:100
- height
- 设置盒子的高度(这是盒子沿着它自己的Y轴的长度,依赖于形成盒子Z坐标的'direction'属性)。
- 格式:height <units>
- 示例:height 250
- 默认:100
- depth
- 设置盒子的深度(这是盒子沿着它自己的Z轴的长度,与'direction'属性相同)
- 格式:depth <units>
- 示例:depth 250
- 默认:100
要创建一个盒发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emitter Box { // Settings go here }
Cylinder Emitter
这个发射器从一个沿Z轴摆放的圆柱体区域内的随机方向发射粒子。这个发射器有着与Box Emitter完全一致的参数,所以在此不多赘言——宽度和高度决定圆柱体沿坐标轴的形状(如果宽度和高度不同,那么得到的结果是椭圆柱体),深度决定了圆柱体的长度。
Ellipsoid Emitter
这个发射器是从一个椭圆体形状的区域里发射粒子的,例如一个球体或者压扁了的球体区域。参数再一次与Box Emitter相似,除了维度描述为每个坐标轴上的范围最广的点。
Hollow Ellipsoid Emitter
这个发射器很像Ellipsoid Emitter,除了椭圆体中心有一个空洞区域不发射粒子。因此,它有3个额外的参数定义这个空洞区域:
- inner_width
- 不发射任何粒子的内部区域的宽度。
- inner_height
- 不发射任何粒子的内部区域的高度。
- inner_depth
- 不发射任何粒子的内部区域的深度。
Ring Emitter
这个发射器从一个环状区域发射粒子。除了只有2个维度外,有点像Hollow Ellipsoid Emitter。
- inner_width
- 不发射任何粒子的内部区域的宽度。
- inner_height
- 不发射任何粒子的内部区域的高度。
Emitting Emitters
在粒子逾期时产生新的发射器是可能的,例如产生火焰类型的效果。这是通过以下指令控制的:
- emit_emitter_quota
- 这个参数是一个系统级参数,就是告诉系统任意一次可能使用多少个发射器。也就是允许进行空间分配处理。
- name
- 这个参数是一个发射器级参数,即给发射器确定一个名字。这样,当粒子消亡时,其它粒子发生器可以引用这个名字作为生成的新发射器。
- emit_emitter
- 这个参数是一个发射器级参数,如果指定,则意为当这个发射器发射的粒子消亡时,生成一个新的发射器。
// Area emitter
emitter Box
{
angle 30
emission_rate 30
time_to_live 1
direction 0 1 0
velocity 0
colour_range_start 1 1 0
colour_range_end 0.3 1 0.3
width 60
height 60
depth 60
}
粒子影响器可以在粒子存续期间对粒子进行修改。它们按“类型”分为:LinearForce影响器,对所有粒子应用一个力;ColourFader影响器改变飞行中的粒子的颜色。新的影响器可以通过创建插件的形式增加到Ogre中来。你可以通过将影响器嵌套在另一个别的程序块里的办法,向系统中增加一个影响器,以关键字affector开头,后跟影响器的类型名(注意:大小写敏感)。Ogre当前支持LinearForce和ColourFader两种影响器。
粒子影响器事实上没有统一的属性;属性都是每种影响器特有的。
Linear Force Affector
这个影响器对所有粒子施加一个力,改变粒子的运动轨迹。可以用于重力,风力,或者其它线性力。其额外属性有:
- force_vector
- 为应用到每一个粒子的那个力设置向量。这个向量的模决定了力的大小。
- 格式:force_vector <x> <y> <z>
- 示例:force_vector 50 0 -50
- 默认:0 -100 0(一个重力效果)
- force_application
- 设置这个力向量作用于粒子动量的方法。
- 格式:force_application <add|average>
- 示例:force_application average
- 默认:add
-
可选参数有:
- average
- 最终动量是这个力与粒子当前运动的平均值。这样也就使得其本身虽然是稳定的,但是在粒子改变方向时的速度是非线性的。
- add
- 最终动量是粒子的当前运动与这个力之和。这是传统的力的叠加,但是潜在地可能导致无限速率。
要创建一个线性力影响器,需要你的粒子系统脚本中包含一段如下代码:
affector LinearForce { // 设置写在这里 }
请注意:影响器类型的名字(LinearForce)是大小写敏感的。
ColourFader Affector
此影响器修改飞行中的粒子的颜色。额外的属性有:
- red
-
设置每秒时间内粒子颜色中的红色分量的调整量。
- 格式:red <delta_value>
- 示例:red -0.1
- 默认:0
- green
-
设置每秒时间内粒子颜色中的绿色分量的调整量。
- 格式:green <delta_value>
- 示例:green -0.1
- 默认:0
- blue
-
设置每秒时间内粒子颜色中的蓝色分量的调整量。
- 格式:blue <delta_value>
- 示例:blue -0.1
- 默认:0
- alpha
-
设置每秒时间内粒子颜色中的alpha分量的调整量。
- 格式:alpha <delta_value>
- 示例:alpha -0.1
- 默认:0
- 要创建一个颜色减弱影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourFader { // 设置写在这里 }
ColourFader2 Affector
此影响器类似ColourFader Affector,只不过这个影响器有两个颜色改变状态。在粒子存续期内,指定还剩一段时间时,激活第二个颜色改变状态。
- red1
-
设置在第一个状态期间每秒时间内粒子颜色的红色分量的调整量。
- 格式:red <delta_value>
- 示例:red -0.1
- 默认:0
- green1
-
设置在第一个状态期间每秒时间内粒子颜色的绿色分量的调整量。
- 格式:green <delta_value>
- 示例:green -0.1
- 默认:0
- blue1
-
设置在第一个状态期间每秒时间内粒子颜色的蓝色分量的调整量。
- 格式:blue <delta_value>
- 示例:blue -0.1
- 默认:0
- alpha1
-
设置在第一个状态期间每秒时间内粒子颜色的alpha分量的调整量。
- 格式:alpha <delta_value>
- 示例:alpha -0.1
- 默认:0
- red2
-
设置在第二个状态期间每秒时间内粒子颜色的红色分量的调整量。
- 格式:red <delta_value>
- 示例:red -0.1
- 默认:0
- green2
-
设置在第二个状态期间每秒时间内粒子颜色的绿色分量的调整量。
- 格式:green <delta_value>
- 示例:green -0.1
- 默认:0
- blue2
-
设置在第二个状态期间每秒时间内粒子颜色的蓝色分量的调整量。
- 格式:blue <delta_value>
- 示例:blue -0.1
- 默认:0
- alpha2
-
设置在第二个状态期间每秒时间内粒子颜色的alpha分量的调整量。
- 格式:alpha <delta_value>
- 示例:alpha -0.1
- 默认:0
- state_change
-
当一个粒子还有这么多存续时间时,它将转入状态二。
- 格式:state_change <seconds>
- 示例:state_change 2
- 默认:1
要创建一个颜色减弱2影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourFader2 { // 设置写在这里 }
Scaler Affector
此影响器调节飞行中的粒子的大小。额外的属性有:
- rate
- 每秒时间内在x和y方向上对粒子的调节量。
要创建一个伸缩影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector Scaler { // 设置写在这里 }
Rotator Affector
此影响器依靠旋转粒子的贴图纹理来旋转飞行中的粒子。额外的属性有:
- rotation_speed_range_start
-
赋值给发射出去的粒子的旋转速度范围的初始值。
- 格式:rotation_speed_range_start <degrees_per_second>
- 示例:rotation_speed_range_start 90
- 默认:0
- rotation_speed_range_end
-
赋值给发射出去的粒子的旋转速度范围的结束值。
- 格式:rotation_speed_range_end <degrees_per_second>
- 示例:rotation_speed_range_end 180
- 默认:0
- rotation_range_start
-
赋值给发射出去的粒子的旋转角度的初始值。
- 格式:rotation_range_start <degrees>
- 示例:rotation_range_start 0
- 默认:0
- rotation_range_end
-
赋值给发射出去的粒子的旋转角度的结束值。
- 格式:rotation_range_end <degrees>
- 示例:rotation_range_end 360
- 默认:0
要创建一个旋转影响器,需要在你的粒子系统脚本中包含如下一段代码:
ColourInterpolator Affector
类似于ColourFader和ColourFader2,此影响器也是修改飞行中的粒子的颜色。只不过这个影响器有一组不定个数的已经定义好的状态。它在粒子存续期内在几种状态间插值变换粒子的颜色。额外的属性有:
- time0
-
状态0的时间点。
- 格式:time0 <0到1,基于粒子的存续时间>
- 示例:time0 0
- 默认:1
- colour0
-
状态0时的颜色。
- 格式:colour0 <r g b> [<a>]
- 示例:colour0 1 0 0 1
- 默认:0.5 0.5 0.5 0.0
- time1
-
状态1的时间点。
- 格式:time1 <0到1,基于粒子的存续时间>
- 示例:time1 0.5
- 默认:1
- colour1
-
状态1时的颜色。
- 格式:colour1 <r g b> [<a>]
- 示例:colour1 0 1 0 1
- 默认:0.5 0.5 0.5 0.0
- time2
-
状态2的时间点。
- 格式:time2 <0到1,基于粒子的存续时间>
- 示例:time2 1
- 默认:1
- colour2
-
状态2时的颜色。
- 格式:colour2 <r g b> [<a>]
- 示例:colour2 0 0 1 1
- 默认:0.5 0.5 0.5 0.0
- [...]
状态数是可变的。最多6个。即time5和colour5是最后的参数。要想创建一个颜色插值影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourInterpolator { // 设置写在这里 }
ColourImage Affector
这是另一个改变飞行粒子的颜色的影响器,但替代编程定义颜色的是,从一个指定的图像文件中取得颜色。在粒子的存续时间内,颜色的取值范围是从图像的左侧开始向右移动,因此,只使用了水平方向的图像。额外属性有:
- image
-
赋值给发射出去的粒子的旋转速度范围的初始值。
- 格式:image <image_name>
- 示例:image rainbow.png
- 默认:无
要创建一个图像颜色影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourImage { // 设置写在这里 }
DeflectorPlane Affector
此影响器定义一个平面,这个平面反弹碰到它的粒子。额外的属性有:
- plane_point
-
反弹平面上一点。与plane_normal一起使用。
- 默认:plane_point 0 0 0
- plane_normal
-
反弹平面的法线向量。与plane_point一起使用。
- 默认:plane_normal 0 1 0
- bounce
-
当一个粒子被反弹时的弹力大小。0表示没有反弹,1表示100%反弹。
- 默认:bounce 1.0
DirectionRandomiser Affector
此影响器随机选定粒子运动的方向。额外属性有:
- randomness
-
每一轴向上随机性的大小。
- 示例:randomness 5
- 默认:randomness 1
- scope
-
每一轮受影响的粒子的百分比。
- 示例:scope 0.5
- 默认:scope 1.0
- keep_velocity
-
决定是否不改变粒子的速率。
- 示例:keep_velocity true //不改变粒子速率
- 默认:keep_velocity false //即改变粒子速率
// Make em float upwards
affector LinearForce
{
force_vector 0 100 0
force_application add
}
// Fader
affector ColourFader
{
red -0.25
green -0.25
blue -0.25
}
}