Maya 硬件渲染粒子与软件渲染元素结合具体操作方法介绍
本教程向朋友们介绍Maya 硬件渲染粒子与软件渲染元素结合的具体方法,教程介绍的比较详细,希望对朋友们有所帮助!
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 通道。
最后,渲染图像序列。
Maya 硬件渲染粒子与软件渲染元素结合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)
回放时,你会看在尘土轨迹甚至有更大的随意性,一些粒子飘浮空中,其他一些粒子保持静止状态。
Maya 硬件渲染粒子与软件渲染元素结合III 、创建一个特效装备
在完成一个作品时,越多的给予使用者超越解算的控制越好,基于这种考虑,越复杂的参数设置会使使用者工作起来越困难。
你想要做的最后一件事就是:提供终端使用者一个复杂的表锸剑?庑枰?魇悦扛鼍低贰4唇ㄒ桓隹刂谱氨福?盟???桓霰泶锸降慕峁??憔涂赡芨?斩耸褂谜咭惶卓刂票硎臼剑ū硎臼娇刂瞥【埃┑墓ぞ撸?庋???蔷筒挥米约罕嗉?泶锸骄涂梢钥刂瞥【啊?
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
粒子堆积在地上,它们就像是被重力拉下来的,接着又被紊乱场拉上天。赋予紊乱,粒子就像是液体在运动。
Maya 硬件渲染粒子与软件渲染元素结合V. 创建尘土粒子外观
几个属性一起作用,以创建一个粒子模拟外观。
粒子的生命周期
粒子在模拟中,什么时候消失怎样消失,这在创建模拟形状和任何场一样重要。如果所有粒子以同样的速度消失,模拟就会看起来非常线性,非常假。体积效果就像烟雾和尘土用到 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 要给粒子上多少色,这要看粒子获得的阴影数量。
我们可以提供一个给粒子上色和阴影的解决办法,使它效果更好。
在 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 硬件渲染粒子与软件渲染元素结合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首选项重置为默认值? 重置Maya首选项的技巧
Maya首选项是Maya软件中的一组用户可配置的选项,可以让用户根据自己的需要调整软件的默认设置,下面我们就来看看重置Maya首选项的技巧2024-02-18- 启动Maya软件的时候,提醒:停止并显示以下错误,然后软件崩溃了,该怎么结解决呢?下面我们就来看看Maya崩溃的原因分析和解决办法2024-02-18
maya控制手柄怎么创建IK? maya的IK表达式拉伸效果的设置方法
maya控制手柄怎么创建IK?maya建模的是偶,使用IK控制柄工具创建IK该怎么添加表达式做拉伸效果呢?下面我们就来看看maya的IK表达式拉伸的设置方法2023-02-28maya打不开fbx文件提示Unrecognized file type错误怎么办?
maya打不开fbx文件提示Unrecognized file type错误怎么办?maya导入fbx文件失败,提示无法识别的文件类型错误,该怎么办呢?下面我们就来看看详细的解决办法2021-10-29- maya一款专为游戏开发者和制片人专门设计。适合视效艺术家、建模和动画师,今天小编就来教给大家一个简单的教程,使用maya制作立体曲面2021-09-09
- maya怎么创建绚丽多彩的烟花?maya中想要创建漂亮的烟花,该怎么制作这个效果呢?下面我们就来看看详细的教程,需要的朋友可以参考下2021-01-08
- maya怎么用phoenixfd插件制作逼真的火焰动画?maya中想要制作逼真的火焰动画,该怎么制作这个动画效果呢?下面我们就来看看详细的教程,需要的朋友可以参考下2020-12-08
maya模型上的数字怎么关掉? maya模型不显示数字的技巧
maya模型上的数字怎么关掉?maya中的模型显示数据,想要关闭显示数据,该怎么操作呢?下面我们就来看看maya模型不显示数字的技巧,需要的朋友可以参考下2020-11-02- maya怎么重建曲面?maya中想要重建曲面,让模型更加圆滑,该怎么操作呢?下面我们就来看看maya重建曲面的方法,需要的朋友可以参考下2020-10-10
- maya骨骼不显示怎么办?maya文件打开以后发现骨骼隐藏了,我们找不到,骨骼被隐藏无非三种情况,自己被隐藏,父对象被隐藏,绘制样式选择了无,下面我们就来看看maya显示骨2020-08-10
最新评论