听着外面淅淅沥沥的雨声倍感惬意,来记录一下Unity中湖泊和瀑布的制作。
导入Unity自带的水源素材包“Water (Pro Only)”,至于为什么有这个“仅限专业版”呢,那啥你懂的。如果没有的话也可以导入“Water Basic”,只是效果难看点,并不影响做练习。导入成功之后在"Standard Assets/Water (Pro Only)"文件夹下就可以看到“Daylight Water(白天的水)”和"Nighttime Water(晚上的水)"了,我选择了前者,并拖入设计场景。
默认的水面是一个圆形平面,如果要修改其形状,只要在检视面板中更改“Water Plane Mesh”,并选择一个网格就可以了(注意要修改Scale配合大小)。不过我这里对形状没有什么要求,因为我的思路是通过调整地形把多余的水面覆盖住,实现不规则的效果。另外在地形的笔记中有介绍过,地形是无法直接凹陷的,要实现湖泊的效果只要把周围的地形拉高即可。经过一番地形的修改,一枚安静的小湖泊就诞生啦~顺便把名字改成Lake,再加点不知道是什么品种的树木^_^。
大功告成,专业版的水面已经自带了反射的效果,所以在这个角度可以看到倒映的山和天空。如果在周围加上各式各样的花草树木和石块,一定会是道靓丽的风景线吧。(叮,应试文写作技能等级提升了1)
在写瀑布的制作之前先介绍一下粒子系统(Particle System),所谓粒子系统即是用计算机图形学来模拟渲染一些传统建模技术难以实现的效果。比如现在游戏中流行的天气系统,小到绵绵细雨、悠悠落叶,大到沙尘暴和暴风雪。如果用传统建模的方式比较难以做到像现实生活中那么逼真,而粒子系统则是将这些效果拆分成为一个个粒子,每个粒子都有自己的移动速度、存活时间和统一的运动规律。除了能够更真实地模拟之外,还大大地减少的需要的储存空间(增加了计算性能消耗)。对于手机、网页游戏来说,省下的储存空间完全可以掩盖增加的性能损耗,更别说现在动辄好多G的客户端游戏了。
动口不如动手,实践才是硬道理。导入粒子系统素材包“Particles”,Unity自带的粒子不是很多,但常用的沙尘、火、水、爆炸、烟雾都有,做练习已经绰绰有余了。在“Standard Assets→Particles→Water”中找到WaterFall,就是接下来要用到的瀑布粒子了,把它拖进设计视图中。然后就出现了一坨蓝色……(这货不是瀑布,这货不是瀑布,这货果真是瀑布啊!)
好吧其实是因为选中了瀑布,Unity会把选中的粒子以淡蓝色的框包裹起来,方便设计人员观察和调试粒子。总之先不管它,在检视面板中可以看到瀑布有很多以前没见过的属性。关于粒子系统组成原理也可以管中窥豹,可见一斑。以下选项说明可以只需要留个印象即可,不需要去死记硬背。
1、Ellipsolid Particle Emitter(椭圆粒子发射器)
Unity通过粒子发射器生成粒子,并赋予它们随机或固定的大小、速度、生存周期等等属性来模拟需要的粒子效果。
- Emit(是否发射):若取消这个选项则不会继续生成粒子,相当于一个开关。
- MinSize(粒子最小大小)、MaxSize(粒子最大大小):可设定随机生成的粒子大小范围。
- MinEnergy(粒子最小生存时间)、MaxEnergy(粒子最大生存时间):可设定随机生成的粒子的生存时间范围(单位:秒)。
- MinEmission(最小发射速率)、MaxEmission(最大发射速率):可设定生成粒子随机速率的范围(单位:秒/个)。
- WorldVeloctiy(世界速度):可设定粒子相对于游戏场景中的X、Y、Z轴方向的速度。
- LocalVelocity(相对速度):可设定粒子相对于自身的X、Y、Z轴方向的速度。
- Rnd Velocity(随机速度):可设定X、Y、Z轴方向随机增加的速度。
- Emitter Velocity Scale(发射器速度缩放):试了下好像没反应...
- Tangent Velocity(切线速度):可设定粒子在飞出发射器时在发射器表面X、Y、Z轴方向的切线速度,有点拗口@_@
- Angular Velocity(角速度):我的理解就是指粒子在X、Y、Z轴方向自转的速度。
- Rnd Angular Velocity(随机角速度):就是在每个粒子角速度的基础上加上一个随机值。
- Rnd Rotation(随机旋转角度):如果勾选了这个,那每次生成出来的粒子旋转的角度都是随机的。
- Simulate In World Space(模拟世界空间):如果勾选了这个,拖动发射器的时候原来已经发射的粒子位置不会跟着移动。
- One Shot(单次发射):如果勾选了这个,发射器会同时发射所有的粒子,数量取最小发射速率和最大发射速率之间的一个数值。只有当所有的粒子都消失以后才会发射第二批粒子。否则发射器会连续地发射粒子。
- Ellipsoid(椭圆):可以设定椭圆形粒子发射器的X、Y、Z轴上的大小比率,相当于产生粒子的范围。
- Min Emitter Range(最小发射器范围):可以设定0~1的值,表示从发射器表面到中心的百分之多少空间会产生粒子。比如设定为1时只会在表面上生成粒子,而设定成0则会在整个椭圆内生成粒子。
2、Particle Animator(粒子动画器)
粒子动画器可以将发射器产生的粒子进行二次加工,比如使粒子的颜色不断的变化,缩放粒子等。
- Does Animate Color?(是否动画颜色):勾选了这个选项,下面的ColorAnimation[0-4]才能生效。
- ColorAnimation[0-4](动画颜色):这五个颜色表示了每个粒子在其生存周期内的动态颜色变化,相当于给粒子染色了。
- World Rotation Axis/Local Rotation Axis(世界旋转轴/相对旋转轴):调整旋转轴可以让粒子系统运动的同时再按照某个轴旋转,实现某些复杂的效果,有点像公转和自转的关系。
- Size Grow(大小变动):粒子生成之后的大小会慢慢额外地放大这个比率,比如瀑布的水滴粒子其实到最后是越来越小的,所以要调成大于0小于1的数值
- Rnd Force(随机作用力)/Force(作用力):貌似跟物理效果有关系的,光靠前面的几个选项已经够用了,没有深入研究。
- Damping(阻尼衰减系数):小于1粒子会减速,1表示不衰减,大于1粒子会被加速。
- Autodestruct(自动销毁):如果勾选了这个选项,那么当粒子动画器所动画的粒子全部消失的时候,附加在动画器上的对象将被自动销毁。
3、Particle Renderer(粒子渲染器)
粒子渲染器负责将粒子渲染到游戏中,并且可以决定粒子的材质、光影等。
- Cast Shadows(产生阴影):若勾选了这个选项,当有光线穿过粒子系统的时候,将会在相对的方向产生阴影。
- Recive Shadows(接受阴影):若勾选了这个选项,其他物体的阴影会投射到粒子系统上。
- Materials(材质):材质列表决定了每个单独粒子所使用的材质。
- Use Light Probes(使用光线探测器)/Light Probe Anchor(光线探测器锚点)
- Camera Velocity Scale(摄像机速度缩放):在摄像机镜头移动的时候粒子系统的缩放程度。(没弄明白,设置成1后移动摄像机发现粒子一直在抽搐-_-b)
- Strech Particles(拉伸粒子的方式):有5五种拉伸方式可以选择:
- Billboard(公告板)让粒子看起好像一直对着摄像机,这个在搭建地形花草的时候挺熟悉的。
- Stetched(拉伸)当粒子移动的时候始终面对着对着移动的方向。
- SortedBillboard(排序公告板)粒子会被按其深度值排序,在混合材质的时候这个参数才有意义。
- VerticalBillboard(垂直公告板)所有的粒子始终会与水平面垂直。
- HorizontalBillboard(水平公告板)所有粒子始终与水平面平行。
- Length Scale(长度缩放):粒子移动时在移动方向上的长度缩放比率,仅在拉伸方式为“拉伸”的时候有效。
- Velocity Scale(速度缩放):这个值可以设定有多少比率的粒子将被拉伸,基于粒子的移动速度。
- Max Particle Size(最大粒子大小):这个值可以设定在视野中粒子的最大大小,比如设定成0.5,即使粒子再大最多也只能达到视野一半的大小。
- UV Animation(UV动画):没有深入研究。
写了那么多自己都有点晕了,哈哈。不过正如Photoshop那么多滤镜一样,并不是要把每个滤镜都背下来,它们都只是工具而已。只要留个印象知道这些参数大概能够做什么,在制作粒子效果之前先在脑中思考一遍,再通过把需要的参数组合调整一下,实现需要的效果就可以了。这也是我喜欢游戏设计的原因之一,工具很多,不同的组合可以实现不同的效果,需要不断的发现和探索。所以我是比较鄙视国内千篇一律的网游的,系统抄来抄去,还美其名曰“微创新”。当然其中也有一定的社会因素在里边,成本/风险控制占了很大的比重。只有在自己经历过游戏项目的困苦之后才能明白其中无奈。
不说这个,回归正题,既然粒子系统的大部分参数都已经搞清楚了,定制自己的瀑布并不是什么难事。所以在把原来地形经过一番调整之后,把瀑布上去,就有了下面这样的效果。参数我就不贴出来了,条条大路通罗马嘛,哈哈。
http://huangxuyang.cn/unity3d/learning-unity3d-note-5