OpenGL粒子系统三篇

2024-08-23

OpenGL粒子系统 篇1

粒子系统从应用的角度可分为三类, 即随机粒子系统、结构化粒子系统、方向粒子系统。随机粒子系统主要通过可控制的随机过程控制粒子属性的变化, 可用来生成火、烟、灰尘、爆炸等场景图像;结构化粒子系统主要用来模拟具有一定结构的物体或现象, 如树、草、云、彩虹等;方向粒子系统因为考虑到粒子间的相互影响, 粒子除了具有速度和位置等动态属性外, 还必须有方向属性, 可用来模拟织物、可变形物体和刚体等。降雪现象没有一定的结构, 模拟时无需考虑雪粒子间的相互作用, 宜采用随机粒子系统进行模拟。随机粒子系统采用大量的、具有一定生命和属性的微小粒子图元作为基本元素, 绘制不规则的模糊物体对象, 其中, 粒子图元的形状可以是小球、立方体、正四面体或其它的形体。粒子系统把物体定义为许多不规则、随机分布的粒子, 且每个粒子均有一定的生命周期。随着时间的住移, 旧的粒子不断死亡, 新的粒子不断加入。粒子的这种出生、成长、衰老和死亡的过程, 能够较好地反映模糊物体的动态特性。

本文依据粒子系统的仿真方法, 对降雪进行了模拟。用大量雪粒子来描述降雪的形状属性及运动属性。降雪粒子系统是不断进化的, 在生命期的每一刻, 都要完成如下四步:第一步, 系统产生新的雪粒子;第二步, 更新雪粒子属性;第三步, 删除“死”雪粒子;第四步, 绘制雪粒子。本文降雪粒子系统中采用四边形来描述雪粒子几何特征, 并给雪粒子加上纹理, 进而逼真描述雪的自然现象。

1 雪粒子系统初始化

雪粒子系统由大量的雪粒子构成, 雪粒子系统初始化需包含雪粒子初始化算法。对于雪粒子系统需要考虑的属性有雪粒子链表、雪粒子总数目、当前渲染的雪粒子数目, 雪粒子系统的中心位置、消逝时间;对雪粒子则要考虑当前位置、上次位置、速度、加速度、生命期、尺寸大小等属性。

雪粒子产生区域是一个覆盖地面场景的长方体, 并与水平面平行。在雪粒子密度相同的情况下, 较大的产生区域需要较多的粒子, 因此产生区域在满足视觉效果的前提下应尽可能小, 这里, 仅用视图体顶部的外接长方体作为产生区域。随着视点位置、视线方向的变化, 视图体在空间移动, 产生区域也作相应移动。本文雪粒子系统中雪粒子的初始化和发射被控制一个长、宽、高分别为mheight、mwidth、mdepth的长方体内。初始化时雪粒子x、y、z坐标分别由如下表达式确定:mheight、morigin.x+FRAND*mwidth、morigin.z+FRAND*mdepth。其中morign表示雪粒子系统场景的中心点。用自然语言描述雪粒子初始化、雪粒子系统初始化算法如下:

算法名称:雪粒子初始化;

算法参数:雪粒子索引号。

算法开始:

①初始化雪粒子的位置;

②设置雪粒子大小;

③设置雪粒子的初始速度为随机值;

算法结束。

算法名称:雪粒子系统初始化;

算法开始:

①判断是否存在雪粒子, 若有, 则雪粒子链表设为空, 并设置头指针为空, 否则转入第②步;

②调用“雪粒子初始化”算法;

③系统雪粒子总数、消逝时间均置为0;

算法结束 。

2 雪粒子系统的更新

随着视点的不断变化, 及雪粒子的不断运动, 雪粒子的空间坐标也在不断改变。当某一粒子运动到视口长方体分布区外时, 则认为该是雪粒子寿命结束, 系统停止对其计算和绘制。本文具体算法通过当前粒子的y轴坐标与场景的中心位置的y轴来判断雪粒子是否超出视口长方体, 即:若mparticle[i].mpos.y<=morigin.y, 则雪粒子到达场景外。此外, 雪粒子的数量直接影响场景的真实感, 改变每一帧新粒子产生的数量, 新产生的粒子较多时雪下的较大, 反之, 新粒子产生较少时雪下的较小。雪粒子数量选择太多或太少都会使下雪的图像失真。本文具体算法产生宏定义的方式获得, 即:newParticles= SNOWFLAKES_PER_SEC * maccumulatedTime。其中SNOWFLAKES表示每秒新产生的雪粒子数, maccumulatedTime表示雪粒子系统消逝时间。雪粒子系统更新算法描述如下:

