Unity毛发系统TressFX Exporter
Unity 数字人交流群:296041238
一:在Maya下的TressFX Exporter 插件安装步骤:
1. 下载Maya的TressFX Exporter插件
下载地址:TressFX Exporter
链接:https://github.com/Unity-China/cn.unity.hairfx.core/tree/main/Maya_TressFX_Exporter~
(注意:与 Maya 2022 不兼容,目前支持Maya版本为2019)
2. 移动文件
复制plug-ins文件夹到C:\User\YOUR_USER_NAME\Documents (文档) \maya\


3. 加载插件
打开Maya,在顶部菜单中会出现TressFX Tool 菜单选项;(如果没有出现,在顶部菜单中找到Windows>Settings/Preferences>Plug-in Manager,然后勾选TressFX_Exporter.py的Loaded选项卡,重新启动Maya)

4. 导出TFX发行曲线文件

二:在Maya中使用TressFX Exporter
既然已经在maya中安装完成了AMD TressFX plugin,那么接下来按照官网课程, 就要给大家介绍下如何使用AMD TressFX plugin了;
大致分为以下3个步骤:
- 使用任意头发梳理工具来制作想要的发型曲线(如Maya Xgen、Zbush…)
- 使用AMD TressFX plugin for Unity进行导出
- 将导出的TFX文件导入Unity并在Unity中进行渲染调节设置

课程中: 官方告诉我们可以使用任意头发梳理工具来制作想要的发型曲线,然后用我们的插件将其转换为TFX文件。
比如可以使用 Maya 的 XGen 工具来制作你的发型曲线,也可以使用Zbush软件制作你的发型曲线(关于如何使用头发梳理工具来制作发型曲线,不是本教程的重点)
以下是一些关于如何使用XGen工具来制作发型曲线的教程:https://80.lv/articles/80-level-ratings-10-great-tutorials-on-hair-creation-using-xgen/


接下来我们可以将上一步骤中所制作的头发的引导线导出为 Maya 的 MEL 文件(如下图中左上角颜色所示,以及红框设置)
将 MEL 文件重新导入 Maya 场景后,我们可以看到我们创建的引导线会变为一条条蓝色的曲线(如右下角颜色所示)

如下图所示:我们以短发发型为例来给大家讲解下,如何使用TressFX Export Plugin导出头发组;
这里的短发发型引导线主要分为四组制作,分别是Bangs刘海、Top头顶头发、Back头背头发、Flyways碎发;

我们依次导出这四组头发:
首先我们选中Bangs组 →然后在顶部菜单中找到TressFX菜单,选择TressFX->Export Hair/fur窗口,然后选择Number of vertices per strand / 每股的顶点数。像这样的短发我们一般选择4或者8,对于长辫子,官方推荐: 16;
注意:Invert X-axis of Hair 选项默认为启用

点击Export! 会弹出对话框,这里我们设置完成文件名Bangs,点击Save后,我们就可以在对于的文件夹下找到这个后缀为.TFX的文件了;
接下来我们依次导出其他三组头发(将头发组保存为 TFX 文件的步骤与导出Bangs的步骤相同),导完之后就可以在 Unity 中使用它们了;

三:在Unity中创建HairFX Profile文件
官方这里是以高清渲染管线HDRP为例:
- 创建一个HDRP的Unity工程,这里我使用的Unity 版本是Unity 2021.3.4f1c1,并导入我们的角色模型贴图等素材;
- 创建好工程后,打开该Unity新建项目的文件夹,找到Packages文件夹下的manifest文件,为工程添加HDRP / URP HairFX Shader Package;
注意: URP和HDRP的操做基本一致, 不过我这边用的Unity版本是Unity 2021.3.6f1c1.

//---------------------------------------------HDRP
"dependencies": {"cn.unity.hairfx.core": "https://github.com/Unity-China/cn.unity.hairfx.core.git", "cn.unity.hairfx.hdrp": "https://github.com/Unity-China/cn.unity.hairfx.hdrp.git",
...
}
//---------------------------------------------URP
"dependencies": {"cn.unity.hairfx.core": "https://github.com/Unity-China/cn.unity.hairfx.core.git", "cn.unity.hairfx.urp": "https://github.com/Unity-China/cn.unity.hairfx.urp.git",
...
}//如果再最后加入该库,则注意删除最后边的逗号《 , 》

