Instancerbaking powder如何使用

后使用快捷导航没有帐号?
只需一步,快速开始
查看: 1868|回复: 8
CG新人, 积分 76, 距离下一级还需 224 积分
各位是否对粒子替代的模型不能产生真实光照而苦恼呢?
或者又对粒子替代的模型进行单独处理而困扰?
这个mel脚本,可以将粒子替代的模型转成真实的模型,而不是局限与替代物,
可以作为独立的模型来产生光影,不比对替代物来打灯!
有多强大大家自己亲试吧!
本来没打算放出来的,但是没银子买vue的模型,,,诶~~~江湖救急!扩散点击排行榜(↑↑↑ 轻松快速-免费获得积分-最快方法-无论扩散哪个帖子都可以拿积分哦 ↑↑↑):
& 积分提示:活力值可以兑换银子用于下载哦!& &&快去推广吧!版主亲测分分钟几百个活力值
14:40 上传
点击文件名下载附件
3.12 KB, 下载次数: 43
售价: 7 两银子 &[]
可以将粒子替代的模型转成真实的模型
无图无真相 本次帮你临时给压缩包截图一张上传!下次发帖请务必给出资源的真实预览图哦!&
活力值 +20
无图无真相 加个辛苦分~
~~~还没有人打赏~~~
求图求真相啊亲~
CG高手, 积分 759, 距离下一级还需 441 积分
我来做吃番茄的人吧……
CG高手, 积分 759, 距离下一级还需 441 积分
maya 模型替代成粒子再烘陪成关键帧InstancerBaking_v1.mel
CG新人, 积分 40, 距离下一级还需 260 积分
maya 模型替代成粒子再烘陪成关键帧InstancerBaking_v1.mel
CG预备役, 积分 2, 距离下一级还需 28 积分
CG新人, 积分 134, 距离下一级还需 166 积分
求图求真相啊亲~
CG高手, 积分 456, 距离下一级还需 744 积分
感谢楼主分享!!!!太需要了
CG高手, 积分 1035, 距离下一级还需 165 积分
Powered by后使用快捷导航没有帐号?
只需一步,快速开始
查看: 8896|回复: 70
CG新人, 积分 99, 距离下一级还需 201 积分
就是将maya粒子替代装换成实体模型。
看着栏目很冷清 ,就试着往这发发东西
扩散点击排行榜(↑↑↑ 轻松快速-免费获得积分-最快方法-无论扩散哪个帖子都可以拿积分哦 ↑↑↑):
& 积分提示:活力值可以兑换银子用于下载哦!& &&快去推广吧!版主亲测分分钟几百个活力值
(17 KB, 下载次数: 86)
17:03 上传
17:06 上传
点击文件名下载附件
3.37 KB, 下载次数: 259
售价: 5 两银子 &[]
烘焙粒子替代
不错啊,很实用&
~~~还没有人打赏~~~
感谢楼主分享啦!
CG新人, 积分 99, 距离下一级还需 201 积分
特效的很冷清啊······慢慢让这版块好起来·
CG预备役, 积分 14, 距离下一级还需 16 积分
这个很实用
CG预备役, 积分 17, 距离下一级还需 13 积分
呵呵&&不错
CG预备役, 积分 17, 距离下一级还需 13 积分
我急需这个东西啊,怎么下载不下来啊
CG预备役, 积分 17, 距离下一级还需 13 积分
我急需这个东西啊,怎么下载不下来啊
CG专家, 积分 2347, 距离下一级还需 4253 积分
和转换一样的么?试试效果
CG高手, 积分 825, 距离下一级还需 375 积分
这个实用了~~~~~~~~~~~
CG预备役, 积分 0, 距离下一级还需 30 积分
正好想要用下
Powered bymaya&模型替代成粒子再烘陪成关键帧InstancerBaking_v1.mel
//////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2011 loganathan perumal - Copyright (C) 2011
// www.3drevolution.in
// &Instancer Baking V
// &Script File
// &There is no restrictions to use or modify
but its your own risk.
// &Creation Date: &January
// &Description:
// To convert particle instancer into geometry
// Select the particle and choose frame range currentFrame or
sequence or time slider&
// and click instancer baking button
// that is...! enjoy
// If you find any bug please send me that information to me
//////////////////////////////////////////////////////////////////////////////////
//Particles Instancer to Geometry Baking
global proc BakeInstancer()
global string $S
global string $E
global string $E
global string $S
global string $pTypeO
global string $fTypeO
float $startF
float $endF
string $selection[] = `ls-sl`;
string $particleName[] = `listRelatives -s $selection`;
string $pName = $particleName[0];
string $instancerName[] = `particleInstancer -q -name
$selection[0]`;
string $insName = $instancerName[0];
string $objects[] = `particleInstancer -name $insName -q
-object $pName`;
$count = `particle -ct -q $pName`;
string $objectRotation = `particleInstancer -name $insName -q
-rotation $pName`;
string $objectRotationType = `particleInstancer -name $insName
-q -rotationType $pName`;
string $objectPosition = `particleInstancer -name $insName -q
-position $pName`;
string $objectIndex = `particleInstancer -name $insName -q
-objectIndex $pName`;
string $objectScale = `particleInstancer -name $insName -q
-scale $pName`;
string $objectAimDir = `particleInstancer -name $insName -q
-aimDirection $pName`;
string $objectAimPos = `particleInstancer -name $insName -q
-aimPosition $pName`;
string $objectAimAxis = `particleInstancer -name $insName -q
-aimAxis $pName`;
string $objectAimUpAxis = `particleInstancer -name $insName -q
-aimUpAxis $pName`;
string $objectAimWorldUp = `particleInstancer -name $insName
-q -aimWorldUp $pName`;
string $group = `group -w -n "BakedObjects" -em`;
string $FrmRangeOpt = `optionMenu -q -v $fTypeOption`;
if($FrmRangeOpt == "currentFrame")
int $cFrame = `currentTime -q`;
$startFrame = $cF
$endFrame = $cF
else if($FrmRangeOpt == "Sequence")
$startFrame = `textField -q -tx $Start`;
$endFrame = `textField -q -tx $End`;
else if($FrmRangeOpt == "TimeSlider")
$startFrame = `playbackOptions -q -min`;
$endFrame = `playbackOptions -q -max`;
string $DoubleAttrs[]; string $VectorAttrs[];
float $pos[];float $s[]; int $indexN; float $rot[]; float
$size[]; vector $AimD vector $AimP vector
vector $AimUpA vector $AimWorldUp; vector $objAimD
float $matrix[]; vector $ObjAimA vector $ObjAimUp; vector
for ($f=$startF $f&($endFrame+1);
currentTime $f;
$count = `particle -ct -q $pName`;
for($i=0; $i&$ $i++)
if (`particle -ct -q $pName`&0)
//print ("breaks");
if(!`objExists ("Geometry"+$i)`)
$DoubleAttrs = `particle -q -ppd $pName`;
$VectorAttrs = `particle -q -ppv $pName`;
//getting Attribute Values
$pos = `particle -at $objectPosition -or $i -q $pName`;
if($objectIndex !="")
$s = `particle -at $objectIndex -or $i -q $pName`;
$indexN = $s[0];
$indexN=0;
if($objectRotation !="")
$rot = `particle -at $objectRotation -or $i -q $pName`;
if($objectScale !="")
$size = `particle -at $objectScale -or $i -q $pName`;
$size = {1,1,1};
if($objectAimDir !="")
$AimDirection = `particle -at $objectAimDir -or $i -q
$objAimDir = unit($AimDirection);
$AimDirection =
&&1,0,0&&;
if($objectAimPos !="")
$AimPosition = `particle -at $objectAimPos -or $i -q
$AimPosition =
&&0,0,0&&;
if($objectAimAxis !="")
$AimAxis = `particle -at $objectAimAxis -or $i -q
$AimAxis =
&&1,0,0&&;
if($objectAimUpAxis !="")
$AimUpAxis = `particle -at $objectAimUpAxis -or $i -q
$AimUpAxis =
&&0,1,0&&;
if($objectAimWorldUp !="")
$AimWorldUp = `particle -at $objectAimWorldUp -or $i -q
$AimWorldUp =
&&0,1,0&&;
// setting attribute Values&
$matrix = `getAttr ( $insName+".worldMatrix")`;
$ObjAimAxis = pointMatrixMult ($AimAxis,
$matrix);&
$ObjAimUp = pointMatrixMult ($AimUpAxis,
$matrix);&
$ObjAimWup= pointMatrixMult ($AimWorldUp, $matrix);
string $duplicate[]=`duplicate &-n
("Geometry"+$i) $objects[$indexN]`;
if($objectRotation !="")
for($rotAttr in $DoubleAttrs)
if($rotAttr ==$objectRotation)
xform -ro $rot[0] $rot[0] $rot[0] $duplicate[0];
for($rotAttr in $VectorAttrs)
if($rotAttr==$objectRotation)
xform -ro $rot[0] $rot[1] $rot[2] $duplicate[0];
if($objectRotation =="" &&
$objectAimDir !="")
xform -ws -t 0 0 0 $duplicate[0];
xform -a -ws -t 0 0 0 -sh 0 0 0 $duplicate[0];
xform -a -ws -t ($objAimDir.x) ($objAimDir.y) ($objAimDir.z)
aimConstraint -offset 0 0 0 -weight 1 -aimVector
($ObjAimAxis.x) ($ObjAimAxis.y)
($ObjAimAxis.z)&
-upVector ($ObjAimUp.x) ($ObjAimUp.y) ($ObjAimUp.z)
-worldUpType "vector" -worldUpVector ($ObjAimWup.x) ($ObjAimWup.y)
($ObjAimWup.z) $group $duplicate[0];
aimConstraint -e -rm $group
$duplicate[0];&
if($objectRotation =="" &&
$objectAimDir =="" && $objectAimPos
xform -ws -t 0 0 0 $duplicate[0];
xform -a -ws -t $pos[0] $pos[1] $pos[2] -sh 0 0 0
$duplicate[0];
xform -a -ws -t ($AimPosition.x) ($AimPosition.y)
($AimPosition.z) $
aimConstraint -offset 0 0 0 -weight 1 -aimVector
($ObjAimAxis.x) ($ObjAimAxis.y)
($ObjAimAxis.z)&
-upVector ($ObjAimUp.x) ($ObjAimUp.y) ($ObjAimUp.z)
-worldUpType "vector" -worldUpVector ($AimWorldUp.x)
($AimWorldUp.y) ($AimWorldUp.z) $group $duplicate[0];
aimConstraint -e -rm $group
$duplicate[0];&
if($objectScale !="")
for($scaleAttr in $DoubleAttrs)
if($scaleAttr ==$objectScale)
xform -s $size[0] $size[0] $size[0] $duplicate[0];
for($scaleAttr in $VectorAttrs)
if($scaleAttr==$objectScale)
xform -s $size[0] $size[1] $size[2] $duplicate[0];
xform -a -ws -wd -t $pos[0] $pos[1] $pos[2]
$duplicate[0];
xform -ztp -wd -ws -cp -p 1 $duplicate[0];
setKeyframe ($duplicate[0] + ".tx");
setKeyframe ($duplicate[0] + ".ty");
setKeyframe ($duplicate[0] + ".tz");
setKeyframe ($duplicate[0] + ".rx");
setKeyframe ($duplicate[0] + ".ry");
setKeyframe ($duplicate[0] + ".rz");
setKeyframe ($duplicate[0] + ".sx");
setKeyframe ($duplicate[0] + ".sy");
setKeyframe ($duplicate[0] + ".sz");
setKeyframe -at "visibility" -t ($f-1) -v 0
$duplicate[0];
setKeyframe -at "visibility" -v 1 $duplicate[0];
$pos = `particle -at $objectPosition -or $i -q $pName`;
//select ("Geometry"+$i);
$DoubleAttrs = `particle -q -ppd $pName`;
$VectorAttrs = `particle -q -ppv $pName`;
if($objectRotation !="")
$rot = `particle -at $objectRotation -or $i -q $pName`;
if($objectScale !="")
$size = `particle -at $objectScale -or $i -q $pName`;
$size = {1,1,1};
if($objectAimDir !="")
$AimDirection = `particle -at $objectAimDir -or $i -q
$objAimDir = unit($AimDirection);
$AimDirection =
&&1,0,0&&;
if($objectAimPos !="")
$AimPosition = `particle -at $objectAimPos -or $i -q
$AimPosition =
&&0,0,0&&;
if($objectAimAxis !="")
$AimAxis = `particle -at $objectAimAxis -or $i -q
$AimAxis =
&&1,0,0&&;
if($objectAimUpAxis !="")
$AimUpAxis = `particle -at $objectAimUpAxis -or $i -q
$AimUpAxis =
&&0,1,0&&;
if($objectAimWorldUp !="")
$AimWorldUp = `particle -at $objectAimWorldUp -or $i -q
$AimWorldUp =
&&0,1,0&&;
// setting attribute Values&
$matrix = `getAttr ( $insName+".worldMatrix")`;
$ObjAimAxis = pointMatrixMult ($AimAxis,
$matrix);&
$ObjAimUp = pointMatrixMult ($AimUpAxis,
$matrix);&
$ObjAimWup= pointMatrixMult ($AimWorldUp, $matrix);
if($objectRotation !="")
for($rotAttr in $DoubleAttrs)
if($rotAttr ==$objectRotation)
xform -ro $rot[0] $rot[0] $rot[0]
&("Geometry"+$i);
setKeyframe ("Geometry"+$i + ".rx");
setKeyframe ("Geometry"+$i + ".ry");
setKeyframe ("Geometry"+$i + ".rz");
for($rotAttr in $VectorAttrs)
if($rotAttr==$objectRotation)
xform -ro $rot[0] $rot[1] $rot[2]
&("Geometry"+$i);
setKeyframe ("Geometry"+$i + ".rx");
setKeyframe ("Geometry"+$i + ".ry");
setKeyframe ("Geometry"+$i + ".rz");
if($objectRotation =="" &&
$objectAimDir !="")
xform -ws -t 0 0 0 &("Geometry"+$i);
xform -a -ws -t 0 0 0 -ro 0 0 0 &-sh 0 0 0
&("Geometry"+$i);
xform -a -ws -s $size[0] $size[1]
$size[2]("Geometry"+$i);
xform -a -ws -t ($objAimDir.x) ($objAimDir.y) ($objAimDir.z)
aimConstraint -offset 0 0 0 -weight 1 -aimVector
($ObjAimAxis.x) ($ObjAimAxis.y)
($ObjAimAxis.z)&
-upVector ($ObjAimUp.x) ($ObjAimUp.y) ($ObjAimUp.z)
-worldUpType "vector" -worldUpVector ($AimWorldUp.x)
($AimWorldUp.y) ($AimWorldUp.z) $group
&("Geometry"+$i);
setKeyframe ("Geometry"+$i + ".rx");
setKeyframe ("Geometry"+$i + ".ry");
setKeyframe ("Geometry"+$i + ".rz");
aimConstraint -e -rm $group
&("Geometry"+$i);&
if($objectRotation =="" &&
$objectAimDir =="" && $objectAimPos
xform -ws -t 0 0 0 &("Geometry"+$i);
xform -a -ws -t $pos[0] $pos[1] $pos[2] -sh 0 0 0
&("Geometry"+$i);
xform -a -ws -t ($AimPosition.x) ($AimPosition.y)
($AimPosition.z) $
aimConstraint -offset 0 0 0 -weight 1 -aimVector
($ObjAimAxis.x) ($ObjAimAxis.y)
($ObjAimAxis.z)&
-upVector ($ObjAimUp.x) ($ObjAimUp.y) ($ObjAimUp.z)
-worldUpType "vector" -worldUpVector ($AimWorldUp.x)
($AimWorldUp.y) ($AimWorldUp.z) $group
&("Geometry"+$i);
setKeyframe ("Geometry"+$i + ".rx");
setKeyframe ("Geometry"+$i + ".ry");
setKeyframe ("Geometry"+$i + ".rz");
aimConstraint -e -rm $group
&("Geometry"+$i);&
if($objectScale !="")
for($scaleAttr in $DoubleAttrs)
if($scaleAttr ==$objectScale)
xform -s $size[0] $size[0] $size[0]
&("Geometry"+$i);
for($scaleAttr in $VectorAttrs)
if($scaleAttr==$objectScale)
xform -s $size[0] $size[1] $size[2]
&("Geometry"+$i);
xform -ztp -wd -ws -cp -p 1
&("Geometry"+$i);
xform -a -ws -wd -t $pos[0] $pos[1] $pos[2]
&("Geometry"+$i);
setKeyframe ("Geometry"+$i + ".tx");
setKeyframe ("Geometry"+$i + ".ty");
setKeyframe ("Geometry"+$i + ".tz");
setKeyframe ("Geometry"+$i + ".sx");
setKeyframe ("Geometry"+$i + ".sy");
setKeyframe ("Geometry"+$i + ".sz");
setKeyframe ("Geometry"+$i + ".visibility");
$count = `particle -ct -q $pName`;
for ($i=0; $i&$ $i++)
xform -a -t 0 0 0 $&
//select ("Geometry"+$i);
parent -a ("Geometry"+$i) $ &
//-----------------------------------------------------------------------------------------------------------------------
// Particle Instancer Baking UI
global string $S
global string $E
global string $E
global string $S
global string $pTypeO
global string $fTypeO
//--------------------------------------------------
global proc ParticleUI()
global string $S
global string $E
global string $E
global string $S
global string $pTypeO
global string $fTypeO
if(`window -q -ex ParticleInstancerBakingUI`)
deleteUI ParticleInstancerBakingUI;
if(`windowPref -q -ex ParticleInstancerBakingUI`)
windowPref -r ParticleInstancerBakingUI;
window -title"ParticleInstancerBaking ver 1.0
& &| www.3drevolution.in |" -s 0
-w 450 -h 250 ParticleInstancerBakingUI;&
formLayout myUIFL;
text -l "ParticleType & :" ParT
text -l "Frame Range &:" fR
$Sframe = `text -l "StartFrame" -en 0 `;
$Eframe = `text -l "EndFrame" -en 0 `;
$Start = `textField -w 40 -h 25 -en 0 `;
$End = `textField -w 40 -h 25 -en 0 `;
$pTypeOption = `optionMenu -label "" -changeCommand "print #1"
pTypeOPT`;
& & & menuItem
-label "particle & &
$fTypeOption =`optionMenu -label "" -changeCommand
"sequence"`;
& & & menuItem
-label "currentFrame";
& & & menuItem
-label "Sequence";
& & & menuItem
-label "TimeSlider";
separator -w 450
button -l "InstancerBaking" -c "BakeInstancer" -w 115 -h 30
button -l "Clear Initial State" -c "clearInitialState" -w 100
-h 30 btnsCIS;
button -l "Close" -c "deleteUI ParticleInstancerBakingUI " -w
100 -h 30 btnsC
formLayout -e
-af "ParType" "left" 30
-af "ParType" "top" 20
-af "fRange" "left" 30
-af "fRange" "top" 70
-af $Sframe "left" 30
-af $Sframe "top" 120
-af $Eframe "left" 145
-af $Eframe "top" 120
-af $Start "left" 88
-af $Start "top" 117
-af $End & "left" 200
-af $End "top" 117
-af "pTypeOPT" "left" 120
-af "pTypeOPT" "top" 20
-af $fTypeOption "left" 120
-af $fTypeOption "top" 70
-af "sep" "left" 0
-af "sep" "top" 165
-af "btnsIB" "left" 30
-af "btnsIB" "top" 175
-af "btnsClose" "left" 290
-af "btnsClose" "top" 175
-af "btnsCIS" "top" 175
-af "btnsCIS" "left" 170
showWindow ParticleInstancerBakingUI;
ParticleUI;
//-----------------------------------------------------------------------------
global proc InstancerBaking()
global string $S
global string $E
global string $E
global string $S
global string $pTypeO
global string $fTypeO
string $FrmRangeOpt = `optionMenu -q -v $fTypeOption`;
if($FrmRangeOpt == "currentFrame")
else if($FrmRangeOpt == "Sequence")
else if($FrmRangeOpt == "TimeSlider")
//------------------------------------------------------------------------
global proc sequence()
global string $S
global string $E
global string $E
global string $S
global string $pTypeO
global string $fTypeO
string $seq = `optionMenu -q -v $fTypeOption`;
if($seq == "Sequence")
text -e -en 1 $S
text -e -en 1 $E
textField -e -en 1 $S
textField -e -en 1 $E
text -e -en 0 $S
text -e -en 0 $E
textField -e -en 0 $S
textField -e -en 0 $E
//-----------------------------------------------------------------------------
//clear Initial State
global proc clearInitialState()
string $Dattrs[];
string $Vattrs[];
string $particle[] = `ls-sl`;
string $pName[] = `listRelatives -s $particle[0]`;
if(`objExists $pName[0]`)
$Dattrs = `particle -q -ppd $pName`;
$Vattrs = `particle -q -ppv $pName`;
for ($Dattr in $Dattrs)
if(`attributeQuery -ex -n $pName[0] ($Dattr+"0")`)
print ($Dattr+"\n");
setAttr($pName[0] + "." + $Dattr + "0") -type "doubleArray"
for ($Vattr in $Vattrs)
if(`attributeQuery -ex -n $pName[0] ($Vattr + "0")`)
setAttr($pName[0] + "." + $Vattr + "0") -type "vectorArray"
setAttr ($pName[0] + ".nid0") 0;
setAttr ($pName[0] + ".particleId0") -type "doubleArray"
setAttr ($pName[0] + ".age0") -type "doubleArray" 0;
warning "please chech... Object is not exists";
int $startFrame = `playbackOptions -q -min`;
$cTime = `currentTime -q`;
currentTime -e ($cTime+1);
currentTime -e ($startFrame);
//------------------------------------------- end of script
-----------------------------------------------------------
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Maya教程:在Maya中如何使用Instancer实例教程_maya教程_photoshop教程
Maya教程:在Maya中如何使用Instancer实例教程
来源:网络
在本教程中我将给你示范在Maya中如何使用Instancer,并制作一个导弹发射的效果,希望对大家有所帮助。
下面教程开始
Instancer非常有用和方便,你可以将粒子替换成场景中的单一物体,那么在同一时间就会创造出许多的物体,更加真实,还节省你的时间。
假设在你的场景,有一个很大的飞船,你想从大飞船排出小飞船,创造了一个又一个小型船只,然后再加以动画,那是非常枯燥和浪费时间的工作,正因为如此Instancer才有了用武之地。
好,现在打开Maya并确保你选定Real-time[24 fcs],在参数选择窗口,然后按下保存,如下图。(图01)
我们开始,创建一个简单的场景,始终确保你的模型是指向X轴,如果不这样,你可能将面临一些问题,如下图所示。(图02)
现在选择导弹,发现轴心点在物体中心,我们要移到尾部,点击键盘的Insert键,可以看到坐标发生变化了,那么现在移动到尾部,如下图。(图03)
移动到下图位置。(图04)
现在再次击中Insert,以确定还原XYZ,如下图。(图05)
现在选择导弹,冻结XYZ,我的意思是使XYZ归零,选定执行Modify-&Freeze Transformation,如下图。(图06)
现在确定你在Dynamics类型下,如下图。(图07)
选择后面的Plane执行Particles-&Emit from object后的小方块,如下图。(图08)
现在看见一个窗口选项Emitter Option接着做下图设定,并且点击创建。(图09)
如果你播放,会将看到小的颗粒排放,想要更大粒子,按Ctrl+A打开属性编辑器,点击ParticleShap1,然后向下滚动打开Render Attributes,做下图设定。(图10)
现在可以看到更大的球型粒子,如图。(图11)
按下键盘Shift并且选择粒子和导弹,完成这一步,执行Particles-&Instancer后的小方块。(图12)
现在改变选项AimDirection-&velocity执行Create,如下图。(图13)
点击播放可以看到导弹飞起来了,如下图。(图14)
创建现实的动画,我们还需要一些重力,那么首先打开Window-&Outliner选择Particles,如下图。(图15)
现在打开Fields-&Gravity,如下图。(图16)
点击播放,导弹受重力影响发生很好的变化,如下图。(图17)
再次打开大纲窗口,选择particle1。(图18)
我们要添加Fire和Smoke踪迹,调节粒子比率是非常重要的,如果粒子比率大于百位,计算量将很大,会花费大量的渲染时间,要始终保持一个适合的粒子比率。
现在我们为导弹尾部添加烟火,打开Particles-&Emit from object,并选择后面的方块。(图19)
接着照下图选项设置。(图20)
播放看到一些粒子跟随,如下图。(图21)
选择新创建的粒子按Ctrl+A打开属性编辑,点击ParticleShape2,向下滚动找到Render Attributes,在下拉菜单类型选择Cloud [s/w],接着点击Curent Render Type,改变粒子半径大小,如下图。(图22)
下拉滚动条找到Per Particle (Array) Attributes,单击Opacity弹出一个小窗口,选择Add Per Particle Attribute,接着单击Add Attribute。(图23)
这是可以在上面的菜单上找到OpacityPP,如下图。(图24)
现在右键点击OpacityPP,出现菜单选择Create Ramp。(图25)
创建后OpacityPP就应该如下图。(图26)
现在单击播放键,并增加播放帧,可以看到粒子跟随导弹发射,尾部粒子逐渐消失,这就是添加Opacity的效果,如下图。(图27)
现在添加火焰特效,点击Color弹出小窗口,选定Add Per Particle Attribute按下Add Attribute,如下图。(图28)
现在rgbPP是可用的。(图29)
右键点击rgbPP选择Create Ramp。(图30)
正如下图显示。(图31)
播放看到下图效果。(图32)
隐藏场景中的Plane和导弹原始物体,使场景看起来更有条理。选择Plane和原始导弹执行Display-&Hide-&Hide Selection,如下图。(图33)
现在场景就是下图这样了。(图34)
我们播放看看效果,顺便校正了摄像机。(图35)
希望你对这个特效有所理解。这是一个无止境的尝试,你会发现它很有用,对不同物体的尝试会使你的创造更为完美。(图36)
图36全教程完结!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)Maya特效教程:Maya用particle的instancer模拟帆船
Maya特效教程:Maya用particle的instancer模拟帆船
Maya特效教程:Maya用particle的instancer模拟帆船
<div id=postmessage_instancer 基础   要使用instancer必须先要准备好要替换的物体。这个物体需要朝向正确的方向,位移值,轴心点等必须归零,缩放值为1。这样做以后就不会发生不必要的麻烦,产生的结果才能和你预想的一样。   maya的particle instancer功能是将要替换的物体固定在每个粒子上,这个物体并不是复制到每个粒子上的,而是用这个物体的外形替代了每个粒,所以称做&#8220;instance&#8221;。instancer并不会在场景中增加几何体。       1.2 轴心和方向   如果你在用instancer的时候出现问题了,首先检查:    1 &.物体的轴心是不是处于原始的轴心上。   2 &.轴向有没有与世界坐标的轴向对齐。   3 &.物体的前进方向是否对准X轴。   4 &.物体的transform值是否归0。  如果没有归零,将方向,位置调整好,然后freeze transform。    1.3 帆船的例子   这个例子是一只帆船漂动在一个被wave变形的nurbs平面上,粒子被指定了一个简单的表达式,让它们沿着U方向前进。       1)打开1_1instance_sailboat_base.mb这个场景文件。在这个文件里,实际上只有一只船,这么多的船其实都是粒子,使用instancer做的。船跟着粒子而动,那么我们怎么对准他们前进的方向呢?有两种方法:    1 &.使用maya instancer的aimDirection 或者aimPosition功能.   2 &.使用每个粒子的运行表达式,改变每个粒子的速度向量从而改变粒子的旋转值。我来提供一个 vector2rot.mel 的脚本,用这个脚本可以帮助我们完成这项操作。让我们用第一种方法来调整船的方向。   1.选择这个粒子节点(boats_PTL),打开属性编辑器。    2.增加一个per-particle的float属性,名称为rotationTypePP.在粒子的创建编辑器中输入rotationTypePP=1。    3.在粒子属性中找到instancer栏。点击RotationType 旁边的列给框,选择rotationTypePP。       4.这个属性将指定instancer物体的旋转方式(有三种,可以选择其中的一种)。    .0(rotation)。如果选择这个表示你想直接控制instance的旋转,如果不用表达式,那么将很难控制他,但是这个选项将会提供给你更多的控制权。    .1(aimDirection)。maya将使用一个已经提供的向量,如果你希望粒子指向他们的worldVelocity那么就选这个。    .2(aimPosition)。使用这个选项,你可以使你的粒子指向一个特定的点。这个使用起来可能会很困难,但是它有很强的可控性。   你可以让不同的粒子有不同的旋转方式,让我们先用aimDirection这种方式来完成我们的实例。    5.单击aimDirection旁边的列给框,选择worldVelocity.重新播放场景,你可以发现,船身都是侧着向前的,这是因为船头没有指向X轴。在outline中找到sailboat_PLY,现在是隐藏的,将它显示出来,掉转船头向X方向,然后freeze transform.重新播放看看不同了吧。    1.4更深入的一个实例。   我们打开下一个场景,这是一个更复杂的帆船场景。      播放场景你会发现一部分船看起来好像不怎么正确.我们将使用pointOnSurface 这个Mel命令来得到表面法线的数据,然后使用这个向量来做为船朝上的方向。    1.打开1_2instance_sailboat_base.mb这个文件。    2.将rotationTypePP值改为0.(在创建编辑器中改成rotationTypePP=0;).    3.在粒子属性的instancer一栏中设置rotation为rotationPP(如果没有这个属性就自己填加上)。设置aimdirection为none.    4.我们现在需要修改粒子的rotation属性,我们将创建一些表达式在运行表达式中。首先我们需要获取粒子的velocity,这样我们就可以得到他的方向了。我们用unit这个函数。    //capture velocity    vector $vel=unit(worldVelocity);   5.然后使用每个粒子的goalU和goalV属性,我们将用命令查询wave_surface_NRB's曲面的法线,它将提供给我们一个朝上的向量。    //determine normal vector    float $normalF[]=`pointOnSurface -u (goalU) -v (goalV) -normalizedNormal wave_surface_NRB`;    vector $normal= &&$normalF[0],$normalF[1],$normalF[2]&&;   6.我们可以修改表面的法线来倾斜船,用来模拟风的效果。我们将使用expr_NUL.lean属性(在outline里可以找到expr_NUL,好像是建的一个空组)   //lean boat depending on its speed    float $lean=smoothstep(10,40,mag(velocity))*expr_NUL.   7.确保$vel值为正。    //if the boat X-position is decreasing,the boat leans the other way    if($vel.x &0)$lean*=-1;   8.修改法线的值。   //modify normal variable    $normal+= &&0,0,$lean&&;   现在我们使用一个mel脚本来将我们刚才得到的两个向量转化为粒子的旋转值。   9.maya的instancer有一个小小的bug,那就是不能直接用一个简单的角度值赋予它的旋转值。必须将这个值转化为弧度,并且得转两次。否则你将得到一个非常大的旋转值。    float $rotX=deg_to_rad(deg_to_rad($rot[0]));    float $rotY=deg_to_rad(deg_to_rad($rot[1]));    float $rotZ=deg_to_rad(deg_to_rad($rot[2]));   10.将这个值指定给rotationPP。    //finally,assign rotation values    rotationPP= &&$rotX,$rotY,$rotZ&&;   本一节教程就完了。     接上一节教程。    1.5避免碰撞    1.打开1_3_instance_sailboat_base.mb    2.选择粒子节点boats_PTL.    3.找到菜单fields.    4.创建一个radial场,并设置属性值。    magnitude=1    attenuation=2    maxdistance=40    aplypervertex=on    useMaxDistance=on    radiaType=0   5.我们要让每个粒子都成为一个radial场的发射源。先选择radial场,再选择boats_PTL,然后选择菜单,fields &use selected as Source of Field.然后设置radial场的applyPverVertex值为on。因为粒子的goalPP属性设置的是1,所以radial场的效果没有表现出来。   6.选择粒子,打开hypergraph,单击input and output connections按钮。      可以看到radial场有个属性输出给了粒子。    7.选择boats_PTL然后添加一个float属性,名称为proximityPP我们将用这个属性储存粒子受到了多大的力量。    8.打开粒子进行替代。
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&}

我要回帖

更多关于 baking powder是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信