实验室做网格处理方面的算法,写界面很麻烦,所以有了利用maya和matlab进行数据连通的念头,于是有了这个插件。

这个插件可以把maya的网格数据导入matlab之中,完成计算之后重新返回maya。适合平时快速做一些网格数据的可视化工作,以及一些小试验。

选择maya而不是max的原因是,maya的数据是用节点组织的,可以很方便地组合不同的节点构造出新的功能,而在max里面一切都是隐藏的,要实现新的功能十分不方便。

如果需要代码,可以在这里下载 https://github.com/league1991/Maya2Matlab

下面以一个简单的例子演示插件的用法。在这个例子中,我们给模型加噪声,就像max的噪波修改器一样。

1.配置好插件之后,打开maya,可以看到插件工具栏:

下面介绍一些按钮的功能:

+/-MA                                 加载、卸载插件

+/-Eng                               打开/关闭matlab引擎

RsMa                                彻底刷新matlab引擎的按钮,当你修改了某个m文件,想matlab重新读取你新的代码,就要先刷新matlab引擎

m2d/d2m/m2m               数据转换节点按钮,为了统一处理各种数据,实现了一种自定义的矩阵数据类型matlabData,maya的各种数据都统一转成matlabData然后才能在插件节点里面传输。这3个节点的意思分别是  maya数据->matlabData  matlabData->maya数据  maya网格->matlabData。

mat                                    matlab节点,允许用户输入matlab脚本

mi                                      动画序列插值节点

ms                                     点边面选择节点,提取选中的顶点、边、面序号

mod                                   修改网格节点

exe                                     与外部exe程序通过socket通信

2. 为了方便编辑,建议把maya界面视图配置成三块:透视图+节点视图+属性编辑器,如图:

这样可以同时看到节点结构和计算结果

3. 好,现在开始教程,首先我们创建或导入一个模型,这里简单起见,创建了一个球。之后的场景大概是这样:

左边的透视图多了一个球,右边的节点视图多了三个节点。

节点的方框里面有两行字,第一行表示节点的名字,第二行表示节点的类型。

熟悉面向对象编程的人可以发现,一个节点就好像一个类的实例,名字就相当于这个实例的变量名,而节点类型自然就相当于类名了。

对于这三个节点,pSphere1是一个变换节点(类型为transform),记录了球的位置、旋转这些信息。polySphere1是一个球生成器(类型为polySphere),根据各种参数,例如半径,分段数等等生成一个球网格,而pSphereShape1(类型为mesh)就是一个放着网格数据的容器。

图中的箭头表示什么呢?对程序员来说,可以理解成表示“赋值”,相当于一句话:

pSphereShape1.InMesh = polySphere1.Output;

inMesh和output都是各自节点类型的一个数据成员。通常列在右边的是作为输出,在左边的作为输入。

也可以理解成数据的流向。也就是说,把球生成器的output变量的数据(就是一个球网格)放到pSphereShape1的inMesh变量里面。

3. 现在我们已经有了原数据,下一步要做的是:把它转换成matlabMatrix格式。

在工具架上点一下m2m,创建一个mesh2Matrix类型的节点:

然后把pSphereShape1的out mesh 连到 mesh2Matrix 的 inputMesh 里面:

怎么连? 请看下面几幅图:

(1)在pSphereShape1的右边白点上点一下,出来一个菜单

(2)选择OutMesh之后,拉出来一个黄色箭头的线。

(3)在mesh2Matrix的左边白点上点一下,出来一个菜单,这时候可以直接选inputmesh。有时候你要的变量没有出现,就要点other..

(4)点other之后弹出来一个菜单,下面是成员变量(或者说是节点的各种数据)的列表。点一下inputMesh,连接成功。

4. mesh2Matrix负责数据转化,现在可以获得转化之后的matlabMatrix矩阵了。但是它在哪里呢?点开mesh2Matrix1看看:

出来很多个Matrix结尾的名字,下面逐个解释:

Adjacency Matrix  顶点邻接矩阵,是一个稀疏矩阵,矩阵大小为点数x点数,若顶点i与顶点j相邻 对应元素非0

Avg Normal Matrix ,Bitangent Matrix , Tangent Matrix 法线,切线,副切线矩阵,大小为点数x3

Min/Max Curvature Direction最小/最大曲率方向,大小为点数x3

Min/Max Curvature 最小/最大曲率大小,大小为点数x3

Vertex Matrix 顶点坐标矩阵,大小为点数x3

Vertex Edge/Face Incidence Matrix 顶点和边/面的关联矩阵,若顶点与某条边/某个面邻接,对应元素非0

现在我们需要的是顶点矩阵。

5. 把顶点数据导入matlab ,点一下mat按钮,创建一个matlab节点,然后把vertex matrix 连到 matlab节点的inputMatrix[0],如图:

可以发现场景多了一个matlab图标,可以通过点击这个图标直接选定matlab对象。

为了测试数据是否连通,在属性编辑器输入in0,点一下compute,可以看到有输出

在这个窗口里面,Matlab Command表示你要输入的matlab 命令,in0就是对应inputMatrix[0]的matlab变量,点compute之后,这个命令会被发送到matlab引擎执行,结果显示在output窗口。如果勾选了immediate update,则每次节点被求值的时候都会调用matlab引擎,这样可以在调参数的时候实时预览结果。

