数码资源网·下载

展开

硬件渲染粒子与软件渲染元素结合

作者:网友整理
潜入地狱v1.4.5

潜入地狱v1.4.5 13.56M /

点击下载
单人接龙王v1.4.9

单人接龙王v1.4.9 78.51M /

点击下载
武林歪传手游v1.5.9

武林歪传手游v1.5.9 28.21M /

点击下载
I 、创建一个 Sprite 图像

  用一个简单的点发射器和软件渲染粒子云,创建一系列用作 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

  粒子堆积在地上,它们就像是被重力拉下来的,接着又被紊乱场拉上天。赋予紊乱,粒子就像是液体在运动。

加载全部内容

相关文章
相关专题