Project Evolution for Poser



  • @qazart PE has a built-in preset on that joint to 2.5 degrees. You need the -2.5 degrees to return it to the object geometry default position. If you're exporting objects to morph externally, you should probably set subdivision off, as well.



  • 0_1525717263793_evo mouth closed open.jpg

    So I have set the jaw to -10 to emphasize the point. The morph is being ignored.
    Is this due to the fact that I am moving the jaw not the face ?



  • I totally get the reasoning behind having the mouth of a figure open for modeling and rigging purposes, I also see the headaches of trying to create custom morphs in that situation.
    Here's a thought... Could one not close the mouth of the figure after rigging and use Cages 'Bake_actor_ deformations' script to zero the head/jaw object in the new state?
    Of course this would void any pre-existing morphs , but may be an option in the creation process before starting the laborious task of generating morphs. May also be utilized for modeling in the 'A' pose( again I see the advantages) then transforming figure to the traditional 'T' pose if desired?...



  • 2 little scripts to handle morphs. Export the object with any morphs dialed in and deformers attached (magnets, vertex-maps). The export-script is similar to what Poser does, but works faster for me (just one click). It exports the currently selected actor with the predefined parameters (Scale, Rotation, like your modeler needs the file).

    Don't move or change the figure in Poser after export!

    The second script reads a morph into the currently selected actor while subtracting the current state. So, the morph is just the difference between what you have saved and what Poser actually shows. If you rotate or bend this actor before the morph is loaded, the morph will reflect just that (and makes your morph garbage).

    I'm using this with standard parameters, so I didn't make a user-interface.

    SCRIPT EXPORT:

    from __future__ import print_function
    
    import os
    import time
    
    import poser
    
    # some constants
    
    SCENE = poser.Scene()
    ACTOR = SCENE.CurrentActor()
    FIGURE = ACTOR.ItsFigure()
    PATH = os.path.dirname(__file__)
    
    assert ACTOR is not None, "No Actor"
    
    OUT_FILE = os.path.join(PATH, ACTOR.Name() + ".obj")
    GEOM = ACTOR.Geometry()
    SCALEFACTOR = 1000
    TURN_X = False
    TURN_Y = False
    TURN_Z = True  # cinema-4d needs this
    
    SWITCH_YZ = False
    
    # predeclared functions to get X, Y, Z from poser vertices
    sX = -1 if TURN_X else 1
    sY = -1 if TURN_Y else 1
    sZ = -1 if TURN_Z else 1
    getX = lambda v: v.X() * SCALEFACTOR * sX
    getY = lambda v: v.Y() * SCALEFACTOR * sY
    getZ = lambda v: v.Z() * SCALEFACTOR * sZ
    
    if SWITCH_YZ:
        getY = lambda v: v.Z() * SCALEFACTOR * sZ
        getZ = lambda v: v.Y() * SCALEFACTOR * sY
    
    assert GEOM is not None, "Actor %s has no geometry" % ACTOR.Name()
    
    with open(OUT_FILE, "w") as fh:
        print("### Date    : %s" % time.asctime(), file=fh)
        print("### Figure  : %s" % FIGURE.Name(), file=fh)
        print("### Actor   : %s" % ACTOR.Name(), file=fh)
        print("### Vertices: %s" % GEOM.NumVertices(), file=fh)
    
        for vertex in GEOM.WorldVertices():
            print("v %s %s %s" % (getX(vertex),
                                  getY(vertex),
                                  getZ(vertex)), file=fh)
    
        sets = GEOM.Sets()
    
        # I'm using just one group for all polygons here
        print("g %s" % ACTOR.Name(), file=fh)
        for poly in GEOM.Polygons():
            si = poly.Start()
            ar = [str(sets[idx + si] + 1) for idx in range(poly.NumVertices())]
            print("f", " ".join(ar), file=fh)
    
    print("Morph exported to:", OUT_FILE)
    
    

    SCRIPT IMPORT:

    from __future__ import print_function
    
    import os
    
    import poser
    
    # some constants
    
    SCENE = poser.Scene()
    ACTOR = SCENE.CurrentActor()
    GEOM = ACTOR.Geometry()
    PATH = os.path.dirname(__file__)
    FILENAME = os.path.join(PATH, ACTOR.Name() + ".obj")
    MORPHNAME = "ImportedMorph"
    
    SCALEFACTOR = 1000
    TURN_X = False
    TURN_Y = False
    TURN_Z = True  # cinema-4d needs this
    SWITCH_YZ = False
    
    assert os.path.exists(FILENAME), "File not found"
    
    morph_vertices = list()
    
    with open(FILENAME, "r") as fh:
        sX = -1 if TURN_X else 1
        sY = -1 if TURN_Y else 1
        sZ = -1 if TURN_Z else 1
    
        for line in fh:
            pre, _, parms = line.partition(" ")
            # only vertexdata is needed
            if pre == "v":
                x, y, z = [float(n) / SCALEFACTOR for n in parms.split()]
                if SWITCH_YZ:
                    morph_vertices.append((x * sX, z * sZ, y * sY))
                else:
                    morph_vertices.append((x * sX, y * sY, z * sZ))
    
    assert len(morph_vertices) == GEOM.NumVertices(), "Number of vertices? %s/%s" \
                                                      % (len(morph_vertices), GEOM.NumVertices())
    
    # create new morh or overwrite existing one
    
    morphparm = ACTOR.Parameter(MORPHNAME)
    if morphparm is None:
        ACTOR.SpawnTarget(MORPHNAME)
        morphparm = ACTOR.Parameter(MORPHNAME)
    
    assert morphparm is not None, "Could not create Morphtarget"
    assert morphparm.IsMorphTarget(), "Parametername ('%s') already exist but is not a morph" \
                                      % MORPHNAME
    
    # update morph with data from file
    for index, (x, y, z) in enumerate(morph_vertices):
        wv = GEOM.WorldVertex(index)
        morphparm.SetMorphTargetDelta(index, x - wv.X(), y - wv.Y(), z - wv.Z())
    
    print("Morph imported as '%s'." % MORPHNAME)
    
    


  • I apologize if this has already been answered and I just can't find it, but... I have now the cycle plug in for the EZSkin Shader installed and like it a lot. But could someone please tell me were Evolution's Lip Mask has to go? The shader is so confusing I can't figure it out on my own.



  • Did anyone pick up the torch on this project?
    Ero posted at rendo that he was turning her over to others, but i haven't seen anything since.



  • @KittyBrown
    Rest assured the torch is being carried and burning.
    Sorry it is not for me to say more at this moment.



  • @F_Verbaas your silence is telling...



  • I grab a new plugin that allow me to grab all the points i need for the morphing and then let me scrub back to the close mouth position to do the morph and make a morph target out of it with a Metamorphic plugin for Lightwave3d

    @JAFO said in Project Evolution for Poser:

    I totally get the reasoning behind having the mouth of a figure open for modeling and rigging purposes, I also see the headaches of trying to create custom morphs in that situation.



  • @F_Verbaas It would be great if your team would consider adding phonemes/visemes to PE's head/face controls so she could work with the talk designer. There are only 12 or so unique phonemes/visemes that are needed.



  • I second this request.
    I would also like more muscles and tendons morphs limbs and subcutaneous definition ie a suggestion of structures underneath the skin.
    Love esther



  • @estherau I'd like this as well but I'd also just like an update... of some sort or uh, something about PE from people working on the figures future. Cause she's less like Project Evolution and more like Project Abandonment. :/



  • Erogenesis went into some sort of postnatal depression after "delivering" PE, now spends time creating and finishing comics I think. For the moment I wouldn't count on anything PE related.


  • Poser Ambassadors

    Well….My latest hair has a PE Fit....



  • @biscuits Yeah, which is awesome and thank you for continuing to support her! I was actually referring to the people who were supposed to take over development of PE as a figure as @KittyBrown referenced. That was 9 months ago and no figure news for PE since the initial release. Even if everything was NDA, something should have been teased by now.



  • @johndoe641
    Your phonemes/visemes product will be much welcomed I think.
    On what other fields had you wanted to see an update? ProjectEvolution One actually was the update relative to the Early Edition, based on the 6 months or so of feedback collected at that time. I am not aware of big issues that have been reported later.
    @estherau
    If an artist or someone from the medical profession would take up on the muscles and tendon morphs that would be great.



  • @f_verbaas I definitely don't have the skills. I'm more a consumer of 3D products. Sadly.



  • @estherau
    Why don't you just try?
    Nothing can substitute the artist's eye of course. As far as tools go Pro 11's morph brush and a pressure sensitive Wacom pen tablet will bring you a long way.



  • @f_verbaas I thought there was supposed to be some morphs done by ero or the team ero wanted working on PE. Something similar to the HD muscle morphs done by BH for LaFemme. Also more character morphs like the wonderful Lexi by Biscuits or the great work done by nagra recently and amethystpendant.

    I don't know why the larger population didn't embraced PE. At the time she was the best bending (still is the best to me) native poser figure. LaFemme is a great figure and I'm glad she's gotten such massive support but imho PE's base body shape is very realistic. PE is what the average person may look like, unlike the default ultra athletic body shape of LaFemme which I find to be limiting and a bit situational. But I prefer average to super ultra fit for my style of renders, but that might just mean I'm in a minority.



  • @fverbaas I know my limitations.