Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

本教程向朋友们介绍Maya 硬件渲染粒子与软件渲染元素结合的具体方法,教程介绍的比较详细,希望对朋友们有所帮助!

I 、创建一个 Sprite 图像

  用一个简单的点发射器和软件渲染粒子云,创建一系列用作 sprite 纹理的图像,粒子产生和消失的动画——结合软件渲染粒子云的动画和体积纹理——能够制作出变化多端的动画纹理。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

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)

  从顶部摄影机观看场景,设置视口大小,确保这样粒子到了窗口的边却不会跑出边外。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

1 、 打开全局渲染窗口

2 、 设置理想的文件名

cg/image/ 的粒子系统在为 sprite 图像命名方面是非常特别的, cg/image/ 倾向于用 Name.# 这样的命名格式,例如: cloudTex.1, cloudTex.20 等等。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

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 通道。

  最后,渲染图像序列。

Maya 硬件渲染粒子与软件渲染元素结合
II 、粒子发射

  重新设置 frame range 为 1-100

  当一辆汽车踢起灰尘的时候,从轮胎下半部分会发出像一团云样的东西。刻化这个发射形状的简单方法就是用一个体积发射器。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  打开 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 。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  回放时,你会看见左前轮胎后面有粒子轨迹。

1 、复制 Emitter1 三次

2 、删除复制品潜在的点约束和方向约束节点

3 、点约束、方向约束每个发射器到每个轮胎,这样,每个轮胎都有了一个发射器。

4 、重新命名这些发射器为: IEmitter,frEmitter,blEmitter,brEmitter

5 、用动力学关系编辑器,连接粒子物体到每个发射器。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  回放,你会看见所有轮胎左后方都留下了一道粒子轨迹。

  当一辆汽车奔跑在一条满是灰尘的溪谷时,它会碰到各种各样的凹凸地,水沟,岩石和沙地,每次碰撞的结果就是:汽车不仅改变一点点方向,而且汽车踢起的尘土和碎片数量都会不同,利用 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 的值

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  如果你给声音功能取 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)

  回放时,你会看在尘土轨迹甚至有更大的随意性,一些粒子飘浮空中,其他一些粒子保持静止状态。

Maya 硬件渲染粒子与软件渲染元素结合
III 、创建一个特效装备

  在完成一个作品时,越多的给予使用者超越解算的控制越好,基于这种考虑,越复杂的参数设置会使使用者工作起来越困难。

  你想要做的最后一件事就是:提供终端使用者一个复杂的表锸剑?庑枰?魇悦扛鼍低贰4唇ㄒ桓隹刂谱氨福?盟???桓霰泶锸降慕峁??憔涂赡芨?斩耸褂谜咭惶卓刂票硎臼剑ū硎臼娇刂瞥【埃┑墓ぞ撸?庋???蔷筒挥米约罕嗉?泶锸骄涂梢钥刂瞥【啊?

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

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 窗口将它们关掉。将它们从通道盒挪开之前,先锁定它们,这样,使用者就不会偶尔变形,旋转或缩放该组。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

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 轴运动的紊乱场参数都会给你的粒子重力感觉:

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  不像气态物质,比如烟雾或者蒸汽(固体或液体变化成一种气体并升上天),尘土会保持固体状,但它是一种非常轻的固体,可以踢到空气中,并逗留在最轻的空气流上,最后落地。尘土越厚,就越重,落地越快。要获得尘土落地运动状态,做到以下两点:

1 、创建一个重力场并指定给 dustParticles

2 、设置重力场 magnitude 为 2

  回放时候,即使紊乱场继续将粒子向上拉,粒子看起来还是更重。对于这种效果,重力场的大小与场景大小不相关。对重力场的 magnitude 调整,应该建立在你追求的外观基础上。

  粒子现在穿透了地面,如果是一个非常细小的尘土,粒子落到地面就 ok 了,但是对于一个更厚重的尘土,你希望地上尘土堆积得厚重一点。