算法名称:雪粒子系统更新;

算法参数: (消逝时间) 。

算法开始:

①判断当前雪粒子数目是否小于降雪粒子系统所容纳的雪粒子总数, 若小于, 则进行第②步;

②结合加速度与消逝时间参数计算当前雪粒子的新位置;

③判断当前雪粒子是否超出场景, 若是, 则删除当前粒子, 并将最后一个粒子移到当前位置, 否则, 当前雪粒子索引加1, 并返回第①步继续执行;

④累加并保存消逝时间;

⑤计算雪粒子新产生的数目, 若此时新数目少于雪粒子系统所容纳的粒子总数, 则转到第⑥步, 否退出;

⑥调用“雪粒子初始化”算法;

算法结束。

3 雪粒子系统渲染

OpenGL是美国SGI公司开发的三维图形库, 可以集成到各种操作系统中。利用OpenGL函数库可以创建动画的三维彩色图形交互式程序, 并能控制计算机图形技术来产生真实感图形。本文利用它的基本图形绘制、变换、着色技术得到了粒子系统的基本模型。OpenGL在计算机屏幕上渲染绘三维图形景观的基本骤步如下:第一步, 根据基本图形单元建立景物模型, 并且对所建立的模型进行数学描述, 其中点、线、多边形、图像和位图都可作为基本图形单元;第二步, 把景物模型放在三维空间中的合适位置, 并且设置视点以观察所感兴趣的景观;第三步, 计算模型号中所有物体的色彩, 其中的色彩根据应用要求来确定, 同时确定光照条件、纹理方式等;第四步, 把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素, 即光栅化。当然在如上四步中也可执行一些其他操作, 如自动消隐等。本文中具体算法首先通过雪粒子大小来反映透视效果, 并为了增强雪粒子系统的实时性, 尽量减少系统所绘制的多边形数量, 将雪粒子简化为二维四边形, 然后采用OpenGL的纹理融合技术将降雪的纹理图片映射到二维四边形上。雪粒子渲染算法描述如下:

算法名称:雪粒子系统渲染;

算法开始:

①设置OpenGL视点位置;

②绘制天空盒;

③构造显示列表, 绘制一个白色地形;

④开启混合模式, 并设置混合因子;

⑤将雪花纹理绑定;

⑥定义变量用于代表雪粒子的位置和大小;

⑦通过绘制四边形方式渲染雪粒子;

⑧关闭混合模式;

算法结束。

4 结语

本文按照粒子系统相关原理与结合OpenGL函数包, 使用Visual C++6.0模拟了自然界中降雪的自然过程。降雪粒子系统将雪粒子初始化区域限制在场景顶部长方体内, 大大减少所需粒子数量, 进而保证了算法的实时性。通过宏定义调整系统每秒产生雪粒子数及雪粒子大小, 可以产生不同程度、不同效果的降雪效果。为了更好地反映自然现象, 系统实时性和真实性需进一步加强。因此, 雪粒子重用技术、视景体优化技术及雪粒子受力情况是今后需努力的研究方向。

参考文献

[1]王宏伟, 刘越, 王涌天.面向对象的通用粒子系统设计[D].系统仿真学报, 2006, (8) .

[2]罗维佳, 都金康, 谢顺平.基于粒子系统的三维场地降雨实时模拟[D].中国图象图形学报, 2004, 9 (4) .

[3]蒋恒恒, 汤宝平, 章国稳.基于OpenGL与粒子系统实现三维喷泉模拟[J].计算机测量与控制, 2009, 17 (9) .

OpenGL粒子系统 篇2

关键词:虚拟现实;OpenGL;实体建模;虚拟校园

0引言

虚拟校园作为虚拟技术的一个应用,需运用计算机图形学以及图像处理技术结合三维可视化语言在屏幕上显示校园环境,并实现漫游、人机交互等功能。本文以太原理工大学阳泉学院校区为虚拟空间,主要实现对地形和建筑的建模,以及全方位的观测,并实现在虚拟空间中的漫游功能,使观察者无需到达实地就有身临其境的感觉。

1虚拟校园漫游系统的设计

虚拟校园漫游系统功能实用,主要包括:图形操作基本功能和手动漫游功能。

(1)图形操作基本功能

主要实现地图和景点图片的浏览功能,提供全景、放大、缩小等基本的地图操作功能。

(2)手动漫游功能

