MENU

• 2025 年 09 月 18 日 • 已有 96 只咪围观过 • -学海拾贝-

在一些复杂发型的制作与解算过程中,UE 默认的物理系统往往无法满足效果需求。为了获得更稳定、更优化的解算效果,我们需要在 Xgen → UE 的工作流中,为曲线/Guide 添加自定义属性(如 groom_group_idgroom_idgroom_closest_guidesgroom_guide_weights 等)。

这些属性不仅能帮助 UE 更好地识别与解算发丝,还能在后续多角色发型 Retarget或 优化算法开销 时发挥关键作用。


一、测试环境与文件说明

Maya 工程路径

D:\work\mayaProj\230214

主要文件(逐步测试)

  • test0 初始 Xgen 文件
  • test1 转换为 spline,未添加属性
  • test2 添加基础属性(id0 / id1)
  • test3 修正 spline 命名冲突
  • test4 添加 groom_id 属性
  • test5 进行 Alembic 属性赋值测试

其中,curve 手动创建左右两根 guide,用于验证左右差异。


二、核心属性添加流程

1. 添加 groom_group_id

  • 将 Xgen 转换为 Interactive Groom
  • 导入 spline 并重命名 → 保存为 test1
  • 创建并附加 groom_group_id → 保存为 test2

官方参考文档:
👉 Xgen Guidelines for Hair Creation in UE


2. 添加 groom_id

使用 Python 枚举方法:

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    print(i, element)
# 0 one
# 1 two
# 2 three

为每根 curve 分配唯一 ID:

  • 左 guide → groom_id = 0
  • 右 guide → groom_id = 1

3. 添加 groom_closest_guides

用于标记 每根发丝最近的 guide,以便解算时正确跟随。

示例:

  • 曲线 2 为目标 guide
  • 曲线 1、3、4、6 绑定到曲线 2
  • 在 UE 中验证后,abc2 导出成功附属该属性

4. 添加 groom_guide_weights

进一步为发丝分配权重。

cmds.addAttr(guides_group, longName="groom_guide_weights", 
             attributeType="short", defaultValue=1, keyable=True)

在 UE 中可正确识别,权重控制左右 guide 差异。


三、进阶测试记录

V2.0

  • 问题:Xgen 的生长顺序随机,如何批量选取最近 guide?
  • 疑问:权重计算是否能支持 >3 根 guide 影响?

在基础附属属性之后,有两个问题

1 xgen的生长顺序不是顺序的,而是在周围随机生成,怎么批量选范围添加最近的guide

2 weight的计算法则

ST00001_图1.png

针对这个联想,根据官方文档https://dev.epicgames.com/documentation/zh-cn/unreal-engine/xgen-guidelines-for-hair-creation?application_version=4.27

官方在选择guide的时候选择的就是创建strands用的guide,这个guide自带对strand的影响范围和强度,这个数据应该是可以被读取的吧?正好可以作为groom\_closest\_guides以及groom\_guide\_weights但是,这个如果最多只有3根的话,要是本来那个strand是5根guide影响的呢,这个权重可以自动重新计算吗,(已测试毛的形态可以被大于5根guide影响,在maya中)

这又是困惑的地方了

ST00001_图2.png

于是进行以下测试

ST00001_图3.png

ST00001_图4.png

最后得到以下效果:

V3.0

  • 使用「毛笔头」形状测试,结果:

    • guide 段数会显著影响解算效果
    • 形态能基本维持
    • 权重效果明显,符合预期

ST00001_图5.png

动态视频:

V4.0

  • 测试多 group id 共享 guide 解算
  • 结果:快速旋转时仍存在失控问题

ST00001_图6.png

V5.0

  • 单 ID 下测试麻花发型
  • 重点:需要确认 strand 点与 guide 点对应逻辑
  • 实测发现部分 strand 像“被钉住”,与预期不符

ST00001_图7.png

动态效果:


四、遗留问题与思考

  1. Guide 选择与权重计算

    • Maya 中 strand 可能受 >5 根 guide 影响
    • UE 目前是否能支持自动重新分配权重?
  2. 数据读取

    • Maya 中 guide 自带 strand 影响范围与强度
    • 能否直接映射到 groom_closest_guidesgroom_guide_weights
  3. 解算稳定性

    • Guide 段数、分布与 strand 对应方式仍需更精细控制
    • 并且需要详细调查管线逻辑

ST00001_图8.jpg


五、结论

通过为 Xgen → UE 的 Groom 数据添加自定义属性:

  • 能够实现普通发型更稳定正确的解算
  • 过于复杂的感觉缓存不过来导致异常
  • 仍需进一步研究权重分配与 Guide-Strand 对应关系

该流程已在 Maya → UE5.1 中完成初步验证,后续会继续探索更复杂场景下的解算逻辑。

返回文章列表 打赏
本页链接的二维码
打赏二维码