maya藤蔓插件_Maya特效制作之植物生长动画制作教程(二)之多条藤蔓动画制作...

四、制作多条蔓藤植物

下面我们要让很多植物在这个“崖壁”上生长出来,也就是要重复很多次前面的工作,当然可以这样一步一步地做,在“崖壁”面片上手动画很多的线,但下面尝试一种新的方法来制作,让粒子在“崖壁”面片Plane _Wall上产生很多条曲线。

(1) 用上一节中相同的方法在Plane. Wal上再画一条曲线,用于发射粒子,这条曲线的位置就是植物生长的最初位置,如图所示。

87fa717a996fb7312566351e062928d3.png

(2)从曲线发射粒子。选择这条曲线,然后执行主菜单命令Particle> Emit from Object (粒子>从对象发射),建立一个粒子发射器,设置Emitter type (发射器类型)为Curve (曲线), 在新创建的发射器Rate (速率)属性上Key帧,设置60帧时的参数值为50,65帧时的参数值为0,并将发射速度调为0,如图所示。

0b83bd6a50886c9656930b20285f8800.png

(3)选择新产生的粒子particlel,然后加选“崖壁”面片Plane_ Wall,执行菜单命令Particle>Goal (粒子>目标),在属性编辑器中设置Goal weight (目标权重)值为1,然后为粒子添加属性(goalU, goalV) 。

(4) 现在我们在Script Editor (脚本编辑器)中输入命令“createNode closestPointOnSurface",这样会产生一个closestPointOnSurface节点,这个节点可以求出粒子到NURBS平面上最近距离点的位置和UV值。重命名这个节点为“cPOS1”,如图所示。

d9c1772b0b6a0063017ade560d410ecc.png

(5)在Outiner (大纲视图)窗口中的Display (展示)菜单下,不勾选DAG Objects Only (仅DAG对象),便可以找到这个节点,如图所示。

1f97be369cf6d82b819fdb9afba45817.png

(6)打开Connection Editor (连接编辑器)窗口,把plane. WallShape的World Space连接到cPOS1的Input Surface上,如图所示。

8906cbca1da2c2f6ec57e888f44fe1b4.png

(7)在粒子上写表达式,如图所示。

47b643f57d474621e0d9ec2e454cd49b.png

在粒子creation表达式里写下如下命令

vector $pos=particleShape1. position;

setAttr "cPOS1.inPositionX" ($pos.x);

setAttr "cPOS1.inPositionY" ($pos.y);

setAttr "cPOS1.inPositionZ" ($pos.z);

particleShape1.goalU=' getAttr cPOS1.parameterU';

particleShape1.goalV=' getAttr cPOS1,parameterV;

vector $pos=particleShapel. position;

curve -d 1 -p ($pos.x) ($pos.y) ($pos.z) -n ("Ij curve" + particleShapel particed);

在粒子Runtime before dynamics里写如下表达式,如图所示。

f62b95a65529ca3802ae5de6979f136c.png

float $stepU=0.01*sin(particleShape1.particled);

