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

说明

  • 本系列文章的学习首先要感谢史前图腾的共享精神,在他的系列文章中有详细的解释,但是他的代码都是Swift写的.并且代码的解释比较少,

  • 在这里我提供了demo-OC版供大家参考和学习,基础知识会一一为大家解释,但是OC版的demo只提供最终合集,方便一次到位减少打开工程的次数

  • demo地址:
    OC-地址
    swif-地址

    效果图

2.Particle Systems粒子系统.gif

SCNParticleSystem

粒子系统常用属性:

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

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


Snip20170909_3.png

如下的星星效果

Untitled.gif

Emitter attributes发射器属性

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

Simulation attributes模拟属性

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

Image sequence attributes图片序列属性

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

Rendering attributes渲染属性

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

Physics attributes物理属性

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

Life cycle attributes生命周期属性

Life cycle attributes生命周期属性
  • Emission Duration(排放时长):控制发射器发射新粒子的时间长度.设置为1,使粒子发射器设定总长度为1秒 .
  • Idle Duration(闲置时长):粒子系统循环发射一个特定排放时长后,将闲置一段时间,称为闲置时长,然后再重复循环.设置为0,粒子系统将只发射一次.
  • Looping(循环):设置粒子系统像爆炸一样发射一次,还是像火山一样持续发射粒子.设置为Loops continuously,就可以让发射器在被移除前一直发射.
  • 核心代码

/**
 创建粒子
 
 @param color 粒子的颜色
 @param geometry 粒子发射器
 @return
 */
- (SCNParticleSystem *)creatParticleSystemWithColor:(UIColor *)color geometry:(SCNGeometry *)geometry{
    
    
    // 创建粒子 直接使用系统的粒子 具体创建在笔记中有介绍
    SCNParticleSystem *particleSystem = [SCNParticleSystem particleSystemNamed:@"Rain.scnp" inDirectory:nil];
    
    // 设置粒子颜色 保证粒子的颜色与发射器几何体的颜色是一致的
    particleSystem.particleColor = color;
    // 指定发射器的形状 此处将传来的几何体作为粒子的发射器
    particleSystem.emitterShape = geometry;
    
    return particleSystem;
    
}


// 创建一个粒子
    SCNParticleSystem * parrticleSystem = [self creatParticleSystemWithColor:color geometry:geometer];
    //将该粒子 添加到节点上  有时候会发现 粒子未出现在屏幕中  可能的原因之一是 粒子的大小问题(我就遇到了)
    [geometerNode addParticleSystem:parrticleSystem];




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 说明 本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会此书对应的代码地...
    苹果API搬运工阅读 2,750评论 1 2
  • 官网中文版 1 简易天空替换## 技能:线性擦除,追踪运动,用颜色键K出人物,用色彩曲线调色。(1)天空图片素材放...
    朱细细阅读 10,650评论 4 82
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 春风暖 夏风潮 秋风瑟 冬风寒 暖暖 潮潮 瑟瑟 寒寒 交替 好一个春夏秋冬 相貌 你说春的妩媚 我说夏的妖娆 你...
    自在的空灵阅读 284评论 0 2