注意:
如果,之后进入Unity如果报错如下提示(包括:超时、解析错误)
解决方案:
打开GitHub Desktop软件,然后分别从网址上拷贝下来,接着通过Package Manager的左上角+号,从本地导入,点击Add package from disk...之后,找到你拷贝下来的文件夹,选择其中的package.json,稍作等待之后,包体就被加入到了Unity中
此时,你的该Unity新建项目的文件夹,找到Packages文件夹下的manifest文件,其大致内容为下图所示。
![]()
这里官方以《Defender》资源包为例来给大家进行演示,该资源包包含多种发型供大家尝试;我们可以在Github上免费下载工具和角色资源包(该工程已经添加HDRP / URP HairFX Shader Package)
HDRP版:https://github.com/UnityTechnologies/HDRP-Defender-Character-Demo
URP版:https://github.com/UnityTechnologies/URP-Defender-Character-Demo

在Asset下创建一个HairFX Profile文件,Profile创建完成后对可以其进行重命名;


接下先来观察和了解下这个Unity Hair Profile文件的参数以及含义:
|
| |
| Hair Status | 头发的状态统计 |
| Guide Strands | 引导线股数 |
| Guide Vertices | 三角面数 |
| Total Strands | 总头发的股数 |
| Global Geometry Settings | 全局头发股数设置 |
| Hair Count | 发丝的数量 ( 下边提到的一般调整发型的四项设定之一 ) |
| Hair Offset | 头发偏移(发丝间的距离)( 下边提到的一般调整发型的四项设定之一 ) |
| Tessellation Per Strand | 每束发丝细分:用于调整发丝柔顺度。低数值能让游戏运行更流畅,高数值能让头发更加柔顺。你可以在优化时寻找最合适的中间点。( 下边提到的一般调整发型的四项设定之一 ) |
| Lock Hair Tip | 是否锁定发梢 |
| ========================每次修改完成后记的点击Apply 应用======================== | |
| 对于头发模型的整体,我们一般只调整Hair Count(头发数)、Hair Offset(头发偏移)、Tessellation Per Strand(每束发丝细分)及Hair Thickness(头发厚度)(下边介绍这个参数)四项设定。 | |
|
| |
| Global Geometry Settings | 头发实体的全局设置 |
| Enable LOD | 是否开启LOD |
| LOD Distance | LOD距离设置 |
| LOD Distance Range | 设置LOD的距离 |
| LOD Strand Reduction | LOD 发丝股数减少系数 |
| LOD Hair Width Multiplier | LOD 发丝宽度调节系数 |
| Enable Thin Tip | 是否开启发梢变薄 |
| Hair Thickness | 发丝厚度 ( 上边提到的一般调整发型的四项设定之一 ) |
| Tip Length | 发梢长度的调节 |
|
| |
| Global Simulation Settings | 发丝全局模拟设置 |
| Location Stiffness | 位置刚度 |
| Shape Stiffness | 形状刚度 |
| Root Rigidness | 发根坚硬程度 ( 非官方翻译,如有不准请见谅 ) |
| Acceleration Constraints | 头发加速度约束 ( 非官方翻译,如有不准请见谅 ) |
| Length Constraints | 长度约束 ( 非官方翻译,如有不准请见谅 ) |
| Damping | 阻尼调节 |
| Gravity Magnitude | 发丝重力大小调节 |
| Tip Separation | 发梢分开(蓬松感) |
| Length Offset | 长度偏移 ( 非官方翻译,如有不准请见谅 ) |
在头发方面,官方建议我们保留大部分默认设置
我们经常调整的是Location Stiffness(位置刚度)、Shape Stiffness(形状刚度)和Damping(阻尼)。
对于松散的头发,我们会将Location Stiffness和Shape Stiffness设为相似的数值,短发数值更大、长发数值更小。
而对于发辫,Location Stiffness数值与散发一致,Shape Stiffness则会被保留为1来保持辫子的形状。
Damping设定了头发随头部动作运动的快慢。对于普通干发,Damping数值一般为0.04 ~ 0.06。若想让头发像在水底或衣物那样运动,可以将Damping提高到0.1 ~ 0.15
四:如何使用Unity China HairFX Profile设置头发
- 在角色Soldier下创建Hair Styeles空物体;
- 将角色头部Mesh命名为Bob,并设置为Hair Styeles的子物体;
- 选中Bob,在Inspector面上点击Add Compent添加 HairFX Groom、HairFX Simulation两个脚本; HairFX Groom相当于HairFX Profile的容器;HairFX Simulation脚本的作用是控制头发物理效果的模拟,比如这里有关于Wind settings风动设定用于控制Wind Magnitude(风力)和Pulse Magnitude(摆动幅度)的大小;

- 将之前创建的Bob HairFX Profile,添加到HairFX Profile组件中的Hair Profile中;

