Maya-UE xgen-UE 毛发导入UE流程整理

首先声明:maya建议用2022版本及一下,因为要用到Python 2 ,Maya2023以后默认是Python3不再支持Python2;

第一步:Xgen做好的毛发转成交互式Groom
在这里插入图片描述
第二步:导出刚生成的交互式Groom缓存,需要设置一下当前帧,和写入宽度;到这里其实就可以直接导入到UE了,为了后面能做多颜色毛发和渐变毛发可以继续看,如果不需要,到这一步就可以直接打开UE导入了,按照后面的流程导入UE就可以了!
在这里插入图片描述
在这里插入图片描述

第三步:导入刚刚导出的缓存文件,导入后会根据毛发数量自动分组;
在这里插入图片描述
在这里插入图片描述
第四步:利用官方文档的Python脚本分别重新导出这三个分好组的缓存文件,这一步的目的是为了让缓存文件拥有UV,方便进去UE后根据需求继续调整(举例做渐变毛发和多颜色毛发);可以直接复制,有几个代码需要修改,看说明;

from maya import cmds
from maya import OpenMaya
import osdef create_root_uv_attribute(curves_group, mesh_node, uv_set='map1'):'''Create "groom_root_uv" attribute on group of curves.'''# check curves groupif not cmds.objExists(curves_group):raise RuntimeError('Group not found: "{}"'.format(curves_group))# get curves in groupcurve_shapes = cmds.listRelatives(curves_group, shapes=True, noIntermediate=True)curve_shapes = cmds.ls(curve_shapes, type='nurbsCurve')if not curve_shapes:raise RuntimeError('Invalid curves group. No nurbs-curves found in group.')else:print "found curves"print curve_shapes# get curve rootspoints = list()for curve_shape in curve_shapes:point = cmds.pointPosition('{}.cv[0]'.format(curve_shape), world=True)points.append(point)# get uvsvalues = list()uvs = find_closest_uv_point(points, mesh_node, uv_set=uv_set)for u, v in uvs:values.append([u, v, 0])#print (str(u) + " , " + str(v)  )# create attributename = 'groom_root_uv'cmds.addAttr(curves_group, ln=name, dt='vectorArray')cmds.addAttr(curves_group, ln='{}_AbcGeomScope'.format(name), dt='string')cmds.addAttr(curves_group, ln='{}_AbcType'.format(name), dt='string')cmds.setAttr('{}.{}'.format(curves_group, name), len(values), *values, type='vectorArray')cmds.setAttr('{}.{}_AbcGeomScope'.format(curves_group, name), 'uni', type='string')cmds.setAttr('{}.{}_AbcType'.format(curves_group, name), 'vector2', type='string')return uvsdef find_closest_uv_point(points, mesh_node, uv_set='map1'):'''Find mesh UV-coordinates at given points.'''# check meshif not cmds.objExists(mesh_node):raise RuntimeError('Node not found: "{}"'.format(mesh_node))# check uv_setuv_sets = cmds.polyUVSet(mesh_node, q=True, allUVSets=True)if uv_set not in uv_sets:raise RuntimeError('Invalid uv_set provided: "{}"'.format(uv_set))# get mesh as dag-pathselection_list = OpenMaya.MSelectionList()selection_list.add(mesh_node)mesh_dagpath = OpenMaya.MDagPath()selection_list.getDagPath(0, mesh_dagpath)mesh_dagpath.extendToShape()# get mesh function setfn_mesh = OpenMaya.MFnMesh(mesh_dagpath)uvs = list()for i in range(len(points)):script_util = OpenMaya.MScriptUtil()script_util.createFromDouble(0.0, 0.0)uv_point = script_util.asFloat2Ptr()point = OpenMaya.MPoint(*points[i])fn_mesh.getUVAtPoint(point, uv_point, OpenMaya.MSpace.kWorld, uv_set)u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_point, 0, 0)v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_point, 0, 1)uvs.append((u, v))return uvsdef abc_export(filepath, node=None, start_frame=1, end_frame=1, data_format='otawa', uv_write=True):job_command = '-frameRange {} {} '.format(start_frame, end_frame)job_command += '-dataFormat {} '.format(data_format)job_command += '-attr groom_root_uv 'if uv_write:job_command += '-uvWrite 'job_command += '-root {} '.format(node)   job_command += '-file {} '.format(filepath) cmds.AbcExport(verbose=True, j=job_command)def main():export_directory = 'D:/Dev/Ref'hair_file = os.path.join(export_directory, 'hair_export.abc')curve_top_group= 'description1|SplineGrp0'uv_mesh='pPlane1'create_root_uv_attribute( curve_top_group , uv_mesh)abc_export(hair_file, curve_top_group)main()

