Im using the Simple_Hair_UV script found in the Xgen UE documentation however when i imported my IGS alembic file that i exported, it has 3 different description and multiple splinegrp .
How do i add multiple groups and curves in the script?
Tried using " ; " and " , " in between each group and it doesn’t work.
https://docs.unrealengine.com/4.26/en-US/WorkingWithContent/Hair/XgenGuidelines/
Here is the part i am having trouble with, it's using Python.
curve_top_group= 'Herc_Flyaways|Herc_Hair_SplineGrp0 , Herc_HairBlend|Herc_Hair_SplineGrp0 , Herc_Hair|Herc_Hair_SplineGrp0'
It keeps giving me error, here is how the outliner looks like
Herer is the default script:
from maya import OpenMaya import os def create_root_uv_attribute(curves_group, mesh_node, uv_set='map1'): ''' Create "groom_root_uv" attribute on group of curves. ''' # check curves group if not cmds.objExists(curves_group): raise RuntimeError('Group not found: "{}"'.format(curves_group)) # get curves in group curve_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 roots points = list() for curve_shape in curve_shapes: point = cmds.pointPosition('{}.cv[0]'.format(curve_shape), world=True) points.append(point) # get uvs values = 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 attribute name = '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 uvs def find_closest_uv_point(points, mesh_node, uv_set='map1'): ''' Find mesh UV-coordinates at given points. ''' # check mesh if not cmds.objExists(mesh_node): raise RuntimeError('Node not found: "{}"'.format(mesh_node)) # check uv_set uv_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-path selection_list = OpenMaya.MSelectionList() selection_list.add(mesh_node) mesh_dagpath = OpenMaya.MDagPath() selection_list.getDagPath(0, mesh_dagpath) mesh_dagpath.extendToShape() # get mesh function set fn_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 uvs def 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()
Replies
What alternate exporter did you end up using? I've tried all manner of different methods to get this script to work, but all attempts end in failure.
Well the script from Epic games is the best however it's only up to Maya 2020, the simple hair uv script works as a script so it should work in every version of maya, these scripts are only if you want root hair uv's.