- Unity Hair Profile 可以连接多个 Unity Hair Assets,也就是我们从Maya导出的 .TFX 文件。如右图所示,我们为Bob Profile的Unity Hair Profile 文件添加 Back、Bangs、Top、Flyways四个Asset资产;如果你还想继续添加其他Asset资产,可以点击“+”号按钮。

- 将头发导出为不同的 TFX 文件的原因是为了我们可以自由地对头发的不同部分进行不同的模型效果的设置和模拟发丝物理效果的设置。

- 我们可以为头发的各个分组指定不同的材质,但材质的数量必须与头发资产的数量相同。
如下图所示,以Bob发型为例,我们需要在Inspector>Mesh Renderer>Materials List下添加四个材质分别对应于Bob发型的四个Asset资产 Back、Bangs、Top、Flyways。
这里我们为Bangsl刘海为例为大家演示如何创建头发材质;
- 在Asset下点击Create创建Material,重命名为Asian Cherry;
- 材质的Shader我们设置为URP>SG_PhysicalHair;

- 修改Hair Color、Root Color、Tip Color的颜色;看个人喜好自己设置就可以,也可以不设置。
- 同样的步骤我们创建Asian Green头发材质;颜色还是按照个人喜好而来。
- 接下来我们Bob Gameobject的Mesh Renderer的材质列表中设置材质;
示例中分别为Bob的四个Asset资产 Back、Bangs、Top、Flyways设置了Asian Green、Asian Cherry, Asian Green、Asian Cherry材质,从而达到如下效果;
注意这里是四个材质,不是四种材质,当然你也可以添加四种不同材质来表现头发不同部分的不同效果;
- 官方教程中使用的是HDRP内置的头发着色器。如果你想编写自己的着色器,请一定要按以下参数进行设置:
Graph Settings
● Material : Hair
● Material Type: Physical
● Advanced Options/ Geometry Type: Strands
Master Stacks
● Custom Function node:
○ Name: GetExpandedVertex
○ Source: VertexStrsndGroom (hlsl file)
● Hair Strand Direction: 1,0,0

- 到此,本节课程已经基本完成,剩下的就需要我们自己去探索,去摸索了,希望数字人,元宇宙相关产业越来越好吧,也希望我们更好。

五:特别声明
本文参考Unity China HairFX 毛发系统使用说明 而来,并且成功跑通,下面引用毛发系统的特别声明。

