Maya插件开发笔记(1) 开发环境搭建

本文详细介绍了在Windows11环境下使用C++开发Maya插件的过程,包括下载并配置MayaSDK,设置必要的环境变量如MAYA_PLUG_IN_PATH、MAYA_SCRIPT_PATH和XBMLANGPATH,以及注意事项,为读者提供完整的开发环境搭建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列博客将会详细的的记录Maya的插件开发过程,希望能对你有所帮助,如内容有遗漏或者不正确的地方,欢迎建议和反馈。

开发环境

  • Windows 11 专业版 简体中文语言
  • Maya 2023 (不含update1,2,3这种更新版本,就是最开始的那个2023版本)
  • 开发Maya插件选择的是C++语言进行开发,以免泄露源码,同时为了最大化提升运行速度,因为不管是MEL还是Python都慢的像乌龟,在处理数十万以上顶点时,不可避免的会严重影响处理速度

首先,要开发Maya插件,必须先下载Maya的SDK,在下面这个链接:
https://aps.autodesk.com/developer/overview/maya

在这里插入图片描述
找到DownloadSDKs 2019-2024 for Windows
在这里插入图片描述
点击展开后下载这个Maya 2023 win64 DevKit,下载完成后解压可以得到一个devkitBase文件夹在这里插入图片描述
接下来把这个devkitBase文件夹放到你的C盘下面的Users目录下面的你的系统用户名文件夹下面,比如我的用户名是Administrator,所以我的路径就是C:\Users\Administrator
在这里插入图片描述
接下来需要你在这个devkitBase里创建一个空文件夹,叫做plug-ins

### Masked Self-Attention机制详解 #### 定义与作用 在深度学习领域,尤其是自然语言处理中的序列建模任务里,Masked Self-Attention是一种特殊的自注意力机制变体。这种机制通过引入遮蔽操作来防止模型访问尚未生成的位置信息,在解码阶段尤为重要[^2]。 #### 工作原理 具体来说,当构建查询向量Q、键K以及值V矩阵时,对于每一个时间步t上的token而言,其对应的q_t只会与其之前(含本身)的时间步j≤t上的k_j和v_j发生交互。为了实现这一点,通常会在计算softmax之前的得分矩阵S上施加一个下三角形的掩码M,使得所有不符合条件(i>j)的元素被设为负无穷大(-∞),从而让这些位置的概率趋近于零: \[ S_{ij} = \begin{cases} Q_i K_j^\top/\sqrt{d_k}, & i\ge j \\ -\infty, & otherwise\\ \end{cases}\] 最终得到的结果再经过Softmax函数转换成概率分布形式P,并以此作为权重去聚合相应的value向量获得输出O: \[ O_i=\sum_j P_{ij} V_j,\quad where\; P=softmax(S)\] 这样的设计不仅保留了并行化的优势,同时也模拟出了类似于RNN那样从前到后的顺序依赖关系。 ```python import torch import torch.nn as nn class MaskedSelfAttention(nn.Module): def __init__(self, embed_size, heads): super(MaskedSelfAttention, self).__init__() self.embed_size = embed_size self.heads = heads # 初始化线性变换层 self.values = nn.Linear(self.embed_size, self.embed_size, bias=False) self.keys = nn.Linear(self.embed_size, self.embed_size, bias=False) self.queries = nn.Linear(self.embed_size, self.embed_size, bias=False) def forward(self, query, key, value, mask=None): N = query.shape[0] values = self.values(value).view(N, -1, self.heads, self.embed_size // self.heads) keys = self.keys(key).view(N, -1, self.heads, self.embed_size // self.heads) queries = self.queries(query).view(N, -1, self.heads, self.embed_size // self.heads) scores = torch.einsum("nqhd,nkhd->nhqk", [queries, keys]) if mask is not None: scores = scores.masked_fill(mask == 0, float("-1e20")) attention = torch.softmax(scores / (self.embed_size ** (1/2)), dim=-1) out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape( N, -1, self.embed_size ) return out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值