1 、选择地面平面、粒子,并碰撞。

2 、设置 Tessenllation Factor 为 2000

3 、设置 Resilience 为 0.1

4 、设置 Friction 为 0.3

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

Maya 硬件渲染粒子与软件渲染元素结合
V. 创建尘土粒子外观

  几个属性一起作用,以创建一个粒子模拟外观。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

粒子的生命周期

  粒子在模拟中,什么时候消失怎样消失,这在创建模拟形状和任何场一样重要。如果所有粒子以同样的速度消失,模拟就会看起来非常线性,非常假。体积效果就像烟雾和尘土用到 sprite 时,粒子的消失应该是不容易注意到的,它会在不同时间消失,而不管粒子什么时候从哪里发射出来。

  为了简化,我们将要用 lifespanRandom 模式开始:

1 、设置 lifespan Mode 为 Lifespan Random

2 、设置 Lifespan Random 为 1.5

3 、设置 Lifespan 为 2

  回放时,粒子会以随意方式消失。

Sprites-Assigning a Sprite Image Sequence

  打开属性编辑器,改变粒子渲染类型属性为 sprite 。

1 、点击 Add Attributes for Current Render Type 按钮

2 、设置 spriteScaleXPP 为 25

3 、设置 spriteScaleYPP 为 25

4 、打开 Multillster 或超图窗口

5 、创建一个 Lambert 材质

6 、添加一个纹理文件到 Lambert 材质的色彩属性

7 、将文件纹理的图像名字贴图到第一部分里你渲染过的 sprite 序列

8 、打开 Use Cache

9 、打开 Use Frame Extension

10 、第 1 帧,为 frame extension 设置一个值为 1 的关键帧