希望大家:点赞,留言,关注咯~
😘😘😘😘
唠家常
今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加我QQ:841298494,大家一起进步。
- 客官,看完get之后记得点赞哟!
- 小伙伴你还想要别的知识?好的呀,分享给你们😄
今日推荐
- 博客杂货铺
- GoF23 种设计模式的分类和功能
相关文章:
Unity毛发系统TressFX Exporter
Unity 数字人交流群:296041238 一:在Maya下的TressFX Exporter 插件安装步骤: 1. 下载Maya的TressFX Exporter插件 下载地址:TressFX Exporter 链接:https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…...
《爆肝整理》保姆级系列教程python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下。首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃了。不仅什么…...
Golang:reflect反射的使用例子
1.reflect包作用 reflect包定义了“反射”相关能力,“反射”在计算机学中是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。基于反射特性可以通用化地解决一些需要频繁修改代码及硬编码问题,但是…...
markdown常用语法--花括号(超详细)
💌 所属专栏:【Markdown常用语法】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! …...
BN、SyncBN、IN、LN、GN学习记录
1 BatchNormBN的原理BN是计算机视觉最常用的标准化方法,它沿着N、H、W维度对输入特征图求均值和方差,随后再利用均值和方差来归一化特征图。计算过程如下图所示,1)沿着通道维度计算其他维度的均值;2)沿着通…...
使用 Auto-scheduling 优化算子
本篇回答来源于 TVM 官方英文文档 Lianmin Zheng,Chengfan Jia。更多 TVM 中文文档可访问→https://tvm.hyper.ai/ 本教程将展示 TVM 的 Auto Scheduling 功能,如何在不编写自定义模板的情况下,找到最佳 schedule。 与基于模板的 AutoTVM 依…...
智能运维应用之道,告别企业数字化转型危机
面临的问题及挑战 数据中心发展历程 2000 年中国数据中心始建,至今已经历以下 3 大阶段。早期:离散型数据中心 IT 因以项目建设为导向,故缺乏规划且无专门运维管理体系,此外,开发建设完的项目均是独立运维维护&#…...
第七章 SQL错误信息 - SQL错误代码 -400 到 -500
文章目录第七章 SQL错误信息 - SQL错误代码 -400 到 -500SQL错误代码和消息表WinSock错误代码-10050到-11002第七章 SQL错误信息 - SQL错误代码 -400 到 -500 SQL错误代码和消息表 错误代码描述-400发生严重错误-401严重连接错误-402用户名/密码无效-405无法从通信设备读取-4…...
DDFN: Decoupled Dynamic Filter Networks解耦的动态卷积
一、论文信息 论文名称:Decoupled Dynamic Filter Networks 论文:https://thefoxofsky.github.io/files/ddf.pdf 代码:https://github.com/theFoxofSky/ddfnet 主页:https://thefoxofsky.github.io/project_pages/ddf 作者团…...
NISP认证报名条件是什么?考试内容是什么?
科学技术是社会发展的第一生产力,每个国家为了能够获得更高的国际地位,不断提升自己的科学技术,现代最为先进的技术就是信息通信,在军事、民生、医疗、教育、制造等等领域都起着重要的作用,我们的生活也因为信息技术而…...
利用redis实现缓存、发布订阅、分布式锁功能
Redis是一个内存键值存储数据库,通常用于缓存、会话管理、消息队列等场景。以下是一些常见的Redis使用场景:1.缓存:将常用的数据缓存在Redis中,以减少对数据库的访问次数,提高应用程序的性能。2.会话管理:使…...
SVN无法连接到服务器的各种问题原因及解决办法
SVN专业使用教程详解 第一节 安装VisualSVN Server服务器 第一步 下载SVN服务器,需要链接的请私信。 点击下载的执行文档进行安装 选择组件 选择在部署 VisualSVN Server 时安装VisualSVN Server 和 Administration Tools 组件。 调整初始服务器配置 或者&…...
React 基本使用
目录 React 安装 React基本使用 React脚手架 脚手架使用React JSX基本使用 JSX列表渲染 JSX条件渲染 JSX模板精简 JSX样式控制 JSX综合案例 React 安装 npm i react react-domnpm init -y(生成基础目录文件) <!-- 引入js文件 --><sc…...
单例模式设计(面试题)
1、static修饰变量规则static修饰的静态成员属于 类而不是对象,所有的对象共享一份静态成员数据,所以不占用类的空间static修饰的成员,定义类的时候,必须分配空间static修饰的静态成员数据 必须类中定义 类外初始化静态成员变量可…...
机器学习:基于支持向量机(SVM)进行人脸识别预测
机器学习:基于支持向量机(SVM)进行人脸识别预测 文章目录机器学习:基于支持向量机(SVM)进行人脸识别预测一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.准备数据2.业务理解3.数据理解4.数…...
【服务器数据恢复】多块磁盘离线导致RAIDZ崩溃的数据恢复案例
服务器数据恢复环境: SUN ZFS系列某型号存储阵列; 40块磁盘组建的存储池(其中4块磁盘用作全局热备盘),池内划分出若干空间映射到服务器使用; 服务器使用Windows操作系统。 服务器故障: 服务器在…...
iconfont 图标如何在uniapp中的tabBar使用
注意: 小程序并不支持tabBar中 设置 iconfont 1. 材料准备 首先进入字体图标网址:iconfont-阿里巴巴矢量图标库;(如果你没有登入,记得登入一下) 把图标添加入购物车 添加到购物车之后-(右上角…...
第六章.卷积神经网络(CNN)—卷积层(Convolution)池化层(Pooling)
第六章.卷积神经网络(CNN) 6.1 卷积层(Convolution)&池化层(Pooling) 1.整体结构 以5层神经网络的实现为例: 1).基于全连接层(Affine)的网络 全连接层:相邻层的所有神经元之间都有连接 2).常见的CNN的网络 3).全连接层存在的问题 数据的形状容易被…...
c/c++开发,无可避免的模板编程实践(篇六)
一、泛型算法 1.1 泛型算法概述 c标准库不仅包含数据结构(容器、容器适配器等),还有很多算法。数据结构可以帮助存放特定情况下需要保存的数据,而算法则会将数据结构中存储的数据进行变换。标准库没有给容器添加大量的功能函数&am…...
【Java】Spring核心与设计思想
文章目录Spring核心与设计思想1. Spring是什么1.1 什么是容器1.2 什么是IOC1.2.1 传统程序开发1.2.2 控制反转式程序开发1.2.3 对比总结规律1.3 理解Spring IOC1.4 DI概念说明Spring核心与设计思想 1. Spring是什么 我们通常所说的Spring指的是Spring Framework(S…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...