该系统是为方便学校管理规划而设计开发的,它提供了多种交互手段,用户和系统的交互主要通过鼠标和键盘进行。通过w、a、s、d键上下左右移动,利用鼠标控制前进的方向,用户可以有效地定位检索出校园最新信息。

2虚拟校园实体建模实现

虚拟校园实体建模是系统最主要的部分,内容包括:资料的收集、底图的生成、立体模型的制作、三维贴图到校园立体图的绘制等。我们通过数码相机采集贴图,在photoshop cs2中对贴图进行处理,得到素材,在VC中建立函数,套用OpenGL函数库构建模型。

2.1虚拟校园实体模型的构成

本文对学校做了建模,主要分为四个层次:第一层(y=0.0;y为地形的高度),包括二食堂、一号教学楼、实验楼、二号教学楼;第二层(y=0.6),在这一层中只有一号宿舍楼;第三层(y=1.2),二号宿舍楼和大食堂;第四层(y=1.8),在这一层中包括三号宿舍楼、四号宿舍楼和操场。

2.2建模方法

利用OpenGL能够绘制点、线和多边形,应用这些基本的形体,可以构造出几乎所有的三维模型。考虑到渲染速度,本文主要采用了三角形进行建模。在OpenGL中,可以编写代码创建三角形,但是创建时要指定三角形的三个顶点,这样的话要写很多代码且使整个建模过程产生大量的冗余代码。为了解决这一问题,本文采用了读取文本文档的方法来减少代码的冗余。在建模过程中又定义了绘制台阶函数DrawStair()、侧面体函数DrawWall()、横面体函数DrawFloor()来完成各种模型的建立。

2.3虚拟校园最终模型构建

虚拟校园最终模型的构建都是利用函数DrawGLScene()完成的。该函数在主函数WinMain()中被循环调用,直到程序退出为止。绘制效果如图1所示。

3虚拟校园漫游系统的开发过程

3.1设置像素格式

OpenGL的像素格式告诉系统在利用OpenGL绘制图形时所采用的颜色模式、颜色的位数。

3.2创建图形操作描述表

创建图形操作描述表并启用它后,才能调用OpenGL函数在窗口内进行各种图形操作。创建图形操作描述表利用MFC中视类(CView)的消息OnCreat()实现。

3.3 OpenGL窗口创建

首先是打开VC++6.0,然后创建一个新工程。创建一个新的Win32程序后,链接OpenGL库文件即可。

3.4纹理与贴图

纹理贴图就是利用数码相机将拍摄的实物照片作为所建立三维模型的纹理“贴”至相应的二维物体模型,使模拟的地物更具有真实感。

3.4.1纹理设置

比如绘制一面砖墙,就可以用一幅真实的砖墙图像或照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。下面介绍纹理创建的方法。

首先,创建一个文件句柄。句柄用来鉴别资源,它使程序能够访问此资源。开始先将句柄设为NULL,然后通过以下三个函数实现纹理设置。

AUX_RGBImageRec*LoadBMP(char *Filename)//载入位图图像 auxDIBImageLoad(Filename)//读取图像数据并将其返回 int LoadGLTextures()//栽入位图(调用上面的代码)并转换成纹理

3.4.2贴图制作

在创建虚拟校园的过程中,对建筑物的数据采集非常关键。由于在虚拟校园系统中各个建筑物的外观不一样,贴图也不—样,这对设计是—个难点。用数码相机取图片时,因为采集的是正面图,所以要保持和图在一个水平线上。

对采集来的数码相片我们用photoshop加以处理,比如对台阶贴图进行处理后,台阶的颜色下浅上深,产生了层次感,如图2所示。对各个楼的柱子贴图都要进行处理,使之看起来有立体感,如图3所示。另外本文采用的贴图都是正方形的,有的贴图还需要重复粘贴。比如学院的草地边的条砖路,它的贴图做到了左右上下都对称,重合在一起显得比较协调。贴图处理后效果如图4所示。

3.5树的实现

树是通过定义一个类Tree来实现的。由于树的形状不像建筑那样规则,因此它的构造也是相当复杂的。本文中树的建模过程如下。

3.5.1树叶纹理的制作

树叶纹理的制作是实现树的难点。树叶的纹理是由两张贴图生成的,一张是纹理的透明贴图branchAlphal.bmp,另一张是纹理的背景贴图branchl.bmp。通过两张贴图的合成生成树叶的纹理,可用bool Tree::MakeAlphaTextureBind(char*TextureFileName,char*AlphaFileName,unsigned int*TexturelD)函数实现。

