Difference between revisions of "Team Fortress Wiki:3D Models"
Moussekateer (talk | contribs) (→Requirements) |
(And done! Updated for Steampipe, tidied up, corrects stuff) |
||
Line 29: | Line 29: | ||
*[http://github.com/Moussekateer/3D-Models-automaton The automaton script] | *[http://github.com/Moussekateer/3D-Models-automaton The automaton script] | ||
*The Source SDK | *The Source SDK | ||
+ | *The sdktools_beta | ||
*[http://nemesis.thewavelength.net/index.php?p=25 GCFScape] | *[http://nemesis.thewavelength.net/index.php?p=25 GCFScape] | ||
*For models that need to be recompiled: [http://www.hl2.boo.pl/applications/MdlDecompilerFixed/MDL%20Decompiler%20Fixed.rar MDL Decompiler] and [http://www.chaosincarnate.net/cannonfodder/cftools.htm StudioCompiler]. | *For models that need to be recompiled: [http://www.hl2.boo.pl/applications/MdlDecompilerFixed/MDL%20Decompiler%20Fixed.rar MDL Decompiler] and [http://www.chaosincarnate.net/cannonfodder/cftools.htm StudioCompiler]. | ||
Line 37: | Line 38: | ||
** Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition. | ** Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition. | ||
** Extract the wikitools zipped file into the same directory as the script. | ** Extract the wikitools zipped file into the same directory as the script. | ||
− | ** Copy the MDL Decompiler .exe to \Steam\steamapps\<username>\sourcesdk\bin\ep1\bin. | + | ** Install the Source SDK from the Tools part of Steam. This is only needed for the files, not for any of the functions! |
− | ** Navigate to \Python26\Lib\site-packages and replace SendKeys.py with the modified version linked above. | + | ** Copy the MDL Decompiler .exe to {{code|\Steam\steamapps\<username>\sourcesdk\bin\ep1\bin}}. |
+ | ** Navigate to {{code|\Python26\Lib\site-packages}} and replace SendKeys.py with the modified version linked above. | ||
* Otherwise extract the zipped Python folder somewhere. | * Otherwise extract the zipped Python folder somewhere. | ||
* Download and save the automaton scripts to an easily accessible folder. | * Download and save the automaton scripts to an easily accessible folder. | ||
− | * Copy | + | * Copy {{code|fireLayeredSlowTiled512.vtf}} to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\effects\tiledfire}}. |
− | * Copy | + | * Copy {{code|background.vtf}} to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\hlmv}}. |
− | * Set up HLMV to produce the highest quality images possible by following the guide found [[ | + | * Set up HLMV to produce the highest quality images possible by following the guide found [[Help:Model_Viewer#Setup|here]]. |
=== Setting up automate.py === | === Setting up automate.py === | ||
− | [[File:3D Tutorial HLMV Coordinates.png|400px|thumb|HLMV screen where 1 is the location of | + | [[File:3D Tutorial HLMV Coordinates.png|400px|thumb|HLMV screen where 1 is the location of {{code|fileButtonCoordindates}}, 2 is the location of {{code|optionsButtonCoodinates}}, and 3 is the boundary for {{code|imgCropBoundaries}}.]] |
* Open HLMV and maximize it. | * Open HLMV and maximize it. | ||
* Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop. | * Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop. | ||
* Take note of the following pixel coordinates for your screen size. | * Take note of the following pixel coordinates for your screen size. | ||
− | ** | + | ** {{code|monitorResolution}} is simply a list of your screen resolution. |
− | + | ** {{code|imgCropBoundaries}} is the boundary of the window the model in HLMV is contained within. The format is; | |
− | ** | ||
*** <nowiki>[pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]</nowiki> | *** <nowiki>[pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]</nowiki> | ||
*** You should leave a few pixels gap from the window edge. | *** You should leave a few pixels gap from the window edge. | ||
− | * | + | * {{code|fileButtonCoordindates}} is a tuple of the center x,y coordinates for the File menu button in HLMV. |
* Close any programs that may interrupt or interfere with the process. | * Close any programs that may interrupt or interfere with the process. | ||
* You are now set to take the images. | * You are now set to take the images. | ||
Line 62: | Line 63: | ||
== Workflow == | == Workflow == | ||
=== Taking images === | === Taking images === | ||
− | * Open up a weapon model in HLMV and center the model using | + | * Open up a weapon model in HLMV and center the model using {{code|Options -> Center View}}. |
* If the model does not face you directly when centered, it will need to be [[Team Fortress Wiki:3D Models#Recompiling models|recompiled]] with a new rotation. | * If the model does not face you directly when centered, it will need to be [[Team Fortress Wiki:3D Models#Recompiling models|recompiled]] with a new rotation. | ||
* Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted. | * Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted. | ||
− | * If the model has a fire overlay, see the | + | * If the model has a fire overlay, see the [[Team Fortress Wiki:3D Models#Installation|Installation]] section on this page or the [[Help:Model_Viewer#Program_limitations|Program Limitations]] section on the Help: Model Viewer page on how to remove it. |
* If the light source produces a glare that interferes with the model, hold {{Key|Ctrl}} and drag the light source around with the mouse until it is in a better position. | * If the light source produces a glare that interferes with the model, hold {{Key|Ctrl}} and drag the light source around with the mouse until it is in a better position. | ||
− | * Open regedit, navigate to | + | * Open regedit, navigate to {{code|\HKEY_CURRENT_USER\Software\Valve\hlmv}}, and locate the registry key entry for the model. This will be in the form of {{code|models.weapons.c_models.c_wrench.c_wrench.mdl}}. |
* Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry. | * Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry. | ||
− | * Copy the | + | * Copy the {{code|Trans}} key entry for the model into automateDis as the {{code|intialTranslation}} argument. (Don't forget to add the commas to separate the values) |
* Rotate the model by dragging near the center of the viewer. | * Rotate the model by dragging near the center of the viewer. | ||
* There will be three possible outcomes here. | * There will be three possible outcomes here. | ||
− | ** The model will rotate around the bottom corner of the model. If so, you will need to make use of | + | ** The model will rotate around the bottom corner of the model. If so, you will need to make use of {{code|rotationOffset}}. |
*** Rotate the model so that it is facing left. Hold down {{Key|Shift}} and move the model sideways so that it is centered in the circle that appears. | *** Rotate the model so that it is facing left. Hold down {{Key|Shift}} and move the model sideways so that it is centered in the circle that appears. | ||
− | *** Press {{Key|F5}} in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the | + | *** Press {{Key|F5}} in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the {{code|rotationOffset}} value. |
** The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on [[Team Fortress Wiki:3D Models#Recompiling models|recompiling models]]. | ** The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on [[Team Fortress Wiki:3D Models#Recompiling models|recompiling models]]. | ||
** The model will rotate around the vertical '''and''' horizontal center of the model. If so, you are good to go. | ** The model will rotate around the vertical '''and''' horizontal center of the model. If so, you are good to go. | ||
− | * Set the item name in the script for | + | * Set the item name in the script for {{code|itemName}}. It is suggested you initially set this to 'User <username> <item>' so you can see the item looks fine before being moved to the correct title. |
* The script is started as so. From the commandline, navigate to the folder containing the scripts and type <code>python automate.py</code>. | * The script is started as so. From the commandline, navigate to the folder containing the scripts and type <code>python automate.py</code>. | ||
* You will be asked to enter the folder name for the generated images. | * You will be asked to enter the folder name for the generated images. | ||
− | |||
* The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output. | * The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output. | ||
** To interrupt the image taking process, turn on Caps Lock. | ** To interrupt the image taking process, turn on Caps Lock. | ||
Line 88: | Line 88: | ||
=== Team-colored models === | === Team-colored models === | ||
− | * Extract the | + | * Extract the VMTs for the model from the {{code|tf2_misc_dir.vpk}} appropriate folder directories in the {{code|/custom/folder}}. |
− | * In the automate.py script set | + | * In the automate.py script set {{code|teamColours}} to {{code|True}} and set the paths to the VMTs for {{code|REDVMTFile}} and {{code|BLUVMTFile}}. |
=== Models with other class arms/models blocking the view === | === Models with other class arms/models blocking the view === | ||
− | * If you wish to remove a model from the viewer (for example the | + | * If you wish to remove a model from the viewer (for example the Sniper's arms holding onto the view model Sniper Rifle), click on the Model tab in HLMV and find out which VMTs are being used for the model textures. |
− | * Extract the VMTs using GCFScape to the same path in your | + | * Extract the VMTs using GCFScape to the same path in your {{code|/custom/folder}} and open them up in a text editor. |
− | * Inside the | + | * Inside the {{code|"VertexLitGeneric"}} curly brackets add the line {{code|"$no_draw" "1"}}. This will make this part of the model invisible in HLMV. |
=== Recompiling models === | === Recompiling models === | ||
* Open the model in HLMV. | * Open the model in HLMV. | ||
− | * Launch GCFScape and load | + | * Launch GCFScape and load {{code|tf2_misc_dir.vpk}}. |
− | * Navigate to | + | * Navigate to {{code|tf\models\weapons}} and extract the relevant weapon folder to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\models\weapons}}. |
* Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract. | * Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract. | ||
* Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten. | * Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten. | ||
− | * Open up the outputted | + | * Open up the outputted {{code|mdldecompiler.qc}} and change the $model line's value for the .dmx.smd file to not include a directory. i.e. change {{code|parts/dmx/c_wrench.dmx.smd}} to {{code|c_wrench.dmx.smd}}. |
* Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save. | * Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save. | ||
− | * Go back to StudioCompiler, go to the Model Compile tab, go to the | + | * Go back to StudioCompiler, go to the Model Compile tab, go to the {{code|Compile w/Existing QC}} section, select your {{code|mdldecompiler.qc}} which you just edited, and press compile. '''Note:''' If you get a compiler error about write access, it is probably because the directory that the compiler wants to output to as specified in the .qc doesn't exist. Create it. |
* '''Note:''' If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter: | * '''Note:''' If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter: | ||
− | + | ** {{code|"[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\bin\studiomdl" -game "[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\tf" mdldecompiler.qc | |
* Press {{Key|F5}} in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error. | * Press {{Key|F5}} in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error. | ||
* After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably [http://www.mediafire.com/ MediaFire]) to post on the project page. | * After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably [http://www.mediafire.com/ MediaFire]) to post on the project page. | ||
Line 115: | Line 115: | ||
== Tips and debugging == | == Tips and debugging == | ||
− | * If your HLMV is opening too slowly, adjust the time in the | + | * If your HLMV is opening too slowly, adjust the time in the {{code|mouse.sleep(time in seconds)}} entry that follows opening HLMV. |
− | + | * If something interrupts the image taking process, you can continue where you left off by setting the {{code|n}} argument in the automateDis method. | |
− | * If something interrupts the image taking process, you can continue where you left off by setting the | ||
** You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off. | ** You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off. | ||
− | * You can also set the disableXRotation argument to | + | * You can also set the disableXRotation argument to {{code|True}} to just rotate the model with no tilt to see if it looks fine. |
* You will find it '''much''' easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile. | * You will find it '''much''' easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile. | ||
== Models repository == | == Models repository == | ||
* [[Team Fortress Wiki:3D Models/Classes|Classes]] | * [[Team Fortress Wiki:3D Models/Classes|Classes]] | ||
− | |||
* [[Team Fortress Wiki:3D Models/Weapons|Weapons]] | * [[Team Fortress Wiki:3D Models/Weapons|Weapons]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Weapons == | == Weapons == | ||
Line 431: | Line 129: | ||
{{c|Note}}: Reserve the weapon you are working on by placing the line '<nowiki>{{c|info}} - Reserved by [[User:<username>|<username>]]</nowiki>' on the relevant weapon line. If you have any problems with a model, please post on the [[Team Fortress Wiki talk:3D Models|Talk page]] under a section titled after the weapon's name. | {{c|Note}}: Reserve the weapon you are working on by placing the line '<nowiki>{{c|info}} - Reserved by [[User:<username>|<username>]]</nowiki>' on the relevant weapon line. If you have any problems with a model, please post on the [[Team Fortress Wiki talk:3D Models|Talk page]] under a section titled after the weapon's name. | ||
− | * {{icon item|Ap-Sap|30px}} [[Ap-Sap]] | + | * {{icon item|Ap-Sap|30px}} [[Ap-Sap]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Vaccinator|30px}} [[Vaccinator]] | + | * {{icon item|Vaccinator|30px}} [[Vaccinator]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Bat Outta Hell|30px}} [[Bat Outta Hell]] | + | * {{icon item|Bat Outta Hell|30px}} [[Bat Outta Hell]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Memory Maker|30px}} [[Memory Maker]] | + | * {{icon item|Memory Maker|30px}} [[Memory Maker]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Quackenbirdt|30px}} [[Quackenbirdt]] | + | * {{icon item|Quackenbirdt|30px}} [[Quackenbirdt]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Equalizer|30px}} [[Equalizer]] (Needs Update) | + | * {{icon item|Equalizer|30px}} [[Equalizer]] (Needs Update) {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Lollichop|30px}} [[Lollichop]] | + | * {{icon item|Lollichop|30px}} [[Lollichop]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Robo-Sandvich|30px}} [[Robo-Sandvich]] | + | * {{icon item|Robo-Sandvich|30px}} [[Robo-Sandvich]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Flying Guillotine|30px}} [[Flying Guillotine]] (Needs 'Thirstier' Style) | + | * {{icon item|Flying Guillotine|30px}} [[Flying Guillotine]] (Needs 'Thirstier' Style) {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Invisibility Watch|30px}} [[Invisibility Watch]] | + | * {{icon item|Invisibility Watch|30px}} [[Invisibility Watch]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Ambassador|30px}} [[Festive Ambassador]] | + | * {{icon item|Festive Ambassador|30px}} [[Festive Ambassador]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Huntsman|30px}} [[Festive Huntsman]] | + | * {{icon item|Festive Huntsman|30px}} [[Festive Huntsman]]{{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Ubersaw|30px}} [[Festive Ubersaw]] | + | * {{icon item|Festive Ubersaw|30px}} [[Festive Ubersaw]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Sandvich|30px}} [[Festive Sandvich]] | + | * {{icon item|Festive Sandvich|30px}} [[Festive Sandvich]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Grenade Launcher|30px}} [[Festive Grenade Launcher]] | + | * {{icon item|Festive Grenade Launcher|30px}} [[Festive Grenade Launcher]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Axtinguisher|30px}} [[Festive Axtinguisher]] | + | * {{icon item|Festive Axtinguisher|30px}} [[Festive Axtinguisher]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Buff Banner|30px}} [[Festive Buff Banner]] | + | * {{icon item|Festive Buff Banner|30px}} [[Festive Buff Banner]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Holy Mackerel|30px}} [[Festive Holy Mackerel]] | + | * {{icon item|Festive Holy Mackerel|30px}} [[Festive Holy Mackerel]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
− | * {{icon item|Festive Wrench|30px}} [[Festive Wrench]] | + | * {{icon item|Festive Wrench|30px}} [[Festive Wrench]]{{c|info}} - Reserved by [[User:Dwizard|Dwizard]] |
* {{icon item|Silver Botkiller Scattergun Mk.I|30px}} [[Silver Botkiller Scattergun Mk.I]] | * {{icon item|Silver Botkiller Scattergun Mk.I|30px}} [[Silver Botkiller Scattergun Mk.I]] |
Revision as of 01:46, 25 June 2013
The 3D Models project's goal is to construct pseudo 3D images of the weapons in Team Fortress 2 that can be freely rotated.
Contents
Example
https://wiki.teamfortress.com/w/images/6/6a/Detonator_RED_3D.jpg?2018072610024612838,280,233,3,0,193,111,56,152,110,115,146,109,175,194,106,266,153,106,367,147,105,472,194,84,608,155,83,762,146,80,924,194,63,1098,157,60,1295,145,57,1503,194,44,1705,161,40,1932,145,35,2173,195,29,2392,165,24,2635,147,19,2895,195,20,3123,171,14,3377,151,7,3646,196,17,3872,177,11,4122,154,4,4386,198,22,4597,182,16,4829,159,9,5073,204,37,5255,188,31,5454,164,25,5663,210,61,5803,192,56,5955,168,51,6114,214,92,6203,195,89,6298,170,86,6396,215,114,6447,196,115,6497,172,115,6545,214,98,6633,195,95,6727,170,94,6825,210,78,6965,192,71,7116,168,68,7275,204,60,7457,188,49,7656,164,45,7865,198,46,8076,182,30,8308,159,25,8552,196,35,8778,177,17,9028,154,10,9292,195,31,9520,171,11,9774,151,2,10043,194,30,10263,165,12,10506,147,0,10766,194,33,10968,161,12,11195,145,2,11436,194,42,11610,157,21,11807,145,14,12015,194,58,12151,155,42,12306,146,35,12469,194,82,12560,153,72,12661,147,69https://wiki.teamfortress.com/w/images/3/36/Detonator_BLU_3D.jpg?2018072610042612842,280,232,3,0,193,111,56,153,110,114,146,110,173,194,106,264,154,106,365,146,105,470,194,84,607,155,82,761,146,80,923,194,62,1097,158,59,1294,145,56,1502,195,43,1704,162,39,1931,145,35,2172,195,28,2392,166,23,2635,148,18,2896,195,19,3125,171,14,3379,151,7,3649,196,17,3875,177,11,4125,154,4,4389,198,22,4600,182,16,4832,159,10,5076,203,37,5258,187,32,5457,164,25,5666,209,61,5806,191,57,5957,167,52,6116,213,92,6205,194,90,6299,170,87,6397,214,114,6448,195,114,6498,171,115,6546,213,98,6635,194,95,6729,170,93,6827,209,78,6967,191,70,7118,168,68,7277,203,60,7459,187,48,7658,164,44,7867,198,45,8078,182,30,8310,159,25,8554,196,35,8780,177,17,9030,154,10,9294,195,31,9523,171,11,9777,151,1,10047,195,30,10267,166,12,10510,148,0,10771,194,33,10973,162,12,11200,145,2,11441,194,42,11615,158,22,11812,145,14,12020,194,58,12157,155,42,12311,146,36,12473,194,82,12564,154,72,12665,146,69
Note This is not for the faint of heart. It requires a bit of knowledge on how both VMTs and HLMV work, and a lot of time and patience since a lot of models will not be centered correctly by default, thus requiring plenty of tweaking to get them ready for the process.
Requirements
- Python 2.6 (32-bit version) (python-2.6.6.msi)
- SendKeys (SendKeys-0.3.win32-py2.6.exe)
- Python Imaging Library (PIL) (PIL-1.1.7.win32-py2.6.exe)
- pywin32 (pywin32-216.win32-py2.6.exe)
- NumPy (numpy-1.6.1-win32-superpack-python2.6.exe)
- cython (Cython-0.15.1.win32-py2.6.exe)
- Modified SendKeys.py
- (Optional) Psyco for speed improvements (available for 32-bit Python only)
OR
- Preinstalled image of the Python installation with all modules (STRONGLY RECOMMENDED)
Also:
- Visual C++ 2008 Express Edition with SP1 (Must be 2008, more recent versions will not work) (vcsetup.exe)
- wikitools
- The automaton script
- The Source SDK
- The sdktools_beta
- GCFScape
- For models that need to be recompiled: MDL Decompiler and StudioCompiler.
Initial setup
Installation
- If manually installing Python:
- Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition.
- Extract the wikitools zipped file into the same directory as the script.
- Install the Source SDK from the Tools part of Steam. This is only needed for the files, not for any of the functions!
- Copy the MDL Decompiler .exe to
\Steam\steamapps\<username>\sourcesdk\bin\ep1\bin
. - Navigate to
\Python26\Lib\site-packages
and replace SendKeys.py with the modified version linked above.
- Otherwise extract the zipped Python folder somewhere.
- Download and save the automaton scripts to an easily accessible folder.
- Copy
fireLayeredSlowTiled512.vtf
to\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\effects\tiledfire
. - Copy
background.vtf
to\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\hlmv
. - Set up HLMV to produce the highest quality images possible by following the guide found here.
Setting up automate.py
- Open HLMV and maximize it.
- Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop.
- Take note of the following pixel coordinates for your screen size.
monitorResolution
is simply a list of your screen resolution.imgCropBoundaries
is the boundary of the window the model in HLMV is contained within. The format is;- [pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]
- You should leave a few pixels gap from the window edge.
fileButtonCoordindates
is a tuple of the center x,y coordinates for the File menu button in HLMV.- Close any programs that may interrupt or interfere with the process.
- You are now set to take the images.
Workflow
Taking images
- Open up a weapon model in HLMV and center the model using
Options -> Center View
. - If the model does not face you directly when centered, it will need to be recompiled with a new rotation.
- Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted.
- If the model has a fire overlay, see the Installation section on this page or the Program Limitations section on the Help: Model Viewer page on how to remove it.
- If the light source produces a glare that interferes with the model, hold Ctrl and drag the light source around with the mouse until it is in a better position.
- Open regedit, navigate to
\HKEY_CURRENT_USER\Software\Valve\hlmv
, and locate the registry key entry for the model. This will be in the form ofmodels.weapons.c_models.c_wrench.c_wrench.mdl
. - Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry.
- Copy the
Trans
key entry for the model into automateDis as theintialTranslation
argument. (Don't forget to add the commas to separate the values) - Rotate the model by dragging near the center of the viewer.
- There will be three possible outcomes here.
- The model will rotate around the bottom corner of the model. If so, you will need to make use of
rotationOffset
.- Rotate the model so that it is facing left. Hold down ⇧ Shift and move the model sideways so that it is centered in the circle that appears.
- Press F5 in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the
rotationOffset
value.
- The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on recompiling models.
- The model will rotate around the vertical and horizontal center of the model. If so, you are good to go.
- The model will rotate around the bottom corner of the model. If so, you will need to make use of
- Set the item name in the script for
itemName
. It is suggested you initially set this to 'User <username> <item>' so you can see the item looks fine before being moved to the correct title. - The script is started as so. From the commandline, navigate to the folder containing the scripts and type
python automate.py
. - You will be asked to enter the folder name for the generated images.
- The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output.
- To interrupt the image taking process, turn on Caps Lock.
Painted hats
- Coming soon
Team-colored models
- Extract the VMTs for the model from the
tf2_misc_dir.vpk
appropriate folder directories in the/custom/folder
. - In the automate.py script set
teamColours
toTrue
and set the paths to the VMTs forREDVMTFile
andBLUVMTFile
.
Models with other class arms/models blocking the view
- If you wish to remove a model from the viewer (for example the Sniper's arms holding onto the view model Sniper Rifle), click on the Model tab in HLMV and find out which VMTs are being used for the model textures.
- Extract the VMTs using GCFScape to the same path in your
/custom/folder
and open them up in a text editor. - Inside the
"VertexLitGeneric"
curly brackets add the line"$no_draw" "1"
. This will make this part of the model invisible in HLMV.
Recompiling models
- Open the model in HLMV.
- Launch GCFScape and load
tf2_misc_dir.vpk
. - Navigate to
tf\models\weapons
and extract the relevant weapon folder to\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\models\weapons
. - Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract.
- Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten.
- Open up the outputted
mdldecompiler.qc
and change the $model line's value for the .dmx.smd file to not include a directory. i.e. changeparts/dmx/c_wrench.dmx.smd
toc_wrench.dmx.smd
. - Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save.
- Go back to StudioCompiler, go to the Model Compile tab, go to the
Compile w/Existing QC
section, select yourmdldecompiler.qc
which you just edited, and press compile. Note: If you get a compiler error about write access, it is probably because the directory that the compiler wants to output to as specified in the .qc doesn't exist. Create it. - Note: If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter:
- {{code|"[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\bin\studiomdl" -game "[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\tf" mdldecompiler.qc
- Press F5 in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error.
- After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably MediaFire) to post on the project page.
Uploading your image for submission
- Post a link to the image on the Talk page under a section titled after the weapon's name, along with your parameters for the script (weapon key name, initial rotation, initial translation, offsets, etc).
- Keep a copy of the individual frame images somewhere safe in case they are needed in the near future.
Tips and debugging
- If your HLMV is opening too slowly, adjust the time in the
mouse.sleep(time in seconds)
entry that follows opening HLMV. - If something interrupts the image taking process, you can continue where you left off by setting the
n
argument in the automateDis method.- You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off.
- You can also set the disableXRotation argument to
True
to just rotate the model with no tilt to see if it looks fine. - You will find it much easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile.
Models repository
Weapons
Needed weapons
Note: Reserve the weapon you are working on by placing the line '{{c|info}} - Reserved by [[User:<username>|<username>]]' on the relevant weapon line. If you have any problems with a model, please post on the Talk page under a section titled after the weapon's name.
- Ap-Sap Info - Reserved by Dwizard
- Vaccinator Info - Reserved by Dwizard
- Bat Outta Hell Info - Reserved by Dwizard
- Memory Maker Info - Reserved by Dwizard
- Quackenbirdt Info - Reserved by Dwizard
- Equalizer (Needs Update) Info - Reserved by Dwizard
- Lollichop Info - Reserved by Dwizard
- Robo-Sandvich Info - Reserved by Dwizard
- Flying Guillotine (Needs 'Thirstier' Style) Info - Reserved by Dwizard
- Invisibility Watch Info - Reserved by Dwizard
- Festive Ambassador Info - Reserved by Dwizard
- Festive Huntsman Info - Reserved by Dwizard
- Festive Ubersaw Info - Reserved by Dwizard
- Festive Sandvich Info - Reserved by Dwizard
- Festive Grenade Launcher Info - Reserved by Dwizard
- Festive Axtinguisher Info - Reserved by Dwizard
- Festive Buff Banner Info - Reserved by Dwizard
- Festive Holy Mackerel Info - Reserved by Dwizard
- Festive Wrench Info - Reserved by Dwizard
- Silver Botkiller Scattergun Mk.I
- Gold Botkiller Scattergun Mk.I
- Rust Botkiller Scattergun Mk.I
- Blood Botkiller Scattergun Mk.I
- Carbonado Botkiller Scattergun Mk.I
- Diamond Botkiller Scattergun Mk.I
- Silver Botkiller Scattergun Mk.II
- Gold Botkiller Scattergun Mk.II
- Silver Botkiller Rocket Launcher Mk.I
- Gold Botkiller Rocket Launcher Mk.I
- Rust Botkiller Rocket Launcher Mk.I
- Blood Botkiller Rocket Launcher Mk.I
- Carbonado Botkiller Rocket Launcher Mk.I
- Diamond Botkiller Rocket Launcher Mk.I
- Silver Botkiller Rocket Launcher Mk.II
- Gold Botkiller Rocket Launcher Mk.II
- Silver Botkiller Flame Thrower Mk.I
- Gold Botkiller Flame Thrower Mk.I
- Rust Botkiller Flame Thrower Mk.I
- Blood Botkiller Flame Thrower Mk.I
- Carbonado Botkiller Flame Thrower Mk.I
- Diamond Botkiller Flame Thrower Mk.I
- Silver Botkiller Flame Thrower Mk.II
- Gold Botkiller Flame Thrower Mk.II
- Silver Botkiller Stickybomb Launcher Mk.I
- Gold Botkiller Stickybomb Launcher Mk.I
- Rust Botkiller Stickybomb Launcher Mk.I
- Blood Botkiller Stickybomb Launcher Mk.I
- Carbonado Botkiller Stickybomb Launcher Mk.I
- Diamond Botkiller Stickybomb Launcher Mk.I
- Silver Botkiller Stickybomb Launcher Mk.II
- Gold Botkiller Stickybomb Launcher Mk.II
- Silver Botkiller Minigun Mk.I
- Gold Botkiller Minigun Mk.I
- Rust Botkiller Minigun Mk.I
- Blood Botkiller Minigun Mk.I
- Carbonado Botkiller Minigun Mk.I
- Diamond Botkiller Minigun Mk.I
- Silver Botkiller Minigun Mk.II
- Gold Botkiller Minigun Mk.II
- Silver Botkiller Wrench Mk.I
- Gold Botkiller Wrench Mk.I
- Rust Botkiller Wrench Mk.I
- Blood Botkiller Wrench Mk.I
- Carbonado Botkiller Wrench Mk.I
- Diamond Botkiller Wrench Mk.I
- Silver Botkiller Wrench Mk.II
- Gold Botkiller Wrench Mk.II
- Silver Botkiller Medi Gun Mk.I
- Gold Botkiller Medi Gun Mk.I
- Rust Botkiller Medi Gun Mk.I
- Blood Botkiller Medi Gun Mk.I
- Carbonado Botkiller Medi Gun Mk.I
- Diamond Botkiller Medi Gun Mk.I
- Silver Botkiller Medi Gun Mk.II
- Gold Botkiller Medi Gun Mk.II
- Silver Botkiller Sniper Rifle Mk.I
- Gold Botkiller Sniper Rifle Mk.I
- Rust Botkiller Sniper Rifle Mk.I
- Blood Botkiller Sniper Rifle Mk.I
- Carbonado Botkiller Sniper Rifle Mk.I
- Diamond Botkiller Sniper Rifle Mk.I
- Silver Botkiller Sniper Rifle Mk.II
- Gold Botkiller Sniper Rifle Mk.II
- Silver Botkiller Knife Mk.I
- Gold Botkiller Knife Mk.I
- Rust Botkiller Knife Mk.I
- Blood Botkiller Knife Mk.I
- Carbonado Botkiller Knife Mk.I
- Diamond Botkiller Knife Mk.I
- Silver Botkiller Knife Mk.II
- Gold Botkiller Knife Mk.II
Finished weapons
- Ali Baba's Wee Booties
- Ambassador
- Amputator
- Apoco-Fists
- Atomizer
- AWPer Hand
- Axtinguisher
- Baby Face's Blaster
- Backburner
- Back Scratcher
- Bat
- Battalion's Backup
- Bazaar Bargain
- Beggar's Bazooka
- Big Earner
- Big Kill
- Black Box
- Black Rose
- Blutsauger
- Bonesaw
- Bonk! Atomic Punch
- Bootlegger
- Boston Basher
- Bottle
- Brass Beast
- Buffalo Steak Sandvich
- Buff Banner
- Bushwacka
- Candy Cane
- Chargin' Targe
- Claidheamh Mòr
- Cleaner's Carbine
- Cloak and Dagger
- Concheror
- Conniver's Kunai
- Conscientious Objector
- Cow Mangler 5000
- Cozy Camper
- Crit-a-Cola
- Crusader's Crossbow
- Dalokohs Bar
- Darwin's Danger Shield
- Dead Ringer
- Degreaser
- Detonator
- Diamondback
- Direct Hit
- Disciplinary Action
- Disguise Kit
- Electro Sapper
- Enforcer
- Enthusiast's Timepiece
- Escape Plan
- Eureka Effect
- Eviction Notice
- Eyelander
- Family Business
- Fan O'War
- Festive Bat
- Festive Flamethrower
- Festive Frontier Justice
- Festive Minigun
- Festive Rocket Launcher
- Festive Scattergun
- Festive Sniper Rifle
- Festive Stickybomb Launcher
- Fire Axe
- Fishcake
- Fists
- Fists of Steel
- Flamethrower
- Flare Gun
- Force-A-Nature
- Freedom Staff
- Frontier Justice
- Frying Pan
- Gloves of Running Urgently
- Golden Wrench
- Grenade Launcher
- Gunboats
- Gunslinger
- Half-Zatoichi
- Hitman's Heatmaker
- Holiday Punch
- Holy Mackerel
- Homewrecker
- Horseless Headless Horsemann's Headtaker
- Huntsman
- Huo-Long Heater
- Iron Curtain
- Jag
- Jarate
- Killing Gloves of Boxing
- Knife
- Kritzkrieg
- Kukri
- L'Etranger
- Liberty Launcher
- Loch-n-Load
- Loose Cannon
- Lugermorph
- Machina
- Mad Milk
- Manmelter
- Mantreads
- Market Gardener
- Maul
- Medi Gun
- Minigun
- Natascha
- Neon Annihilator
- Nessie's Nine Iron
- Original
- Overdose
- Pain Train
- PDA Build/Demolish Tool
- Persian Persuader
- Phlogistinator
- Pistol
- Pomson 6000
- Postal Pummeler
- Powerjack
- Pretty Boy's Pocket Pistol
- Quick-Fix
- Rainblower
- Razorback
- Red-Tape Recorder
- Rescue Ranger
- Reserve Shooter
- Revolver
- Righteous Bison
- Rocket Jumper
- Rocket Launcher
- Sandman
- Sandvich
- Saxxy
- Scattergun
- Scorch Shot
- Scotsman's Skullcutter
- Scottish Handshake
- Scottish Resistance
- Shahanshah
- Sharp Dresser
- Sharpened Volcano Fragment
- Short Circuit
- Shortstop
- Shotgun
- Shovel
- Sniper Rifle
- Soda Popper
- Solemn Vow
- Southern Hospitality
- Splendid Screen
- Spy-cicle
- Stickybomb Launcher
- Sticky Jumper
- Submachine Gun
- Sun-on-a-Stick
- Sydney Sleeper
- Syringe Gun
- Third Degree
- Three-Rune Blade
- Tomislav
- Tribalman's Shiv
- Übersaw
- Ullapool Caber
- Unarmed Combat
- Vita-Saw
- Wanga Prick
- Warrior's Spirit
- Widowmaker
- Winger
- Wrangler
- Wrap Assassin
- Wrench
- Your Eternal Reward