×

[SceneKit专题]4.Particle Systems粒子系统

96
史前图腾
2017.04.04 00:34* 字数 1751

说明

本系列文章是对<3D iOS Games by Tutorials>一书的学习记录和部分翻译,此书对应的代码地址:https://github.com/XanderXu/3D-iOS-Games-by-Tutorials-code
系列文章目录:http://www.jianshu.com/p/fd32aa0d896a

SCNParticleSystem

粒子系统常用属性:

  • Appearance(外观):每一个颗粒都是一个小图片或者一组图片序列,可以调整尺寸,颜色,混合模式以及其他颗粒产生时的渲染参数.
  • Life Span(生命跨度):粒子系统用particle emitter(粒子发射器)产生单独的颗粒.生命跨度决定了粒子在场景中的可见时长.
  • Emitter behavior(发射器行为):可以按钮发射器的参数,比如粒子从哪里产生,产生速率.
  • Variation(变异):让粒子系统产生随机变异.
  • Movement(运动):可以调整颗粒产生后是怎么运动的.粒子系统使用了简化版的物理模拟来加速性能,但颗粒仍然可以和物理引擎管理的对象进行交互.

新建一个粒子系统,xcode自带了7种效果

QQ20170403-230758@2x.png
QQ20170403-230758@2x.png
QQ20170403-231818@2x.png
QQ20170403-231818@2x.png
QQ20170403-231858@2x.png
QQ20170403-231858@2x.png

创建后的区域有7块:
1.Center Stage(中央舞台):粒子系统可视化呈现区.
2.Gesture Controls(手势控制):可以用手势来操纵相机视图.
3.Pause/Play Button(暂停/继续按钮):可以暂停运行仔细检查细节.
4.Restart Button(从头开始按钮):从最初状态重新运行.
5.Camera Reset Button(重设相机按钮):重设相机,恢复默认位置.
6.Color Button(背景颜色按钮):更改呈现区背景色,可以让你更容易观察粒子.
7.Particle System Properties(粒子系统属性区):更改属性

Emitter attributes发射器属性

QQ20170403-231924@2x.png
QQ20170403-231924@2x.png
  • Birth rate(出生速率):控制颗粒的发射速率,设置为25,则每秒产生25个颗粒.
  • Warmup duration(暖场时长):渲染时的粒子产生提前量,可以用来一开始就让整个屏幕直接充满颗粒而无需从头等待慢慢发射.
  • Location(位置):和形状相关,设置发射器从哪里发射颗粒.设置为Vertex,则颗粒将会从几何体的顶点产生.
  • Emission space(散发空间):发射出的颗粒停留的空间.设置为World Space这样颗粒将会被发射到世界坐标系的空间中,而不是对象节点自己的本地坐标系空间.
  • Direction mode(方向模式):控制产生的颗粒如何运动,设置为Constant,则颗粒放射状从形状表面向外运动,否则颗粒将以随机方向运动.
  • Spreading angle(散布角度):随机化大量颗粒的发射角度.设置为0,则颗粒严格按照上一个设置的方向运动.
  • Shape(形状):发射颗粒的形状,设置为Sphere则用球体做为几何体.
  • Shape radius(形状半径):这个参数和上面设置的形状有关,当形状设置为球体时,此处可设置球体的半径.某些形状有两个输入区,其中一个有Δ符号,第一个输入区是一个基础值,后面是偏差值,每次产生颗粒时,将在基础值的正负偏差范围内产生随机值.

Simulation attributes模拟属性

QQ20170403-231936@2x.png
QQ20170403-231936@2x.png
  • Life span(生命跨度):颗粒的存在时长,以秒为单位.
  • Linear velocity(线速度):设置发射出的颗粒的线速度,设置为0时,则颗粒产生时没有方向和速度.
  • Angular velocity(角速度):设置发射出的颗粒的角速度,设置为0时,则颗粒产生时不会旋转.
  • Acceleration(加速度):设置力来影响发射出的颗粒.设置为(x: 0, y: -5, z: 0)就可以模拟重力对颗粒的轻微作用.
  • Speed factor(速度因子):颗粒模拟的速度因子,设置为1则按正常速度运行.
  • Stretch factor(拉伸因子):按运动方向对颗粒进行拉伸.设置为0,则颗粒图片不拉伸.

Image attributes图片属性

QQ20170403-231948@2x.png
QQ20170403-231948@2x.png
  • Image(图片):设置每个颗粒渲染时的图片,给颗粒一个最初的形状.
  • Color(颜色): 设置指定图片的染色.设定为White,则粒子系统基础色为白色.
  • Animate color(动画颜色):使颗粒在生命周期中不断改变颜色.
  • Color variation(颜色变异):设定颜色随机变异值.
  • Size(尺寸):设置颗粒的尺寸.

Image sequence attributes图片序列属性

QQ20170403-232002@2x.png
QQ20170403-232002@2x.png
  • Initial frame(初始帧):设置第一个动画序列的零起点画面,第零帧对应的是网络中左上角的图片.使用单帧图片时设置为0.
  • Frame rate(帧率):设置动画的每秒速度.使用单帧图片时设置为0.
  • Animation(动画):设置动画序列的行为.Repeat重复循环,Clamp播放一次,Auto Reverse自动反转,从头到尾再返回开头.使用单帧图片时设置为Repeat或其他均可.
  • Dimensions(尺寸):设置动画风格的行数列数.使用单帧图片时设置为(Rows: 1, Columns: 1).

Rendering attributes渲染属性

QQ20170403-232014@2x.png
QQ20170403-232014@2x.png
  • Blending(混合):设置渲染器绘制颗粒时的混合模式,设置为Alpha,将会使用图片的alpha通道信息来决定透明度.
  • Orientation(旋转):设置为Billboard screen-aligned,这样图片会永远正面对着相机,就不会看到图片是扁平的了.
  • Sorting(排序):设置颗粒的渲染排序.这个属性用来连合混合模式,影响如何应用混合模式.
  • Lighting(灯光):控制是否受场景中灯光的影响.

Physics attributes物理属性

QQ20170403-232024@2x.png
QQ20170403-232024@2x.png
  • Affected by gravity(受重力影响):设置重力(引力)对颗粒的影响.
  • Affected by physics fields(受物理场影响): 设置物理场(磁力等)对颗粒的影响.
  • Die on Collision(碰撞后死亡):允许场景中的物理实体碰撞并摧毁粒子.
  • Physics Properties(物理属性):控制物理模拟中粒子物理行为的基础物理属性,一般可保持默认.Mass(质量),bounce(弹性),friction(摩擦),damping(阻尼).

Life cycle attributes生命周期属性

QQ20170403-232036@2x.png
QQ20170403-232036@2x.png
  • Emission Duration(排放时长):控制发射器发射新粒子的时间长度.设置为1,使粒子发射器设定总长度为1秒 .
  • Idle Duration(闲置时长):粒子系统循环发射一个特定排放时长后,将闲置一段时间,称为闲置时长,然后再重复循环.设置为0,粒子系统将只发射一次.
  • Looping(循环):设置粒子系统像爆炸一样发射一次,还是像火山一样持续发射粒子.设置为Loops continuously,就可以让发射器在被移除前一直发射.

加载使用

创建好的粒子系统要如何加载使用?

let trail = SCNParticleSystem(named: "Trail.scnp", inDirectory: nil)!
geometryNode.addParticleSystem(trail)
SceneKit+ARKit
Web note ad 1