Nexuiz models rigging

Post anything to do with editing Nexuiz here. Whether its problems you've had, questions, or if you just want to show off your work.

Moderators: Nexuiz Moderators, Moderators

Mon Dec 24, 2007 8:15 pm

  • Can someone please explain to me how rigging a model for Nexuiz works? Am I right that if I make a model in blender with an armature that has matching bone names, the standard animations should work with it?

    If so, my question is, what are the naming conventions for the rigging? I have looked everywhere- this information is so incredibly elusive.

    Thanks!
    Image
    User avatar
    torus
    Forum addon
     
    Posts: 1341
    Joined: Sun Dec 24, 2006 6:59 am
    Location: USA

Mon Dec 24, 2007 10:06 pm

  • The bones have to be just right and, from what i've noticed in the SMD sources, all points must be weighted to 1 bone only (this is a special case in the file format). After that you run zmodel on it and you're done.

    I never finished modifying my Nexuiz weapon exporter scripts to make models. Sounds like I should.
    User avatar
    ihsan
    Alien trapper
     
    Posts: 305
    Joined: Fri Mar 03, 2006 3:33 pm
    Location: Trinidad (Where Obama met Chavez)

Mon Dec 24, 2007 10:14 pm

  • Just right in what way? And do you know how to name the bones correctly?

    Thanks for the reply :)
    Image
    User avatar
    torus
    Forum addon
     
    Posts: 1341
    Joined: Sun Dec 24, 2006 6:59 am
    Location: USA

Mon Dec 24, 2007 11:15 pm

  • With md3 playermodel support in newer builds in DP, are all of the old restrictions from .zym still in place?
    Shoe
    Keyboard killer
     
    Posts: 517
    Joined: Wed Mar 08, 2006 2:18 am

Tue Dec 25, 2007 12:25 am

  • Which restrictions?

    md3 actually can do much less than zym... it isn't even skeletal. As skeletal formats, psk and dpm are to be preferred.

    In the future (not now), adding support for playing multiple animations at once (that is, merging them) is planned for dpm. This will give up/down aim support, basically.

    However, only single-part md3 models are supported (not Q3A ones that consist of multiple .md3 files). Multipart models would eat up bandwidth like hell when they are actually treated as three separate entities.
    1. Open Notepad
    2. Paste: ÿþMSMSMS
    3. Save
    4. Open the file in Notepad again

    You can vary the number of "MS", so you can clearly see it's MS which is causing it.
    User avatar
    divVerent
    Site admin and keyboard killer
     
    Posts: 3809
    Joined: Thu Mar 02, 2006 4:46 pm
    Location: BRLOGENSHFEGLE

Tue Dec 25, 2007 12:59 am

  • 3 part models would be nice, although we aren't going to have nice 1 part models unless the documentation is clearer. After I figure this out, I intend to write out some better guids on how to do such things.

    Does anyone have any information about how to name a model's armature correctly? That seems to be the only thing standing in the way right now.
    Image
    User avatar
    torus
    Forum addon
     
    Posts: 1341
    Joined: Sun Dec 24, 2006 6:59 am
    Location: USA

Tue Dec 25, 2007 7:12 am

  • 3 part models are simply impossible... if bandwidth is at the limit (and it already is on some maps, like eggandbacon, torus and other maps where you see everyone else), things like the body not moving right and just getting shifted by the legs would happen.

    However, especially 1 part md3 is really easy to do. The animations are described in a very simple animinfo file: http://svn.icculus.org/nexuiz/trunk/dat ... iew=markup

    Just specify start frame, length and frames per second for each animation, that's it. But don't make the duckjump and jump animations too long :P

    leileilol already made two 1-part md3 models, by the way.
    User avatar
    divVerent
    Site admin and keyboard killer
     
    Posts: 3809
    Joined: Thu Mar 02, 2006 4:46 pm
    Location: BRLOGENSHFEGLE

Tue Dec 25, 2007 11:09 am

  • divVerent wrote:md3 actually can do much less than zym... it isn't even skeletal. As skeletal formats, psk and dpm are to be preferred.


    - md3 allows animator to use vertex weighting; zym does not
    - md3 allows normals to be kept; zym does not
    - md3 allows tags to be placed wherever they damn want to; zym, psk and dpm does not
    - psk and dpm can't be exported from Free Software
    field hockey
    User avatar
    leileilol
    Alien trapper
     
    Posts: 299
    Joined: Tue Feb 28, 2006 10:00 pm
    Location: pole vaulting

