Renderer module
假设一个具有N个粒子的系统,取其中任意一个粒子P作为考察对象。 注意,下面的情形是建立在粒子系统没有设置任何旋转参数的理想情况下。这些旋转参数,包括Main Module的start rotation选项,以及rotation over life time的相关选项。
tip:粒子的rotation所参照的坐标系根据Render Alignment的设置的不同而不同。
当Render Mode设置为BillBoard时,粒子的形状为一个平面,即类似一个广告牌(BillBoard)。这个BillBoard粒子具有自己的坐标系(不会显示出来),用于标示该粒子在空间中的方位状态,其中Z轴垂直于该平面,XY平面与该粒子平面重合,坐标系原点位于粒子平面正中央。
当我们将Render Alignment设置为View时,粒子P总是会面向相机平面,即其Z轴会始终垂直于相机平面,XY平面于相机平面重合。此时,我们从空间任意位置通过相机观察到的粒子,总会是一个形状一致的平面。类似于一个智能广告牌,只要还位于你的视野中,会自动调整其方位姿态始终正对着你,无论你通过相机看向哪里。注意:在开头已经说明,这是建立在粒子无任何rotation的理想情况下。所以在这种情形下,我们将粒子自身的坐标系称为粒子的理想坐标系。一旦粒子设置了相关的rotation,那么实际的视觉效果就是上述的理想情况叠加相应的rotation(这时rotation可以理解为上述理想状态下的offset)。需要注意,在这时,粒子的rotation所参照的坐标系既不是发射源的坐标系也不是世界坐标系,但是目前也不确定其具体的参考标准,经过实验,貌似在一定程度上似乎参考了理想坐标系。Facing也大致相同,只不过面向的是相机所处的位置。
Render Alignment设置为World和Local模拟的是真实世界里的粒子显示效果。想像在我们眼前有一个粒子发射源,当我们从不同角度观察它的时候,肯定会带给我们一种差异化的立体感觉,而不会仅仅只是一个简化了的平面。World 和 local都可以模拟真实世界里粒子的视觉效果,它们的区别仅在于粒子rotation所参考的标准不同(理想情况可以看成rotation(0,0,0))。
当我们将Render Alignment设置为World时,粒子自身的坐标系会和世界坐标系对齐,于是当我们通过相机从任意位置观察该粒子的时候,观察到的是该粒子作为一个平面物体在空间中的真实显示。类似于一块不智能的广告牌,这个广告牌是静态的,所以你从不同方位观察它都不会显示出同样的视觉效果。这也是建立在粒子无rotation的理想情况下,如果粒子具有rotation,那么此时粒子的rotation参考的坐标系就是世界坐标系,遵循unity通用的旋转顺序:先相对于世界坐标系的Z,后Y,最后X。注意,在这种情况下,发射源的坐标系和粒子的坐标系并不是隶属的关系,所以操纵发射源的Transform rotation将不会对粒子的方位有任何的影响。
当我们将Render Alignment设置为Local时,粒子自身的坐标系会和发射其的GameObject(发射源)的坐标系对齐,观察到的是该粒子作为一个平面物体在空间中的真实显示。也就是说,我们通过将Render Alignment设置为Local,在发射源坐标系和粒子坐标系之间建立了一种隶属的关系(或者说父子关系)。从而,旋转发射源坐标系将会导致粒子坐标系的联动旋转。上述完全对齐的情况也是一种理想情况,当粒子设置了rotation时,rotation的参考标准就是发射源的坐标系,在这里,虽然粒子并不是按照通常形式在Hierachy面板中显示为发射源GameObject的子物体,但是可以将所有粒子理解为其发射源GameObject的子物体,尤其对粒子进行相关Rotation设定的时候。于是,这时候的rotation也可以看成是粒子在理想情况下坐标系的offset。遵循unity通用的旋转顺序:先相对于发射源坐标系的Z,后Y,最后X。
当Render Mode设置为Mesh时,可以指定粒子的Mesh形状,同时指定渲染粒子的Material。当我们导入Mesh作为粒子的3D形状后,和上述的Billboard粒子一样,其也具有自身的坐标系。但是不同的是,Mesh粒子的自身坐标系是由模型数据决定的。其实我们可以把Billboard粒子和Mesh粒子都理解为空间物体,虽然Billboard粒子是一个平面形状,但是其就是在空间中的一个平面物体。这样,对上述Render Alignment相关设置项的讨论,同样也适用于Mesh粒子。所以,接下来只会简要介绍在Render Mode为Mesh的情况下,Render Alignment的相关设置项所带来的影响,具体的可以参考上述Render Mode为Billboard时的介绍。
当我们将Render Alignment设置为View时,和上述的Billboard粒子一样,Mesh粒子的Z轴会始终面向相机平面,即Z轴垂直于相机平面,XY平面与相机平面重合...于是我们始终看到的是粒子Mesh沿着Z轴的投影平面,和上述Billboard设置为View时,情况一致。当然,这也是Mesh粒子的Rotation为(0,0,0)时的理想情况,当具有mesh粒子设置了相应的rotation时,看到的效果就是上述的理想效果加上这个rotation的offset。
当我们将Render Alignment设置为local或World时,将分别使得Mesh粒子自身的坐标系和发射源坐标系或世界坐标系对齐。在Mode为Mesh的情况下,设置local或World同样意味着(Mesh)粒子具有了视觉效果,而不是无论观察位置如何变化——都是一个简化的平面表示,很明显,这将带来真实性。