3.5.2树的模型构建

树的模型构建分两个部分,树杆的构建和树枝的构建。可用以下函数实现。

void Tree::Draw3DTree(float SzTree)//绘制树杆

void Tree::DrawGreenTree()//绘制树枝

void Tree::DrawTop(float width,float height)//绘制树顶

3.6虚拟校园漫游系统界面的实现

本系统界面是作为一个类来实现的,主要是通过使用OpenGL绘图函数来构建。界面的搭建可分为三层。第一层:界面主背景,主要由一个四边形加上背景纹理贴图构成。第二层:选项菜单和说明层,在本层中主要是根据鼠标的位置和单击事件来选择不同的纹理贴图给人以变换的感觉,该层也是界面中最主要的一层。第三层:鼠标层,鼠标同样是由四边形加上背景纹理贴图构成,但纹理贴图方式是由透明加背景色实现。界面绘制效果如图5所示。

4虚拟仿真

4.1虚拟校园漫游系统的实现

虚拟校园漫游是交互性技术的重要体现。解决方法如下:①根据用户的指令旋转并变换镜头位置。②围绕原点,以与镜头相反的旋转方向来旋转世界(让人产生镜头旋转的错觉)。③以与镜头平移方式相反的方式来平移世界(让人产生镜头移动的错觉)。

4.1.1镜头的旋转

镜头的旋转是靠获取鼠标事件事实现的。在这里用到了三个全局变量和一个常量,heading是用来记录左右旋转的角度,yrot用来传递给渲染函数这个值。lookupdown用来记录上下旋转的角度。

4.1.2镜头的平移

镜头的平移是靠获取键盘事件来实现的。镜头的平移分为左移、右移、前进、后退,分别对应键盘的A、D、W、S键。

4.2碰撞检测

碰撞检测就检测观察者在行进中是否遇到了阻碍。主要实现办法是根据不同的地形或建筑设定不同的高度值(也就是Y值),然后在行进中检测Y值的变化,如果在行进的某一瞬间Y值的变化超过某一范围则限制x或z值的变化。

5结束语

maya粒子系统学习笔记总结 篇3

1.用粒子系统时,涉及到动力学的解算,打开preferences,在playback-playback speed的模式选择为play every frame,然后把帧数提高,在file-new scene,在new scene options的playback start/end和animation start/end。

2.particles-create emitter来创建粒子发射器,打开发射器的属性,emitter type-directional(有方向性的发射器),omni(全方位的发射器),surface(表面发射器),curve(曲线发射器),volume(体积发射器)。

3.emitter-distance/direction attributes,min distance和max distance是控制粒子发射范围,最小范围和最大范围。

4.particleshape-render attitudes,particle render type,在这里可以选择粒子类型。

5.从模型上发射粒子,emit form object。Omni是全方位发射粒子,在物体的每个节点都会发射粒子,相当于每个节点都是发射器一样。和模型点的数量和位置有关。directional是方向性的发射粒子,也是跟物体节点的数量和位置有关,也和物体的法线有关,显示法线的方法:display-polygons-face normals surface是表面发射粒子,就是模型的表面上随机的发射粒子。curves是曲线发射,在线或线的周围随机发射粒子。

注意:在曲线上发射粒子,不要使用surface方式,因为这是曲面方式,曲线没有面,所以发射不出粒子。

6.体积发射器的创建:particles-create emitter,options-emitter type选择volume,在属性栏中,volume shape可以体积发射器的形状。

在particleshape,count是粒子的数量,max count为-1时,是无限个粒子发射,改成其他数字就是粒子的最大数量。

勾选die on emission volume exit,粒子只在发射器的内部发射粒子。

7.让多个发射器发射同一套粒子:window-relationship editor-dynamic relationships 先选中粒子(particle),在selection modes:选择emitters,里面会呈现出场上的发射器,按下其中一个发射器,有颜色的话,说明该发射器可以发射粒子,如果没有颜色的,说明该发射器不会发射粒子。

选中所有的发射器,即可是所有的发射器发射同一套粒子。

8.删除粒子,选中所有的粒子,按delete键删除。

9.选择directional发射器的粒子,是和模型点的数量和位置有关,发射器的属性栏中,spread是控制粒子的扩散范围的,spread的值达到1,粒子180度扩散。directionX,Y,Z是使粒子从哪个方向运动的。

