Particle System体会

原创 2015年11月17日 22:03:58

Unity的Particle System真是让人又爱又恨,爱的是能做出很多想要的效果,恨的是一些参数未开放,无法在运行时动态调整,同时它的性能也是个问题。


先耐心地看这样一个案例。

需求:在一个不规则多边形区域内生成雾扩散的效果。

要求:雾扩散的范围和浓度需要和设定的值挂钩;雾的颜色可动态改变;雾不能扩散出多边形区域。


拿到这个需求单的时候,我第一个想到的做法是Particle System,因为雾、云、火焰等通常都是用particle实现的。但由于经验不足,没想到后边尽是坑啊~


坑1: Shape相关的参数不能在运行时调整

本来想通过改变shape中的radius等参数来实现emit area的缩放,然而,Unity竟然没有开放相关接口改变这些参数。

解决方法1:

通过不断和需求方协商(或者叫斗争or撕b),决定转换一下思路,用多边形区域的particle浓度来体现数值上的变化。当然,后来因为效果问题,由近一步做了调整,比如在一个区域内设置多个发散点,通过改变StartLifeTime来调整particle覆盖的区域。


坑2: Shape - Mesh发射粒子

通过编辑多边形形状的mesh,将其应用到particle的shape中,即使用Mesh的方式发射粒子。换句话说,就是在mesh上的点or三角面上生成粒子,这样做以后,就能看到一片乌黑的雾覆盖在了一个特定区域内。然而,要实现不同shape-mesh的发射方式,就得针对每个mesh做一个particle system object,而且要根据mesh的不同,搭配不同的参数。

解决方法2:

打算通过uv动画来做雾漂移的效果。(待验证)


坑3: Shape -Mesh粒子数

要和数值吻合,如果要高浓度覆盖一片较大的区域,就需要很多的粒子(MaxParticles 10000 per Particle System),在真机上一跑就卡的不行了!

解决方法3:

打算通过uv动画来取代mesh粒子。(待验证)


坑4: Collision

Unity Manual上也说了,如果要用collision,会很慢,be wise。但我很不明智地尝试使用collision来将粒子限制在一个区域内,性能是个坑。此外,要利用particle collision让粒子在碰到collider以后就消失,需要设置几个参数。1)World 2)Dampen设为1。3)Bounce设为0。4)LifeTimeLoss设为1.

解决方法4:

减少粒子数,或者干脆不要用粒子效果。(也就是还没想出来)


坑5: Collision - mesh collider

我只知道maya中导出的mesh可以只有单面可见,通过设置polygon normal来实现,如normal指向外面就在外部可见。然而,mesh collider也随了mesh的这个特点,如果normal是单面的,collider也只在那一侧有碰撞检测。

解决方法5:

在Maya中重新调整normal方向并导出。


坑6: Particle有规律的出现消失,而非持续发射

解决方法6:

配合调整参数Duration, MaxParticles, EmissionRate,一旦Duration > MaxParticles / Emission Rate就会出现这种情况。


另外,记录一条RGB转Grayscale的公式:

x = R*0.3 + G*0.59 + B*0.11


罗列了一些坑,以儆效尤。

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于Unity ParticleSystem的一些"冷"知识

目前的游戏开发中,粒子系统的使用想必是标配了,Unity自然也提供了相应的解决方案:ParticleSystem,网上对ParticleSystem的介绍也非常之多(譬如这里,这里,这里还有这里),虽...
  • tkokof1
  • tkokof1
  • 2017年01月04日 21:46
  • 4152

关于Cesium粒子系统中的emitterModelMatrix和modelMatrix参数的理解

Cesium粒子系统的一点理解
  • GISuuser
  • GISuuser
  • 2017年09月02日 10:27
  • 815

Cesium的粒子系统做的一些简单例子

用Cesium的粒子系统做的简单的demo
  • GISuuser
  • GISuuser
  • 2017年09月04日 16:53
  • 959

Cesium粒子系统详述

var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({ // 粒子外观 image :...
  • GISuuser
  • GISuuser
  • 2017年09月01日 18:57
  • 606

Cesium应用篇:3控件(5)CesiumInspector

CesiumInspector控件并不是带来太多功能上的,但对开发人员来说,对于了解Cesium的渲染效果以及性能调优,还是一个很有价值的控件,特别是一些渲染状态下的问题,采用该控件,应该还是会有很多...
  • qiupu4667
  • qiupu4667
  • 2017年04月16日 21:12
  • 469

Unity3D Compute shader 新解-图片粒子矩阵【一】

Unity3D Compute shader 新解-图片粒子矩阵【一】1.unity3D scripts 给了许多的方便,本地API也方便阅读。 2.unity shader写起来不算很棘手,官方也...
  • baidu_26153715
  • baidu_26153715
  • 2015年05月07日 22:17
  • 3807

[Unity3D] Optimization – Make Atlas textures for ParticleSystem, reduce drawcall, why not ?

ParticleSystem and Atlas texture These are familiar concepts to Game developers. ParticleSystem A...
  • aa20274270
  • aa20274270
  • 2017年05月27日 16:58
  • 297

Unity Particle System

新建一个物体,添加三类组件(构成理子系统) 1.Particle Emitter 2.Particle Animator 3.Particle Render 粒子发射器有两种Ellipsoid...
  • Quannenggou
  • Quannenggou
  • 2012年01月12日 16:49
  • 3961

开源3DGIS

学习和研究3DGIS也有五年左右了,从最开始被三维逼真的效果所吸引到现在一路研究三维gis,对空间计算、多维可视化和分析的兴趣一直未减。         目前国内三维GIS厂商众多,做得比较大的公司有...
  • Giser_3D
  • Giser_3D
  • 2017年03月08日 17:42
  • 901

Cesium原理篇:3D Tiles(1)渲染调度

Cesium在2016年3月份左右推出3D Tiles数据规范,在glTF基础上提供了LOD能力,定位就是Web环境下海量三维模型数据。虽然目前3D Tiles还是Beta阶段,有不少硬伤,但3D T...
  • fengyuzhiren
  • fengyuzhiren
  • 2017年03月10日 22:12
  • 1843
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Particle System体会
举报原因:
原因补充:

(最多只允许输入30个字)