def writeFaceNumbers(fp, human, proxyData):
    fp.write("#else\n")
    if human.uvsetFile:
        uvset = proxyData["__uvset__"]
        for ftn in uvset.faceNumbers:
            fp.write(ftn)
    else:            
        obj = human.meshData
        fmats = {}
        for f in obj.faces:
            fmats[f.idx] = MaterialNumbers[f.mtl[0:3]]
        deleteGroups = []
        deleteVerts = None
        for proxy in proxyData.values():
            deleteGroups += proxy.deleteGroups
            deleteVerts = mh2proxy.multiplyDeleteVerts(proxy, deleteVerts)
                    
        for fg in obj.faceGroups: 
            if mh2proxy.deleteGroup(fg.name, deleteGroups):
                for f in fg.faces:
                    fmats[f.idx] = 6
            elif "joint" in fg.name:
                for f in fg.faces:
                    fmats[f.idx] = 4
            elif fg.name == "helper-tights":                    
                for f in fg.faces:
                    fmats[f.idx] = 5
            elif fg.name == "helper-skirt":                    
                for f in fg.faces:
                    fmats[f.idx] = 7
            elif ("tongue" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 1
            elif ("eyebrown" in fg.name) or ("lash" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 3   
                    
        if deleteVerts:
            for f in obj.faces:
                v = f.verts[0]
                if deleteVerts[v.idx]:
                    fmats[f.idx] = 6                        
                
        mn = -1
        fn = 0
        f0 = 0
        for f in obj.faces:
            if fmats[fn] != mn:
                if fn != f0:
                    fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
                mn = fmats[fn]
                f0 = fn
            fn += 1
        if fn != f0:
            fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
    fp.write("#endif\n")
def writeFaceNumbers(fp, amt, config):
    if amt.human.uvset:
        for ftn in amt.human.uvset.faceNumbers:
            fp.write(ftn)
    else:
        obj = amt.mesh
        fmats = numpy.zeros(len(obj.coord), int)
        for fn, mtl in obj.materials.items():
            fmats[fn] = MaterialNumbers[mtl]

        # TODO use facemask set on module3d instead (cant we reuse filterMesh from collect module?)
        deleteVerts = None
        deleteGroups = []

        for fg in obj.faceGroups:
            fmask = obj.getFaceMaskForGroups([fg.name])
            if mh2proxy.deleteGroup(fg.name, deleteGroups):
                fmats[fmask] = 6
            elif "joint" in fg.name:
                fmats[fmask] = 4
            elif fg.name == "helper-tights":
                fmats[fmask] = 5
            elif fg.name == "helper-skirt":
                fmats[fmask] = 7
            elif ("tongue" in fg.name):
                fmats[fmask] = 1
            elif ("eyebrown" in fg.name) or ("lash" in fg.name):
                fmats[fmask] = 3

        if deleteVerts != None:
            for fn, fverts in enumerate(obj.fvert):
                if deleteVerts[fverts[0]]:
                    fmats[fn] = 6

        mn = -1
        fn = 0
        f0 = 0
        for fverts in obj.fvert:
            if fmats[fn] != mn:
                if fn != f0:
                    fp.write("  ftn %d %d 1 ;\n" % (fn - f0, mn))
                mn = fmats[fn]
                f0 = fn
            fn += 1
        if fn != f0:
            fp.write("  ftn %d %d 1 ;\n" % (fn - f0, mn))
Exemple #3
0
def writeFaceNumbers(fp, amt, config):
    if amt.human.uvset:
        for ftn in amt.human.uvset.faceNumbers:
            fp.write(ftn)
    else:            
        obj = amt.mesh
        fmats = numpy.zeros(len(obj.coord), int)
        for fn,mtl in obj.materials.items():
            fmats[fn] = MaterialNumbers[mtl]
            
        # TODO use facemask set on module3d instead (cant we reuse filterMesh from collect module?)
        deleteVerts = None
        deleteGroups = []

        for fg in obj.faceGroups: 
            fmask = obj.getFaceMaskForGroups([fg.name])
            if mh2proxy.deleteGroup(fg.name, deleteGroups):
                fmats[fmask] = 6
            elif "joint" in fg.name:
                fmats[fmask] = 4
            elif fg.name == "helper-tights":                    
                fmats[fmask] = 5
            elif fg.name == "helper-skirt":                    
                fmats[fmask] = 7
            elif ("tongue" in fg.name):
                fmats[fmask] = 1
            elif ("eyebrown" in fg.name) or ("lash" in fg.name):
                fmats[fmask] = 3
                    
        if deleteVerts != None:
            for fn,fverts in enumerate(obj.fvert):
                if deleteVerts[fverts[0]]:
                    fmats[fn] = 6                        
                
        mn = -1
        fn = 0
        f0 = 0
        for fverts in obj.fvert:
            if fmats[fn] != mn:
                if fn != f0:
                    fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
                mn = fmats[fn]
                f0 = fn
            fn += 1
        if fn != f0:
            fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
Exemple #4
0
def writeFaceNumbers(fp, human, config, proxyData):
    fp.write("#else\n")
    if human.uvset:
        for ftn in human.uvset.faceNumbers:
            fp.write(ftn)
    else:
        obj = human.meshData
        fmats = {}
        print(obj.materials.items)
        for fn, mtl in obj.materials.items():
            fmats[fn] = MaterialNumbers[mtl]

        if config.hidden:
            deleteVerts = None
            deleteGroups = []
        else:
            deleteGroups = []
            deleteVerts = numpy.zeros(len(obj.verts), bool)
            for proxy in proxyData.values():
                deleteGroups += proxy.deleteGroups
                deleteVerts = deleteVerts | proxy.deleteVerts

        for fg in obj.faceGroups:
            if mh2proxy.deleteGroup(fg.name, deleteGroups):
                for f in fg.faces:
                    fmats[f.idx] = 6
            elif "joint" in fg.name:
                for f in fg.faces:
                    fmats[f.idx] = 4
            elif fg.name == "helper-tights":
                for f in fg.faces:
                    fmats[f.idx] = 5
            elif fg.name == "helper-skirt":
                for f in fg.faces:
                    fmats[f.idx] = 7
            elif ("tongue" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 1
            elif ("eyebrown" in fg.name) or ("lash" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 3

        if deleteVerts != None:
            for f in obj.faces:
                v = f.verts[0]
                if deleteVerts[v.idx]:
                    fmats[f.idx] = 6

        mn = -1
        fn = 0
        f0 = 0
        for f in obj.faces:
            if fmats[fn] != mn:
                if fn != f0:
                    fp.write("  ftn %d %d 1 ;\n" % (fn - f0, mn))
                mn = fmats[fn]
                f0 = fn
            fn += 1
        if fn != f0:
            fp.write("  ftn %d %d 1 ;\n" % (fn - f0, mn))
    fp.write("#endif\n")
def filterMesh(meshInfo, obj, deleteGroups, deleteVerts, eyebrows, lashes):
    #(verts1, vnormals1, uvValues1, faces1, weights1, targets1) = mesh1

    killUvs = numpy.zeros(len(obj.texco), bool)
    killFaces = numpy.zeros(len(obj.faces), bool)

    if deleteVerts != None:
        killVerts = deleteVerts
        for f in obj.faces:
            for v in f.verts:
                if killVerts[v.idx]:
                    killFaces[f.idx] = True
    else:
        killVerts = numpy.zeros(len(obj.verts), bool)

    for fg in obj.faceGroups:
        if (("joint" in fg.name) or ("helper" in fg.name)
                or ((not eyebrows) and (("eyebrown" in fg.name) or
                                        ("cornea" in fg.name)))
                or ((not lashes) and ("lash" in fg.name))
                or mh2proxy.deleteGroup(fg.name, deleteGroups)):

            for f in fg.faces:
                killFaces[f.idx] = True
                for v in f.verts:
                    killVerts[v.idx] = True
                for vt in f.uv:
                    killUvs[vt] = True

    n = 0
    nv = {}
    verts = []
    for m, v in enumerate(meshInfo.verts):
        if not killVerts[m]:
            verts.append(v)
            nv[m] = n
            n += 1
    meshInfo.verts = verts

    vnormals = []
    for m, vn in enumerate(meshInfo.vnormals):
        if not killVerts[m]:
            vnormals.append(vn)
    meshInfo.vnormals = vnormals

    n = 0
    uvValues = []
    nuv = {}
    for m, uv in enumerate(meshInfo.uvValues):
        if not killUvs[m]:
            uvValues.append(uv)
            nuv[m] = n
            n += 1
    meshInfo.uvValues = uvValues

    faces = []
    for fn, f in enumerate(meshInfo.faces):
        if not killFaces[fn]:
            f2 = []
            for c in f:
                v2 = nv[c[0]]
                uv2 = nuv[c[1]]
                f2.append([v2, uv2])
            faces.append(f2)
    meshInfo.faces = faces

    if meshInfo.weights:
        weights = {}
        for (b, wts1) in meshInfo.weights.items():
            wts2 = []
            for (v1, w) in wts1:
                if not killVerts[v1]:
                    wts2.append((nv[v1], w))
            weights[b] = wts2
        meshInfo.weights = weights

    if meshInfo.targets:
        targets = []
        for (name, morphs1) in meshInfo.targets:
            morphs2 = {}
            for (v1, dx) in morphs1.items():
                if not killVerts[v1]:
                    morphs2[nv[v1]] = dx
            targets.append((name, morphs2))
        meshInfo.targets = targets

    return meshInfo
Exemple #6
0
def writeFaceNumbers(fp, human, config, proxyData):
    fp.write("#else\n")
    if human.uvset:
        for ftn in human.uvset.faceNumbers:
            fp.write(ftn)
    else:            
        obj = human.meshData
        fmats = {}
        print(obj.materials.items)
        for fn,mtl in obj.materials.items():
            fmats[fn] = MaterialNumbers[mtl]
            
        if config.hidden:
            deleteVerts = None
            deleteGroups = []
        else:
            deleteGroups = []
            deleteVerts = numpy.zeros(len(obj.verts), bool)
            for proxy in proxyData.values():
                deleteGroups += proxy.deleteGroups
                deleteVerts = deleteVerts | proxy.deleteVerts
                    
        for fg in obj.faceGroups: 
            if mh2proxy.deleteGroup(fg.name, deleteGroups):
                for f in fg.faces:
                    fmats[f.idx] = 6
            elif "joint" in fg.name:
                for f in fg.faces:
                    fmats[f.idx] = 4
            elif fg.name == "helper-tights":                    
                for f in fg.faces:
                    fmats[f.idx] = 5
            elif fg.name == "helper-skirt":                    
                for f in fg.faces:
                    fmats[f.idx] = 7
            elif ("tongue" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 1
            elif ("eyebrown" in fg.name) or ("lash" in fg.name):
                for f in fg.faces:
                    fmats[f.idx] = 3   
                    
        if deleteVerts != None:
            for f in obj.faces:
                v = f.verts[0]
                if deleteVerts[v.idx]:
                    fmats[f.idx] = 6                        
                
        mn = -1
        fn = 0
        f0 = 0
        for f in obj.faces:
            if fmats[fn] != mn:
                if fn != f0:
                    fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
                mn = fmats[fn]
                f0 = fn
            fn += 1
        if fn != f0:
            fp.write("  ftn %d %d 1 ;\n" % (fn-f0, mn))
    fp.write("#endif\n")
Exemple #7
0
def filterMesh(meshInfo, scale, deleteGroups, deleteVerts, eyebrows, lashes, useFaceMask = False):
    """
    Filter out vertices and faces from the mesh that are not desired for exporting.
    """
    # TODO scaling does not belong in a filter method
    obj = meshInfo.object

    killUvs = numpy.zeros(len(obj.texco), bool)
    killFaces = numpy.zeros(len(obj.fvert), bool)
        
    if deleteVerts is not None:
        killVerts = deleteVerts
        for fn,fverts in enumerate(obj.fvert):
            for vn in fverts:
                if killVerts[vn]:
                    killFaces[fn] = True             
    else:
        killVerts = numpy.zeros(len(obj.coord), bool)

    killGroups = []        
    for fg in obj.faceGroups:
        if (("joint" in fg.name) or 
           ("helper" in fg.name) or
           ((not eyebrows) and 
           (("eyebrown" in fg.name) or ("cornea" in fg.name))) or
           ((not lashes) and 
           ("lash" in fg.name)) or
           mh2proxy.deleteGroup(fg.name, deleteGroups)):
            killGroups.append(fg.name)

    faceMask = obj.getFaceMaskForGroups(killGroups)
    if useFaceMask:
        # Apply the facemask set on the module3d object (the one used for rendering within MH)
        faceMask = numpy.logical_or(faceMask, numpy.logical_not(obj.getFaceMask()))
    killFaces[faceMask] = True

    #verts = obj.fvert[faceMask]
    verts = obj.fvert[numpy.logical_not(faceMask)]
    vertMask = numpy.ones(len(obj.coord), bool)
    vertMask[verts] = False
    verts = numpy.argwhere(vertMask)
    del vertMask
    killVerts[verts] = True

    #uvs = obj.fuvs[faceMask]
    uvs = obj.fuvs[numpy.logical_not(faceMask)]
    uvMask = numpy.ones(len(obj.texco), bool)
    uvMask[uvs] = False
    uvs = numpy.argwhere(uvMask)
    del uvMask
    killUvs[uvs] = True
    
    n = 0
    newVerts = {}
    coords = []
    for m,co in enumerate(obj.coord):
        if not killVerts[m]:
            coords.append(scale*co)
            newVerts[m] = n
            n += 1
    
    n = 0
    texVerts = []
    newUvs = {}
    for m,uv in enumerate(obj.texco):
        if not killUvs[m]:
            texVerts.append(uv)
            newUvs[m] = n
            n += 1   
    
    faceVerts = []
    faceUvs = []
    for fn,fverts in enumerate(obj.fvert):
        if not killFaces[fn]:
            fverts2 = []
            fuvs2 = []
            for vn in fverts:
                fverts2.append(newVerts[vn])
            for uv in obj.fuvs[fn]:
                fuvs2.append(newUvs[uv])
            faceVerts.append(fverts2)
            faceUvs.append(fuvs2)
    
    weights = {}
    if meshInfo.weights:
        for (b, wts1) in meshInfo.weights.items():
            wts2 = []
            for (v1,w) in wts1:
                if not killVerts[v1]:
                   wts2.append((newVerts[v1],w))
            weights[b] = wts2
    
    shapes = []
    if meshInfo.shapes:
        for (name, morphs1) in meshInfo.shapes:
            morphs2 = {}
            for (v1,dx) in morphs1.items():
                if not killVerts[v1]:
                    morphs2[newVerts[v1]] = scale*dx
            shapes.append((name, morphs2))

    meshInfo.fromProxy(coords, texVerts, faceVerts, faceUvs, weights, shapes)
    meshInfo.vertexMask = numpy.logical_not(killVerts)
    meshInfo.vertexMapping = newVerts
    meshInfo.faceMask = numpy.logical_not(faceMask)
    return meshInfo
def filterMesh(mesh1, obj, deleteGroups, deleteVerts):
    (verts1, vnormals1, uvValues1, faces1, weights1, targets1) = mesh1
    
    killVerts = {}
    killUvs = {}
    killFaces = {}    
    for v in obj.verts:
        killVerts[v.idx] = False
    for f in obj.faces:
        killFaces[f.idx] = False        
        for vt in f.uv:
            killUvs[vt] = False
            
    for vn in deleteVerts:
        killVerts[vn] = True
    
    for fg in obj.faceGroups:
        if (((not the.Options["helpers"]) and 
             (("joint" in fg.name) or ("helper" in fg.name))) or
            ((not the.Options["eyebrows"]) and 
             (("eyebrown" in fg.name) or ("cornea" in fg.name))) or
            ((not the.Options["lashes"]) and 
             ("lash" in fg.name)) or
             mh2proxy.deleteGroup(fg.name, deleteGroups)):
            print("  kill %s" % fg.name) 
            for f in fg.faces:            
                killFaces[f.idx] = True
                for v in f.verts:
                    killVerts[v.idx] = True
                for vt in f.uv:                    
                    killUvs[vt] = True
    
    n = 0
    nv = {}
    verts2 = []
    for m,v in enumerate(verts1):
        if not killVerts[m]:
            verts2.append(v)
            nv[m] = n
            n += 1

    vnormals2 = []
    for m,vn in enumerate(vnormals1):
        if not killVerts[m]:
            vnormals2.append(vn)

    n = 0
    uvValues2 = []
    nuv = {}
    for m,uv in enumerate(uvValues1):
        if not killUvs[m]:
            uvValues2.append(uv)
            nuv[m] = n
            n += 1    

    faces2 = []
    for fn,f in enumerate(faces1):
        if not killFaces[fn]:
            f2 = []
            for c in f:
                v2 = nv[c[0]]
                uv2 = nuv[c[1]]
                f2.append([v2, uv2])
            faces2.append(f2)

    if weights1:
        weights2 = {}
        for (b, wts1) in weights1.items():
            wts2 = []
            for (v1,w) in wts1:
                if not killVerts[v1]:
                    wts2.append((nv[v1],w))
            weights2[b] = wts2
    else:
        weights2 = weights1

    if targets1:
        targets2 = []
        for (name, morphs1) in targets1:
            morphs2 = []
            for (v1,dx) in morphs1:
                if not killVerts[v1]:
                    morphs2.append((nv[v1],dx))
            targets2.append(name, morphs2)
    else:
        targets2 = targets1

    return (verts2, vnormals2, uvValues2, faces2, weights2, targets2)
def filterMesh(meshInfo, obj, deleteGroups, deleteVerts, eyebrows, lashes):
    #(verts1, vnormals1, uvValues1, faces1, weights1, targets1) = mesh1
    
    killUvs = numpy.zeros(len(obj.texco), bool)
    killFaces = numpy.zeros(len(obj.faces), bool)
    
    if deleteVerts != None:
        killVerts = deleteVerts
        for f in obj.faces:
            for v in f.verts:
                if killVerts[v.idx]:
                    killFaces[f.idx] = True             
    else:
        killVerts = numpy.zeros(len(obj.verts), bool)
    
    for fg in obj.faceGroups:
        if (("joint" in fg.name) or 
            ("helper" in fg.name) or
            ((not eyebrows) and 
             (("eyebrown" in fg.name) or ("cornea" in fg.name))) or
            ((not lashes) and 
             ("lash" in fg.name)) or
             mh2proxy.deleteGroup(fg.name, deleteGroups)):

            for f in fg.faces:            
                killFaces[f.idx] = True
                for v in f.verts:
                    killVerts[v.idx] = True
                for vt in f.uv:                    
                    killUvs[vt] = True
    
    n = 0
    nv = {}
    verts = []
    for m,v in enumerate(meshInfo.verts):
        if not killVerts[m]:
            verts.append(v)
            nv[m] = n
            n += 1
    meshInfo.verts = verts

    vnormals = []
    for m,vn in enumerate(meshInfo.vnormals):
        if not killVerts[m]:
            vnormals.append(vn)
    meshInfo.vnormals = vnormals

    n = 0
    uvValues = []
    nuv = {}
    for m,uv in enumerate(meshInfo.uvValues):
        if not killUvs[m]:
            uvValues.append(uv)
            nuv[m] = n
            n += 1   
    meshInfo.uvValues = uvValues            

    faces = []
    for fn,f in enumerate(meshInfo.faces):
        if not killFaces[fn]:
            f2 = []
            for c in f:
                v2 = nv[c[0]]
                uv2 = nuv[c[1]]
                f2.append([v2, uv2])
            faces.append(f2)
    meshInfo.faces = faces            

    if meshInfo.weights:
        weights = {}
        for (b, wts1) in meshInfo.weights.items():
            wts2 = []
            for (v1,w) in wts1:
                if not killVerts[v1]:
                    wts2.append((nv[v1],w))
            weights[b] = wts2
        meshInfo.weights = weights            

    if meshInfo.targets:
        targets = []
        for (name, morphs1) in meshInfo.targets:
            morphs2 = {}
            for (v1,dx) in morphs1.items():
                if not killVerts[v1]:
                    morphs2[nv[v1]] = dx
            targets.append((name, morphs2))
        meshInfo.targets = targets

    return meshInfo