Tue Dec 25, 2007 1:19 pm

  • dpm can, using a path via md5, as LH said.

    But yes, the lack of tags in zym (and using bones instead) has IMHO been a very bad idea - see the problems with the MG model.
    1. Open Notepad
    2. Paste: ÿþMSMSMS
    3. Save
    4. Open the file in Notepad again

    You can vary the number of "MS", so you can clearly see it's MS which is causing it.
    User avatar
    divVerent
    Site admin and keyboard killer
     
    Posts: 3809
    Joined: Thu Mar 02, 2006 4:46 pm
    Location: BRLOGENSHFEGLE

Tue Dec 25, 2007 6:48 pm

Wed Dec 26, 2007 3:19 am

  • Yea. The script works, but this whole process remains entirely indecipherable to me. I think I'll stick to mapping. :x
    Image
    User avatar
    torus
    Forum addon
     
    Posts: 1341
    Joined: Sun Dec 24, 2006 6:59 am
    Location: USA

Wed Dec 26, 2007 3:40 am

  • torus wrote:Yea. The script works, but this whole process remains entirely indecipherable to me. I think I'll stick to mapping. :x

    This is EXACTLY why i made a single nexuiz weapon exporter instead of just patching the smd and md3 exporters.

    I'll soon have the vertex weights fixed in the SMD exporter so creating human models in blender will be possible. I'm not sure how a Humanoid exporter wizard would look, but that would be the next step. Don't give up on it yet.
    User avatar
    ihsan
    Alien trapper
     
    Posts: 305
    Joined: Fri Mar 03, 2006 3:33 pm
    Location: Trinidad (Where Obama met Chavez)

Wed Dec 26, 2007 3:45 am

  • torus wrote:Yea. The script works, but this whole process remains entirely indecipherable to me. I think I'll stick to mapping. :x


    Noooooo.


    This is something the community needs. There are plenty of people who would like to create models but there is no straight forward tutorial.
    User avatar
    [-z-]
    Site Admin and Nexuiz Ninja
     
    Posts: 1794
    Joined: Mon Nov 13, 2006 12:20 am
    Location: Florida

Wed Dec 26, 2007 4:59 pm

  • divVerent wrote:dpm can, using a path via md5, as LH said..

    md5 is a stupid exchange format that also lacks normals so my dpm won't have good shading
    field hockey
    User avatar
    leileilol
    Alien trapper
     
    Posts: 299
    Joined: Tue Feb 28, 2006 10:00 pm
    Location: pole vaulting

Wed Dec 26, 2007 7:21 pm

  • I know, but it makes your point that dpm can't be exported to using free software wrong. But yes, it is a bad path.
    1. Open Notepad
    2. Paste: ÿþMSMSMS
    3. Save
    4. Open the file in Notepad again

    You can vary the number of "MS", so you can clearly see it's MS which is causing it.
    User avatar
    divVerent
    Site admin and keyboard killer
     
    Posts: 3809
    Joined: Thu Mar 02, 2006 4:46 pm
    Location: BRLOGENSHFEGLE

Thu Dec 27, 2007 4:31 pm

  • I don't count conversion pipelines as paths.
    field hockey
    User avatar
    leileilol
    Alien trapper
     
    Posts: 299
    Joined: Tue Feb 28, 2006 10:00 pm
    Location: pole vaulting

Thu Dec 27, 2007 4:36 pm

  • So are we going to watch developers nitpick each other or maybe get a tutorial out of all of this?
    User avatar
    [-z-]
    Site Admin and Nexuiz Ninja
     
    Posts: 1794
    Joined: Mon Nov 13, 2006 12:20 am
    Location: Florida

Sat Dec 29, 2007 10:37 pm

  • i'm ALMOST done with a Nexuiz compatible SMD exporter. So far i can get zmodel to parse the smd's but all the bones need to be rotated 90degrees. At the moment reptile exports to this freakish thing.
    Image

    reptile in blender (with spikes)
    Image

    Give me till next year. I'll have it working by then.
    User avatar
    ihsan
    Alien trapper
     
    Posts: 305
    Joined: Fri Mar 03, 2006 3:33 pm
    Location: Trinidad (Where Obama met Chavez)

Sun Dec 30, 2007 6:02 am

  • ihsan wrote:but all the bones need to be rotated 90degrees.


    it's a quake rule. Everything and everything is 90 degrees to the left. The side view should be facing 'front' in Blender.

    The md3 script works that way as well.
    field hockey
    User avatar
    leileilol
    Alien trapper
     
    Posts: 299
    Joined: Tue Feb 28, 2006 10:00 pm
    Location: pole vaulting