10.particles-instancer(replacement);粒子替换 1:单个物体的粒子替换:先选中替换粒子的物体,然后选中粒子,注意是选中粒子,不是发射器,然后在particle instancer单击,即可进行粒子替换。2:多个物体的粒子替换:(1)先选中替换粒子的物体,这时不用选中粒子,打开particle instancer options,instanced objects的框里会有替换的物体,然后勾选allow all data types,就是允许所有的数据类型,然后单击apply应用。

在particleShape1里有个add dynamic attributes(添加动态属性),单击general添加属性,在long name输入属性的名字,在data type里勾选float,在attitude type勾选per particle(array),然后单击add添加属性。

(2)在per particle(array)attributes,会多出一个属性,假如你刚才属性的名字叫num,在这里就会多出这个num属性,选中num属性,右键-creation expression(创建表达式),弹出expression editor,在expression里输入表达式:particleShape1.num = rand(0,2);rand是random function(随机函数),rand(0,2)是索引从0开始,2是只有2个替换粒子的物体。

general options的object index里选择新添加的属性就行了,在这里选择num。

(3)要继续添加替换粒子的物体,选中该粒子,然后在属性编辑器中,选择focus-particle1,在选择instancer1的instanced objects,单击add selection即可添加物体。

注意这时要改变脚本,打开num的表达式编辑器,然后修改脚本,particleShape1.num = rand(0,3);改为3,既可以使用3个替换粒子的物体。如此类推,添加多少个,就改多少。

11.particle-create emitter,打开emitter options,emitter type选择volume,就可以创建一个体积发射器。

体积发射器的粒子发射的方向是由Along Axis这个轴向决定的,设置正值后,粒子会向上移动。

12.在物体大纲里,选中粒子,然后按ctrl+H,可以隐藏粒子。shift+H显示粒子。

13.(1)particles-particle tool(画粒子工具),number of particles是画出粒子的数目 在场景单击时,在回车之前,都可以删除局部粒子,只要按delete键就可以删除了,按insert键可以调整粒子的位置,按回车才确定粒子的形成。

(2)当number of particles的值超过1时,maximum radius(最大半径)就会激活。这样可以创建多个粒子。

(3)勾选sketch particles后,按住鼠标左键就可以连续的生产粒子。(4)particle spacing是控制粒子与粒子之间的间距。

(5)勾选create particle gird,创建粒子网格,在场景单击两个点,按enter键既可以创建出一个网格的粒子。

此时placement是with cursor,当使with text fields,则是根据minimum corner和maximum corner的值,再按enter键就可创建粒子阵列。这样就可以快速的创建粒子阵。

14.在粒子阵中,是某一排粒子替换成其他物体,选选中两个物体进行粒子替换后,在particleShape1里有个add dynamic attributes(添加动态属性),单击general添加属性,在long name输入属性的名字,在data type里勾选float,在attitude type勾选per particle(array),然后单击add添加属性。然后在场景中单击右键-particle,在选中某一排粒子,在window-general editors-component editor,在component editor的particle中,会显示你选中的粒子,然后最右边会出现新添加的属性,例如ID,先看一下你所要替换的粒子的索引是多少,如果是1的话,则全部都改为1.最后在general options的object index里选择新添加的属性就行了,在这里选择ID即可,名字可以任意取的。

15.用场来控制多个粒子的运动:field-uniform,建立一个统一场,在layer editor里修改某些属性,magnitude是场的大小,attenuation是衰减值。可以对场的大小做关键帧。在particleshape的conserve(使守恒,可以说是惯性),把其值改为0,那么粒子就不会一直的运动了。

16.粒子的类型:render attributes-particle render type point:小圆点。

multiPoint:每一个粒子周围都有额外的粒子。spheres:小球

sprite:精灵贴图,每一张图都朝向摄像机。streak:适合制作雨,火星。multistreak:同上。

粒子分为硬件粒子和软件粒子:

后面有(s/w)对应软件粒子,其他为硬件粒子。

numeric这个粒子类型是显示粒子的ID号,是不能渲染的。

在render view 里选择maya hardware来渲染硬件粒子,maya software来渲染软件粒子。硬件渲染速度优于软件渲染,品质则略差。mental ray是两种粒子都可以渲染的。

17.(1)soft/rigid bodies-create soft body 建立柔体,柔体实际上也是使用了粒子系统。建立柔体之后,模型每一个点上都有一个粒子,这样可以使粒子来控制模型。给粒子添加一个扰乱场(fields-turbulence),模型会发生形变。