也可以在matlab引擎输入in0,结果是一样的

6. 现在顶点数据已经被读出,我们利用matlab加入噪声。

输入matlab命令,按compute 之后的结果是这样的:

首先根据矩阵大小获得点数,存在nVtx变量里面

然后新建一个随机数矩阵 rnd

最后两者相加,结果存在out0变量,这个变量对于outputMatrix[0]

scatter3是一个画散点图指令,所以命令执行完就会显示一个matlab窗口。

7.现在已经有了扰动的结果,下一步是重建网格。

创建一个meshmodifier节点,同时把原网格复制一份,可以看出多了三个节点。

8. 按下图连接节点,连了之后重新按Compute计算一次,可以发现有了一个扰动的网格

值得注意的是原网格的outMesh变量要连在meshModifier的inMesh之中,因为meshModifier需要原网格的拓扑结构,结合新的顶点位置来构建新网格。

9. 若要实时控制扰动程度,可以添加一个data2Matrix节点,连到inputMatrix[1]的地方

同时matlab代码改为如下,factor 接受in1的输入,勾选immediate update

10. 拖动data2Matrix的 current scalar value的时候,噪声大小会实时变化,如图

教程完毕。

Maya 与 Matlab 数据互联插件使用教程的更多相关文章

  1. 【转】基于jquery,bootstrap数据验证插件bootstrapValidator 教程

    bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.c ...

  2. 基于jquery,bootstrap数据验证插件bootstrapValidator 教程

    bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.c ...

  3. WordPress插件制作教程概述

    接下来的一段时间里,开始为大家讲解WordPress插件制作系列教程,这篇主要是对WordPress插件的一些介绍和说明,还有一些我们需要注意的地方,以及需要掌握的知识. WordPress插件允许你 ...

  4. Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程

    原文:Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程 Red Gate ...

  5. MATLAB R2018b Mac中文版安装教程

    MATLAB r2018b mac中文版是一款强大的可视化数学分析软件,专门用于在Mac上执行数值计算,编程和可视化任务时极大地提高您的工作效率.在MATLAB的帮助下,您可以分析数据,创建应用程序, ...

  6. Nrpe 插件安装教程

    Nrpe 插件安装教程  blog地址: http://www.cnblogs.com/caoguo 一.nagios plugins的安装 [root@Nrpe ~]# yum install -y ...

  7. 【】Nessus安全测试插件编写教程

    Nessus安全测试插件编写教程 作者:Renaud Deraison 翻译:nixe0n 1.怎样编写一个高效的Nessus安全测试插件 在Nessus安全测试系统中, 所有的安全测试都是由ness ...

  8. 数据可视化地图制作教程,这个免费BI软件轻松搞定

    ​数据可视化地图制作教程 现在做数据分析基本上离不开数据可视化,在大量的数据中,有很大一部分数据都与地理信息相关,因此,在数据可视化中,可视化地图是非常重要的一部分.无论是新闻报道,还是商业分析报告, ...

  9. 【Discuz】关闭QQ互联插件提示信息:系统繁忙,请稍后再试

    版本:X3.2.20160601 提示信息 系统繁忙,请稍后再试 解决方案 Step1.删除QQ互联插件目录 网站的根目录\source\plugin\qqconnect Step2.上传原始QQ互联 ...

随机推荐

  1. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  2. Android studio 如何查看当前git 分支的4种方式

    1.第一种       2.第二种       3.第三种 4.第四种       前面3种都是通过android studio 操作的. 第四种是通过命令行操作.(可以在 git bash 中输入命 ...

  3. Android 获取图片exif信息

    使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  4. 【iOS】Mac下SVN的服务器搭建

    在协同开发中,版本控制是必备的.完全不敢想象团队都在用U盘.QQ管理代码的景象.但是svn不像git,拥有众多免费的代码库,如果在同 一局域网下,搭建svn服务端来同步代码是很有必要的.本文将详细讲解 ...

  5. Java中的查找算法之顺序查找(Sequential Search)

    Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...

  6. 【读书笔记】iOS网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

  7. sublime mac osx 命令行打开

    sudo ln -s /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl /usr/bin/subl 参考地址:htt ...

  8. 开篇:IT软件人员学习的书籍 - IT软件人员书籍系列文章

    读书是一件快乐的事情. 读书能够增长知识,了解社会,了解人类的思想,继而转换成智慧.无论是什么人,都需要读书,多读书,读好书,同时也要把书中的精髓记录下来,一个是当做读后感,一个是为以后如果忘记了回头 ...

  9. knockoutjs with绑定导致unobtrusive validation失效的问题

    如果最初的时候with绑定的对象是空的,那么with绑定内部的unobtrusive validation规则在提交的时候无法生效,无法进行验证. 解决办法: 在提交的时候(或者with绑定的对象非空 ...

  10. sql server 常见错误代码15000 - 15999含义解析

    错误 15000 - 15999 SQL Server 2008 R2 其他版本 错误 严重性 是否记录事件 说明(消息正文) 15001 16 否 对象 '%ls' 不存在或不是此操作的有效对象. ...