在这里插入图片描述
第五步:由于是分别导出的3个文件,因为三个分别导入UE有些麻烦也没必要,需要重新整合一下;重新开一个新的maya文件,把3个缓存文件重新导入到新的maya里面,再次整体导出一个缓存文件;这里需要添加一个groom_root_UV(说明 :groom_root_uv属性为每根头发指定它所附加到的基础网格uv。该属性是可选的,如果未指定,将使用球形贴图在引擎中自动生成一个根UV)
在这里插入图片描述
第六步:导入UE,需要设置一下项目设置和插件;
在这里插入图片描述
在这里插入图片描述
然后导入窗口的旋转设置一下;
在这里插入图片描述
这里可以设置一下基础属性;
在这里插入图片描述
这里可以开启物理模拟;
在这里插入图片描述可以创建绑定;这样就可以替换默认的头发了,也可以通道添加组件添加到骨骼模型上;
在这里插入图片描述
打开角色蓝图,就可以替换之前的模型资产和材质了;
在这里插入图片描述
材质球设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里可以通过绘画贴图来实现不同颜色的发色;

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

大数据与人工智能|全面数字化战略与企业数字化转型(第1节 )

要点一:培养跨学科思维 在分析时,需要采用多学科的思维方式 结果不重要,重要的是如何提炼现象、分析问题和得出结论的过程。 1. 介绍了锤子精神和多学科思维方式的重要性。指出了只从自身学科出发解决问题的局限性。 2. 提倡跨学科思维方式&a…

2023下半年的总结

我从八月下旬开始写的,到现在差不多有半年了,总结一下吧! 1.计算机视觉 在计算机视觉方面,想必两个有名的深度学习框架(TensorFlow和PyTorch)大家都很清楚吧,以及OpenCV库。对于人脸识别&…

在高并发场景下,缓存“雪崩”了怎么办

1. 缓存雪崩的常见原因 缓存“雪崩”是指,因为部分缓存节点不可用,而导致整个缓存系统(甚至是整个服务系统)不可用。缓存“雪崩”主要分为以下两种情况: 因缓存不支持 rehash 而导致的缓存“雪崩”缓存支持 rehash 时…

电脑怎么检测手机配置信息

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

带大家做一个,易上手的家常蒜酱鲍鱼

超市有个福利鲍鱼 就买回来弄一下 搞一个整个的蒜 蒜去皮切末 三四个干辣椒切小末 切一点葱花混进去 鲍鱼去壳 去内脏&牙齿 将鲍鱼切块 因为鲍鱼是正经不好入味的东西 起锅烧油 下入 葱蒜干辣椒 翻炒出味 然后倒入鲍鱼进行翻炒 翻炒均匀后 倒入 一勺生抽 半勺老抽 …

Linux 内存数据 Metrics 指标解读

过去从未仔细了解过使用 free、top 等命令时显式的内存信息,只关注了已用内存 / 可用内存。本文我们详解解读和标注一下各个数据项的含义,同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识,很多查看内存的命令行工具都是 cat /pro…

71内网安全-域横向网络传输应用层隧道技术