(2)用柔体来模拟凹凸地形,创建一个surface曲面,然后创建柔体,接着添加一个扰乱场,最后结合雕刻工具(就是在polygon模式下的mesh-sculpt geometry tool)来形成凹凸的平面。如果你觉得这样可以了,就要初始化粒子,solvers-initial state-set for selected初始化粒子。

(3)加弹簧,使粒子与其它的物体产生联系,soft/rigid bodies-create springs。先选中粒子,然后在选中物体,最后再建立弹簧即可。

要想某些粒子和物体建立弹簧的话,要右键-particle,才可以选中粒子。

18.建立刚体;主动刚体(active rigidbody)和被动刚体(passive rigidbody)主动刚体碰撞到被动刚体后,会产生反应,会发生反弹的效果。注意:不要对主动刚体建立关键帧,被动刚体可以建立关键帧。被动刚体不会受到场的影响,即不会受到动力学的影响。复制刚体后,刚体还是一样的,必须重新创建刚体。

在大纲,先选中刚体,再加选场,在fields-affect selected object(s)建立刚体与场的链接。想在大纲中看到刚体,就要按outliner的display-shapes勾选上就能看到了。

创建刚体的时候,要把pulldownIt这个破碎插件去掉,去掉方法:

window-settings/preference-plug-in manager,把pdimaya.mll的loaded和auto loaded去掉勾选即可。

19.solvers-memory caching 将物体的运动存储到内存不是硬盘中。

执行memory caching-enable后,可以倒着播放,可以在时间线上自由拖动。当你对物体的属性进行修改后,必须执行memory caching-delete才可以看到修改后的效果。执行memory caching-disable,就不可以执行memory caching(记忆缓存)

20.烘焙关键帧:当你进行动力学解算之后,这样就可以转换为关键帧,方便别人做动画,渲染等。

动力学计算是比较慢的,转换为关键帧后,就不会慢了。edit-keys-bake simulation 烘焙关键帧:

bake simulation options:在channels默认的是all keyable,就是所有可以建立关键帧的属性都进行烘焙,其实有时候没有这个必要全都烘焙。

这时你就选择from channel box,在右侧channel box栏中可以看到建立了关键帧的属性,淡黄色的都是,然后选中这些属性进行烘焙。

21.edit-delete by type-rigid bodies 删除刚体

22.如果你觉得烘焙后的关键帧太多太密集,打开window-animation editors-graph editor,先选中有关键帧的曲线,在curves-resample curve,options里,time step的值,把其值增大,从而减少关键帧的数量。

如果设置为10的话,就是每10帧建立一个关键帧。

23.effect-create fire:创建火

在outliner选中particle,然后在属性面板的particleshape1的goal uv set name:(1)fire scale:火焰的缩放(2)fire speed:火焰的速度(3)fire direction:火焰的方向(4)fire density:火焰的密度

(5)fire turbulence:火焰的紊乱值(6)fire start radius:火焰初始半径(7)fire end radius:火焰结束的半径(8)fire intensity:火焰的强度(9)fire lifespan:火焰的生命值

在render attributes-particle render type可以选择粒子的种类。

24.effect-create smoke: file-project-set 设置工程目录

将烟的序列图放在sourceimages下 序列图要带有alpha通道

选中物体或着某些面,然后在create smoke effect options:

sprite image name 输入烟雾序列图的第一张图的名称包括扩展名,并且要勾选cycle image即可创建烟雾。

在smokeparticleshape1的render attributes: sprite scaleX/Y :整体控制烟的大小。sprite twist :整体控制烟的旋转角度。

在smokeparticleshape1-extra attributes smoke opacity:控制烟的不透明度。

smoke threshold:控制什么时候这些烟变得不透明 0代表刚开始的地方烟的透明度小,即烟越浓。1代表结束的地方烟的透明度小,即烟越浓。还可以对烟添加扰乱场

sprite类型的粒子是硬件粒子使用maya hardware硬件渲染。

在smokeemitter1的basic emitter attributes的rate(paticle/sec)是烟雾的产生速率。

25.effect-create firework(创建烟火):(1)烟火的结构:

launch position(烟火发射位置)trails(烟火轨迹)

bursts or sparks(烟火盛开部分)max burst speed 控制烟火盛开大小

min/max sparks count 控制焰火盛开部分火星数量

show all burst/launch position 显示粒子ID号只有0和1两个值,0为off,1为on trial emit speed 速度的倍数

trial min/max tail size 控制trail(轨迹)的大小