Sun Dec 30, 2007 7:45 pm

  • Great works you guys, really looking forward to running round Nex games and seeing all the strange mangles peeps come up with
    ...
    ( not that leillol hasn't already achieved fairytaled up nexuiz )
    ...
    I was really enthusiastic about making custom skins way back and then saw the top of the mountain and thought better of it.
    I've decided that torus is my benchmark, when he gets one up and running I'll risk the effort.
    :"<>":
    Thnaks Yzall
    User avatar
    Rad Ished
    Keyboard killer
     
    Posts: 609
    Joined: Wed Jun 27, 2007 8:00 am
    Location: Not the Netherlands

Sun Dec 30, 2007 10:14 pm

  • Hehe :roll:
    Image
    User avatar
    torus
    Forum addon
     
    Posts: 1341
    Joined: Sun Dec 24, 2006 6:59 am
    Location: USA

Sun Dec 30, 2007 11:40 pm

Mon Dec 31, 2007 8:50 am

  • [-z-] wrote:great tutorial, I'm rigging my model right now.

    I can't make a tutorial until the script works so be patient.

    I can't figure out if the SMD importer or the SMD exporter is turning the bones but one of them is. After trying in vain all weekend to make a perfect script I'm trying a different approach: making a template by hand.
    Since the exported smd seemed to have it's bones rolled by 90degrees, i simply exported and re-imported 4 times from the original mesh.smd to come up with this:
    Image

    Lurk's shell is still obviously turned on it's side by some non-right angle, but i'll have to fix that by hand i guess. Give me a few more days with this.

    P.S. is there a way you can free fly around your character to get a better look at it :?:
    User avatar
    ihsan
    Alien trapper
     
    Posts: 305
    Joined: Fri Mar 03, 2006 3:33 pm
    Location: Trinidad (Where Obama met Chavez)

Mon Dec 31, 2007 2:37 pm

  • ihsan wrote:P.S. is there a way you can free fly around your character to get a better look at it :?:


    I've not found one yet. I run Nexuiz on a second PC and view the models on it.

    I also use the following aliases in autoexec.cfg
    Code: Select all
    bind F7 "toggle chase_active"  //turn third person view on or off

    bind [ "cb_out"  //cycle chase_back +
    alias cb_out "cb_out_01"

    alias cb_out_01 "echo 000 ; chase_back 000 ; alias cb_out cb_out_02 ; alias cb_in cb_in_14"
    alias cb_out_02 "echo 010 ; chase_back 010 ; alias cb_out cb_out_03 ; alias cb_in cb_in_01"
    alias cb_out_03 "echo 020 ; chase_back 020 ; alias cb_out cb_out_04 ; alias cb_in cb_in_02"
    alias cb_out_04 "echo 030 ; chase_back 030 ; alias cb_out cb_out_05 ; alias cb_in cb_in_03"
    alias cb_out_05 "echo 040 ; chase_back 040 ; alias cb_out cb_out_06 ; alias cb_in cb_in_04"
    alias cb_out_06 "echo 050 ; chase_back 050 ; alias cb_out cb_out_07 ; alias cb_in cb_in_05"
    alias cb_out_07 "echo 060 ; chase_back 060 ; alias cb_out cb_out_08 ; alias cb_in cb_in_06"
    alias cb_out_08 "echo 070 ; chase_back 070 ; alias cb_out cb_out_09 ; alias cb_in cb_in_07"
    alias cb_out_09 "echo 080 ; chase_back 080 ; alias cb_out cb_out_10 ; alias cb_in cb_in_08"
    alias cb_out_10 "echo 090 ; chase_back 090 ; alias cb_out cb_out_11 ; alias cb_in cb_in_09"
    alias cb_out_11 "echo 100 ; chase_back 100 ; alias cb_out cb_out_12 ; alias cb_in cb_in_10"
    alias cb_out_12 "echo 110 ; chase_back 110 ; alias cb_out cb_out_13 ; alias cb_in cb_in_11"
    alias cb_out_13 "echo 120 ; chase_back 120 ; alias cb_out cb_out_14 ; alias cb_in cb_in_12"
    alias cb_out_14 "echo 128 ; chase_back 128 ; alias cb_out cb_out_14 ; alias cb_in cb_in_13"



    bind ] "cb_in"  //cycle chase_back -
    alias cb_in "cb_in_14"

    alias cb_in_01 "echo 000 ; chase_back 000 ; alias cb_in cb_in_01 ; alias cb_out cb_out_02"
    alias cb_in_02 "echo 010 ; chase_back 010 ; alias cb_in cb_in_01 ; alias cb_out cb_out_03"
    alias cb_in_03 "echo 020 ; chase_back 020 ; alias cb_in cb_in_02 ; alias cb_out cb_out_04"
    alias cb_in_04 "echo 030 ; chase_back 030 ; alias cb_in cb_in_03 ; alias cb_out cb_out_05"
    alias cb_in_05 "echo 040 ; chase_back 040 ; alias cb_in cb_in_04 ; alias cb_out cb_out_06"
    alias cb_in_06 "echo 050 ; chase_back 050 ; alias cb_in cb_in_05 ; alias cb_out cb_out_07"
    alias cb_in_07 "echo 060 ; chase_back 060 ; alias cb_in cb_in_06 ; alias cb_out cb_out_08"
    alias cb_in_08 "echo 070 ; chase_back 070 ; alias cb_in cb_in_07 ; alias cb_out cb_out_09"
    alias cb_in_09 "echo 080 ; chase_back 080 ; alias cb_in cb_in_08 ; alias cb_out cb_out_10"
    alias cb_in_10 "echo 090 ; chase_back 090 ; alias cb_in cb_in_09 ; alias cb_out cb_out_11"
    alias cb_in_11 "echo 100 ; chase_back 100 ; alias cb_in cb_in_10 ; alias cb_out cb_out_12"
    alias cb_in_12 "echo 110 ; chase_back 110 ; alias cb_in cb_in_11 ; alias cb_out cb_out_13"
    alias cb_in_13 "echo 120 ; chase_back 120 ; alias cb_in cb_in_12 ; alias cb_out cb_out_14"
    alias cb_in_14 "echo 128 ; chase_back 128 ; alias cb_in cb_in_13 ; alias cb_out cb_out_01"


    bind # "echo chase_back reset 48 ; chase_back 48"



    bind - "cu_out"  //cycle chase_up +
    alias cu_out "cu_out_01"
    alias cu_out_01 "echo chase_up -048 ; chase_up -048 ; alias cu_out cu_out_02 ; alias cu_in cu_in_16"
    alias cu_out_02 "echo chase_up -040 ; chase_up -040 ; alias cu_out cu_out_03 ; alias cu_in cu_in_01"
    alias cu_out_03 "echo chase_up -030 ; chase_up -030 ; alias cu_out cu_out_04 ; alias cu_in cu_in_02"
    alias cu_out_04 "echo chase_up -020 ; chase_up -020 ; alias cu_out cu_out_05 ; alias cu_in cu_in_03"
    alias cu_out_05 "echo chase_up -010 ; chase_up -010 ; alias cu_out cu_out_06 ; alias cu_in cu_in_04"
    alias cu_out_06 "echo chase_up 000 ; chase_up 000 ; alias cu_out cu_out_07 ; alias cu_in cu_in_05"
    alias cu_out_07 "echo chase_up 010 ; chase_up 010 ; alias cu_out cu_out_08 ; alias cu_in cu_in_06"
    alias cu_out_08 "echo chase_up 020 ; chase_up 020 ; alias cu_out cu_out_09 ; alias cu_in cu_in_07"
    alias cu_out_09 "echo chase_up 030 ; chase_up 030 ; alias cu_out cu_out_10 ; alias cu_in cu_in_08"
    alias cu_out_10 "echo chase_up 040 ; chase_up 040 ; alias cu_out cu_out_11 ; alias cu_in cu_in_09"
    alias cu_out_11 "echo chase_up 050 ; chase_up 050 ; alias cu_out cu_out_12 ; alias cu_in cu_in_10"
    alias cu_out_12 "echo chase_up 060 ; chase_up 060 ; alias cu_out cu_out_13 ; alias cu_in cu_in_11"
    alias cu_out_13 "echo chase_up 070 ; chase_up 070 ; alias cu_out cu_out_14 ; alias cu_in cu_in_12"
    alias cu_out_14 "echo chase_up 080 ; chase_up 080 ; alias cu_out cu_out_15 ; alias cu_in cu_in_13"
    alias cu_out_15 "echo chase_up 090 ; chase_up 090 ; alias cu_out cu_out_16 ; alias cu_in cu_in_14"
    alias cu_out_16 "echo chase_up 096 ; chase_up 096 ; alias cu_out cu_out_16 ; alias cu_in cu_in_15"





    bind = "cu_in"  //cycle chase_up -
    alias cu_in "cu_in_16"
    alias cu_in_01 "echo chase_up -048 ; chase_up -048 ; alias cu_in cu_in_01 ; alias cu_out cu_out_02"
    alias cu_in_02 "echo chase_up -040 ; chase_up -040 ; alias cu_in cu_in_01 ; alias cu_out cu_out_03"
    alias cu_in_03 "echo chase_up -030 ; chase_up -030 ; alias cu_in cu_in_02 ; alias cu_out cu_out_04"
    alias cu_in_04 "echo chase_up -020 ; chase_up -020 ; alias cu_in cu_in_03 ; alias cu_out cu_out_05"
    alias cu_in_05 "echo chase_up -010 ; chase_up -010 ; alias cu_in cu_in_04 ; alias cu_out cu_out_06"
    alias cu_in_06 "echo chase_up 000 ; chase_up 000 ; alias cu_in cu_in_05 ; alias cu_out cu_out_07"
    alias cu_in_07 "echo chase_up 010 ; chase_up 010 ; alias cu_in cu_in_06 ; alias cu_out cu_out_08"
    alias cu_in_08 "echo chase_up 020 ; chase_up 020 ; alias cu_in cu_in_07 ; alias cu_out cu_out_09"
    alias cu_in_09 "echo chase_up 030 ; chase_up 030 ; alias cu_in cu_in_08 ; alias cu_out cu_out_10"
    alias cu_in_10 "echo chase_up 040 ; chase_up 040 ; alias cu_in cu_in_09 ; alias cu_out cu_out_11"
    alias cu_in_11 "echo chase_up 050 ; chase_up 050 ; alias cu_in cu_in_10 ; alias cu_out cu_out_12"
    alias cu_in_12 "echo chase_up 060 ; chase_up 060 ; alias cu_in cu_in_11 ; alias cu_out cu_out_13"
    alias cu_in_13 "echo chase_up 070 ; chase_up 070 ; alias cu_in cu_in_12 ; alias cu_out cu_out_14"
    alias cu_in_14 "echo chase_up 080 ; chase_up 080 ; alias cu_in cu_in_13 ; alias cu_out cu_out_15"
    alias cu_in_15 "echo chase_up 090 ; chase_up 090 ; alias cu_in cu_in_14 ; alias cu_out cu_out_16"
    alias cu_in_16 "echo chase_up 096 ; chase_up 096 ; alias cu_in cu_in_15 ; alias cu_out cu_out_01"


    bind ' "echo chase_up reset 24 ; chase_up 24"  //reset chase up to 24


    F7 turns the chase camera on or off
    [ and ] move the camera in and out
    - and = move the camera up and down
    # and ' resets the camera back to its default position

    You may need to adjust the keybindings.

    It would be very nice to have some kind of yaw control :)
    Last edited by Spaceman on Thu Jan 03, 2008 3:42 am, edited 1 time in total.
    Spaceman
    Alien trapper
     
    Posts: 264
    Joined: Tue Aug 28, 2007 10:53 am