11 、第 60 帧,为 frame extension 设置一个值为 60 的关键帧(也可以是序列中的最后一幅图像 # )

12 、打开 Use Hardware Texture Cycling

13 、设置 Start Cycle Extension 为 1

14 、设置 End Cycle Extension 为 60

15 、指派 Lambert 材质到粒子

16 、打开纹理显示模式(热帧: 6 )

  回放时, sprite 是看不见的,当用硬件纹理循环时,你需要给 spritNumPP 指派一个数字,数字大小在纹理循环范围内。

  打开用于粒子的属性编辑器。

1 、在 Add Dynamic Attributes 栏下点击 General 按钮

2 、出现 Add Attubute 窗口,点击 Particle 栏

3 、选择 spriteNumPP

4 、点击 ok

5 、在 Attribute Editor 里,右键点击挨着 spritNumPP 属性的文字域,并选择 Create Ramp.

6 、在 arrayMapper1/outValuePP 域,点击鼠标右键并选择 Edit Array Mapper.

7 、设置 Min Value 为 1

8 、设置 Max Value 为 60

9 、 Ramp 节点负方向,设置 ramp 底端值为 black, 顶端为 white 。

  当你回放动画时,你会发现:直到 sprites 在汽车正后面的时候才显出来。为了修改这种现象,调整底端颜色入口的密度,增加它的值,直到你希望 sprites 出现的时候,。你也可以调整插入或者添加其他的颜色 entry 到 ramp ,以此控制粒子循环如何通过 sprites images 。

  注意:如果 sprites 图像边上有一个黑色轮廓, sprites 图像看起来就会像是燃烧的汽油或者是浓浓的烟雾。调整正在使用的文件纹理的 Alpha Offset ,设置它的值,小于 0 , -0.1 ,这样更好。另外,可以增加 colorOffset ,或者,也可以调整 sprites 的整个 alpha ,利用 color gain 或者合成包。

Maya 硬件渲染粒子与软件渲染元素结合
V. 创建尘土粒子外观

  Sprites- 调整 sprite Scale 和 Twist

  效果开始合成一起,但是还有改进的余地。当创建一个 sprite 基础上的效果的时候, sprites 顶部每个分层都赋予它最终效果。利用不同的缩放值和扭曲值并在此基础上动画,可添加角色到模拟。

  为粒子物体添加以下的动力学属性,方法和你添加 spritNumPP 属性一样:

spriteScaleXPP

spriteScaleYPP

spriteTwistPP

  在 Add Attibute 窗口 New 栏目里,保留 Float,Per Particle 属性添加以下属性:

randXPP

randYPP

randTwistPP

spriteTwistMultPP

spriteScaleMultPP

  给 spriteTwistMultPP 和 spriteScaleMultPP 贴上凹凸贴图,重新命名这些贴图,名字要能正确反映他们要连接的属性,可以命名为 spriteTwistramp , spriteScaleRamp 等等。反过来,于 spriteTwistMultPP 有联系的 rump 贴图,底端设为 black ,顶端设为 white 。

  打开粒子物体需要的 creation Expression 并键入:

//generate random numbers for X and X

//

float $randx=rand(0.3,1.3)

float $randy=rand(0.8,1.2)

//store a random number for X and Y

//

//

randXPP=$randx

randYPP=$randY

//set spriteScaleXPP and SpriteYPP

//

spriteScaleXPP=0

spriteScaleYPP=0

//set randTwistPP

//

randTwistPP=rand(-180,180)

  每个粒子 X,Y,Twist 的数值都是任意指派的,这些值会赋予每个粒子独特的特征,并会被用在 Runtime Expression 里。既然我们用 rand 功能生成值并且边缘功能返回结果总是不一样,那么,我们就在单粒子属性里保存这些值,以便以后使用。

  用 rump 给 spriteTwistMultPP 和 spriteScaleMultPP 贴图,也可将它们作为增效器,并给我们一个插值,但是,能否给我们一个 interpolation ,那就要看粒子的年龄如何。可以用常规表达式控制扭曲和放缩值,但是在控制基于时间的属性改变上,增加一个由 rump 控制的乘数,会给我们更大的控制灵活性。

  为什么用 0 值初始化 spriteScaleYPP 和 spriteScaleYPP ?因为 cg/image/ 的一个 bug , rump 在 Creation 上没有正确估算,产生了不可预料的结果。

  打开粒子物体需要的 Runtime Expression 并键入:

//set spriteScaleXPP and spriteScaleYPP

//

spriteScaleXPP =spriteScalex* spriteScaleMultPP*randXPP;

spriteScaleYPP=spriteXcaleY*spriteScaleMultPP*randYPP*randXPP

  为 sprite 渲染类型创建默认属性时, cg/image/ 添加了一个 spriteScaleX, spriteScaleY 和 spriteTwist 属性。如果没有这些属性的单粒子版本,比如 spriteScaleXPP , cg/image/ 就会用 scalar 属性代替,例如 spriteScale 。既然有了这些属性的单粒子版本,缩放版本就被忽略了。我不忽略它们,在全局增效器中,我习惯用他们作为表达式的一部分。用一个你众所周知的属性名字,这个名字不仅用在保存创建一个新属性阶段(作为增效器),也展示给使用者一个属性——具有相似的方式相似的功能。在通道盒里改变 spriteScaleX 或 spriteScaleY ,这会改变粒子总值。

在下面一行中:

spriteScaleXPP= spriteScaleY* spriteScaleMultPP*randYPP*randXPP;

spriteScaleYPP 和 spriteScaleXPP 的值大体相当,回到 creation expression, randYPP ,随意初始化一个值—— 0.8 至 1.2 之间,这会导致 sprite 在 x 轴成矩形的—— +/-20% 。

  添加下面几行到 runtime Expression :

//spriteTwistPP

//

spriteTwistPP+= spriteTwistMultPP*sign(spriteTwistPP)* spriteTwist;

  如果值是正的,用 sign 功能返回 1 ;如果值是负的,用 sign 功能返回 -1 。 spriteTwist 属性是用用默认 Sprite 属性创建的,在这种情况下,我们添加它的值到当前 sprite 的 twist 上,引起 sprite 每帧旋转。利用 spriteTwistMultPP ,你可以改变每个 sprite twist 的速率, sprite 越大,自转越慢。

  此时,你可以开始回放场景,交互式地调整被当作 spriteTwist, spriteScaleX 和 spriteSclaeY 属性创建的 rmaps 值。该阶段有很大的扭曲空间,要得到 sprites 正确的缩放和扭曲值需要花点时间,但是,利用 ramp 贴图,就可以创建一些非常有趣的效果。

  打开尘土粒子属性编辑器,在 Add Dynamic Attribute 栏点击 Opacity 按钮。

1 、为透明度创建 Per Object 和 Per Particle 属性

2 、点击 color 按钮,为色彩添加 Per Particle 属性

3 、点击 General 按钮,作为 Float,Per Particle 添加属性:

intensityPP

opacityOrgPP

opacityMultPP

4 、用 ramp 贴图为 opacityMulPP 贴图,正确重新命名。

5 、在 creation 表达式中键入

//opacityPP

//

opacityOrgPP=rand(0.1,0.4)

opacityPP=0

  用相对较低的值初始化透明度,该值保存在 opacityOrgPP 里, Runtime 表达式要用到它。

既然 spriteScaleXPP 和 spriteScaleYPP 属性已经设置 0 ,当 sprite 缩放到 0 并无法看见时,就没有必要初始化 opacityPP 一个值。

Maya 硬件渲染粒子与软件渲染元素结合
V. 创建尘土粒子外观

  选择使用 rgbPP

  添加下面的到 creation 表示式:

//rgbPP

//

float $intensity=rand(0.6,1.0);

intensityPP=$intensity

  对于 rgbPP ,我们将用一个 HSV 模式确定尘土的颜色,不用传统的红绿蓝模型。每个粒子有各自的值或亮度,粒子在一个简单的阴影技术基础上获得颜色,粒子是否改变颜色要看是否被阴影,并将保留一个完整的密度值。该信息被合成器用来单独扭曲粒子(从粒子密度)阴影。

  添加下面东西到 runtime 表达式:

//opacityPP

//

opacityPP= opacityMultPP* opacityOrgPP* opacity;

  利用通道盒里的透明度属性,使用者现在可以全部调整所有粒子物体的透明度,同时保持每个粒子的独特的 opacityOrgPP 。并修改粒子生命周期的透明度(使用连接到 opacityMultPP 的 ramp )。

体积阴影

  体积阴影是获得真实云和尘土效果的关键因素。体积阴影是通过粒子投射阴影到每个粒子身上而获得的(通过透明度)。不幸的是,这种技术只有在软件云粒子渲染中可以有效,而且耗时之多,令人难以置信。有成打的技术可以模仿这类效果,而且只花很少的时间。

  你要用到的技术是我的一个同事 Eyal Erez 教我的,他和我一起合作制作 The Kolektiv 。将现在粒子所在位置和粒子"出生"的位置 birthWorldPosition 相比较,看现在粒子增加了多少高度,你就可以计算出一个值,粒子越低,值就越低。该技术对粒子系统来说很不错,从相对等高的高度发射的粒子不会升或者降太多(和粒子最初位置相比较)。

LEGO 投射方面的"领头羊"合成器 ----Gary Jackamuk 需要一个粒子路径,这样就可以调整颜色,以和 CG 背景元素的阴影及灯光匹配。通常,当软件为合成渲染一个元素时候,你可以输出一个单独的 shadow pass ,它可以被合成器单独调整。 Gray 要给粒子上多少色,这要看粒子获得的阴影数量。

  我们可以提供一个给粒子上色和阴影的解决办法,使它效果更好。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

  在 Add Dynamic Attributes 栏里点击 General 按钮,到 Particle 栏。

1 、创建 birthWorldPosition 属性

2 、添加下面东西到 runtime 表达式:

//rgbPP

//

vector $pos=position;

vector $birthPos=birthWorldPosition;

float $hue=(240+120*smoothstep(-1,1, $pos.Y-$birthPos.y))/360;

rgbPP=hsr_to_rgb(%26lt;%26lt;$hue,1.0,intensityPP%26gt;%26gt;);

  为了控制粒子颜色,我们规格化粒子所在位置和粒子产生位置之间的差数,该规格发生在 -1 和 1 之间,这意味着如果一个粒子比它产生的位置低于 1 个单位,我们就会得到一个 0 的值;如果高于 1 个单位,则会得到一个 1 的值,然后,这些值要被调整为沿着色轮 ----100% 蓝色和 100% 红色之间,或者 240 和 360 之间。参考颜色选择窗口,找到其它颜色的色彩值。

  粒子物体的 rgbPP 属性读取 rgb 值,而不是 hsv 值,所以,你需要利用 hsv_to_rgb 函数将 hsv 转换成 rgb 。该功能视一个矢量为输入,那也是为什么我们用 %26lt;%26lt;%26gt;%26gt; 来为色彩、饱和度、密度压缩这些值的原因。色彩值最好为 0-1 ,而不是 0-360 ,所以我们要用 360 来除 hue 值。饱和度仍为 1.0 ,但是,你有个机会:通过修改饱和度(在你决定的值的基础上),添加路径附加消息到合成器上,最后,粒子的亮度都被考进 hsv 的 value 中。

  在这一点上,仍然可以对各种各样的 rumps 贴图和场做大量的扭曲,以此获得你想要的外观。

  打开 wheeOnPath_Part6.ma 文件,看看我拿出的结果。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

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

缓存

  在硬件渲染前隐藏粒子,如果没有隐藏,运动模糊就不会产生正确的结果, pickup 帧就不会和原始帧匹配。

Alpha 通道

  当 sprites 透明值少于 1 时,由 Hardware Render Buffer 生成的 Alpha 通道是不正确的。与彩色通道不同,考虑到当前粒子后的粒子颜色, Alpha 通道会返回只显示在显示器上的最终粒子的值 ---- 这意味着,如果你有 1000 个粒子堆叠一起,每个粒子透明值为 0.1 ,即使不能在三维视图里看穿粒子堆, cg/image/ 也将在图像最终 Alpha 通道里放上一个 0.1 的值。

  用 Luminance 作为 Alpha 通道会产生不正确的结果,用粒子的亮度,你会将粒子里的所有阴影挪开。不管较黑区域在哪里,较黑区域都会比较亮区域更加透明。最终的图像看起来是平的,尘土很少纹理。

  合成粒子的最好方法就是用非内嵌的 Alpha 通道渲染它们,背景要是 100% 绿色。利用简单的合成技术,这种绿屏方法, Alpha 通道就会有准确的结果。如果粒子没有任何绿色信息,这种方法会更好,这也是为什么我们限制尘土粒子的色彩范围在绿色和红色之间,而不通过绿色范围。

几何体遮罩

  既然大多数粒子效果倾向于带有体积的三维元素,那么,当正确分层你的效果时,一个简单的二维 Alpha 通道就会不充足了。体积在不同的深度有不同的密度,你需要在三维空间裁减体积,这样,元素前的体积才会保持密度。有两种方法:

  打开几何体遮罩, cg/image/ 自动利用场景中的所有几何体作为一个三维挖剪图画,该几何体被用来挖剪粒子,但是,它在色彩和 Alpha 通道里是看不见的,就像在软件渲染里的 useBackground 材质。

特殊遮罩元素

  运用几何遮罩将带来一个后果,那就是如果你用了粒子替代并且替代物是几何体,那么几何体也会被遮罩,但不会出现在色彩或者 Alpha 通道里。为了避免这点,你可以指定一个 Lambert 材质到场景中的所有做为遮罩的几何体,其色彩和 incandescence 都是 100% 绿色,也可以是其它颜色,只要以后能对它进行抠像就行。将 incandescence 提高到 100% 绿色原因是:消除任何在几何体上的硬件阴影影响。

匹配镶嵌细分 Matching Tessenllation

  在场景中使用 NURBS 几何体的时候,这一点很重要:三维视图里的镶嵌细分要和软件渲染的渲染镶嵌细分相匹配。 cg/image/ 的 NURBS 物体在视口里高精度显示 ----Hotkey:3---- 这与用渲染器来渲染镶嵌细分是不一样的。如果你正在渲染一个非常厚的体积,你会看到几何体遮罩比软件渲染物体有很多的小面,这个结果导致在合成时会有令人不快的边缘围绕在物体周围。为了避免发生这样的事情,打开场景里所有 NURBS 物体的 Display Render Tessenllation ,现在,当你硬件渲染的时候,镶嵌细分会和软件渲染器相匹配。

运动模糊

  模拟渲染粒子时,运动模糊就是必须的。一般说来,粒子都非常小,运动速度非常快,粒子系统的外观不仅仅指颜色、灯光和透明度,还包括运动中粒子的模糊状态。运动模糊不仅仅反映了粒子运动速度,而且反映了粒子体积大小。一股旋风不需要由 100 , 000 , 000 个快速自旋的点粒子组成,几百个带有运动模糊的 sprite 就可以产生同样的精彩结果。

  硬件渲染的运动模糊和软件渲染的运动模糊结果不同,不必考虑匹配它们有多难,实际上,绝不可能 100% 精确,有 50% 精确就很幸运了。依靠物体相对于摄影机的移动速度,产生的结果可能是可接受的,也可能是完全没用的。可以用不同的合成技巧和粒子系统的从属路径来取消这些差异。

  为了更好地匹配粒子的软件渲染,运动模糊长度的设置要和摄影机的快门角度相匹配, 144 快门角度会产生 144/360 或 0.4 的运动模糊,若用更高值时,可能会获得有趣的效果。记住以下几点很重要:

  如果你正用几何体遮罩,运动模糊设置过高或过低都会引起遮罩和软件运动模糊不相匹配。

  如果你的摄影机被动画,动作模糊设置高过 1 ,你的效果将在三维空间游动,运动模糊结果将在时间线之前。

  如果你有一个锁定的摄影机,且你正在用的一个作为遮罩的几何体没有运动(比如从一个烟囱或蜡烛冒出的烟),你可以抬高运动模糊设置,用完全非真实的大于 1 的值试验一下,你会获得非常有趣的结果。

纠正运动模糊 Artifacts

  如果几何遮罩引起严重 Artifacts ,纠正这些 Artifacts 的方法是非常有限的:

多数情况下,关闭运动模糊会给你一个元素并更好地适合你的软件渲染元素,当然,代价就是粒子外观会改变。

关闭特殊物体的运动模糊

  这种办法就是关闭运动模糊。与软件渲染器不同的是,硬件渲染器在渲染状态下不妨碍运动模糊特征。

要关闭一个物体的运动,你需要这样做:

1 、选中物体

2 、烘焙所有的动画属性,这样每帧都有了关键帧。

3 、关键帧插入类型为 stepped

  这会确保当物体在关键帧之间取样的时候, cg/image/ 不会插入到物体的位置上。该技术通常比较好用,而且可以写入一个 mel 脚本,将所有动画曲线程序自动化。

  如果你看见 artifacts 和摄影机还处于动画状态,你也可以尝试上面提到的摄影技术。

关键帧特殊物体

  修改 Artifacts 的另一技术就是:在合成阶段添加附加的运动模糊到 Artifacts ,但是,这项技术的难点在于 ---- 遮罩那些引起问题的特殊几何体,并只模糊几何体有问题的区域。要做到这一点,用一种绿色 Lambert 材质渲染粒子的附加路径,就像在几何体遮罩章节描述的一样。合成器现在可以为那个区域提取一个 alpha 通道,单独模糊图像的那个部位。

Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍

(完)

以上就是Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍,希望能对大家有所帮助!