float SstepV=0.035*cos(articleShape1 particleld)* abs(oise(articleShape.particleld+rame);

particleShape1.goalU+ = $stepU;

particleShape1.goalV + =$stepV;

vector $pos =particleShape1.position;

curve -a -P ($pos.x) ($pos.y) ($pos.z) ("Ii .curve" + particleShape1.particleld);

下面我们来分析一下表达式中每-句话的作用。

在creation表达式里:

vector $pos= particleShape1.position;

setAttr "CPOS1.inPositionX" ($pos.x);

setAttrt“cPOS1.inPositionY" ($pos.y);

setAttr "cPOS1.inPositionZ" ($pos.z);

以上几句,会把粒子的空间位置连接到cPOS1节点上,这样cPOS1这个节点就能计算出粒子到平面plane. WallShape上最近点的UV值,cPOS1 parameterU和cPOS1.parameterV,然后就让粒子的初始(goalU goalV)等于这个值,也就是接下来的两句:

particleShape1.goalU= getAttr cPOS1.parameterU';

particleShape1.goalV= getAttr cPOS1.parameterV;

下面两句的作用是根据粒子的空间位置和粒子的ID号,为每一个粒子-出生就创建一条曲线,并且要根据粒子的ID号为曲线取一个新的名称,这个是必须的,因为在接下来的Runtime before dynamics表达式中,我们要用到这个曲线名称。

vector $pos = particleShapel. position;

curve -d 1 -p ($pos.x) ($pos.y) ($pos.z) -n ("Ij curve"+ particleShape1 particleld);

在Runtime before dynamics表达式里:

float $stepU=0.01 *sin(particleShape1.particleld);

float $stepV=0.035*cos(particleShape1 particleld)*abs(noise(particleShape1. particleld+frame));

particleShape1.goalU+ = $stepU;

particleShape1.goalV+ =sstepV;

以上几句的作用,就是让粒子在平面上运动起来,我们知道(sin ,cos)是一个- 1到1的范围,如果我们的取值足够多,粒子就会呈一个圆形向四周运动,从而使产生的曲线分布均匀。

下面两句的作用是根据粒子的位置和曲线的名称,不断加长曲线的长度,从而实现曲线跟着粒子的运动而生长。

vector $pos = particleShape1.position;

curve -a -p ($pos.x) ($pos.y) ($pos.z) ("IjL curve" + particleShape1,particleld);

(8)播放动画至150帧位置,此时在画面中就会产生很多的曲线,如图所示 。

c49291db715fafd9ea3f3d4bc492f498.png

下面就用这些线曲线来生长植物,然后删除镜头外的曲线,或者删除不喜欢的曲线,节省资源。

Tips :如果读者习惯用粒子创建曲线,只要想像力丰富,可以做出多种特效,这是用Maya粒子做特效的一个基本技能,一定要掌握。

(9)删除粒子,选中所有新生成的曲线,单击菜单命令Edit Curves> Rebuild Curve (编辑曲线>重建曲线)后面的口按钮,在打开的Rebuild Curve Options (重建曲线选项)窗口中设置Number of span (跨度数)值为8,单击Rebuild (重建)按钮优化曲线,然后删除历史,如图所示。

3406f5e28785e6b50e936a27f0439d89.png

Tips:现在的破法,粒子产生完曲线后已经没有用了,所以要将其删除。读者可以尝试一下,粒子一边产生曲线。同时一边产生植物的做法.

(10)选中所有曲线,执行菜单PaintEffects > Curve Utilites> Attach Brush To Curve (PaintEfects>曲线工具>将笔刷附加到曲线)命令;选择最初产生的那个笔触(在上面第4步中产生的) ,执行菜单Painteffects > Get Setting from Selected Stroke (PaintEffects> 从选定笔画获取设置)命令,选择所有新产生的笔触,再执行菜单Paint Effects > Apply Setting to Selected Stroke (PaintEffects> 将设置应用于选定笔画)命令,这样原先产生的植物的所有属性就一模一样地赋给了我们新产生的植物。

(11)选择所有新产生的笔触,在Max Clip (最大片段)属性上key帧,在第60帧时设置参数值为0.2,在第150帧时设置参数值为1,如果想让动画有一些变化, 也可以分开单独调节,如图所示。

fab2af48351d74c4a69e67efb2f86657.png

下面我们开始打灯光,准备渲染输出。

(12)新建一盏聚光灯,模拟场景中的太阳光,打开灯光阴影,同时打开笔触的投射阴影。

Tips:测试灯光时,为了加快效率,可以先把大部分植物隐藏,最终渲染时再显示出来;修改多个笔触的属性时,可以用菜单命令Paint Effects>Share One Brush (Paint Effects>共享一个笔刷) 。

(13)渲染输出的效果如图所示。

5526592cb8793439aedf4848bd816b35.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...

开发环境:系统:Ubuntu 16.04 LTS版本:python 3.5.2邮箱服务器:stmp.126.com注意:1.不可正文群发带图,不然会被stmp.126.com认定为垃圾邮件,发不出去 - -!!! 也就是说该代码群发的话,只能用plain纯文本模式.2.由于我的邮箱服务器是126的,所以建议也使用126邮箱测试,测试的前提是…

mysql数据库导入导出_MySQL数据库导入导出详解

MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入;2) 直接拷贝数据库目录和文件。在不同操作系统或MySQL版本情况1. 概述MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导…

python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解

python列表切片和嵌套列表取值操作详解给出列表切片的格式:[开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同)[开头元素:结尾元素(不含):步长]# 其中,-1表示list最后一个元素首先来看最简单的单一列表:…

python 装饰器有哪些_Python装饰器有哪些常见用途?

RSabet..123我使用装饰器主要用于计时目的def time_dec(func):def wrapper(*arg):t time.clock()res func(*arg)print func.func_name, time.clock()-treturn resreturn wrappertime_decdef myFunction(n):...好例子!不知道它做了什么.解释你在那里做什么,以及装饰者如何解决…