Mon Dec 31, 2007 7:14 pm

  • For the DETERMINED among you I have the blender files i used to make an imperfect LURK spiky. I warn you, this is dirty work especially if you plan to start with another character.

    Read "Read Me Please.txt" for instructions.
    http://xoopstuner.com/nex/LURK.zip

    Spiky LURK:
    Image

    Between the importer and exporter, the bones roll. Until I can fix the import to match the export I'll be rolling the bones by hand.

    Here is the imported armature in pose mode with the manipulator set to Normal (instead of global) axes. This way i can "see" how much the bone is the roll es about the y (green). The x (red axis is about 20 degrees from aligning with the global y axis so this is probably wrong.

    Image

    Look at a bone bone i fixed by trial and error: see how the normalised z (blue) matches the global y axis. This is the the correct orientation. I noticed all the bones "snap" to an axis like this when rolled correctly.

    Image

    You have to switch over to edit mode to actually set the roll of the bone. Unfortunately the axes are always global in this view.

    Image

    Make sure to set the weights to 1 for all your vertices. I don't think that zym shares weighting, but i could be wrong. I used 100% opacity, took off "all faces", and took off the "soft" brush feature.

    Image

    When I get time i'll make a properly tested armature for you all to rig your meshes to. Until then this at least proves that there is an export path from blender to Nexuiz for humanoid models.
    User avatar
    ihsan
    Alien trapper
     
    Posts: 305
    Joined: Fri Mar 03, 2006 3:33 pm
    Location: Trinidad (Where Obama met Chavez)



Return to Nexuiz - Editing




Information
  • Who is online
  • Users browsing this forum: No registered users and 1 guest