(2)display geometry设置为off 硬件渲染得不到发光效果。选中fireworksrockets的属性,在fireworkrocketsshape: 勾选上show burst/launch position 显示粒子ID号 launch frame 控制哪一帧烟火发射

勾选上show burst posmanip修改烟火盛开位置。

show launch posmanip修改烟火发射器的位置。注意:勾选上上面两个按钮之后,会自动弹到别的面版,这时,在属性面板上的list-auto load selected attitude去掉勾选就行了。

26.effects-create lighting:创建闪电(10crete lighting effect options: 假设在四个圆环来做闪电的媒介---在creation options :----选择all 每一个圆环之间都会建立lighting 选择in order 按顺序建立lighting 选择from first 是使每个圆环都喝第一个选中的圆环连接。最好在大纲里来进行选中比较方便,选中的第一个就是闪电的链接球了。(2)制作魔法球:

先建立一个透明的大球,在大球的中间建立一个小球,然后建立多个小球,让它们和大球产生约束。

建立约束的方法:在animation模块 constraints-geometry 将小球限定到大球上。必须先选中大球,在选中小球才可以建立约束。

然后对小球做动画,做完动画后,你想小球一直不停的反复运动,在window-animation editor-graph editor,curves-post infinity-oscillate 使小球一直运动。(3)在这里选择from first的模式curves segments 是闪电的段数。闪电的属性在lightning。thickness 是闪电的厚度。max spread 控制lighting 的平滑度

(4)window-general editors-connection editor(连接编辑器)使每一个属性控制多个属性,在大纲里选中物体,然后打开连接编辑器,在左边选中属性后,在后边也选择属性,最后点击reload right即可,即左边物体的属性控制右边物体的某个属性。

可使一个物体的某个属性来控制多个物体的某个属性,只要在右边栏选中属性后,依次在大纲里选择物体即可。

27.effectscreate shatter 制作破碎(1)surface shatter(表面破碎)可以删除历史,再执行破碎命令 options:

shard count:是破碎的数量。

extrude shards 控制碎片的厚度。extrude shards<0 碎片厚度向内挤压。extrude shards>0 碎片厚度向外挤压。seed value=0 每次破碎效果不一样。seed value>0 每次破碎效果一样。

在channel box里的polyextrudeface2的local translate Z 控制破碎之后碎片厚度。

(2)solid shatter(固体破碎):

固体破碎后,破碎的物体时实心的,而且是黄色的破碎面。

在solid shatter的options-edge jagginess这是控制边的平滑程度。edge jagginess>0 得到不平滑的表面

勾选link to shards 生成一个shatter属性,这是控制原模型和破碎模型的显示。

小球碰撞平面:

创建一个平面,平面的collision layer值为-1 能够和小球发生碰撞。

因为小球的collision layer为0,要想发生碰撞,平面的collision layer的值必须比小球的collision layer的值小。给小球实施破碎,post operation选为rigid bodies with collisions off,并且勾选link to shards。勾选link to shards,原来的小球生成一个shatter属性,0为off,既不显示破碎,1为on,即显示破碎。

可以通过它建立关键帧,让它刚开始为小球,到快要碰撞的时候,把shatter为on即可。

28.crack shatter(裂缝破碎):

要先选中一个点后,然后再进行破碎。布揉动效果:

post operation选为softbodies with goals original surface:

nothing:是对原来的模型不做任何处理,破碎后依然保留,hide:是对原来的模型进行隐藏,只显示破碎后的模型。delete:是对原来的模型进行删除,只留下破碎的模型。

29.effects-create curve flow 使粒子沿路径运动 通过曲线来控制运动轨迹。

在大纲里选择flow_particle,在flow_particleshape的render attitudes的particle render type里选择粒子类型。

选中曲线,右键-control vertex,进入点的编辑模式,对曲线进行修改,粒子也会随着曲线运动。

曲线的圆环是控制粒子活动范围的边界。

在大纲里circles-flow_scalableCircles里面的control_circle,这里有很多个圆,选中这些圆,在layer editor有scale X可以统一调整圆环的大小。

在大纲里的flow的layer editor:

lifespan 控制粒子生命周期粒子运动速度。emission rate是控制粒子的速率。

locator XXX position的locator越密集粒子速度越慢。

30.effects-create surface flow(使粒子沿模型表面运动):

不要在大纲中手动删除surface flow,必须在effects-delete surface flow,在其options-delete surface flow particles 彻底清除。如果你觉得粒子发射的情况不对,在surface flow effect options的manipulators along选择UV的方向即可。

surface flow effect options:

control resolution:确定控制器的数量

sub-control resolution:在两个控制器之间添加子控制器的数量,在surfaceflow的属性面板-extra attributes,把display sub manips,就可以显示子控制器了。

surfaceflow属性: VLoction 0-4:调位置可以改变粒子速度

min/maxU 0-4:调节控制器的长度控制哪些地方有粒子。max/min distance:调节控制器的宽度控制粒子运动范围。max age ratio1: 控制粒子在哪里死亡。

goal weight1:控制粒子是否可以很好的贴合着模型运动。

为粒子添加颜色:

在大纲选中粒子,在属性面板,particleshape1-add dynamic attributes,单击color,然后勾选add per particle attitude 为每一个粒子添加颜色

这是per particle(array)attributes会多出一个属性,就是RGB PP。右键RGB PP-create ramp(创建渐变色)取消RGB PP,右键-break connection 要想粒子沿着UV轴运动,右键-create ramp option,在input U和input V里分别选择parent U和parent V即可。

render attitudes里的particle render type(粒子类型)选择streak,streak是条纹形的粒子。

31.point粒子属性:

points 为硬件粒子maya hardware渲染 particleshape-render attitudes: 按下current render type----勾选上color accum(accumulation)粒子交叠越多越亮。normal dir(direction)与灯光有关系只有1,2,3三个值。

normal dir值为1 粒子朝向灯光移动它们被照亮远离灯光变暗。normal dir值为3 3与1完全相反。normal dir值为2 粒子背后没有光。point size:点粒子的大小。

点击color按钮勾选add per object attitude为粒子整体添加颜色。

32.streak粒子属性;particleshape-render attitudes: 按下current render type----tail fade值为1 头尾一样粗,控制头尾的粗细。tail size 控制streak粒子长度

emitter属性:

streak粒子的长度与速度有关 speed值越大长度越长。tangent speed 正负数粒子的旋转方向不同。

33.multipoint 每一个粒子周围都有额外的粒子。

使用少量粒子用multipoint得到许多粒子不会影响模拟速度。normal speed值为-1 改变粒子发射方向。multi count:增加额外粒子的数量 multi radius:是粒子之间的距离。

34.Numeric粒子属性:

这是显示粒子的ID号的粒子类型,这是不能渲染的。particleshape-render attitudes: 按下current render type----勾选selected only 只显示选中的粒子的属性。在attitude name 上输入mass 显示质量 输入lifespan 显示生命值

把lifespan mode选为live forever,输入lifespanPP显示INF是说明粒子永远存在。输入velocity 显示速度

35.spheres粒子属性:

一般模型使用柔体后,显示的是point粒子 这是可以用spheres粒子来方便观察。它是硬件渲染的。

36.sprites粒子属性:

每一个粒子上可以现实相同或者不同的图片序列 使用的图片最好带有alpha通道 在导入贴图的时候: file:

勾选use image sequence 使用序列图。按顺序的显示序列图:

image number右键-edit expression 表达式:file1.frameExtension=frame % 8;意思:就是当前的帧数除以8后,所得的余数就是显示序列图的序号,如果是1,就显示序号为1的图。ctrl+鼠标中键放大表达式。

37.blobby surfaces粒子属性: 这是软件粒子。

particleshape-render attitudes: 按下current render type----threshold 控制粒子与粒子的融合程度

blobby surfaces 类型的粒子可以使用材质。使用这个粒子可以实现液体融合的效果。

38.cloud粒子属性:

给粒子添加材质,右键-particlecloud particlecloud-common material attributes---color:调整粒子的颜色。transparency(透明度):也可以设置颜色。transparency属性:

(1)density:云彩的密度

(2)blob map 透明度的比例系数。打开颜色拾取器,在V的框输入值。(3)roundness:云彩的圆滑度。diffuse coeff与光线的发射有关

当diffuse coeff的值设为大于0,surface color就会激活,surface color的颜色会和云彩的颜色叠加起来,使云彩周围有了颜色。

39.让cloud具有blobby surfaces的表象:

particlecloud2SG的surface material,在surface material属性上使用ramp shader,并且可以使用预设。但是这时渲染是没有效果的。这时要选中粒子,回到particlecloud的面板,particlecloud-render attitudes: 按下current render type----** 有个surface shading,把它的值进行调整就会出现映射了。threshold是粒子的融合程度,也进行调整。

40.tube粒子属性:

particlecloud-render attitudes: 按下current render type----tail size 控制tube类型粒子的长度。

上一篇:软件开发周期下一篇:建筑设计细节