代码统计工具有哪几种_跟我学“Linux”小程序Web版开发(四):引入统计及Crash收集...

在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品。在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品。为什么要加应用统计和 Crash 收…

mmseg java_MMSeg中文分词算法

Java中有一些开源的分词项目,比如:IK、Paoding、MMSEG4J等等。这里主要说的是MMSEG4J中使用的MMSeg算法。它的原文介绍在:http://technology.chtsai.org/mmseg/,是用英文书写的,这是只是它的一个中文笔记。为什么中文要…

python查看文档的软件_Python __doc__属性:查看文档

前面介绍了使用 help() 函数来查看程序单元的帮助信息。比如导入 string 模块之后,即可使用 help() 函数来查看指定程序单元的帮助信息。例如,在交互式解释器中输入如下命令来查看 string 模块下 capwords() 函数的作用:>>> help(st…

python重写和装饰器_python中的装饰器

装饰器的本质:当你在用某个decorator来修饰某个函数func时,如下所示:decoratordef func():pass其解释器会解释成下面这样的语句:funcdecorator(func)本质是把一个函数当作参数传递到另一个函数中,然后再调用。def hell…

python3不等于号_python中的不等于号是什么

python中的不等于号用!表示。Python支持的比较运算符如下图所示比较运算符,也成关系运算符,用于对常量、变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回 True;反之,则返回 False。比较运…

java的abstract的意思_java – spring中的abstract =“true”是什么意思?

Spring中的抽象bean有点不同于抽象类。事实上,Spring中的抽象bean甚至不需要映射到任何类。以此为例:和类:public class FooDao {private DataSource dataSource;private SomeHelper someHelper;private FooHelper fooHelper;//setters}publi…

错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...

mac电脑经过长时间的使用后会变得卡顿,或者因为部分操作方式改变以至于给我们在使用过程中造成障碍,此时我们可以进行恢复出厂设置,以此来解决部分问题。那么该如何为MacBook或Mac电脑恢复出厂设置呢?下面跟随小编来一起学习一下吧…

java枚举类型测试_Java枚举类的使用

1、自定义枚举类// 测试类public class enumDemo {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);}}// 自定义枚举类class Season {//…

mac显示网速_Mac网络流量监控工具——NetWorker pro

NetWorker pro for Mac是Mac系统上一款轻量级的网速实时监测软件,可以让用户在菜单栏上显示当前的网络上传下载速度,可以在速度和流量两种模式之间切换,也可以选择不同的网络模式来进行监测。此外,networker mac还提供有关当前活动…

南京java架构师工资_java架构师工资一般是多少?怎么提升才能获得高薪?

这几年Java一直以自身的优势霸占榜首,而且其实java架构师工资也是行业比较高的,下面来看看java架构师的工资到底有多少,当然这也是要区分地区的,以及怎样提高自己才能获得高薪呢?当程序员容易,当一个优秀的…

matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码

​过去的两年中,我经常会在微信公众号和知乎上分享,平时如何通过MATLAB制作GUI,来让自己的工作和生活更加便捷与高效。在分享的同时,有不少朋友会给我留言提问关于MATLAB GUI的问题。而其中的许多问题,其实都是能够在M…

线性回归csv数据集_用mxnet的gluon线性回归训练只有两个特征的数据集

前言自从上次试着用最基础的线性回归训练一个有80个特征的数据集,梯度爆炸之后,今天拿一个简单到不能再简单的数据集试试能不能成功收敛。途中我们又会遇到什么问题?数据集来自吴恩达机器学习课程第二周的课后练习。原本是txt文件&#xff0c…

java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式

在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容。如果内容代码过多则写在同一个html文件就会显得特别乱,所以这里我们最好…

Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结

文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性。DOM标准是标准的。它很强壮且完整,并且有许多实现。这是许多大型安装的决定因素--特别是对产品应用程序,以避免在API发生改变时进行大量…

禅道项目管理_禅道 11.6.1 版本发布,完善细节,修复 Bug

禅道项目管理软件集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。禅道官网:www.zentao.net。大家好,禅道项目管理软件11.6.1发布&#xff0…

mendeley引用参考文献不显示_免费文献管理器Mendeley

June 2020有机合成化学文献检索今天小编给大家分享一款免费又好用的文献管理器——Mendeley,另外晶体cif文件下载—Materialsproject和COD数据库可在菜单栏的文献检索[文献管理/资源]中查看Mendeley是什么Mendeley是一款免费的跨平台文献管理软件,同时也…