硬件渲染粒子与软件渲染元素结合
作者:网友整理潜入地狱v1.4.5 13.56M /
点击下载单人接龙王v1.4.9 78.51M /
点击下载武林歪传手游v1.5.9 28.21M /
点击下载用一个简单的点发射器和软件渲染粒子云,创建一系列用作 sprite 纹理的图像,粒子产生和消失的动画——结合软件渲染粒子云的动画和体积纹理——能够制作出变化多端的动画纹理。
1 、设置 Timeline Range :从 1 到 60
2 、创建一个点发射器
3 、第 30 帧, rate 关键帧为 100
4 、第 31 帧, rate 关键帧为 0
5 、设置粒子 lifespan 为 lifespanRandom
6 、设置 lifespanRandom 为 0.3
7 、设置 lifespan 为 1
回放动画,注意:第 60 帧粒子的生成和消失。
1 、设置 conserve 为 0.9
2 、增加一个紊乱场
3 、设置 magnitude 为 25
4 、设置 attenuation 为 0
5 、设置 frequency 为 2
6 、第 1 帧,关键帧 TranslateY 为 0
7 、第 60 关键帧,关键帧 TranslateY 为 5
回放动画,注意:粒子现在更随机自由地运动并夹在一起。这些团块在软件渲染里有更大的密度,给最终的精灵影像添加了更多的变换。
1 、创建一个粒子云 shader
2 、设置颜色为 100% 的白色
3 、创建一个 Volume Noise 3D Texture
4 、将 3D Texture Placement 做为动画紊乱场的父物体
5 、将 Volume Noise 连接到粒子云材质的 Blob Map 属性
6 、打开 Volume Noise 纹理属性编辑器
7 、设置 Threshold 为 0
8 、设置 Amplitude 为 1
9 、设置 Ratio 为 0.4
10 、设置 Frequency Ratio 为 0.2
11 、设置 Depth Max 为 5
12 、设置 Scale 为 3.0,3.0,3.0
13 、设置 Noise Type 为 Wispy
不同的气体要求不同的图像,从壶里发出的蒸汽更细弱一点,但从烟囱里出来的烟雾更浓密更“圆”一点。云层是浓密的,但却有一个纤细的边,你就要为你的图像复制这样的边。一旦增加了不同的扭曲和缩放值到你的 sprite 粒子,而且还有成打的粒子彼此重叠,那它们都将混合并创建理想的外观。
1 、打开粒子物体属性编辑器
2 、设置粒子渲染类型为 cloud
3 、点击的 Add Attibutes 后的 Current Render Type
4 、打开 Better Illumination
5 、为 OpacityPP 创建一个 ramp
6 、 ramp 底部和顶部设置为黑色,中间为白色
7 、设置 Interpolation 为 Smooth
8 、增加一个预粒子 radiusPP 属性
9 、创建表达式类型里:
radiusPP=rand(0.3,1.3)
从顶部摄影机观看场景,设置视口大小,确保这样粒子到了窗口的边却不会跑出边外。
1 、 打开全局渲染窗口
2 、 设置理想的文件名
cg/image/ 的粒子系统在为 sprite 图像命名方面是非常特别的, cg/image/ 倾向于用 Name.# 这样的命名格式,例如: cloudTex.1, cloudTex.20 等等。
1 、 设置 Frame/Animation Ext 为 name.#
2 、 设置 Frame Range 为 1-60
3 、 设置 camera 为 Top
4 、 打开 RGB 和 Alpha 通道
一个 Sprite 图像应该始终是正方形的,比如 1 : 1 的比例。即使图像分辨率非常高,但其大小也不应该超过 512 Χ 512 。因为图像在硬件里渲染,所以需要图形卡里的纹理储存器。每个 sprite 图像被载入纹理储存器,所以,如果你有 100 个不同的图像,它们都是 512 Χ 512 分辨率,那多数图形卡将没有足够的内存有效地回放场景,并会“卡壳”。在帧里一个 sprite 应该是多大,这才是获得分辨率的真正决定性因素。考虑到一旦你运用了运动模糊 sprite ,任何像素都趋向于完全消失,你可以用更低分辨率的图像操作。
设置分辨率为 128*128
附加 tweaks 到渲染图像序列,比如添加模糊,调整对比度,用一个合成包修改 alpha 通道。
最后,渲染图像序列。
[page]
II 、粒子发射
重新设置 frame range 为 1-100
当一辆汽车踢起灰尘的时候,从轮胎下半部分会发出像一团云样的东西。刻化这个发射形状的简单方法就是用一个体积发射器。
打开 wheelsOnPath.ma 文件 .
在这个场景里,沿着凹凸表面的一条运动路径有一个简单的汽车装备。车轮通过一个 closestPiontOnSurface 约束粘附在地面。
现在从轮胎发射粒子。
1 、创建一个发射器
2 、设置 Emitter Type 为 Volume
3 、设置 Volume shape 为 sphere
尘埃没有特定的运动方向,其运动源自汽车周围的空气运动,因此,你不用在体积形状基础上给与尘埃任何速度。
1 、设置 Away From Center 为 0
2 、设置 Away From Axis 为 0
3 、设置 Along Axis 为 0
4 、设置 Around Axis 为 0
但是,尘埃的运动基于汽车运动的基础上,所以,汽车踢起的尘埃要稍微随着汽车的向前运动而向前运动。
1 、打开 outliner
2 、选择 Fitire 和你刚才创建的发射器: Emitter1
3 、点约束和方向约束发射器到轮胎
4 、缩放发射器,大概有轮胎的 1/3 高,长于和宽于轮胎大约 1/4 。
5 、调整发射器的 VolumeOffsetZ 属性,重新定位发射器,低于轮胎 1/3 。
回放时,你会看见左前轮胎后面有粒子轨迹。
1 、复制 Emitter1 三次
2 、删除复制品潜在的点约束和方向约束节点
3 、点约束、方向约束每个发射器到每个轮胎,这样,每个轮胎都有了一个发射器。
4 、重新命名这些发射器为: IEmitter,frEmitter,blEmitter,brEmitter
5 、用动力学关系编辑器,连接粒子物体到每个发射器。
回放,你会看见所有轮胎左后方都留下了一道粒子轨迹。
当一辆汽车奔跑在一条满是灰尘的溪谷时,它会碰到各种各样的凹凸地,水沟,岩石和沙地,每次碰撞的结果就是:汽车不仅改变一点点方向,而且汽车踢起的尘土和碎片数量都会不同,利用 noise 和 rand 功能,你可以很容易地模拟这种随意的变化。
1 、选择 flEmitter
2 、在通道盒里,右键点击任何属性并选择 Expressions ……
3 、在 Expression Editor 中键入:
float $rate=100.0
float $rateRand=0.5
flEmitter.rate=$rate+$rateRand*$rate*noise(frame)
这个表达式运用了 noise 功能,可以依据不同的帧在 -1 到 1 之间取一个值。这个值将与 rate 的百分数相乘再相加。
FlEmitter 发射器的 rate 的最终结果是围绕着 $rate 大概成平均状,但是,这个参数可以低到 0.5 ,也可以高到 1.5 ,主要看 noise 值的回馈。
不是随便用一个数字发生器就可以得到声音功能的值,将声音功能视为一个预定的曲线,可以无限延伸,这个曲线在它的值里有各种各样的声音,但声音平滑插入,声音功能回到什么样的值依赖于你在曲线哪里取样。如果你给声音功能取 10 的值:
print(noise(10));
… cg/image/ 回到 -0.465903 的值
如果你给声音功能取 10.01 的值 :
print(noise(10.01));
… cg/image/ 回到 -0.474992 的值
参数表达式里:
flEmitter.rate=$rate+$rateRand*$rate*noise(frame)
…我们用“帧”作为声音输入,所以,每个帧的声音功能回到一个新的值。
既然帧以每帧的整数增加,来自声音功能的结果可能变化很大。如果你想从声音功能那里获得一个更加平滑的数字流,那就用“ time ”来代替 “ frame ”。
一样的输入值,声音功能返回的值也一样,所以,每个发射器需要用不同的输入值。
在表达式编辑器里,增加:
frEmitter.rate=$rate+$rateRand*$rate*noise(frame+100)
blEmitter.rate=$rate+$rateRand*$rate*noise(frame+200)
brEmitter.rate=$rate+$rateRand*$rate*noise(frame+300)
现在每个 rates 参数都是从声音曲线不同部分取样,回放时候,你会看见粒子的轨迹有点更加随意稀少了。
参数 rates 任何明显的提高都表示模拟轮胎碰到了凹凸块或者是岩石。发生碰撞的时候,粒子方向突然随意改变,就好像刚刚发生了一场小的爆炸。
因为声音功能对同样的输入总是返回到同样的值,所以,我们检查 rates 参数的一个突然变化并添加一些随意性到发射速度上。
在表达式编辑器里,添加:
float $flChange=noise(frame)-noise(frame-1);
float $flChange=noise(frame)-noise(frame-1);
float $frChange=noise(frame+100)-noise(frame+100-1);
float $blChange=noise(frame+200)-noise(frame+200-1);
float $flChange=noise(frame+300)-noise(frame+300-1);
float $randomSpeed=100;
flEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $flChange);
frEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $frChange);
blEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $blChange);
brEmitter.randomDirection=$randomSpeed*linstep(0.1,0.5, $brChange)
回放时,你会看在尘土轨迹甚至有更大的随意性,一些粒子飘浮空中,其他一些粒子保持静止状态。
[page]
III 、创建一个特效装备
在完成一个作品时,越多的给予使用者超越解算的控制越好,基于这种考虑,越复杂的参数设置会使使用者工作起来越困难。
你想要做的最后一件事就是:提供终端使用者一个复杂的表达式,这需要调试每个镜头。创建一个控制装备,用它驱动一个表达式的结果,你就可能给终端使用者一套控制表示式(表示式控制场景)的工具,这样,他们就不用自己编辑表达式就可以控制场景。
1 、选择发射器和粒子物体,把它们编成组。
2 、重新命名结果组节点为 dustcontrols
3 、选择组节点,并打开 Add Attribute 窗口
4 、添加下面的属性,维持 Float,Scalar 属性:
rate
rateRand
randSpeed
发射的表达式:
float $rate=100;
float $rateRand=0.5
float $radomSpeed=10;
替换成
float $rate=dustControls.rate;
float $rateRand=dustControls.rateRand
float $radomSpeed=dustControls.randSpeed;
现在你可以从表达式外控制这些变量。
控制节点的通道盒应该仅仅显示相关的属性,那些对解算没有影响的属性应该被挪开。变形属性,旋转属性和缩放属性不需要用来控制解算,所以,可以用 channel Control 窗口将它们关掉。将它们从通道盒挪开之前,先锁定它们,这样,使用者就不会偶尔变形,旋转或缩放该组。
IV. 创建尘土粒子运动
1 、重新命名 particle1 为 dustParticles
2 、设置 Particle Render Type 为 Sprites
3 、设置 Inherit Factor 为 0.2
4 、点击 play
粒子紧随车后,注意粒子能随在车后多长距离,那些以随意爆发速度发射的粒子是怎样漂浮远去的。粒子保存属性设置为 1 ,意味着每帧保持 100% 运动。既然粒子继承了发射器 20% 的运动,粒子就收到初始的爆发速度。粒子绝不会丢失速度,会继续沿着那个方向运动。
1 、选择 dustParticles
2 、设置 conserve 为 0.9
现在回放场景,你会看见粒子最初随着汽车运动,但是它们会很快就丢失向前运动的动力并开始落后,最后停止运动。
降低 conserve ,你可以用场来更好地控制粒子的运动。
1 、创建一个紊乱场并指派到尘土粒子
2 、设置 Magnitude 为 100
3 、设置 Attenuation 为 0
4 、设置 Frequency 为 3
5 、点击 play
粒子在紊乱场内继续运动并在随意方向扩展范围。紊乱场是 3D Noise ,就像一个三维程序上的纹理。将声音视为一个大理石质地的纹理,如果你动画纹理布置,你就会在空间运动三维声音。
选择 dustControls 节点,添加一个 turbulenceRise 属性,设置其值为 0.1 。
打开你一直在用于发射的表达式,在它的最后添加一行:
//Turbulence Rise
//
TurbulenceField1.ty=dustControls.turbulenceRise*frame;
当你回放场景时候,你看见尘土粒子沿 Y 轴向上运动,这是因为紊乱纹理随着场的变换而向上运动,粒子继续被这些纹理吸引。
依靠你正试图创建的尘土类型,不管它是一种细而轻的像粉笔一样的东西,还是更重的像被汽车踢起的泥土,在 Y 轴运动的紊乱场参数都会给你的粒子重力感觉:
不像气态物质,比如烟雾或者蒸汽(固体或液体变化成一种气体并升上天),尘土会保持固体状,但它是一种非常轻的固体,可以踢到空气中,并逗留在最轻的空气流上,最后落地。尘土越厚,就越重,落地越快。要获得尘土落地运动状态,做到以下两点:
1 、创建一个重力场并指定给 dustParticles
2 、设置重力场 magnitude 为 2
回放时候,即使紊乱场继续将粒子向上拉,粒子看起来还是更重。对于这种效果,重力场的大小与场景大小不相关。对重力场的 magnitude 调整,应该建立在你追求的外观基础上。
粒子现在穿透了地面,如果是一个非常细小的尘土,粒子落到地面就 ok 了,但是对于一个更厚重的尘土,你希望地上尘土堆积得厚重一点。
1 、选择地面平面、粒子,并碰撞。
2 、设置 Tessenllation Factor 为 2000
3 、设置 Resilience 为 0.1
4 、设置 Friction 为 0.3
粒子堆积在地上,它们就像是被重力拉下来的,接着又被紊乱场拉上天。赋予紊乱,粒子就像是液体在运动。
加载全部内容