]> git.xonotic.org Git - xonotic/xonotic.wiki.git/blob - Exporting-a-weapon-for-Xonotic.md
Update SMD guide
[xonotic/xonotic.wiki.git] / Exporting-a-weapon-for-Xonotic.md
1 ## :rotating_light: :warning: WARNING: This tutorial is under construction! :warning: :rotating_light: 
2
3 # Modeling requirements
4 ### To follow this, you need knowledge about modeling using Blender
5
6 Blender version recommended: 2.79b or later
7
8 You need [dpmodel](https://icculus.org/twilight/darkplaces/files/) to convert SMD files:
9 - [dpmodel tool](https://icculus.org/twilight/darkplaces/files/dpmodel20091008beta1.zip)
10
11 Requires these following tools (addons) for Blender:
12 - [IQM exporter](https://gitlab.com/xonotic/iqm) to export IQM files.
13 - [Source Tools (SMD importer/exporter)](http://steamreview.org/BlenderSourceTools/archives/) to import/export SMD files.
14
15 Optional:
16 - [MD3 importer/exporter](https://github.com/neumond/blender-md3) to import/export MD3 files.
17
18 ***IMPORTANT NOTE**: if you want to contribute, it's strongly important use 2.79b version for compatibility cases, they need to open from this version. Share the .blend file using 2.79b or earlier , make sure to work properly from this version!*<br/>
19 *If the version of a file is later than 2.79b, we may to make some tweaks and become tedious.*
20
21 # Introduction to export a weapon
22 **Keep in mind about weapon systems:**
23
24 - `g_*.md3`: model mesh for item pickup spawn and third person.
25 - `h_*.iqm`: for first person animations; the skeleton and the bones (the rigging and animation part). Keep in mind, you would need `*.iqm.framegroups` (more info: [Framegroups](framegroups), you can look `*.iqm.framegroups` opening a notepad to see what animations contain and the keyframes where these are set)
26 - `v_*.md3`: model mesh for first person and a glue of `h_*`; if `h_*.iqm` doesn't match with the animations needed of `v_*.md3`, it will generate spamming errors and bad pivot position.
27
28 More info: [Weapon modeling system](Weaponsystem)
29
30
31 # Textures and UV map
32
33 ### For MD3 exportation:
34
35 You have to add single material with single texture for every mesh object. Name of texture node will be written as is into MD3 data (suffixes like .001, .002 are ignored, feel free to use one texture for many meshes).
36 <br />
37 Keep in mind, when you've done your UV map in your model, you need to set this:
38 <br />
39 <br />
40 <img src="uploads/efee46a2a80a232ebe5fa63e30f4e2d9/Md3exp.png" alt="Md3exp" width="300" />
41 <br />
42 Texture must:
43
44 - be of **Image** type
45 - mapping type **UV**
46 - have UV map assigned
47
48 otherwise resulting data block will be filled with zeroes.
49 <br />
50 <br />
51 <img src="uploads/c48fb7565453eab24faca2d6ffec4347/Md3_textures.png" alt="Md3_textures" width="360" />
52 <br />
53 <br />
54 If you didn't this, the model will be invisible and it won't be able to interact shaders.
55 <br />
56 <br />
57 [Blender reference about UV in MD3](https://archive.blender.org/wiki/index.php/Extensions:2.6/Py/Scripts/Import-Export/MD3/)
58
59 # Starting to export
60
61 Keep in mind, you need to set these modifiers for the mesh/model object: 
62
63 <img src="uploads/447f6abe0f73c6d6cadce97e4ed66e8b/blendermodifiersiqmandmd3.jpg" alt="blendermodifiersiqmandmd3" />
64
65 MUST contain `tag_handle`, `tag_shell` and `tag_shot` bone names attached. These tag_names MUST be attached, if not the model will cause errors.
66
67 `tag_Somename` is another one, you can add if you need some optional animation in this bone.
68
69 Moreover, watch out about position and rotation. `h_*.iqm` alterates the position and rotation of `v_*.md3`. The positions may not be equal.
70
71 `g_*` and `v_*` MUST contain one bone. The animations can't be included. It isn't like `h_*`.
72
73 ## SMD (includes IQM converter and dpmodel guide)
74
75 Use Source Tools to export the model. Selecting the mesh and 1 animation, ............ (Guide WIP)
76
77 Use iqm.exe from [IQM exporter](https://gitlab.com/xonotic/iqm), in Windows, in CMD execute: `iqm v_myweapon.iqm v_mesh.smd`
78 <br/>Linux: `./iqm.exe v_myweapon.iqm v_mesh.smd`
79
80 Rename extension to MD3: `v_myweapon.iqm` to `v_myweapon.md3`
81
82 Use dpmodel tool to generate `h_myweapon.dpm` and `h_myweapon.dpm.framegroups`.
83 <br/>Rename extension to IQM: `h_myweapon.dpm` to `h_myweapon.iqm` and `h_myweapon.dpm.framegroups` to `h_myweapon.iqm.framegroups`.
84
85 More info about dpmodel tool: [dpmodel](dpmodel)
86
87
88 **Conclusion**: Sometimes, renaming formats can be useful to save effort. Note: it's a kind of weird way to do stuff, the issue of model resources was found here: https://gitlab.com/xonotic/xonotic-data.pk3dir/-/issues/2629#note_686988936
89
90 # Old methodology
91
92 **IMPORTANT**: In this methodology, you can't make cool animations with separated objects, because `h_*.iqm` here is a plane mesh with bones.
93
94 Note: the model should be rotated as YXZ, instead being XYZ. Because the pit of the weapon is Y, horizontally is X.
95
96 `tag_weapon` is a MUST bone for this methodology.
97
98 ## MD3
99
100 Before to export, you need to select all objects in the scene. (Pressing A, seeing all objects highlighting orange or red)
101
102 <img src="uploads/f3f39c9a06a408bffd5e48bc5e07eac6/exporttutorialMD3.jpg" alt="exporttutorialMD3" />
103
104 ## IQM
105
106 Before to export, you need to select all objects and bones in the scene. (Pressing A, seeing all objects highlighting orange or red)
107
108 <img src="uploads/7df860d73a6fae27408c8f0c024122c7/exporttutorialIQM.jpg" alt="exporttutorialIQM" />
109
110 <br/>
111 <br/>
112 For `h_*.iqm`, you will need to do this:
113
114 There is a simple way:
115
116 You just can use an iqm model like a regular mdl file, you only need to use each frame as a framegroup.
117
118 For example, if you have an iqm called "rocketlauncher.iqm" with 20 frames you need to create a framegroup file with notepad like this:
119
120 ```
121 1 1 1 0  
122 2 1 1 0  
123 3 1 1 0  
124 4 1 1 0  
125 5 1 1 0  
126 6 1 1 0  
127 7 1 1 0  
128 8 1 1 0  
129 9 1 1 0  
130 10 1 1 0  
131 11 1 1 0  
132 12 1 1 0  
133 13 1 1 0  
134 14 1 1 0  
135 15 1 1 0  
136 16 1 1 0  
137 17 1 1 0  
138 18 1 1 0  
139 19 1 1 0  
140 20 1 1 0  
141 ```
142 So you will save it with the name.
143
144 "rocketlauncher.iqm.framegroups" and place it in the same directory where "rocketlauncher.iqm" is located.
145
146 About the framegroups file (explained on [Framegroups](framegroups)):
147
148 The first number represents the start frame of the animation (.framegroups files always start at frame 0, some modeling software starts at 1, so you might have to subtract 1 for the start frame).
149
150 The second number represents how many frames is in that specific frame group.
151
152 The third number is the frame rate at which the sequence plays. This is independent from what the monsters "think" rate is, which I have set at 10 frames-per-second.
153
154 The fourth number is whether the frame sequence loops. 1 for true, 0 for false. The only frame groups that should loop are the standing, walking and running animations.
155
156 It becomes very tedious to make framegroups for models with really many frames, you can use this sample generated for the darkplaces model compiler. It will work in every iqm model (if you wan you only need to cut the specific number of frames in the framegroups file, but it will work anyway)
157
158 Reference: [IQM animation framegroups (InsideQC Forums)](https://forums.insideqc.com/viewtopic.php?p=55949&sid=952cd347938ae5f2bb8bde276b5a35cd#p55949)
159