本文记录了一些Maya中Xgen毛发渲染的相关的问题:

  1. Xgen 角色ABC和毛发ABC的运动模糊不匹配的问题(小概率事件):

    原因是生长面缓存只有整数帧采样并且在渲染运动模糊时,Xgen没有计算生长面的插值,或者由于前后帧的运动差异过大,Xgen计算出错误的生长面插值,导致毛发生长面的缓存和角色缓存的插值不匹配,生长面缓存和角色缓存在小数帧位置不同,就会导致运动模糊不同。也可以通过实际文件观测到,在运动模糊有问题的小数帧,毛发不加载缓存时,其毛发引导线跟随动画缓存,加载了毛发缓存后,毛发缓存曲线和动画缓存的位置一致,而毛发引导线却和缓存曲线不在相同的位置,毛发引导线和动画缓存脱离,但是毛发引导线的形态和毛发缓存一致,说明毛发引导线只是从毛发缓存继承了形态,并不继承其位置。而毛发引导线的位置是从毛发生长面继承的,此时毛发引导线的位置和动画缓存不一致,那么小数帧时生长面的缓存和动画缓存位置不一致,因此,毛发生长面缓存在计算小数帧时有问题。解决此类问题,最好为动画缓存、曲线缓存、生长面缓存都添加缓存的小数帧采样插值。

  2. 前台批渲染带渲染运动模糊时,代码批量刷新生长面时报错‘not match object “XGEN_RENDER_:XXXX”’:

    Xgen毛发在渲染运动模糊后,会生成可通过xgen.palettes()获取,但是无法使用cmds.sl("")列出,也无法删除的临时生长面,该生长面以“XG_RENDR_:”为前缀,若要在渲染运动模糊后批量处理生长面,需要跳过它,不会有任何影响。该临时生长面不会记录到maya文件中,但是会存在当前软件中,哪怕你清除场景,并重开另一个场景,也可以查询到它,处理时需直接跳过,对渲染无影响。

  3. abc流程中,对角色缓存位置进行修改(场景移回原点)过的灯光文件,其xGen毛发可能会炸毛,可能原因是引用文件记录了一些错误的操作,这部分操作导致xGen文件状态不对,需要删除.Xgen文件,重新引用毛发文件,或者先删除.Xgen文件、卸载引用文件、清除其操作历史,再加载引用文件。

Xgen 毛发创建笔记

一些Xgen文件测试记录

  1. 使用不同名称、完全相同的两个集合体作为Xgen描述的生长面,其基本体随机种子数会有一些差异,随机种子数是根据物体的生长面名称进行hash计算得出的结果,若替换生长面对应的几何体名称,随机种子数会发生细微变化,从而导致效果会有细微差别。

  2. xgen文件中只记录几何体的短名,不记录长名(可以手动修改的方式使用maya规范的长名,),测试结果是只识别几何体短名称,不区分拓扑结构和形状以及uv,只使用.xgen文件中记录的的faceid面数,但拓扑结构不同结果肯定不一样,几何体名和生长面前缀应保持一致。

  3. 绘制的iff贴图在保存文件后才会写入工程目录的文件夹,描述下有几个生长面就保存几张贴图(从新的几何体添加新的生长面,需要重新绘制贴图,保存后也会对应新增一张贴图),根据绘制贴图时的生长面_集合_描述名称,xgen中指定的贴图名称命名为:polySurfaceShape1_grass_col_grass_decmask_generator_grass)。

  4. 生长面跟随几何体放大缩小,但是毛发粗细不变(可写入表达式,待测试)。

  5. 确定了几何体、绑定几何体并生成生长面之后,不可以修改几何体的名称,指向文件(ptx,xuv等文件)记录的是以几何体命名的贴图名称,更改几何体命名称后,链接断开,指向文件失效。

  6. 使用相同几何体生成的不同描述,其生长面的名称为“几何体名称_描述名称”,不会重名

  7. 单个XGen文件的生长面、几何体可以改名;改完命名后直接更改其Xgen文件的几何体名称,另存文件即可;

  8. 使用几个几何体生成描述,集合下就拥有几个生长面(不建议使用多个几何体映射一个描述,最好先合并成一个几何体,方便管理)