/ImmersiveRigging

repo for research project "immersive rigging"

Primary LanguageC++

preview and useful links:

https://github.com/sgumhold/cgv/tree/develop

link to final presentation video:
    https://cloudstore.zih.tu-dresden.de/index.php/s/KrGKQmbfM6468F3
build instructions: (in develop branch)
    Clone the develop branch of the cgv framework 
    Click on define_system_variables.bat to define the path to the framework.
    * Clone this repository, set the system varible "CGV_DATA" to "data" directory under this project: 
        drag the "data" directory onto cgv/define_data_dir.bat
        or run the command define_data_dir.bat <global-path-to-data-directory>
    * Generate makefiles with the help of the proj/vr_rigging.pj as normal.
    Compile it.
    contact me for any issues.
usage description:  
    //
        Typically, rigging and skinning of a given mesh should be straightforward and no other instructions necessary.
        Due to the fact that the repo. is under heavy development, it may be a little bit hard to use currently.
        So i decide to write some instructions here.
    Just follow the beginners guide to:
        Create and manipulate bones of a rigging skeleton
        Skinning of a mesh with the created skeleton
        Follows the users movement (motion capture)
        Recording, saving and loading of animations
technique stack:
    basic user interface in VR
    create and manipulate bones of a rigging skeleton
    support CMU Graphics Lab Motion Capture Database
    skinning with created skeleton
    inverse kinematics
    numerical optimization of dofs for adjest the pinoccio skeleton 
    instanced rendering
    rotation with quaternion
    heat diffusion
    humanoid character animation
done:
    read the code related to cgv vr proj. 
    Pinocchio was modified to be more flexible. (command line) may be merged into the project. 
    skybox in VR.
    a simple "boxgui" in VR.
        texturing the boxes 
            pin quads on to the boxes 
        make the background cubemap adjestable via boxes 
    summary and merge the rigging project in cg2.
    a simple fast navigation through scene implemented.
    draw an arrow in VR possible, will be used to draw skeleton
    code review and rewrite part of it
    scaling while reading skeleton files
    render the skeleton properly
    render the mesh properly 
    make it transparent/ or use wireframe mode 
    slight performance improvement
    frame rate problem fixed
    load animation correctly
    draw local frame correctly, which will be modified when creating new bone 
    boxes are used to represent joints 
    compute intersected joint box correctly
    create and manipulate bones, may use sphere to represent joints - use boxes
        we should support modify from a given skeleton, not only create them from scratch
        add/del. bone
        we also have to adjest local frame, and limitations 
        by adding, we should select the parent of the bone and highlight it 
    write skeleton data to a file: Skinning of a mesh with the created skeleton, draw skeleton in vr and write it to
        a file(may have to take special care when combining skeleton)
    fix the problem with bone posi. modification 
    boxgui for loading/ animating... make sure all operations can be done in vr 
    40% adjest the position of the created bone, del. a bone 
        ref. greb operations
        adjest cube size at diff. posi. 
    problem with ik when selecting target point in vr  
        fixed: we should call calculate_kinematic_chain() first to construct kinematic chain, then, setup target points 
    better gui and multiple skeleton support 
    gen. more cubemap with https://jaxry.github.io/panorama-to-cubemap/ as skybox
    Recording, saving and loading of animations created by the users movement
    include mesh and with skeleton attached
    load attachment and anim. 
    problem when saving animation: saving call takes too much time, should finish in 1/120 s
        when we want to record in 120hz
            -> frame loss problem fixed, we can only record with about 60hz
    motion capturing with IK(not accurate)
        record and load button 
        gui interface left
    a screencapture button 
    multiple views, like a mirror image
        apply_dof()
    merge ponoccio
    make the size of the box or sphere adjestable, 
        for a better locating of the joints 
        https://github.com/yzyTUD/pub_repo/blob/master/pics/out_20200728-190621.flv.mp4
    build skeleton from user input 
    gen. skeleton from user input: one for pinocchio and an other for re-edit
    bind func. to gui button, gen. some demos 
    skeleton gen. can be saved 
    performance improvement
    hide mesh 
    adjest mesh type: wireframe, transparent....
    load diff. mesh: trans and rotation adjestment and scale:
        height adjestment with help of headset position + make use of user information!
    adjest root bone size -ok
    adjest rotation and translation for a given mesh 
        use the stick on left hand
        ok
    mirror effect IK: animation with IK ccd 
        touch to start/stop ccd
    bind functionalities to gui button
        up to 3 tmp. skeleton to choose and record
        ok  
    info board 
    reset function 
        del jointlists 
    multiple objects ik(two hands)
    later-skeleton edit functions
        del cooresp. line
    operation documentation  
    multiple views, imitating skeletons 
    code style improvement 
    improve IK
        modify the calculate_matrix function
    report 
    posing function, grip left button to start. have to select left hand ee first!
    local frames, just aligned to world coordi. now 
    build_bone
    adjest bone local frames, two ways.
    yellow box 
    take use of the ori of the controllers 
    draw target position 
    code cleaning 
    load and test the skel. with dofs 
    adjest dofs in vr (details designed in private repository)
    --- for presentation 
    fix the controller rendering 
    installation guide, documentation 
    use of CGV_DATA to load meshes 
    fix the path prob. 
    posing function  
    fix the problem in mesh loading, two meshes 
    beginners guide 
tobetested:
todo:  
future work:    
    enable texturing for the mesh loader
    a better custom mesh loader, which is too simple now, 
        ref. the one from the prof.
    rig half of a mesh and auto-complete. Add a button: skel_auto_complete 
    cut out part of the mesh with right hand controller 
    vis bone weights for each components (vertices)
    fix the dof adjestment in course cg2, implement a numerical            
        optimization process
current sreenshots:

Demo CountPages alpha