必备知识点; 代理和隧道技术的区别? 代理主要解决的是网络访问问题,隧道是对过滤的绕过, 隧道技术是为了解决什么 解决被防火墙一些设备,ids(入侵检测系统)进行拦截的东西进行突破&#xff0…

2023-12-11 LeetCode每日一题(最小体力消耗路径)

2023-12-11每日一题 一、题目编号 1631. 最小体力消耗路径二、题目链接 点击跳转到题目位置 三、题目描述 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格…

自定义富集分析结果的term顺序

大家好,元旦过得还好吗?之前我们聊过如果富集分析结果不理想,如何选择富集分析的terms,如果不记得,可以看看这三个推文和视频。 ​富集分析结果不理想:如何从上千个term中找到自己想要所有term?…

Spark 集群搭建

文章目录 搭建前准备安装搭建解压并重命名环境变量配置配置文件yarn-site.xmlspark-env.sh 官网求 π(PI) 案例启动spark-shell通过浏览器查看显示查看 Spark 的网页信息展示 搭建前准备 下载地址:Index of /dist/spark (apache.org) 配置好 hadoop 环境&#xff…

HttpClient入门

HttpClient入门 简介 HttpClient 是 Apache HttpComponents 项目中的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一组强大而灵活的 API,使得在 Java 程序中执行 HTTP 请求变得相对简单 maven依赖 org.apache.httpco…

【BIG_FG_CSDN】C++ 数组与指针 (个人向——学习笔记)

一维数组 在内存占用连续存储单元的相同类型数据序列的存储。 数组是静态存储器的块;在编译时确定大小后才能使用; 其声明格式如下: 元素类型 数组名[常量];元素类型:数组中元素的数据类型; 常量&#…

租房数据分析可视化大屏+58同城 Django框架 大数据毕业设计(附源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解🌏题目描述💡题…

Node.js+Express 路由配置,实现接口分类管理

首先创建一个路由目录及文件 routes/user.js代码 const express require(express); const router express.Router(); // 使用express提供的router对象 const db require(../dbserver/mysql);router.get(/api/user, (req, res) > {const sqlStr SELECT * FROM sys_user;…

StratifiedKFold解释和代码实现

StratifiedKFold解释和代码实现 文章目录 一、StratifiedKFold是什么?二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释3.4 数据打乱对这种交叉验证的影响。 四、总结 一、StratifiedKFold是什么? …

Eclipse汉化

目录 一、首先电脑已经下载好Eclipse 二、打开Eclipse Babel 三、打开Eclipse 1、工具栏——>Help——> Install New Software 2、 点击Add 3、添加复制的链接,点击Add 4、等待加载 5、勾选Chinese(Simpliied),而后Next&…

动画墙纸:将视频、网页、游戏、模拟器变成windows墙纸——Lively Wallpaper

文章目录 前言下载github地址:网盘 关于VideoWebpagesYoutube和流媒体ShadersGIFs游戏和应用程序& more:Performance:多监视器支持:完结 前言 Lively Wallpaper是一款开源的视频壁纸桌面软件,类似 Wallpaper Engine,兼容 Wal…

HarmonyOS 组件通用属性之通用事件 文档参数讲解(触摸事件)

好 本文 我们来说说触摸事件 字面意思也非常好理解 就是我们手机手指触摸物体触发 我们先在编辑器组件介绍中 找到这个东西的基本用法 Button("跳转").onTouch((event: TouchEvent) > {})最明显的就是 event 的类型变了 点击事件的是 ClickEvent 而这里是 Touc…

主成分分析(PCA):探索数据的核心

文章目录 前言1. 什么是 PCA ?2. PCA 的原理2.1 协方差和方差2.2 核心思想2.3 步骤 3. PCA 的应用场景4. PCA 的优缺点5. 示例:人脸识别5.1 完整代码5.2 运行结果 结语 前言 当今社会,数据无处不在。从社交媒体到金融交易,从医疗…