Garry's Mod

Garry's Mod

110 ratings
Bob’s Guides: The Ultimate Gmod Model Porting Guide
By 乃ㄖ乃爪卂匚 Ü
Welcome to the Ultimate GMod Model Porting Guide!

Never heard about Source engine’s systems? Never used Blender? Don’t worry.
This guide is perfect if you’re looking to port models into Garry’s Mod — whether you’re just getting started without any knowledge about what you are doing. Everything is packed into this guide for you to learn and use easily.
I’ve made this with beginners in mind, covering everything from the basics to publishing your addon on the Workshop.

With everything set, let’s move forward and start porting your model into GMod.
Don’t forget to rate the guide if it's helpful for you!
3
2
4
3
2
2
2
2
2
2
   
Award
Favorite
Favorited
Unfavorite
《 🎩 Introduction 》
First of all, this guide is a remake of my old guide, originally made back in October 2024. After getting tons of requests, I’ve rebuilt it from the ground up and balanced it perfectly for absolute beginners who wanna port their models—or any models they love—into Garry’s Mod.
If you’re reading this, that means you’re one of them.



Most guides don’t explain how to deal with different model formats or how to properly use the tools. That’s where this one stands out. I won’t just teach you how to port models, but also how to use the tools and understand the system behind the "Source" engine.

And, this guide may appear very lengthy, but there's no need for concern. Most of the sections got separated parts because of ”8K characters limit per section”. Most sections are concise and won’t require a significant amount of your time.

This guide has "Callouts" depending on what it is. There are "5” types of callouts.
  • 💡Tips – Little tricks and advice you’ll spot throughout the guide. They’ll teach you things you might not already know.
  • ⚠️Warnings – Pay attention here! These are things to watch out for or avoid so you don’t make mistakes.
  • ℹ️Infos – General information and details that help you understand the topic better.
  • 🚩Checkpoints – Milestones in the guide where you can pause, review, or take a quick breather. Make sure to take a break every 5–10 sections or at the checkpoints
  • 🗒️Notes – For something not crucial, but still useful to know.
Also, if you need help or want to ask questions.
Join my modding community server[discord.gg]. It's still new and needs to grow it up. :D



“Don’t watch the clock; do what it does. Keep going.”
Sam Levenson, American humorist and writer

I know you can do this. Let’s get started.


《 ⚙️ Model Requirements [Read] 》
Before we start touching anything, welcome to "Read" sections. In these sections, I'll teach you some fundamentals & basics, We'll start with the Requirements, Basic Formats, and Limitations in the Source engine — so you’ll understand better and be careful when working on models or anything engine-related.

Three sections will be provided for you to read. You can skip them if you’re eager to jump straight into model porting, but please read them — especially if you’re new to this. Don't rush. Everything here is good for you..

-- "Requirements" --

Let’s start with the "Requirements" for your model.
Don’t worry — there aren’t a ton of rules, just some basic stuff you need to know. Everytime will be fine if you know these.

──────────────────────────────────────────────────────
  • You can use models in any format. Mainly FBX, VRM, PMX in this guide.
    ❯ There might also be .blend files in some models. You can open them inside Blender. Check the "Open (.Blend)" section after the "Setting Up" part.
    .unitypackage files can be extracted to get FBX. This will be covered in the "Import (FBX)" section.
    MMD and VRM models require additional Blender add-ons and a few extra steps.

  • Model’s textures can be .PNG, .PSD, .JPEG, .TGA, .BMP, .JPG, .DDS, .GIF (for animated textures).
    ❯ In some models, only .PSD is used. You can open/convert these using GIMP, Photoshop, or any image editing tool.

  • Model must be rigged, and the first parent bone must be the Hips bone.
    The Pelvis bone should be the root bone. There shouldn’t be any other bones besides the Pelvis — only under it.
    ❯ You don’t need to worry too much — most rigged models already use Pelvis as the root by default.

  • Fingers are optional.
    ❯ The model can have fewer than 5 fingers or even none at all.
──────────────────────────────────────────────────────

[⚠️Warning ]
》Make sure your model is good enough to port. It should be rigged properly, have proper textures with compatible formats, and be fine to port. Some models that come from sources like "Sketchfab" or other unreliable places are messy and hard to port. You'll mostly going to be confused.

These are the basic things your model should have. I’ll explain the common formats used in Source Engine in the next section — make sure to check it out!


《 🗃️ File formats [Read] 》
When working with Source Engine, you should know about the "File formats". So, you know what you're working with. Every game engine has its own formats. Alright, let's read and make you familiar with Source's formats. You'll be better at this.

-- Source Engine's Formats --

✧ Model files : DMX & SMD



Source Engine has two model file formats being SMD and DMX. One is "Old" but still used by a lot of modders, and the other one is "Newer" and supported by "Source 2" as well. I’ll explain the differences, advantages, and disadvantages below.
    ──────────────────────────────────────────────────────
  • ⇨ SMD (Studiomodel Data) : Model file formats used by Source, GoldSrc (HL1's engine), and some other games. It stores model data in ASCII encoding.

    » Supports up to 127 bones. (In the compilation process)
    » Requires a separate file for vertex animation called VTA.
    » Can't have flex animation in bodygroups.
    » Can't handle high-poly models, Crashes.
    » Takes a very long time in the compilation process.
    » Issues when converting to other formats.
    » Older format / Not recommended. See DMX below.

  • ⇨ DMX (Data Model eXchange) : Modern model format used by newer versions of Source and Source 2. encoded in either Binary or ASCII.

    » Lower file size than SMD.
    » Supports up to 255 bones. (In the compilation process)
    » Supports up to 127 and an unknown number of shapes. Only 96 in Garry's Mod.
    » Supports Corrective shapekeys and Wrinkle maps.
    » Supports native flex animation. No need for a separate file for vertex animations, unlike SMD.
    » Can handle high-poly models easily.
    » Faster compilation process.
    » Best combo to use with SFM's compiler.
[🗒️Note ]
》We won't use SMD in this guide, and never use SMD when working with models for Garry's Mod. It's very old and not stable. DMX is the most suitable format to work with. if you used SMD before, change to DMX. You'll see a lot of benefits!


✧ Model extensions / Compiled model files : MDL, PHY, VTX, VVD



Source Engine games use model extensions to load models in-game—they don’t use the original model files directly. There are mainly 4 extension files. See below.
  • ⇨ MDL (Studiomodel) : Main binary model file.
    » Defines the structure of Mesh, Materials, Hitboxes, Animations, LOD, and more..
    » Contain all the information needed for the model.
    » Acts as the index—links to the other files shown below.

  • ⇨ PHY (Physics file) : Collision model data.
    » Stores data for the rigid or jointed (ragdoll) collision model used by the MDL.
    » PHY is independent from other model extension files. It can be replaced to use in other models.

  • ⇨ VTX (Valve Vertex optimized) : Mesh strip file.
    » Contains hardware-optimized mesh data—Triangle strips/fans, LODs, Skinning, etc.
    » Tailored for rendering on specific platforms (DX8, DX9, Console).
    » Includes different VTX files for different render pipelines (.dx80.vtx, .dx90.vtx, .sw.vtx, etc.).

  • ⇨ VVD (Valve Vertex Data) : Model's vertex data.
    » Stores position-independent flat data for the Bone weights, Normals, Vertices, Tangents and Texture coordinates used by the MDL.

[🗒️Note ]
》These files are the compiled result of your model and are what Source engine games use to display your models in-game. Each file handles a different part of the model—like mesh data, physics, or animations—and the game needs all of them to load the model correctly


✧ Work file formats : Qc, Qci, VTA, VRD



In the Source Engine, a QC file is necessary for StudioMDL (Compiler tool) to compile the model into usable binary formats. Additionally, other files such as QCI, VTA, and VRD support the QC file by providing extra features.
  • ⇨ Qc (Controller script) : Controller script file.
    » A script that controls the process of compiling model files into a binary model that can be loaded into a game.
    » Defines the model's Name, Meshes, Material directories, Scale, Origin, Bones, Hitboxes, Collision model, Controllers, Attachments, Flex animations, IK rules, Jigglebones, and more.
    » Essential to compile raw models into usable binary model files that can be used by the game.

  • ⇨ Qci (Sub Controller script) : Sub controller script file.
    » Sub-Script that can be included with the main QC script.
    » Works the same as QC.

  • ⇨ VTA (Valve Triangle Animation) : Vertex / Flex animation file.
    » Required for SMD. Unlike DMX, can be used in DMX but it's not required.
    » Stores vertex positions, normals for morph shape.

  • ⇨ VRD (Valve's procedural bones definition file) : Procedural bone definition file.
    » Control driver bones and driven bones that react based on other bones’ movement.
    » Used for auto-adjust mesh deformations. Examples like Wrist and Ulna bones for smooth Hand rotation and to avoid twisting.
    » Complex usage but very useful for fixing twisting issues in arms, thighs, etc.

[🗒️Note ]
》You'll be learning to use QC files sooner. But not the VTA as DMX doesn't need them. Same for VRD. It's too complex and hard to get the right result. But, I’ll link guides and tutorials at the end.


✧ Texture & Material formats : VTF & VMT



Source Engine uses different texture and material formats instead of using raw image files. They’re VTF and VMT. We’ll see below.
  • ⇨ VTF (Valve Texture Format) : Texture file
    » Texture file used by the model and referenced by the VMT (Valve Material Format) instead of using the texture directly.
    » Have different types of data formats to use in different scenarios: Skybox, Environment maps, Models.
    » Dimensions are restricted to Power of Two. Example: 4096x4096, 2048x2048. Can be bypassed with a modified VTFEdit, but models don't use textures with weird dimensions.
    » Limited file size to 32 MiB in ”Source 2013 Branch” games, but not in Garry's Mod.

  • ⇨ VMT (Valve Material Format) : Material file
    » Contains all of the information needed for the engine to simulate the surface visually, aurally, and physically.
    » The contents of a material will fall into some or all of these categories: Texture names, Parameters, Surface types, Special compile properties, Fallbacks, and Proxies.
    » Without it, it'll produce the infamous pink and black checkered pattern.
    » Using invalid shaders will result in white wireframes.
──────────────────────────────────────────────────────

Alright, those are the basic formats that modders always see when working mostly with models and other stuff. We’ll see limitations of the StudioMDL model compiler next.


《 ⚠️ Compiler limitations [Read] 》
Here, we’ll learn about the limitations of the StudioMDL tool, which is essentially a model compiler in the Source Engine. These limitations differ from those in other Source Engine branches and games.

But, GMod is unique in its way. You only need to worry about these limitations at the end, when you compile your model. Many models nowadays can surely reach these limitations listed below.

However, we can still compile those models with a few tricks, such as using the SFM compiler to compile high-poly models effortlessly. Anyway, here are the three main limitations of the Studiomdl that you’ll most likely go to exceed.

-- Studiomdl / Basic Limitations --

[🗒️ Note ]
》These limitations are for the final compilation process. You'll be learning how to get through those limitations while working with this guide. The current model's stats won't count, and you don't need to worry about it right now. I just put these here to know..

──────────────────────────────────────────────────────
  • You can’t have more than 255 bones.
    ❯ We’ll learn to use an optimization trick to collapse unused bones, which will only leave jigglebones and main armature bones. At final compile, only jigglebones and main armature bones will be counted! So, the current model's bones don't count. You'll see how to check your model's statistics for bone counts later.

  • You can't have more than 96 flexcontrollers.
    ❯ Gmod has a 96 flexcontroller limit, which limits the face poser's options. Your model might have more than 96 flexcontrollers in most cases, but you'll be dealing with it in the "Shapekeys" section. No need to worry about it right now.

  • You can't have more than 32 materials.
    ❯ Mostly, the model only uses between 5-12 materials, but models such as MMD models might use a lot. I've never seen MMD models hitting the limit, and mostly, they use the same texture repeatedly in most cases. They can be merged and cleaned up using the ”CATS” add-on, which’ll be linked in another section.
──────────────────────────────────────────────────────

If your model has a lot of "color variation" textures and you want to include them, there’s a chance you might hit the limit — but don’t worry, it can be managed with a few tricks (we’ll dig into those later).

There are other limitations too, but most of them won’t affect you. The main one worth noting is the material limit, which can be a headache if your model is bloated with too many materials (MMD models are a common example). Thankfully, this can usually be fixed by merging materials during the cleanup process.

If you want to dive deeper, you can check out the full list of limitations here[pastebin.com]. Big thanks to Debiddo for putting together the original sheet.

[🗒️ Note ]
》Some modders might mention "Vertices" count limitations, "Bone" count limitations, but this guide will teach you some tricks to bypass them. My friend Jakobg confirmed it by compiling a model with over 3.7M faces, 3.7M vertices, and 11M indices with his compiler. In his calculation, an MDL model can have 44,739,242 unique vertices. Gmod's compiler just sucks enough to compile high-poly models. But I still recommend staying at around 300k most. I've tried going near a million without issues, but... idk. It still works with some crashes.

"Better Than Unreal Engine and Unity Engine.."
— SherlockHolmes9™


❖─────────❖─────────❖
《 🛠️ Required tools 》
Yes, we're going to need these tools and software. Most of them are Essential. But some are Optional. Download them first, and we'll set them up in the next section. We'll be working primarily with Blender for modeling and Notepad++ for editing the QC and Lua files.

We'll also need to install add-ons to use in Blender to help with the processes of working with other model formats.

-- Blender & Addons --

-- Template & Scripts --

-- Modding tools --

-- Misc tools --
  • 📦 Notepad++: A simple text editor.
    Link: notepad-plus-plus.org/downloads
    [🗒️Note ]
    》You can use themes for it or use "Dark mode" to make your eyes comfortable.

  • 📦 GIMP (Optional): Apply mask textures, export PSD to usable + customize textures, and flip the Y channel of normal maps to make them usable in-game.
    Link: https://www.gimp.org/
[🗒️Note ]
》You can use any other Photoshop software for that.

-- Optional tools --

That's all. Make sure you have downloaded the tools and software that are required. You can come back to this section anytime if you missed something!


《 🧰 Setting up 》
Alright, I assume you already have the tools you need.
But you’ll need to set up those tools and add-ons before using them.

I’ll show you how to install the add-ons you downloaded from the previous section and set up the modding tool "Crowbar" to use the compiler from my template and link it with "Garry’s Mod". It’s super easy to do—just follow along.

-- "Installing Blender Add-ons" --

Let me show you how to install Blender add-ons. Scroll down a bit if you know how to install add-ons. Alright, let's start. Nothing hard, It's very easy.

First, open the Blender you installed. If you're opening it for the first time, a "Quick Setup" window will pop up. Set it up however you like—though I recommend "Blender Dark" to save your eyes lol. Then save it.

Now press "Ctrl + ," to open the Preferences window. Go to the "Add-ons" tab.
Click the small arrow in the upper right corner and choose "Install from Disk..."
Find your add-on ZIP file, select it, and click "Install from Disk".
Repeat the same for every add-on you want to install.





-- "What's Crowbar?" --

We all know a crowbar is used to open nailed stuff.
But in the Source Engine world, "Crowbar" is an essential modding tool every modder needs. You'll be required to use this tool every day if you're a modder. Thanks to Zeqmacaw for making this awesome tool. Every modder should thank him for that :P.




So, this tool lets you do tons of stuff:
Compile & decompile models, View models, Publish add-ons, Pack/Unpack contents, and even Download stuff from the workshop. With this tool, your modding life will be wayyy easier. In the old days, you had to write commands in the default tools to do a lot of stuff. Nobody wants to go back to those days.

Crowbar works like a bridge between you and Source Engine tools.
For example, when compiling a model, Crowbar itself doesn’t do the compiling—it runs "studiomdl.exe" from your game’s bin folder (like Gmod or SFM) to compile the model.

Normally, you’d have to type annoying command lines to do that. Crowbar just does it for you with a nice UI. That’s the magic of the tool. There are a lot of things it does. This is just an example for you to know..





-- "Set up Crowbar" --

You’ll need to configure a few things in Crowbar before you can use it properly.

First, open "Crowbar". Click "Set Up Games", then select "Age of Chivalry" and switch it to "Garry’s Mod".

Normally, that’s it—but we’re going a step further.
We’ll make Crowbar use the "SFM Compiler" instead of Gmod’s compiler so we can compile high-poly models without issues.



Most models these days are bloated with high polycounts, and Gmod’s compiler can’t handle them unless you heavily optimize. But we’re not going to settle like a basic modder.
Instead, click "Browse" on the "Model Compiler" path.

Then go into the template folder, open the "SFM Compiler" folder, then "bin", and select "studiomdl.exe". You might ask ”why not use the default SFM’s compiler.?”. The one inside the template is modified to take out the ”Bone weight cull” limit. Don’t confuse it with ”Weights per Vertex limit”. So, It will compile high-poly models without breaking them.





Now Crowbar will use SFM’s compiler instead of Gmod’s.
Next, go to the "Compile" tab and select "Garry's Mod" under the "Game that has the compiler" dropdown.

Then, set the "Output to" path to the "Compiled" folder inside the "Work Folder" that came with the template.
That way, once you compile a model, the files will automatically go into the right folder.






-- "Work Folders" --

Keeping your files organized is a must when modding.
Inside the "Work Folder", you’ll see 3 main folders: "Addon", "Exported", and "Compiled".

──────────────────────────────────────────────────────

Here’s what they’re for:

"Addon" – This is the structure for your final product.
Put your compiled models, converted textures/materials, and Lua files here to use as a Gmod add-on.

"Exported" – After you finish working on your model, you’ll export the files here as DMX.
We'll also use this folder for the proportion trick and editing the QC file later on.

"Compiled" – This is where your compiled models go after using Crowbar.
Later, you’ll copy these into the "Addon" folder to finish the package.



[💡 Tip]
》Always keep your work organized to avoid confusion and more. That's how "Professionals" works. Don't work messily.

──────────────────────────────────────────────────────

All of that comes later—I’m just explaining now so you know what these folders are for and so you keep your workspace "organized & clean".
I’ll cover the other folders in the template as we progress.



-- "Install HLMV++” --

The default "HLMV" is old and kinda trash to use. Instead, we’ll use "HLMV++"—a way better viewer with modern UI, improved graphics, even helps find missing materials and more.

After you download it, you’ll get a ZIP named something like: "hammerplusplus_gmod_buildxxxx". Extract it, open the folder, and copy the "bin" folder. Then open your Gmod local files: Right-click "Garry's Mod" in Steam → "Manage""Browse Local Files". Paste the "bin" folder there.

Done? Not quite.Go back to "Crowbar""Set Up Games" → Set the "Model Viewer" path. Click "Browse", go into the "Win64" folder inside Gmod’s bin directory, and select "hlmv.exe" (HLMV++). You might need to change the file filter to "Executable Files (*.exe)" for it to show up.




And that’s it—you’ve successfully set up everything.
Now buckle up. It’s time to dive into the Blender basics.


《 📦 Blender Basics · I [Learn] 》
Before we dive into working with models, I’d like to teach you some basics. Like I said, this guide isn’t a "click this, do that" type of thing. Instead, I’ll walk you through four core parts that’ll help you get comfortable with Blender and avoid problems while using it.

I learned Blender by myself when I first started modding, but I don’t want you to struggle the same way. You deserve better at the start — no endless searching for tutorials. Everything you need is right here. Just the basics tho.

This section is mainly for beginners, so if you’re already good with Blender, you can skip it. Personally, I’ve spent more hours in Blender than in Garry’s Mod — and that’s saying something, since I’m always modding for Gmod. Go check my profile if you don't believe me.

-- "Basic controls" --

Let's start with basic controls. Everyone who started using Blender might not know how to move around, how to zoom in/out, or a lot of other things. But we'll get to know it soon.
  • Zoom In/Out : Scroll up/down using "Scroll wheel" will zoom in/out.
  • Zoom view : Hold "Ctrl + Scroll wheel" both and moving the mouse up/down will zoom in/out smoothly.
  • Orbit view : Hold "Scroll wheel" while moving the mouse around will rotate the camera.
  • Pan view : Hold "Shift + Scroll wheel" both and moving the mouse around will move the camera without rotating.

🞆 Zoom In/Out : Scroll wheel (Scroll)
🞆 Zoom View : Ctrl + Scroll Wheel (Hold)
🞆 Orbit View : MMB (Hold)
🞆 Pan View : Shift + MMB (Hold)














[ℹ️Info ]
"MMB" is the button you're going to use most while using Blender. You might need to practice a bit to work with it. So, try practicing them first! You should try to remember the keybinds as well.

-- "Movement & Transformation controls" --

Alright, if you're ok, then let's try some basics to move, rotate, or scale your model. You're going to use the "Gizmo" to move around the objects mostly, but you might need to use the keybinds shown below.
  • Move : Press "G" and move your mouse around will move the object.
  • Rotate : Press "R" and move your mouse around will rotate the object.
  • Scale : Press "S" and move your mouse up/down will scale the object.
  • Slow down : Hold "Shift" while using any movement or transformation tools (like Move, Rotate, or Scale) to slow things down and make your actions more accurate and precise.
  • Lock Axis : After pressing a transform key (G, R, or S), press "X, Y, or Z" to lock the transformation to that specific axis.
  • Tool menu : Press "Shift + Space" to open the tool menu. Then, either press a tool’s shortcut key or click on any tool you want to switch to it instantly.

🞆 Move : G
🞆 Rotate : R
🞆 Scale : S
🞆 Slow down : Shift + G/R/S
🞆 Lock Axis : G/R/S + X/Y/Z
🞆 Tool menu : Shift + Space

















[⚠️Warning ]
》Don't accidently press "Shift + Tab". It'll turn on "Snap mode", which will make your movement, rotation, and scaling snap to the target and not be necessary here. So, press the same key again if your movement and other stuff aren't smooth.

[⚠️Warning ]
》Hold "Shift" while using the Move or Rotate tool to move or rotate freely instead of being locked to an axis. If you want to slow down the movement, also hold "Shift" while moving or rotating — but don’t use both at the same time.

-- "General controls" --

Good, you're learning so fast!. Let's try with the keybinds that are also useful for your workflow. Starting with keybinds that can be used in all modes.
  • Add Object : Press "Shift + A" to open the object menu and add objects and other stuff.
  • Side-Panel : Press "N" to open side panel.
  • Select All : Press "A" to select everything in the scene.
  • Deselect All : Press "Alt + A" to deselect everything in the scene.
  • Hide selected : Press "H" to hide the selected objects.
  • Unhide All : Press "Alt + H" to unhide everything.
  • Undo : Press "Ctrl + Z" to undo.
  • Redo : Press "Ctrl + Shift + Z" to redo.
  • Box select : Press "B" to enable box selecting.
  • Circle select : Press "C" to enable circle selecting.
[ℹ️Info ]
Box select & Circle select can be used in three main modes. We'll see in "parts II and III" later for more info.

🞆 Add Object
🞆 Side-Panel

🞆 Select/Deselect All
🞆 Hide/Unhide All
🞆 Undo/Redo
🞆 Box/Circle select

















That's all of the control keybinds for the basic and general stuff. We'll see in "Part II" and learn about the control keybinds for switching modes and keybinds to use in those modes.


《 📦 Blender Basics · II [Learn] 》
Welcome back—this is "Part II" of the Blender Basics. In this section, we’ll continue building your foundational knowledge by covering more essential keybinds used in both "Object Mode" and "Edit Mode".

You’ll also learn about some mode-specific shortcuts that are important for working with different modes. These keybinds will help streamline your workflow as you get more comfortable working in Blender.

-- "Switching mode controls" --

Now, let's try switching modes. There are "Object Mode, Edit Mode, Pose Mode, and Sculpt Mode", but we're only going to use the first 3 modes.
  • Edit Mode : Press "Tab" while an object is selected will switch to "Edit Mode"
  • Pose Mode : Press "Ctrl + Tab" while an armature is selected will switch to "Pose Mode"
  • Mode Pie Menu : Hold "Ctrl + Tab" while an object is selected to open "Mode Pie Menu" to switch between modes and paint modes. Move your cursor to any mode you want to switch to and unhold to switch. It'll instantly switch to "Pose Mode" if you selected a bone.
  • View Shading Pie Menu : Holding "Z" to open the View shading menu. Move your cursor to any mode you want to switch to and unhold to switch to that shading mode.

🞆 Edit Mode
🞆 Pose Mode
🞆 Mode Pie Menu
🞆 Shading Pie Menu
















-- "Object mode specific controls" --

Now with only "Object mode" specific keybinds to use. Not every keybind. Only simple keybinds.
  • Copy Object : Press "Ctrl + C" to copy the object.
  • Paste Object : Press "Ctrl + V" to paste the object.
  • Apply Transform : Press "Ctrl + A" to open the Apply menu to apply location, rotation, scale, or all transforms.
  • Join Objects into one : Press "Ctrl + J" to join/merge selected objects to the last selected object.
  • Rename Object : Press "F2" to open a small rename menu to rename the object.
  • Duplicate Object : Press "Shift + D" to duplicate an object.
  • Delete (Object Mode) : Press "Del" to delete selected objects.

🞆 Copy + Paste
🞆 Apply Transform
🞆 Merge Objects
🞆 Rename Object
🞆 Duplicate Object
🞆 Delete Object


















-- "Edit mode specific controls" --

You're done with some "Object Mode" only keybinds. It's time for some "Edit Mode Only" keybinds!.
  • Delete (Edit Mode) : Press "Del" to open the delete menu only to delete specific vertex, edges, faces, and more.
  • Separate to another Object : Press "P" to open the separate menu. You can select any separation method depending on your needs.
  • Merge Vertex, Faces, or Edges : Press "M" to open the merge menu. You can select any merge method depending on your needs.
  • Vertex select Mode : Press "1" to switch to vertex selecting mode.
  • Edge select Mode : Press "2" to switch to edge selecting mode.
  • Face select Mode : Press "3" to switch to face selecting mode.
  • Select Linked : Press "L" to select any parts of an object hovered by your cursor.
  • Select Linked all : Press "Ctrl + L" while any vertex, faces, or edges selected will select the whole connected object.

🞆 Delete (Edit Mode)
🞆 Separate Vertices, Edges, and Faces.
🞆 Merge Vertices, Edges, and Faces.
🞆 Select Mode
🞆 Select Linked (Hover + L)
🞆 Select Linked All (Ctrl + L)

















Alright! We won't use Pose Mode in this guide except in "Proportion Trick" & "Custom Arms" section. For the final, let's see the modes and shading stuff and see what they do in the last Blender basics section.


《 📦 Blender Basics · III [Learn] 》
There are four modes you can work in with which are "Object Mode, Edit Mode, Sculpt mode, and Pose Mode", and three paint modes, which are "Weight paint, Vertex paint, and Texture paint". We won't be using those paint modes in the guide.

And, also, there are four "View shading" modes. "Wireframe, Solid, Material, and Rendered". We'll only use the first three shading modes. We'll see the main modes first.

-- "Main modes" --
  • Object Mode : This is the default mode when you open Blender. You can "add, select, move, rotate, scale, link, join, or delete entire objects. This mode is used to manage the whole scene, and there's nothing complex about this mode; this is the main mode you're likely going to work with.

  • Edit Mode : This mode lets you change or edit the shape of the meshes. Unlike Object Mode, where you move whole objects, here you're editing the object’s mesh—the stuff it’s made of. You can edit, tweak, transform, or delete individual vertices (Dots), edges(Lines), or faces(Polygons). You'll be using this mode to fix some problems, edit some stuff, or modify some meshes.

  • Pose Mode : This mode is only used in models' "Armature" to pose bones. You can animate the models with this mode by moving, rotating, scaling, and more. We won't use this mode in most cases except "Proportion Trick" as I mentioned above, but it won't be that deep. You won't even need to move a bone in that section..

  • Sculpt Mode : This mode is used to sculpt the meshes. Instead of pushing around tiny vertices like in Edit Mode, here you paint over the mesh with brushes to push, pull, smooth, pinch, or flatten surfaces. It’s mostly used by modellers to shape characters, creatures, clothing, or anything that needs organic, detailed forms. We won't use this mode in this guide.

🞆 Object Mode
🞆 Edit Mode
🞆 Pose Mode
🞆 Sculpt Mode

















[💡Tip ]
》Hey! You can hold "Ctrl + Tab" while an object is selected to switch between those modes.

-- "View shading modes" --
  • Wireframe Mode : This shading mode allows you to see through the objects. It only shows the vertices and edges of the model. We can use this mode if we want to see or select something hidden inside the mesh or model, like an X-ray.

  • Solid Mode : This shading mode is the default mode/ when you open Blender. It displays the mesh in flat shading and basic lighting. There'll be only solid colors. You can't view materials in this mode, but you can still view the textured model in flat shading in this mode.

  • Material Mode : This shading mode previews your materials. It previews textures, shaders, colors, and HDR lighting. You can use this mode to preview how your model looks. It can be slow depending on material counts and shader usage.

🞆 Wireframe shading
🞆 Solid shading
🞆 Material shading
🞆 Rendered shading

















[💡Tip ]
》Do you still remember that you can hold "Z" to switch between modes?

Ok, you're learning so good. Just..One last section and you'll be able to use "Blender" smoothly. Please come along with me to the next section. Don't run away, please.


《 📦 Blender Basics · IV [Learn] 》
Alright, glad you’re here again. By now, we know the basic controls and modes — that’s already enough to start working. But before we move on, I wanna show you a bit more.

You might be asking: "How do I save my progress?", "How do I see my model’s statistics?", or "How do I import the textures for the model I brought in?". Of course, I can’t just leave you running around looking for answers — so let’s cover these.

《 Save Progress 》

To save, press "Ctrl + S". Blender will ask you where to save — just rename "untitled.blend" with the name you want, then click "Save Blender File". Done! You can "Revert" to your saved progress anytime or simply reopen the file.



If you want to recover Blender’s autosave files, press "Win + R" and type "%tmp%" into the Run dialog. A folder will open with random files — you’ll also see autosaves in there. Open one to get back to your last autosaved progress.



You can tweak "Autosave" settings too. Press "Ctrl + ,", then go to "Save & Load". Adjust "Save Versions" to prevent older autosaves from being overwritten. For example, if set to "2", Blender will keep two autosaves and replace only the oldest one each time. You can also raise "Recent Files" to increase the maximum number of autosaves kept.

By default, Blender saves up to "20" autosaves and deletes the oldest ones once the limit is reached. You can also change the "Autosave Timer" if you want autosaves more or less frequently.

[💡Tip]
》I recommend lowering "Recent Files" below "20" if you don’t want your storage bloated with autosaves.



-- "See model's stats" --

You might want to see your model's statistics for bones, vertices, edges, faces, and triangle counts. But how?. Let's see how you can. It's extremely easy. See below.



As you can see, I clicked the arrow beside "Show Overlays" button and ticked "Statistics". And, it started showing the statistics of the model. For the bone count, you'll have to select and press "Tab" while the armature is selected. You'll need to remember the bone count for the upcoming sections.



-- "Import textures" --

If your model is an "FBX". Textures might not be imported, and the model will be dark-white or purple in "Material preview", which'll get you troubled at "Shapekeys" section because you can't see the model's face. Everyone wants to see what their models look like..

If your model format is "VRM or PMX". Textures will be imported along with the model. "MMD" will require fixing the model. Opening ".Blend' will also come with textures as the model's creator has already set it up if available in your model files.
Alright, no more talkie. Read, watch, and learn. You'll be doing this after importing your "FBX" model.



Let's just try to import the texture for this bear. Firstly, I'll select one of my model's parts. Then I'll click the "Material" tab from the right-bottom section (Red ball icon). And then, I'll click the little yellow dot beside the color bar.

A menu will appear. Select "Image texture" from the menu, and it'll show two buttons. "New" and "Open". I already have the model's textures, so I'll click "Open" and browse to my model's texture files and select the texture that fits the most with the selected part's material.
Example as "Smartphone" material from the bear. I'll have to select the texture file for it.

So, I imported "Smartphone.png", which is the correct texture for the bear. I know Bear isn't a smartphone, but it shares the same texture as the smartphone part that you can't see in the GIF. Sometimes, Texture names can be tricky, so try importing until you find the right texture.



There you go. That's how you can import your textures. Import all of your textures and you'll be good to go. It's not necessary in MMD, VRM, and some more model formats that store texture path data inside them, which tells the model where to grab the textures.



That's all for the basics. Learning the basics can feel tricky at first, but with time and practice, it all starts to make sense. Keep going, don’t rush yourself—Blender becomes easier the more you use it. Thank you for taking the time to read these sections!

[🚩Checkpoint ]
》You’ve just hit a checkpoint. Take a rest and come back tomorrow/later, or spend some time with the controls to get used to them. You'll have to ride a long way after this. But I'll be along with you, and I'll guide the controls when needed. So, you don't have to remember them mostly..

Please select the ”Import" sections according to your model's format. MMD, FBX, VRM, etc.
But go to “Open - Blend” if there is a ”.Blend” file in your model files.

“Everything you can import into Blender can be ported into Gmod.”
Jakobg1215, an awesome modder


❖─────────❖─────────❖
《 📂 Open - Blend 》
[ℹ️Info ]
》Only if a “.blend” file is included with your model.

Alright, Easiest section of all sections. And you are lucky if your model comes with ".Blend" file. It's a Blender file that has been set up for ready use, with textures imported and more. And I love those files when I port models.

So, If there’s “.Blend” file that comes along with your model, just open it in Blender. To do that, Open “Blender” first. You'll see a menu called "Splash screen" every time you open Blender. And it'll show your most recently opened ".Blend" files. Click "Open" on the bottom left side of that menu. Locate your ".Blend" file and open it. and that's it, your next section will be "Scaling" section. Awesome!.



《 📥 Importing - FBX 》
[ℹ️Info ]
》Only for "FBX" & ".Unitypackage" formats.

Ok, importing an "FBX" file into Blender is super easy — I’ll show you that later. But first, let’s talk about ".Unitypackage" files. Sometimes a model comes as a ".Unitypackage" instead of plain "FBX". It’s very, very rare, but just in case, I’ll show you how to extract it.

If your model doesn’t have one, just skip this part. But if you ever run into a model that only has a ".Unitypackage", you’ll know what to do.
[💡Tip ]
》Even if your model has FBX, sometimes it’s worth extracting the ".Unitypackage" anyway — there might be textures or extra stuff inside that you wouldn’t want to miss.

-- "Extracting ".Unitypackage" --

I assume you already have the tool I linked above. Go get it if you haven't. Let's start. Firstly, you're going to open that tool. This is the homepage. Nothing special to see. but hey, it's a useful tool to extract ".Unitypackage" files.





Then, click "Locate Unitypackage", browse for your file, select it, and hit "Open". Now click "Start extraction" and wait — it’s usually quick (depends on your system). Once done, hit "View extracted", then the button next to your package’s name, and choose "Open (Selected) Directory". That’s where your extracted ".Unitypackage" folder will be.





Go inside, and you’ll see a bunch of folders. The "FBX" files are usually inside "FBX" or "Models" folders. Grab them and paste them into your main model folder (where the .Unitypackage is), or just make a new folder for them.

But we’re not done yet — when you only have a ".Unitypackage", it often doesn’t include textures (in very rare cases). You’ll need to copy the textures too, usually found in "Textures" or "Tex". If you don’t see those, check inside "Materials" — that’s where they sometimes hide.



[⚠️Warning ]
》Don't confuse with "Materials" and "Textures". Textures are mostly ".PNG" files, and Materials are just ".Mat" files.! *.Mats acts like VMT in Unity..

Alright, that's how you can extract Unity's package files. You'll have to use this tool every time you need to extract the package file that comes with the model files.



-- "Importing FBX into Blender" --

This is child's play, all you gotta do is: Open ”Blender”. Click "File" in the top left corner and then hover your cursor on the “Import”, and you’ll see a bunch of options pop up beside it. Click “FBX (.fbx)” and browse to the location where your model’s FBX is located. Select it and click ”Import FBX”.



Wait, and there you go!. You just successfully imported the model. You might want to hide the model's armature for a better view.. For that, just click the eye icon beside with camera icon of your model's armature. it'll be hidden. Import your model's textures after that. You'll need it sooner.




《 📥 Importing - VRM 》
[ℹ️Info ]
》Only for ".VRM (Vroid)" model format.

Did I say "VRM" models need some extra steps?. not really, MMD does. The only thing you'll need is the "Blender VRM add-on" here!. So, make sure you have already installed the add-on[extensions.blender.org]. Are we good to go?. Then let's start.

-- "Importing VRM" --

This part is just as easy as importing an FBX. Open Blender, click File (top-left), hover over Import, and you’ll see a list of options.

If you’ve installed the VRM add-on, you’ll see VRM (.vrm) and VRMA (.vrma). Click VRM (.vrm), then browse to your model’s .VRM file, select it, and hit Open.

Want to extract textures too? Just tick ✓ "Extract texture images into the folder". After import, the textures will show up inside your model’s folder. Keep in mind: extracting textures takes a bit longer. Skip it if your model already includes textures. (See below!)





After importing the model, you're going to see messy stuff. mostly, "Colliders".. They might be useful in "VRoid" but not in Gmod.

To remove them, right-click the collection with a white box icon named "Colliders" and then click "Delete Hierarchy". And you might want to hide the armature to get a better view of your model in Blender. Just click the eye icon beside with camera icon of your model's armature.



There we go, now. I can see the model in clear view!. Oh wait, it's "Selestia"... Anyway, that's how we import ".VRM" into Blender.


《 📥 Importing - MMD 》
[ℹ️Info ]
》Only for ".PMX (MMD)" model format.

Owie, importing MMD models. It’s easy—only the fixing part can be a bit frustrating, but it’s mostly one-click stuff. Anyway, make sure you installed this add-on[github.com]. That add-on helps you fix some issues and even assists in other situations.
Okay, let’s do this.

-- "Importing PMX" --

Importing every model format is just child's play if you know how.
Open "Blender". Yes, you're going to work inside Blender. That’s why I keep repeating this in every import section.

Press "N" on your keyboard. A panel will pop out from the right side. Click "CATS", then "Quick Access", and then click the small button beside "Import Model".A small panel will appear asking you to choose a model type... click "MMD". Ignore the others. and, Browse to your ".PMX" file.





Before you import, Set "Scale" to "0.65". Tick ✓ "Clean Model", "Remove Doubles", and "Fix IK Links". The last two are optional—check or leave them.

Also, set "Internal Dictionary" under the "Rename Bones" option if you don’t wanna deal with foreign language bone names :).
Once that’s done, click "Import Model File".



Your model will be imported. Now let’s clean + fix it using the add-on we installed.
It’s a one-click fix—no stress, no complicated steps.



-- "Fixing the model" --

[⚠️Warning ]
》Not all MMD models will work perfectly and may cause issues—but that’s extremely rare.

Alright, let’s start fixing the model. It’s super easy.
First, Zoom in till you can see your model, and then we need to make the model a "Single User". No clue what it does exactly, but it’s required before the fix by default.

To do that, press "A" on your keyboard to select everything.
Then press "F3", type "Make Single User", and click on "Make Single User ‣ Object & Data".





Now we’ll fix the model. In the "CATS" panel, scroll down until you see "MMD Options".
Click the dropdown. There it is—"Fix MMD Model" button! But before that, go into "Edit Mode". Select your model’s armature, press "Tab", and click anywhere to deselect everything just in case.

Now in "Edit Mode", click the "Fix MMD Model" button.
A warning will pop up—click "OK". It just says to only use this on MMD models. Wait a bit… and then BAM! Done.



So, what does it fix? It’ll reparent some bones, remove unnecessary bones, translate and rename bones, merge some weights, fix the hips, convert morphs into shapekeys, and more.

And that’s it. Your model is now fixed and ready.
In very, very rare cases, fixing the model may mess up the arm bone weights.
I’ll try to figure out a fix for that soon.


《 📏 Scaling 》
So, scaling. Why? Because the Source Engine uses different measurements compared to other engines. That means we’ll have to scale up our model to fit properly with Gmod’s scale.

I’ve already included three reference models in the template to help you resize. But you can also skip that and directly use the conversion scale I reverse-engineered and calculated.



Here’s how I got it: when matching a Unity model with a Source model using the correct math, the Unity one always comes out super tiny. So, I reverse-engineered the scale by taking Source’s Male_07 and a Unity model, scaling them together, and matching the Unity version to Source’s size. That’s how I nailed down the conversion scale. Solid plan, right?

Alright, you have two ways to scale up your model. You can scale up instantly with the direct conversion scale I calculated. It's fast and easy. Mostly accurate for "Unity" models. Or, you can import any references I put in my template and scale up as you want. You can go ahead and scale up as needed by referring to the reference model.

[⚠️Warning]
》The direct conversion method might not be correct for some models. You can still scale up to the desired scale, even if you used the direct conversion method. Try to mix both methods if needed!



-- "Scaling (Direct conversion method)" --

Ok, an easy and accurate method. First, make sure your armature is "unhid". If you hid it earlier, click the eye icon to unhide it—otherwise, it won’t scale with your model.

Now press "A" to select everything, then press "S". (Don’t touch your mouse after pressing "S" or it’ll scale depending on cursor's movement. Type "52.4798" or paste it, and your model will scale perfectly to Gmod’s size from Unity or VRoid's scale.

This matches the exact Source scale. If you think it looks too large, you can scale it down slightly, but it’ll always remain true to the correct conversion. Finally, press "Ctrl + A", pick "All Transforms", and lock in the scale.

[⚠️Very Important ]
》Never forget to apply the transforms every time you move, rotate, or scale anything! Otherwise, your model's scale will be reset. This is crucial for your entire modding process.


[💡Tip ]
》Copy the scale value and paste it somewhere you can easily access. You might need it in future model ports!.



-- "Scaling (Scale using Reference)" --

Use this method if the direct method is not effective. First, you’ll need to import the reference models from my template. To do that, click "File", then hover your cursor over "Import". From the list, select "Source Engine (.smd, .vta, .dmx, .qc)".

Now, browse to the "Size reference" folder inside my template. There, you’ll see three reference models: "Male, Female, and Chibi". Choose the one that best matches your model. Before importing, make sure to check the "Bone append" option, then select "Make new armature".

Once that’s set, click "Import SMD/VTA, D..".





The reference model will be imported. You'll see that your model is very tiny compared to the reference model. So, you gotta scale your model as well. Scroll down with your middle mouse button. Hide the reference model by clicking the eye icon beside it in the "Outliner (Panel on the right side)" on the right. Press "A" on your keyboard. Everything will be selected except the reference. Unhide the reference model. Put your cursor in the middle of your model.

Your cursor shouldn't be under the main grid lines. See example below. Then, Press "S" on your keyboard. Move your mouse up until it matches the height, or you can scale up to any height you prefer.

[ℹ️Info ]
》1 meter in Blender = 1 inch in Source. The default Gmod model height is almost 71.801m.



After that, Press "Ctrl + A" on your keyboard, and a small menu will pop up. Click "All transforms". Your scale will be applied. Never forget to apply the transforms! Otherwise, your model's scale will be reset.

Now, you can go to the next section.
I keep warning this because almost everyone forgets this small step and gets their work ruined..



-- "Snap model to ground" --

It's rare, but making sure the model won't float in-game. Sometimes, after you scale. Your model might be a bit floating from the grid line. Rare, but we should check it. Here is an example of a model's shoes floating from the grid line. So, check if it's floating.





Let’s snap the model perfectly to the ground. First, we’ll create a "Plane" mesh as a guide. Press "Shift + A", hover over "Mesh", and select "Plane". A small plane will appear—select it, press "S", and move your mouse upward until it becomes a large flat surface.

Next, select all parts of your model, including the Armature, either from the "Outliner" or by pressing "A", then deselect the plane by holding "Shift" and clicking it. Move your camera below the plane, grab the blue arrow from the "Gizmo", and drag the model downward until the feet or shoes clip through the plane—hold "Shift" while moving for extra precision.

Once they clip, nudge the model slightly upward until it rests perfectly on top of the plane, then apply "All transforms (Ctrl + A)" to lock everything in place. I didn’t use "G + Z" here because it can feel a bit awkward for beginners.



[💡Tip ]
》Hold "Shift" to slow down movement for more precision and more accuracy.

That's it. You should never forget to apply the transforms when moving, rotating, or scaling in "Blender" because it doesn't save itself. So, be careful with it in future model ports. You can come back to this section even if you forgot to apply transforms after scaling.


《 🔤 Bone Rename 》
Source Engine uses a bone structure that uses "Valvebiped" in names. Unlike other engines. You'll be going to rename the bones using a script I provided. The script is made by one of my old friends, but I added common bones that models use for faster renaming.





-- "Preparing for rename" --

Assuming "Blender" is still open, click "Scripting" next to "Geometry Nodes" to switch workspaces. First, check your armature’s bone names to choose the best script for your model. For "MMD" models, you can skip expanding the bones as names are already standardized.





To see the bones, click the small arrow beside the stickman icon of "Armature" to expand it—you’ll see the model’s parts and armature. Then, click the arrow beside the green stickman icon to reveal the main root bone, usually "Hips" in most models. Expand "Hips" to see the main bones like "Spine", UpperLeg (L & R), and most bones for clothing and body parts (skirt, tail, etc.). Then expand "Spine", "Chest", and "Neck" to see more bones, including "Neck", Shoulder (L & R), accessories’ bones, and others. See example below.

Now, you'll be expanded enough to see the main root bones, which are;
  • Hips
  • Spine
  • Chest
  • Neck
  • Head
  • Shoulder (L/R)
  • UpperLeg (L/R)
[ℹ️Info ]
》Main bones are lined with green.





You'll need to expand through "UpperLeg and Shoulder" until you reach the end, where "Toe" for leg bones. All of the fingers for the arm bones. I know you're very confused right now at the expanding part, but see the example below!

[💡Tip ]
》You don't need to expand for both sides, as you can already know if the left bone ends with ".L" or anything that tells you that's the left bone. You can already guess the right side bones end with ".R". Common side names: .L / .R, _L / _R, and _Left & _Right

Here are examples of how you should expand the bones for the "Shoulder" and "Leg" bones.





[⚠️Warning ]
》As I mentioned before, Bone names can be different depending on the model's author.

Good, now you can see all of the main bones' names!. We can now select the script that best suits our model. We're going to open the script file by clicking "Open". Browse into "Bone rename script" folder and you'll see "6" scripts.

Only one will be used, depending on your model armature's bone names, for a faster process. Scripts only provided the most common bone names used in models. Every bone name provided in the scripts won't be correct in every model due to different bone names. except "Neck", "Head", "Hips", "Spine", and "Chest". Just see the scripts for now.



-- "Select & Run script" --

You'll have to select one script from the folder. I'll tell you what the differences are in those scripts.
  • Script 1 : Configured with the most common bone names.
    [ℹ️Info ]
    》Used underscores in shoulder and leg bones.



    ⮕ This script can be used in most models to easily and instantly rename bones. Rename some of the bones in the script if your model bones are a bit different. but see below for more.

  • Script 2 : Another configured script with common bone names.
    [ℹ️Info ]
    》Used underscores in shoulder and leg bones. except finger bone names are more simplified, and L/R are small letters. Capitalize if needed.



    ⮕ This script can be used in most models, but a bit rarer than the first one. Rename some of the bones in the script if needed. Or see below.

  • Script 3 : Almost the same as script 1, but a bit different.
    [ℹ️Info ]
    》Used dots instead of underscores except upperleg and lowerleg. Have spaces in finger bone names. Can remove spaces if needed.



    ⮕ This script can be used in some models that use dots in bone names instead of underscores. Rename some of the bones if needed. Or see below.


  • Script 4 : Least common but still used bone names.
    [ℹ️Info ]
    》Used "Left/Right" instead of "L/R" in bone names except finger bone names.



    ⮕ This script can be used in some models that use the "Left & Right" system instead of the "L/R" system. Rare, but it's still used.

[⚠️Warning ]
All 4 scripts won't be perfect always, you'll still need to rename some bones in the script if the bone names are different.!


  • Script 5 : MMD bone renaming script. Work for every fixed MMD model.
    [ℹ️Info ]
    》Used after fixing the model with an add-on.



    ⮕ This script will "instantly" rename fixed models. Bone names will be the same from this script after fixing the model, as the add-on renames the bones the same for every MMD model.


After seeing all the scripts, open the script that fits the most with your model's bone names, with the bone names inside the script. Don't worry if some bone names don't match. We'll edit the unmatched bone names. For now, just pick the one that you think fits the model most.

Here are the main bones you're going to rename.




Bones shown except from that image don't need to be renamed. Example as extra toe bones. Only one toe bone is used in "Gmod". But, just to know. this is just a reference. All you need to know is the main bones' structure. How they're built and where they're located. See the table below for the common main bones.






Alright, you'll have to edit the bone names from the script if not matched. To do that, simply double-click the bone name and press "Ctrl + C". Then, select the bone name you want to replace in the script and press "Ctrl + V".





[⚠️Warning ]
》Try to be careful with replacing the bone names. Make sure to only select the bone name between the quotations. The yellow texts will turn to "white" if you accidentally replace and remove the quotation. Press "Ctrl + Z" if that happens!.

So, make sure all of the main bones' names from the script are matched with your model's main bones' names. When you're sure. Simply click the small icon that looks like a "play" button and the script will run.



That's it!. We are done with this section now. That was a bit tricky but easy. Right?. It might be hard or time-consuming in some situations where your model bone names don't match with bone names from all scripts.


❖─────────❖─────────❖
《 😶 Shapekeys · I 》
So, what are "Shapekeys"? They’re mesh deformations used for "Facial expressions", "Morphs", "Mesh animations", and more. With shapekeys, you can make your character "Smile", "Blink", "Cry", or perform nearly any facial movement. In GMod, you use the "Face Poser" tool to pose a model’s face, but it only works if the model has shapekeys (also called flexes). More shapekeys = more posing options. No shapekeys = no face posing.

Keep in mind, Garry’s Mod has a "96" shapekey limit. Many modern models exceed that, but you’re lucky if your model is an MMD or otherwise has fewer than 96 shapekeys.





-- "Check shapekey counts" --

First, you should know how to see your model's shapekeys count. It's an easy thing to do. Look for the icon that looks like a little cone, sphere, and a light all grouped. It's called "Scene". Click it and you will see "Source Engine Exportable". Click it and you'll see a list of your model's parts along with numbers if there are shapekeys in that mesh.

[⚠️Warning]
》It will only show “Collection.dmx” or won’t show anything in the ”Source Engine Exportable” section if there’s a collection. Check if there’s a collection (white box icon) in the outliner. It should be on top, named “Collection”. Simply select it and delete it.



It's so joever for me.. 💀 Yes, it's painful to see those numbers, but if you're lucky, you'll meet with a low amount of numbers. The upcoming parts will teach you how to handle large numbers of shapekeys. We don't need all of the shapekeys, such as morph shapekeys and some extra shapekeys.



-- "Shapekey basics --

First, select any part of your model that has shapekeys. Click the "Data" button above "Materials", and you’ll see "Shape Keys" there. "Shape Keys+" if you installed the "Shape Keys+" addon. Open the dropdown to view all shapekeys for the selected part. Names can vary depending on the creator, sometimes even in "Japanese", though that’s rare except in MMD models.

You can preview each shapekey by clicking the "Shape Key Lock" button (pin icon), or you can adjust using the "Value" slider from 0.000 to 1.000. You might even want to rename them by previewing them and renaming to "ENG" names—I’ll show you how in Part IV.







You can increase the default limit by changing the "Range" options. Set the "Max" to 2.000 if you want the shapekey to be adjustable to 2.000 maximum. You can go more or less. Same as "Min" to adjust to minus values. Only if you need more than 1.000 or it can do some unexpected results, and should not be used for every shapekey.



[ℹ️Info ]
》Blender uses "decimals" instead of percentages, unlike Unity & Vroid. MMD uses values between "0.0 - 1.0". If you want to convert the shapekeys values to Blender. For example, as Unity, you'll need to divide the value by 100. It'll be 0.250 in Blender if it's 25 in Unity. It's simple math.

Starting from here, you can completely skip to part IV if your model has fewer than "96" shapekeys. Lucky.. You're welcome to "Part II" and "Part III" if not..



-- "Dealing with shapekeys" --

[💡Tip ]
》You can do this part after "Proportion trick" section if you're willing to keep your shapekeys until you compile the model. So, you can redo this part without doing the proportion trick again if you want to customize shapekeys after compiling.

You can skip to "Part IV" or [/b]"Export Model"[/b]. If your model has fewer than "96" shapekeys in all of the meshes. So, it's fine when the model's head has 80 shapekeys and other parts have 16 shapekeys. So, just a warning. This section is one of the most frustrating parts and gets difficult as if the model has a lot of shapekeys. Fewer shapekeys = fewer headaches. We'll start with shapekeys inside the other meshes and leave the head/face for now.





[💡Tip ]
Don't do anything now. Only read.
  • Base body : Model's main body.
    ⤷ You can skip this if there aren’t any shapekeys in the body mesh. Most models will have some, including morph shapekeys and others used to make clothing fit the body. You can adjust or remove the morph shapekeys, but be careful—some shapekeys are necessary to keep clothing aligned and fitted properly. See an example below.





As you can see, I had to use a shape key to avoid clipping the bust with the clothing. Most models use shapekeys like "Heels_On, Shrink_*** or "Apron ON" type of shapekeys to avoid clipping and fit with the clothing or shoes/heels. In some models that come with ".Blend" file, those types of shapekeys will be adjusted to 1.000 by the model creator. They won't be adjusted normally.

You can apply those shapekeys to the default basis and create a revert shapekey to use when you turn off those parts in-game to avoid problems.

To apply them, click the dropdown arrow under the minus button and click "New Shape from Mix". If you have "Shape Keys+", hold down the plus button with the left mouse button and click "New Shape From Mix". It'll create a shape key that mixes all of those adjusted shape keys.

For applying it to the basis, select the mixed shapekey, click the dropdown, and click "Apply Selected Shapekey to Basis". Wait a bit and bam. It'll be applied and also create a revert shapekey to revert to the original and keep that revert shapekey.
[⚠️Warning]
》You will need to turn off "Shape keys+" addon for "Apply Selected Shapekey to Basis" button to show up.



  • Hair : Model's front hair, back hair, twintails, and more.
    ⤷ Hair can also have shapekeys, mostly to customize the hairstyle. You’ll find shapekeys to adjust or style the hair as you like. You can keep or remove them, but shapekeys that move or hide parts often won’t work well in the final model. For example, "Twintail Hide" shrinks and moves the twintail into the model’s head as a hidden part. Some of those shapekeys will be bugged or don't work properly due to some limitations, but it's rare.




So, I can apply this as a default or keep the customization shapekeys, or remove them to save for face shapekeys. I don't usually use hair customization shapekeys as I prefer face shapekeys for 96 shapekeys. Again, you can do after "Proportion trick" if you want to customize again after compiling the model.
  • Others : Model's clothing, accessories, and more.
    ⤷ There can be some shape keys used for fitting with the body in clothing. So, watch out for them. Shapekeys from accessories can be kept or removed. There can be some special shapekeys like this one.



It changes the stocking's appearance depending on shapekey options. So, it's all yours. Alright, we'll be back for face in part II of the shapekey section. Only read for now.


《 😶 Shapekeys · II 》
Balancing shapekeys for the "face/head" is the toughest part. You might want hundreds of expressions for posing in GMod, but sadly, GMod said "No". I even requested an extension here[github.com]. For now, we just have to deal with it. I can’t give exact instructions, but I can share some tips and tricks—so brace yourself and stay sharp for this part.

-- "Main tips to balance shapekeys" --
  • Remove duplicated or almost the same shapekeys.
    - Some shapekeys can have almost the same effect or be unnoticeable. Example below.




Call me "Blind" if you can, but I don't see any difference between those two shapekeys. So, I can remove it to save for more shapekeys. Look out for the shape keys like those.
  • Try to keep the main shapekeys only for the most shapekeys.
    - Most expressions come with three types: Main, Left, and Right. For most shapekeys, you only need to keep the Main one and can safely remove the "L & R" versions. I usually only keep L & R for "Blink" and "Eye Happy/Joy". Other eye shapekeys like "Eye Sad, Eye Calm, Eye Angry," etc., with L/R, aren’t commonly used—but you can keep them if you want extra control.
    [💡Tip ]
    》In some models, only L/R is available. You can mix L/R by setting 1.000 to both and use "New Shapekey from Mix".



  • Remove unnecessary shapekeys from specific models.
    -If you’re porting a VRC model, you’ll see shapekeys named "vrc."—these are for lip sync and basic facial expressions. You can remove them since the main shapekeys already handle these functions. Examples include "vrc.blink" versus "Blink". Also, remove the "MMD" shapekeys, usually located at the bottom of the shapekey list on those models.





  • Mix shapekeys that use a lot of shapekeys for the full effect.
    - Sometimes you might want to save shapekeys but can’t afford to keep them all due to the limit. For example, shapekeys like "Tears1, Tears2, Tears3" are designed to work together for the full effect, but the creator separated them to allow more customization. To save shapekey slots, you can mix them—but don’t merge everything at once. Preview each effect first; otherwise, it can look terrible, and some shapekeys may need to be deleted. See example below..


I removed "extratear1" since it’s just a smaller version of "extratear2". Then I mixed "extratear2" and "extratear4" into a single "extratear", which works without looking bad. After that, I renamed "extratear3" to "extratear2" since the other two shapekeys were deleted. It sounds a bit weird, but it works. Use your judgment to mix, delete, or tweak shapekeys to balance them. I’ll explain facial expression types in the next part.


《 😶 Shapekeys · III 》
Now, let’s talk about handling different types of expressions like "Eye, Eyebrow, Mouth," etc. You don’t have to follow exactly what I say—you can decide which shapekeys to delete or keep to balance them.

I recommend keeping only the shapekeys useful for posing the face, like "Eye Joy," "Eyelid Up/Down," "Eyebrow Smile," "Highlights Big," "Pupil Heart," "Mouth A," and similar. Shapekeys ending with "X" mean "OFF". Preview each shapekey before removing—if it’s not useful, delete it. Remember, names can vary depending on the creator, so i]let’s put our brains to work, shall we?[/i]

-- "Dealing with types of expressions" --
  • Eye shapekeys : "Eye blink, Eye joy, Eye jitome, Eye angry, etc."
    • You can keep almost every "Eye" shapekeys as they're very useful at posing. But, you can remove "L/R" variants if you're willing to save for other shapekeys.


  • Eyelid shapekeys : “Eyelid upperdown, Eyelid downUp, etc."
    • You can keep basic "Eyelid" shapekeys such as "Eyelid up/down, Eyelid Center up/down, Eyelid Inner up/down, etc.". You can remove "Eyelid Innersharp, Eyelid innerwide, Eyelid cornerlong, Eyelid thick, etc and any eyelid shapekeys ends with an "x". Not necessary for normal face posing.


  • Eyebrow shapekeys : "Brow up, Brow down, Brow happy, etc."
    • You can keep almost every "Brow/Eyebrow" type of shapekeys. Same as "Eye" shapekeys, you can remove "L/R" variants. Can remove some brow shapekeys such as "Brow Front, Brow Back, Brow Sharp, etc. shapekeys.


  • Eyelash shapekeys : "Eyelash1 big, Eyelash1 x, Lowereyelash2 short, etc."
    • You can remove almost every "Eyelash" as they're mostly customization shapekeys. Not necessary for face posing. You can keep some if you want to..


  • Highlight shapekeys : “Highlights big, Highlights heart, etc."
    • You can keep most of "Highlights" shapekeys as they're good to use. Even some toggle shapekeys can be useful. shapekeys ends with an X. Balance some if you want, or keep all.


  • Pupil shapekeys : “Pupil small/big, Pupil Big, etc."
    • You can keep most of "Pupil" shapekeys. Mostly shapekeys such as "Pupil Heart, Pupil Star, Pupil Cat, etc.". Or try to balance. Can remove some size adjustment shapekeys.


  • Mouth shapekeys : "Mouth A, U, E, Wa, etc."
    • Mouth shapekeys are the same as "Eye" shapekeys. They're one of the most useful shapekeys for posing the face. You might not be able to remove a lot of Mouth shapekeys..They're so good. except L/R shapekeys. Example as "Mouth Smile (L/R)". You can remove them. In some models, there can be "notooth and tooth" variations. Example as "Mouth Watooth" and "Mouth Wa". You can preview and try to balance those shapekeys.


  • Teeth shapekeys : “Tooth yaeba, Tooth giza, Tooth x, etc."
    • You can remove most of "Tooth" shapekeys except "Tooth Yaeba or Tooth Giza" shapekeys. They're good shapekeys. Y'know, Canine teeth in anime girls?. That's "Yaeba". and "Giza" is for shark teeth. I've never watched any anime, but I get to know from porting models..


  • Morph shapekeys : "Face Adult, Face Eyesmall, Jaw long, etc."
    • You can remove all of the "Morph" shapekeys as they're not necessary. They're only for making custom edits. Except some special ones like "Face Adult, Face Young, etc."


  • MMD shapekeys : Very Obvious and have JP names.
    [⚠️Warning]
    》Not for MMD models.
    • You can remove all of them. They'll be just a duplicate version of existing shapekeys. Nothing special about this.


  • Preset shapekeys : “Expression Happy”, etc.
    • You can keep most of them. They're preconfigured presets and very useful. Nothing special about this.


  • Effect/Option shapekeys : “Effect Blush, Option Tears"
    • You can keep all of them. You should know that those shapekeys need to be set up as alpha textures to make them work properly. They'll be just floating objects in "Blender". Example as "Effect Blush". It'll be just a floating pink object on the face when used, but trust me, you should keep them. They just need alpha, and we'll set them up sooner.



That's all. There can be more types of expressions I didn't mention here, but it's all yours. Remove or keep as you want to. Also, keep an eye on the shapekey count. After dealing with shapekeys, we can export the model and prepare for "Proportion trick" now.


《 😶 Shapekeys · IV [Optional] 》
[🗒️Note ]
》Completely optional if you don't want to spend your time renaming shapekeys.

This part will teach you how to rename shapekeys with clearer names. You can skip this if you want to keep the model’s default names, or rename them if you prefer. You don’t have to follow my suggestions exactly—do what works for you. To rename, just double-click the shapekey’s name.



If shapekeys are in "JP" names, preview them first and rename appropriately. For example, eye shapekeys like "eyejitome," "eyehappy," "eyesad" can become "Eye Jitome," "Eye Happy," and "Eye Sad" for clarity. The same applies to other shapekeys—"moutha" can be "Mouth A" for easier reading. I’ll provide examples for each type of expression next.



-- "Rename shapekeys" --

[⚠️Warning]
》Rename shapekeys after removing and balancing shapekeys. otherwise, it'll be a waste of time renaming all of the shapekeys.
  • Eye shapekeys
    🞄 eyestareEye Stare
    🞄 eyeangryEye Angry
    (or)
    🞄 eyeblinkBlink eyes
    🞄 eyejoyJoy eyes
    or more..



[💡Tip ]
》Rename any shapekeys as you want, but rename the blink shapekeys as 'Blink" to have blink animation while idling.
  • "Eyelid shapekeys"
    🞄 eyelid downupEyelid DownUp
    (or)
    🞄 eyedownlid up Downlid up
    or more..


  • "Highlight shapekeys"
    🞄 highlight1bigHighlight 1Big
    (or)
    🞄 highlight 2smallSmall highlights
    or more..


  • "Pupil shapekeys"
    🞄 pupil catPupil Cat/Neko
    (or)
    🞄 pupil bigBig pupils
    or more..


  • "Mouth shapekeys"
    🞄 mouthaMouth A
    🞄 mouthiMouth I
    (or)
    🞄 mouthwaWa mouth
    or more..


  • "Effect/Option shapekeys"
    🞄 effectblushEffect Blush
    🞄 option cryOption Cry
    (or)
    🞄 effect palePale Effect
    or more..



That's all of the examples I can give. I know I didn't mention some types of facial expressions from Part III, but they'll follow the same rule as the above ones.. That's all for shapekeys. Good luck!. When you're done, you may proceed to the next section.


《 👕 Custom bodygroups [Optional] 》
What are "Bodygroups"? They’re sets of meshes you can toggle on/off or swap entirely. If you’ve played with models in GMod, you’ve probably seen the "Bodygroups" button in the context menu. It lets you turn parts on or off—like helmets, accessories, or outfits. And yes, we can set them up ourselves in "Blender" for our custom models.



Many models already have separate parts ready to use as "Bodygroups". But for "MMD" and some other models, it’s different—they often come as a single solid mesh with no extra parts. No worries—we can manually separate pieces and turn them into bodygroups ourselves. You can even split one part into multiple bodygroups. There are two ways to do this: an easy one-click method and a manual method. Let’s start with the easy one first.

-- "Separation Method · I " --

What do we need here? Just the "CATS" addon. Using it, we can separate parts by "Materials". Press "N" to open the "Side-panel", click "CATS," then go to "Other options". You’ll see the "Separate by" settings.

[💡Tip ]
》You can hold and drag the panel’s side to make it wider[/i].




There are "3" methods to separate parts, but we’ll only use "Materials" here. Using "Loose parts" can split the model into hundreds of pieces based on vertices, edges, and faces—not practical. And "Shapes" won’t work for most models. Only "Materials" reliably separates parts.

For example, a stickman model with 2 textures—"Face" and "Body"—will be split into 2 parts using "Materials": one part for "Face" and one for "Body". Click it, and the model will separate based on materials.



After separation, you may want to merge some parts—like "Expressions" and "Face". Select the part to merge, then the target part, and press "Ctrl + J". You can also rename the parts.



-- "Separation Method · II" --

Alright, let’s try a more hands-on method—this time, you’ll do the separating. Don’t worry, it’s not hard; it’s mostly just picking vertices and splitting them off. First, jump into "Edit Mode" by selecting your model (or a part of it) and pressing "Tab". Every vertex will be selected at first—that’s normal. Click anywhere in the viewport or press "Alt + A" to deselect everything.

Now, select the part you want to separate—let’s say the hair. Click one of its vertices, then press "Ctrl + L" to select the whole connected mesh. If the hair has multiple mesh islands, repeat until the entire piece is selected.

[💡Tip ]
》You can also hover your cursor on the vertices and press "L" to select the linked parts.

Once you’ve selected the full part you want, you're ready to separate it. Press "P". A small menu will pop up. Click "Selection" from the menu. There we go. Rename that separated part and keep repeating until you have separated the parts you want to. See below.



Please, don't hate me for using a furry model for this GIF. I just don't know which one I should use for this GIF 💀.

Anyway, that's how you make custom bodygroups. They're not bodygroups for now, but will be as bodygroups soon. You can do many body groups as you want, but I know you won't hit "255" bodygroups..


《 📤 Export model 》
Exporting a model is very easy, but I do have some points to mention regarding the export process. This section will be very, very short. Just follow along and read the explanations carefully.

-- "Export settings" --

Oh ya, you don't know how to export the model yet. Right?. Let me show you how. Click the "Scene". The same button you used to click when you checked the shape key count. You'll see "Source Engine Export".





There'll be export settings you'll need to edit or adjust before you export your model to get the right result and correct file format. But first, before you touch something. Let me explain what those settings are for.




  • Export Path : it's very obvious what "Export path" does. You can click the folder icon beside the blank and select any path to export your model.

  • Export Format : As I've explained in "File format". There are two different options. "SMD and DMX. But, we'll use "DMX" here. Nobody would want to use "SMD" after reading about it. By default, it'll be "SMD" always. You'll have to click 'DMX" every time you export a model.

  • Target Up Axis : I've never used that option, but it's used for compatibility with models in different Source games. Examples such as TF2, Every TF2 PM is always Y up. You don't need to touch these options. it's fine as it's in Gmod.

  • Engine Path : Same as above, I've never touched that option. It's only for compiling models inside Blender by calling out tools from Gmod's bin folder. But, we're going to "Crowbar" to compile our model and "HLMV" to view models.

  • DMX Version : Version of DMX files. Garry’s Mod supports: Binary version 1-2 and Model version 1. Don’t need to touch them. Use Binary “2” if it’s set to “1” for a lower file size.

  • Material path : Not useful and necessary. might be same function ad ”$cdmaterial” command in QC.

  • Weight Link Cull Threshold : A slider to use when the model has more than a vertex linked to more than 3 weights. I'll explain how to use it later.
──────────────────────────────────────────────────────

That's all of the settings in the "Source Engine Export" tab. So, you can easily know how you export your model now. But you'll need to know some stuff before you export your model. They're important and make sure to save your "Blender file" before you export. Just in case, Something might go wrong!.


-- "Export Model" --
  • Before you export your model, make sure you don't have any collections (White box icon) with your model's parts. it'll export only one file named "Collection.dmx" when you export your model, and it'll cause errors and fail to import when you import it again. So, make sure you don't have any collections when you export.




It'll show like this in "Source Engine Exportables", if there are any collections. So, double-check before you export your model. Just press "Del" on your keyboard while collection is selected to delete it.





  • Apply "All transforms" to make sure you applied the transforms. You might have forgotten to apply transforms after scaling up, and it'll show some errors if you haven't applied them yet. Just making sure, I know you already applied while following the instructions in my guide, but you should be careful about this.


  • Set the "Weight Link Cull Threshold" slider to "1.00". This step is a "must", because the Source Engine only supports "3 weight links per vertex". Modern models usually go beyond that—Unity, Unreal, Godot, and even Source 2 allow "4 weight links per vertex". If you leave it as-is, you can still export, but when compiling for Source 1, you’ll run into warnings and failed compiles.

    So, just swipe the slider or double-click it and type "1.00". That will cull everything down to "3" weights per vertex. While it might cause small issues in rare cases, it’s way safer for compiling in Source, and 99% of the time you’ll be fine.

[🗒️ Note ]
》There’s another limit you should know about: by default, "StudioMDL" will ignore any bone weights below 0.05 (5%). If a vertex has a tiny weight link under that, it just gets wiped—sometimes causing weird deformations on the model.

That’s why I included the SFM compiler with the template. I modded SFM’s "StudioMDL" to use CSGO’s lower limit (0.0001), which almost completely removes this restriction. This way, you don’t need to install "SFM" separately.





You're ready to export your model. Set "Export path" by clicking the "Folder" icon beside it. Export your model files into the "Exported" folder inside the template folder. Make sure "Model format" is "DMX". When you export, it'll show two options. "Selected export" or "Scene Export".

The first one will export only selected meshes, and the second one will export everything in the scene. Use "Selected Export" when you only need the selected meshes and "Scene Export" for most exports.



That's all for this section. We can hop into another section now, which is "Proportion Trick". You may close "Blender" as well. We'll have to use a ".Blend" file for the script. So, we don't need our scene now. Save your progress here if you want to..

[🚩Checkpoint ]
》You just hit another "Checkpoint". Go take a rest, drink, or eat something. Go outside, take a deep breath, and feel free to make yourself comfortable after working for hours. This is always my checkpoint after working for hours.

"I'm a survivor, infected with modding virus."
-- K1CHWA


《 📐 Proportion Trick · I 》
Alright, you're probably wondering about the "Proportion Trick" thing. You might ask "What the hell is that? and Why do I need to do it?", I'll explain what I can in a way you can understand.

So, Source’s animation system doesn’t just rotate bones—it also moves them around (translation + rotation). In other words, every animation tells the bones where to be and how to rotate, not just how to twist in place.

Because of that, the actual size of your model doesn’t matter. What matters is the proportions baked into the animation itself. So, if your custom model is tall, short, chunky, or skinny, Source will still force it to follow the animation’s proportions.



















The model on the left side doesn't have "Proportion Trick", and the right side one has. You can see how the model without the proportion trick got stretched.

Luckily, we do have a script for it called "Proportion Trick". It's a gold for custom models to fit them with Gmod's animations without having issues. Now, you know why we have to do this.

-- "Import model files" --

Let’s get started. I’m sure you’ve already downloaded the script[github.com]. First, unzip it and go inside the folder until you see the ".blend" files. You’ll find 3 of them, but the only one you need is the "2.9" one.

[⚠️Very Important ]
》Proportion trick file says "2.9", but it supports newer Blender version up to "4.1". You don't need to use "2.9"!

Now open "Blender", then drag and drop "proportion_trick_2.9.blend" into it. A small menu will pop up—just click "Open". Blender will load up a scene, and that’s where we’re going to do the "Proportion Trick".





First, I know you're stuck in a locked camera view. Click or move around using "MMB", and it'll return to normal. So, the first thing you need to do is "Import" your models. You know how to import your model, but this time it's a little bit different.

Click "File". Hover your cursor on "Import" and this time, we select "Source Engine (.smd, .vta, .dmx, .qc)". Click it, and a menu will pop up.

Browse to your exported (.DMX) files. And, we'll import one part first. Select one of the exported parts and untick "Create collections". and then click "Append to Target" and select "Make New Armature" in "Bone Append Mode". And then, click "Import SMD/VTA, DMX..". It'll be import your first model's part with an armature.

That's what "Make New Armature" is for. Now, repeat the same steps, but this time, select other parts except the part we imported and select "Validate Against Target". And, import them. They'll be imported as well without creating another armature and will use the existing armature.





Let’s clear up "Bone Append Mode" options.
  • "Make New Armature" → Imports your model’s part with its own armature.
  • "Validate Against Target" → Imports parts but sticks to the first imported part’s armature
    Don’t stress—your parts all share the same armature anyway.
  • "Append to Target" → Imports with an armature if none exists, or adds any missing bones from the new part.
That’s basically it.





-- "Doing Proportion Trick (First Script)" --

Alright, let’s rename the model’s "Armature" to "gg"—all lowercase. This is required because the script only runs if the armature is named "gg". Double-click the armature name to rename it, then click the button that looks like a "play" button. This will hide all the bones except the main ones and mark the main bones in green, except for two bones in the chest.
[💡Tip ]
》We'll completely ignore "gg" armature after running the script, as it'll switch to "proportions".





If you notice any white bones besides the two chest bones I mentioned, it means the main bone hasn’t been set to ValveBiped yet.

[⚠️ Warning]
No need to worry if your model lacks bones the script expects, like models with fewer than five fingers or no toe bones. Focus only on the two white chest bones in those cases.

To fix that extra white bone, switch to "Pose Mode", select the bone, and check its name in the "Bone" tab (Bone icon). If it’s not renamed properly, press "Ctrl + Z" a few times to revert to before running the script, then select the white-marked bone and rename it correctly. See below.







We need to turn the two white chest bones green as well. First, switch to "Wireframe shading" mode by holding "Z" and hovering over "Wireframe". Zoom in on the white bones by scrolling with your Middle Mouse Button (MMB).



Hold "Shift" and click to select both white bones. Make sure they’re both selected. Then, scroll out to see your model and the green bones. Select the green bone above, which is "Spine4" while keeping the two white bones selected.

Press F3, type "Copy Constraints to Selected Bones", and click it. This copies the green bone’s constraints to the selected white bones. Next, hit F3 again, type "Apply Pose as Rest Pose", and click it. A small warning may appear—ignore it. Finally, press F3 once more, type "Clear Pose Constraints", and click it. The bones should turn slightly cyan—this means it worked perfectly.


[💡Tip ]
》All of the bones will be turned black if you accidentally select the model's part. Just click any bones without holding "Shift" if that happens.



And, we'll fix the model's toe bones and foot bones. We'll have to set "Pivot" to "Individual Origins". Click the small button beside the link icon and select "Individual Origins". See below.





Select the "proportions" armature and press Tab to enter "Edit Mode". Press 3 on your numpad to lock the view to the X-axis. Zoom in on the toe bones until they’re clearly visible. Select both toe bones and rotate them using the "Rotate" tool until they appear straight.

A small "Rotate" box will appear—click its arrow to copy the rotation value. Deselect the toe bones, select the foot bones above them, press R, then Ctrl + V to paste the rotation. The foot bones will now match the correct orientation. See below.



Doing that will fix the rotated feet issue at the end. Alright, that's the first part of "Proportion Trick". We'll see the second script in the next section.


《 📐 Proportion Trick · II 》
We're done with the first script. So, we're gonna switch to "Proportion Trick 2" script. It's necessary to run the second script.

-- "Doing Proportion Trick (Second Script)" --

Alright, click the note with the arrow icon beside "Proportion trick" script box. It'll show a menu. Click "Proportion Trick 2". And click "Run Script".





It'll merge the other bones that are not main bones into the armature we modified. Don't touch anything. Just keep it selected. We can export our model now.





Go to the “Scene” tab and open “Source Engine Export”. Switch the format to “DMX”. For the “Export Path”, choose the “Proportioned” folder inside your “Exported” directory from the template. Then click ”Export” and then click “Scene Export” to export your proportion model files.

[⚠️Warning]
》Make sure to use “Scene Export” specifically in proportion trick—otherwise, the proportion trick animation files won’t be included.

You don’t need to adjust the “Weight Link Cull Threshold” setting for this export.



See? Easy stuff. The “Proportion Trick” usually takes just 1–2 minutes once you’re used to it—or around 25–30 seconds if you’re speedrunning.

From here, we’ll only need Blender for three more sections. The next one can be a little tricky depending on your model, but don’t worry—I’ll walk you through it.

We’ll handle the “Collision Model” separately, so for now, you can close this Blender session and open a fresh one.


《 🧱 Collision Model · I 》
You might be wondering—what’s a "Collision Model"?
It’s basically a simplified 3D mesh used by VPhysics, Source’s built-in physics engine. This mesh handles collisions for ragdolls, the physics gun beam, and pretty much anything that needs physics interactions. It doesn’t have to be super detailed, but the more accurate it is, the better your collisions will better.





-- "Importing Collision model" --

First, let’s import the "Collision Model".
Go to "File""Import""Source Engine (.smd, .vta, .dmx, .qc)". Now, head into my template folder and open the "Collision models" folder. You’ll see three collision models:
  • "Collision Model I"for models in T-pose
  • "Collision Model II" for models in A-pose
  • "Collision Model III" for smaller models in T-pose
  • "Collision Model IV" for smaller models in A-pose


Pick whichever matches your model’s pose and size. Once imported, we’ll adjust the collision mesh to fit your model—remember, the closer the fit, the better the collisions.

After importing, delete its armature since we’ll be using your model’s armature instead. Just select it in the outliner and hit "Del".



-- "Fitting Collision model" --

You’ll mainly be working in "Edit Mode", with "Object Mode" needed only sometimes. No need to match every little piece—just focus on fitting the collision mesh to the body and head. I’ll walk you through one example in this tutorial. Some models make this part easy, others harder, but don’t worry—I’ll also cover a tricky case :).

Switch to "Wireframe mode" while editing to see things clearly. I also recommend using the "Viewpoint Preset" buttons: "-Y" for front, "Y" for back, "-X" for right, and "X" for left. These are from the model’s head perspective, not the camera’s.





Here are the controls you'll need to use most while making the collision model fit your model. Just a revision.
  • A : Select all vertices/edges or faces.
  • Alt + A : Deselect all vertices/edges or faces.
  • Ctrl + Z : Undo if something goes wrong.
  • Ctrl + Shift + Z : Redo.
  • B : Box select to select vertices/edges or faces from the collision model.
  • Tab : Switch to "Edit Mode" while collision model is selected.
  • Ctrl + Tab : Switch between modes while an object is selected.
  • Z (Hold) : Switch between shading modes.
  • Ctrl + A : Apply transforms after resizing or moving the collision model.
  • Del : Delete the vertices/edges or faces of the collision model if needed.
  • L : Select the linked parts of vertices/edges or faces hovered by the cursor.
  • Ctrl + L : Select the linked parts of selected vertices/edges or faces.

We’ll be using the "Gizmo" instead of the classic "Transform keybinds (G, R, S)"—it’s just easier to work with visually. For selecting, "Ctrl + L" will come in handy to grab linked parts of the collision model. You’ll also use "A" to select everything, and "Ctrl + A" to apply transforms after scaling, moving, or rotating.

For example, let’s say this is my model, and it’s taller than the default collision mesh. First step? Resize the collision model to match the character’s height and general proportions.





So, I'll select the collision model. I'll be staying in "Object Mode" for now. Press "S", hold "Shift" for slower and precise scaling, and scale it a bit up until it matches the arms' height. And, it'll look like it's fitted. What about "Side View"?.





I rotated my viewpoint to the "X" axis using the "Viewpoint preset" button. Then, I selected the collision model and pressed "Tab" to enter "Edit Mode". This makes only the collision model editable, leaving the actual model untouched.

I pressed "A" to select the entire collision model to check the fit from the side view. It looks mostly good, but you can tweak it for a better fit. You can skip to "Part III" if your model already fits the collision mesh perfectly. Remember, there’s no need to match the collision model to clothing—just the body.





Alright, I'll start from the "Feet" part of the collision model. I'll be trying to fit into the model's shoes/feet. I'll zoom in and start.

[⚠️Warning]
》I can't explain anything from this part as it'll be different for every model. I’ll try my best to get you to understand. All you need to know is that you can select any vertices and edit them. See GIFs, read the texts, and learn :P.





After fitting for the side view, I'll try to fit for "Top view". I'll switch to "Z" viewpoint for top view and then move some vertices that are out of the shoes to fit it perfectly. We should try to fit both "Side view" and "Top view".





There you go, Time for "Calf" part. I'll switch back to "X" viewpoint again for the side view. Nothing is wrong except that the calf's bottom part is thicker than my model's bottom calf part. So, I'll use the "Transform" tool by clicking the "Transform" tool from the tool menu. And then I'll select the vertices from the bottom of the calf part and downscale in " Y (Green arrow)" axis to make it thin. Scale up/down the whole calf part depending on your model calf's thickness/thinness, if needed.





Now, the calf part is fitted. The upper calf part will most likely fit most models. The same goes for me in "Thigh" and "Pelvis" parts. You can scale it up or down, or move it if needed. I'll fit the "Chest" part from the side view. I only need to select and move some vertices to the front to fit with the chest. Try to select the model's "Body" and see if it's matched.





Now, I'll try to match the "Arm" parts. You might need to match both arms with the model's arms. Depending on your model. And then I'll edit the "Hand" parts to fit with the model's hands. And, I'll be fitting the "Head" part as well.. You don't have to fit it perfectly. An example GIF of editing the arm and hand parts will be shown below. See "Part II" for more about making a collision model.





Alright, not satisfied with the current instructions?. We'll see in the next part and talk about fitting the other parts. Making a collision model is hard to explain but easy to do.


《 🧱 Collision Model · II 》
So, making a collision model might be simple for male models, but we can do a little bit better with female models as well. I had to separate into two parts because of the "8k characters per section" limit. Don't worry. We'll do something new after this section.

I might have rushed a little bit in the last section because the collision model fits most of my model's parts. But what if your model doesn't? That concerns me, and that's why I'm gonna talk more about it. Let's start with "Thigh" part. As you can see in this model, it's not fitted to the model's thighs. I can deal with that. Always remember, it doesn't need to be perfect.





As you can see, I fitted the thigh parts with the model's thigh. One thing to notice is: I always press "A" and select all to see if the collision model is fitted or not by seeing the wireframes of the model's thighs and my selected collision model.

So, you should do the same for other parts as well to see if they're fitted or not. You don't need to care about "Pelvis" tho. You can also try to fit the "Chest" part with the model's bust if you want to. See below.





That's all for making a collision model. I can't explain anymore as I don't know what to explain. All you gotta do is move, rotate, or scale the vertices or the whole part. I'll show some examples of what I did in my recent model ports.

🞄 "T-pose model" using "Collision model I". As you can see, I only fitted the collision model to the model's body.







🞄 "A-pose model" using "Collision model II". Nothing special, you might need to rotate the arm parts if the model's arm rotation and the collision model's arm parts are not matched.







🞄 "Chibi model" using "Collision model III". Chibi models might be a bit hard to deal with, but see below how I did. They have big heads and small bodies. Try to scale up and move the head part if needed.





Alright, that's all for this part. You might need to spend a good amount of time if your model is harder to fit with the collision model, but don't stress. Go easy if you can't. Everyone at the start might have problems with collision models. That's the main reason why I put "Blender basics" sections to be helpful in this section and most of the sections. So, we'll be making our collision model use our model's armature and exporting it in the next part.


《 🧱 Collision Model · III 》
Alright, this part will be easy peasy". This part was supposed to be in "Part II", but I wanted to do "Part III" separately for exporting anyway. You might get a bit worried about the upcoming steps when you see "We'll make our collision model use our model's armature". Right?. I know. You might think "Will I have to work with the bones? Or something hard?". Nope, just selecting our armature in "Modifier" tab so it uses our model's armature.

-- "Export Collision model" --

Before you export the collision model, make sure to apply transforms!. ”Ctrl + A” and click ”All transforms” if you asked ”How..”.

Ok, let’s export our collision model. Firstly. You will have to select your collision model. Go inside "Modifiers" tab. The button with the blue wrench icon. And you'll see a modifier in it named "Armature". You'll see the red stickman icon. That means we haven't set the armature for our collision model. It's easy.

Click the blank box beside "Object" and select your model's armature (proportions). There'll be only one, and you're done. The collision model will be ready to export. Seems easy, but should be careful not to forget that step when working with collision models.




And then we'll go into the "Scene" tab. Click "Source Engine Export". Switch to "DMX". Set the "Export path" into the folder you exported the model files you worked in "Proportion Trick" section. Not the old ones. Make sure you only select the collision model and export the collision model only.



No need to do the "Weight Link Cull Threshold" thing for the collision model. That's all for the collision model. Time to work with QC and other stuff. You may close "Blender" for now. Good job btw. :D

[🚩Checkpoint ]
》You just hit another "Checkpoint"!. Good job. You may take a small rest, walk around, touch grass?, drink something?. Just keep yourself relaxed. Come back later or tomorrow.

"I opened Blender to port for GMod…
Now I just mod GMod in Blender."

— 乃ㄖ乃爪卂匚 Ü


❖─────────❖─────────❖
《 📑 Editing QC · I 》
We're so done with "Blender". I know you hate working inside it. Now, it's time for editing the "QC". We need the "QC" file to compile the model for model files that can be used in-game. You're only going to edit and tweak some code. Anyway, let's start.

-- "Copy QC.” --

Ok, write it your own..... Just kidding, go inside my template folder and you'll see a folder named "QC". Go inside the folder and you'll see the template "QC' named "Model Template.qc" and ".txt" files. There'll be two "QC". normal one and a clean one. The normal one includes explanations, and the clean one doesn't. But I'll still explain what each command does in detail anyway in this guide. Use the clean one for your model.




For now, copy the template "QC" script file into your recently exported model files' folder. The one you did the proportion trick on. We ain't gonna use the old model files for our progress, except something goes wrong in the new model files, but it won't happen unless you messed those files.




Let's edit the "QC" script file. Right-click it and open it in "Notepad++". You'll see commands inside when you're in. Yes, it's already written for you, and you only need to edit some stuff.





-- "Edit QC.” --

[💡Tip ]
》Press "Ctrl + S" to save what you're editing. "Ctrl + Z" to undo and "Ctrl + Shift + Z" redo. Make sure to save regularly.

Alright, let’s kick things off with the $modelname command. $modelname sets the name of your compiled model and its output path. You’ll want to replace the default "modelname.mdl" with whatever name you want for your model. You can also include folders in the path if you wanna organize stuff better.




Example:
$modelname "my model/pal.mdl"
This will create a folder called my model and place your compiled model files as pal.mdl inside it as output after you compiled the model. You can include spaces and slashes for this command or nothing at all. It can be only the name as well. ”Slashes” will create folders. It works like a path.

Now for the second command—$model. This one tells StudioMDL which mesh file to use as the reference for your model. Without this, your model’s gonna be completely invisible in-game. You’ll need to change both "model name" and "X.dmx".

You can put any names in "model name". Use "underscores" instead of spaces, or it'll result in an error when you compile your model. For "X.dmx". Put one of your model’s DMX file names in "X.dmx". I’ll use the model's head as a reference model for the model. It can be ”Any” parts. You’ll be only using this if your model only has a single mesh.




Another command you're going to see is "$bodygroup". Just know that you don't need to deal with this if your model only has one single mesh. So, delete all of ”$bodygroup” lines if there's only a single mesh in your model. no bodygroups…

Anyway, in $bodygroup setups, there are two important sub-commands you’ll see: studio and blank. studio tells the compiler which DMX file (or SMD) is used for that part. blank adds a disabled state—basically a "none" option. Without blank, the bodygroup won’t be toggleable in-game. It just stays on all the time. You can edit "Bodygroup Type X" with the name you want to give to the bodygroup. It'll show up in-game with the name you gave.

And yep—blank can go anywhere in the group list. Doesn’t always have to be first or last. You can also build your bodygroup command with a lot of parts and toggles. Just understand how it works, and you're good to go.




So, there are 4 different styles or types of $bodygroup setups you'll see in the template QC, depending on how you wanna use them. Let me break them down for you:
  1. Static Bodygroup
    This one isn’t toggleable in-game—it’s just used for organizing different parts during compilation. It’s required when you wanna separate things like Hair or the Basebody, but don’t need them to be switchable in GMod. Just one set part. Set it and forget it.

  2. Toggleable Bodygroup
    This one shows up in the context menu in-game and makes your bodygroup toggleable in-game. You can use this for the parts you want as toggleable.

  3. Switchable Bodygroup
    This is like the toggleable one, but better. You can have multiple studio options in the same group and cycle between them. For example, switching between 3 different hats or outfits.

  4. Disabled by Default Bodygroup
    This one functions just like toggleable/switchable bodygroups, but the part is disabled by default. You include a blank first in the list, so the model spawns with nothing equipped in that slot. Useful if you want something to be "optional" and off when the model loads.
Copy & paste as you want.

So, Add your model's parts as bodygroups. If you forgot to add a part as a bodygroup, it’ll be ignored.
[⚠️ Warning]
》You must add every model's parts except the reference mesh.. The one you used in the ”$model”. If you also used the reference mesh as a bodygroup. It’ll be duplicated..

Also, Here is an example of how I did.




You can completely ignore the other two lines below. being "$ambientboost" and "$mostlyopaque". But I'll explain what they do.
  • The first one helps stop the model from looking way too dark in certain lighting setups. It’s kind of a lighting trick—basically, it boosts the ambient cube lighting when it’s getting overpowered by direct lights. That way, your model doesn’t end up looking like it’s hiding in a shadowy pit when it shouldn't be.

    It’s just a little heuristic (fancy word for "smart guess") that balances out the lighting to keep your model looking clean under different conditions.

  • Using $mostlyopaque makes the model render in two passes instead of one. First, it renders the fully opaque parts, and then it does a second pass just for the translucent parts. This helps fix lighting issues that usually happen on transparent materials. This is used in models to improve lighting for translucent parts.



Alright, we'll see more in "Part II". It hit the 8K character limit again..


《 📑 Editing QC · II 》
We're so back. But let's get going. Another command you're going to edit is $cdmaterials. It's the command that defines the folders in which the game will search for your model's materials. This command often confuses modders when it comes to porting models, so let me break it down clearly so you won’t get lost.

Usage for $cdmaterials is simple. All you gotta do is replace the path inside "My material path/My model" with your custom path. Alright, let’s say I replaced it with "My model/pal/". Now, the game will look for the model’s materials inside the folder structure shown below:

Example : $cdmaterials "My model/pal/"
My Addon/ └── materials/ └── My model/ └── Pal/ <-- Materials go inside that folder

It’ll search for materials inside the “pal” folder, but only after going through “My model” folder first. Just keep in mind—the “materials” folder itself doesn’t count in the path. That folder is the default root where all material files are expected to be.






You can also use multiple $cdmaterials lines if you want your model to use materials from different folders. Let’s say your model has color variation textures, and you keep those textures in a separate folder. You’d just add two $cdmaterials lines like this:

$cdmaterials "My model/pal/"
$cdmaterials "My model/pal2/"

Now the game will look for materials inside both folders. One is the same as we mentioned earlier, and the other one is a folder named “pal2” inside the “My model” directory. It’ll search both of them for any textures the model needs.

Example : $cdmaterials "My model/pal/" & "$cdmaterials" My model/Pal2/"
My Addon/ └── materials/ └── My model/ └── Pal/ <-- Materials go inside that folder └── Pal2/ <-- And in here too






It's useful to use multiple commands when having color variations, mask textures, and more. Anyway, I hope you get this. One thing, Modders always add "models" before the path. Example as "models/My model/Pal/". It's completely optional and only avoids materials from showing up inside "Hammer" editor.
That's all. Edit the path with any path you like, but you're going to create folders for that path sooner.




Next, you're going to ignore the "$maxverts" line and work on the "$definebone" lines. But, That small line is very very useful when compiling high-poly models. I'll explain how?.

So, by default. The compiler splits the model into a lot of parts if the model has more vertices than the limited number. And, it does a horrible job at it. It destroys the model instead. Also, results in an error and stops compiling when the model is very high-poly. "$maxverts" defines when to split and the maximum amount of vertices allowed in each model, and "65536" per model is the maximum.
But don't worry. Your model is fine as long as that command is inside the QC.

Alright, Time for "$definebone". In tutorials, you're going to generate "$definebones" by running the compiler, and it spits out your model's bone locations. But in this guide. We're going to use it as a trick to save the bone count. We'll use the default bones from the default Gmod models, but also not ruin the model.




There'll be two text files named "Definebones (Male/Female)" inside the template folder. Choose one depending on whether your model is male/female. I don't know if it matters or not, but it'll most likely make the model compatible with the default animations. The default animations for females and males are different.




Copy all of the "$definebone" lines inside the text file and replace them with the "$definebone" commands inside the "QC". I just put some random $definebone commands, just want you to know where to put the "$definebone" commands you just copied.




Now, when we compile the model, the Compiler will collapse bones except the bones from "$definebone" and jigglebones. which'll save tons of bone counts and not having to optimize yourself. Sounds cool. right?.

Next one is "$bonemerge". Don't worry, it doesn't merge your model's bones. It only sets "bonemerge" flags for those bones that serve as a hint to the game code that the named bone will be used for bone merges. You don't need to edit them.




Another one you're going to see is "$unlockdefinebones". It makes the model use bone positions of the first frame in the last defined SMD/DMX file of the QC for the definebone values. Nothing to worry about it. We'll just leave that boy alone there.



Another one is "$surfaceprop". It links the surface of either a material or model to a set of physical properties, including:
  • What sounds are emitted during collisions
  • What effects are emitted when the surface is shot
  • Mass, buoyancy, bounciness...
  • The effect of the surface on nearby sounds (reverberation, echo, absorption...)
You can edit "flesh" to "Metal" if your model is a robot or "Slime" if it is a slime. See here for more surface types. Leave it as "Flesh" for human models.

Alright, we don't need to care about another command "$contents". It specifies a list of content types to use for SolidMask tests during non-hitbox traces. We can leave it as "Solid". We'll leave "$jigglebone" for now as it'll be in a separate section. We'll see more in "Part III" for other commands below. It hit the 8k characters limit again...


《 📑 Editing QC · III 》
Alright, this'll be the last section for "QC" editing. I know I just want to explain about every command. Anyway, let's just keep going until we reach the end.

Another one we'll see is "$attachment". It defines an attachment to a model. The attachments commands I put inside are required for camera attachments for the model. Example as "Eyes". Some addons use them to work with camera attachments on a model. We'll leave it as it is.




Next, "$Ikchain" defines bones that'll be used for "inverse kinematics system". If you played games like "Grand Theft Auto IV" and others. You'll see characters' feet accurately react with the ground surface realistically. "Source" does have it as well. Also, for hands to fit with any weapons. That's why NPCs in Gmod hold any weapons without hands clipping through. You don't need to touch them as it's fine as it is. "$ikautoplaylock" applies "iklock" to any sequences with "autoplay" option. Including "Proportion Trick" sequence. There's not much to explain about it.




You're going to see some "$sequence" commands below. They're for "Proportion Trick", and they use the animations we got from exporting after doing the trick. You don't need to edit them as well.




I know you're tired of reading the explanations. Next one is "$includemodel". You're going to edit this one. Happy now?. "$includemodel" lines will add animations into your model depending on what you put there. You'll see a text file named "PM & NPCs animations.txt". Open it and you'll see a lot of commands inside, categorized with their respective usages.

Copy the "$includemodel" lines from "Playermodel Animation" depending on whether your model is male/female. And replace with "$includemodel" commands inside the "QC" file.
Also, you can scroll down and you'll see "NPC Animation". It's completely optional if you're not willing to make NPCs for your model.
If you're willing to do so, just copy the lines under "Friendly Male" or "Friendly Female", depending on whether your model is male/female, and also copy the lines under "Hostile Combine". And put those commands below the player animation commands.

[🗒️Note ]
》This part is completely optional if you're going to use ragdoll only.




[💡Tip ]
》Modders usually separate their QC files for the Player Model (PM), Friendly NPC, and Hostile NPC. It helps prevent lag or stutter when spawning them in-game. It's optional, but you can do the same by creating separate QC files for each one, and only including the $includemodel lines that match the specific NPC or PM setup you're compiling. Also, add "_friendly" and "_hostile" in your output model file name at the "$modelname" command if you do. I'm too lazy to compile the model three times bahhh...

The last one is grouped. It's for the collision model and ragdoll physics settings. You're going to edit "$collisionjoints". Replace "Collision Model.dmx" with your collision model DMX file's name.

If you didn't rename and use the first collision model from the template. You won't need to edit it. Alright, I'll stop with the QC editing now because we're done. I would like to explain other commands below, but they just don't need to be adjusted. We can leave it as it is. I used the values from Gmod one.



So, Good job on this. You may add "Jigglebones" for your model or skip it if you don't want. It'll surely improve the model's quality if added...


《 🦴 Jigglebones [Optional] 》
[🗒️Note ]
》Adding "Jigglebones" is completely optional and will take a lot of time depending on your model's bone counts. I do have some tricks for you to speed up the process, tho.

Alright, you want those fancy jiggle physics on your model?. I got you. So, our lovely "Source" does have a jiggle physics system. Not a perfect one like other game engines, but you can’t blame a game engine from ”2004”. Anyway, you’ll be provided with pre-made jigglebone setups for your model in the template. I’ll show you previews of presets and how to set them up.

-- "Add jigglebones” --

Anyway, let's add jiggle physics to our model to improve quality. First thing you're going to do is go into "QC" folder, and you'll see "Jigglebone parameters.txt". Those are jigglebone setups that I collected and made.

Open the text file with "Notepad++". You'll see a lot of jigglebone setups. Also, we'll need to open "Blender" again. Sorry, I lied.. You'll have to import your model to see your model's bones' names :D."Except collision model.." So, we can copy the bone names of the model and add them as jigglebones. You thought we were going to do some serious stuff. Don't ya?.

After you have imported your model. Expand the bones by clicking the arrow beside the bone names. Expand until all of your model's bones can be seen.You can hold ”Shift + Click” to expand the whole bone group. Using it on ”Pelvis” will expand everything.




Alright, You're going to copy the jigglebone parameter you want into your model's "QC". But first, I'll preview the effects of all jigglebones setups. See below.

[🗒️Note ]
I'm very sorry if the GIFs are too laggy and low quality.. I can't do much as Steam has 2MB file size limit.
  • Tail : Smooth and satisfying physics. Best used on tail bones — or honestly, anything you want to give that smooth jiggle. Feels nice in motion.






  • Ears : Smooth ear jiggle. Use this on ear bones — pretty obvious, right?
    "Ears II" is the same setup but with slightly longer-lasting movements.






  • Bust : Nice natural bust movement. Nothing crazy here.
    "Bust II" is similar but with slightly reduced bounce.






  • Butt : Very subtle movements. Best for butt bones — but honestly, if you need to save bone count, consider removing this. No preview for this one...





  • Hair / Everywhere : Versatile physics — smooth enough for hair but works almost anywhere.
    I borrowed this from modder Subtact, who used this single setup for the entire model: hair, bust, clothes — everything.
    Lazy? Just use this for the whole model and call it a day. Especially good for hair bones.






  • Long Backhairs : Smooth and flowy — designed for long hair and twintail" bones. Don't use it on short hair or other stuff.






  • Small Hairs : Very small & Clean movements for small hairs. Use this for "front hair, side hair, etc." bones.






  • Coat / Clothes / Skirt : Minimal but stable movement. Use this for bones on skirts, coats, or general cloth parts.
    Want smoother results? Go with "Coat / Clothes / Skirt II" instead.






  • Ribbon & Accessories : Also minimal motion. Great for small details like ribbons, pins, and other accessory bones.
    If you want better flow and speed, go with "Ribbon & Accessories II".






  • Item attachment : Very minimal movement — best for small bones used in item attachments on the model. Keeps things subtle and stable. Credit to ฿ØⱠ₮Ø₭¹⁷³ึ for the GIF and parameters. I'm just tired of making my own and optimizing it to its absolute limit.





Alright, that's all of the jigglebone previews. It's time to add to your model. It's very easy. Copy and paste a jigglebone setup inside your "QC". If you ask where, replace it with the example jigglebone setup named "Bob". I just put it there just to let you know where you're going to put it. And, you'll have to double-click and press "Ctrl + C" to copy the bone you want to add as "jigglebone" in the "Outliner" and replace it with "Bone name" in jigglebone setup.




That's it. it's very simple, and you just added a jigglebone for your model. It's very boring to add for every bone you want to add as a jigglebone. But there is some stuff you need to know.

Models without any jigglebones always compile with "53" ValveBiped bones. When adding jigglebones to models close to the "255" bone limit, start counting them from bone "54" to avoid exceeding the cap.





Another thing you should know — don’t add bones that end with "_end" or "_root".
I'm telling you this because "_end" bones don’t have any bone weights in like 99% of models. They’re just tip markers and useless in Source. Sure, StudioMDL will compile them, but it won’t recognize them as valid jigglebones since they lack weights.
So basically, it's just a wasted bone slot. And "_root" bones are the root of the group of jigglebones, and they shouldn't be used as "jigglebones" or you're going to see bad jiggle physics.





Alright, so copy and paste the setups and add the jigglebones you want. Try to balance, and you don't need to add for every bone. You can have only one jigglebone if you want , but why?.. You can also get help from ”ChatGPT” or ”Gemini”, or other bots, to help you generate jigglebones very fast. That's all for this section.





《 🧪 Compiling & Viewing 》
Woo! It's finally time to compile our model. After working on the model for a long time. We'll compile and review our models to identify any issues as well. We'll use our best friend "Crowbar" for this. This section will be very easy. So, let's start.

-- "Compile model” --

Ok, let's open "Crowbar". Go to "Compile" tab and drag & drop your "QC" file into "Crowbar". I'm sure you already set up "Output to" path to the "Compiled" folder inside the template folder because I told you to set it at the "Setting up" section.

And.. Wait, you should add "-fastbuild" in command line options. Basically, "StudioMDL" will compile the model for "DirectX 9", "DirectX 8", and "DirectX 6/7". Using that command won't compile or "DirectX 8" and less and only compile for "DirectX 9", which will speed up the compiling process significantly.

After that, add a name after "Compiled". It'll create a folder for your compiled models and click "Compile". Let the tool compile your model. Watch it do its job. It can take longer depending on your model's complexity and size. But I know you have a good PC. That's why you even got here. Porting a model requires a good PC.




[💡Tip ]
》Visit "Errors & Solutions · I" if you got any errors while you're compiling.

After compiling, click "Use in View". It'll send you to "View" tab and load your compiled model. Click "View" and it'll open "HLMV++".




[💡Tip ]
》Copy and rename "hlmvplusplus" to "hlmv++" just like mine if it crashes. Also, change the path for "Model viewer" to the new one in "Crowbar".

At first, your model textures won't be visible because you don't have any materials. For now, just take a look at the model you got to see if there are any issues. Hold "RMB" and move up/down for zoom in and zoom out. Hold "LMB" for orbit view. Use it while the cursor is in the middle of the model. Using it on the sides will rotate the model vertically.

Alright, we’ll continue to the next section. Keep "HLMV++" and "Crowbar" open. We'll need it for previewing materials, but before you go..

[🚩Checkpoint ]
》You just hit another "Checkpoint"!. How good. Tired of living inside ”Notepad++”?. I know I don’t get tired of editing the QC files, but you might be. Cmon’, get up, go get some snacks, drink some water. Keep yourself hydrated!. Anyway, come back later or tomorrow.

"Your mother was a mdl and your father smelled of .ani"
Mr.Funreal


❖─────────❖─────────❖
《 🎨 VTF & VMT · I 》
Time to convert our model's textures into usable formats that "Source Engine" can use. I've explained what formats are in the "File formats" section. I know you remember "VTF" & "VMT". Alright, let's roll. We're close to the end.

-- "Import texture” --

We'll open "VTFEdit". I know you already downloaded it. If you haven't. Download it here[github.com]. Or take a visit to the "Required Tools" section again.

Go into the folder where your model's texture files are located. Now, click the "Import" button. The blue paper icon at the upper-right corner. And, browse to your folder where your texture files are located and select one texture file and click "Open".




And a menu will pop up. There are options for "Texture format", "Texture size", and more. I'll explain what they do. This is important for your model's texture quality.




-- "Texture Formats” --

"Normal format & Alpha format" : By default, "Normal Format" will be "DXT1" and "Alpha Format" will be "DXT5". A lot of modders don't know what they're for and simply use them. But I don't mean it's bad. So, if you click the box. There'll be a lot of formats, but for models, we'll only use some of the formats shown below.

──────────────────────────────────────────────────────
    DXT1 [Aka BC1] : Highly compressed texture format.
  • 4 bits per pixel; limited alpha support. supports 1 bit of alpha precision.
  • The most common format among modders who don't know what texture formats are for.
  • Only use when the texture doesn't have an alpha channel and you want to save the file size to its absolute limit. Texture quality will look horrible.

    DXT3 [Aka BC2] : Compressed texture format.
  • 8 bits per pixel; supports alpha.
  • Recommended to use DXT5 over this format due to the same file size and better gradients.
  • Same size as "DXT5" and quality will look better than "DXT1" but worse than "DXT5".

    DXT5 [Aka BC3] : Lightly compressed texture format.
  • 8 bits per pixel; supports alpha.
  • Recommended to use in most textures with alpha textures while also saving file size and slightly less quality.

    BGR565 : Very lightly compressed texture format.
  • 16 bits per pixel; no alpha.
  • Recommended to use this format instead of BGR888 to save 33% of space with often negligible quality loss (especially for basetextures).
  • BGR565 is incapable of properly representing a "flat" normal map.

    BRG888 : Uncompressed texture format.
  • 24 bits per pixel; no alpha.
  • Recommended to use this format in textures without an alpha channel and very fine gradients.
  • It can be used for normal maps for high-quality.
  • Uncompressed and slightly larger file size.

    BGRA8888 : Another uncompressed texture format.
  • 32 bits per pixel; supports alpha.
  • Recommended to use this format to produce very high-quality textures without losing any quality.
  • It can be used for normal maps for very high-quality.
  • It can have a bigger file size than other formats.

    RGBA16161616 : Ultra high-quality texture format.
  • 64 bits per pixel; supports alpha.
  • Best texture formats with the highest quality textures.
  • More colorful among all of the formats.
  • Only use this if you're going to absolute "Quality" mode, as it can eat up to 2x-2.5x file size than "BGRA8888/BGR888".
──────────────────────────────────────────────────────

[🗒️Note ]
》It seems like "RGBA8888", "ABGR8888" and "ARGB8888" works the same as "BGRA8888". Haven't used them before, but they work as usual. Experienced modders conclude that those formats only changed the color channel sequence.. Same as "RGB888", which might work the same as "BGR888".

That covers most of the useful texture formats. If you’re wondering which one I use most, it’s BGRA8888. I’ve never used RGBA16161616—I only discovered it while writing this section, and honestly, I won’t be using it.

For you, go with DXT5 if you want smaller file sizes and don’t mind a bit of quality loss. Choose BGRA8888 if you want the best quality without any loss. RGBA16161616 is overkill unless you consider yourself a “Man of Quality.” Avoid using BGR565; it’s not recommended.

Also, make sure both the Normal Format and Alpha Format match!

[💡Tip ]
》I advise you to use compressed formats for textures that can't be noticeable in the model to save file size.

-- "Texture Options” --

So, select the format you want to use. For this guide, I’ll go with “BGR888” for “Normal Format” and “BGRA8888” for “Alpha Format”. Leave “Texture Type” as “Animated Texture”.




Next, we have the “Resize” options. Keep “Resize Method” and “Resize Filter” as they are. The “Maximum Width” and “Maximum Height” settings control the texture size. Set both to “2048 (2K)” for a good balance between file size and quality, or “4096 (4K)” for maximum resolution.

Almost every model uses “4K” textures, but you cannot upscale a “2K” texture to “4K”; it will remain “2K”. If you want to save significant file space, set both to “1024 (1K)”, though I generally avoid that.




The last option you're going to use is "Generate Mipmaps". It'll generate "Mipmaps" for your texture. "Mipmaps" are pre-calculated, optimized sequences of images, each with a progressively lower resolution, used in computer graphics to improve rendering speed and reduce aliasing artifacts. You can leave it as it is, but you can untick it for a significantly lower file size.



After all, you can click "OK". Wait a bit, and it'll import your texture. See "Part II" for more instructions.


《 🎨 VTF & VMT · II 》
Alright, let's continue. We'll save it as "VTF" file. Click the "Save" button. The one that looks like a disk with a slit in the center. A new window will pop up. You'll have to find somewhere to save that texture file.

-- "Save texture" --

First, open "Windows Explorer" and go to:
"Steam\steamapps\common\GarrysMod\garrysmod\materials"

Inside this folder, you’ll need to create the same path you wrote in your "$cdmaterials" line from the "QC" file. For example, if your QC says:

$cdmaterials "My model/Pal/"

then make a folder called "My model", and inside, make another folder named "Pal". That "Pal" folder is where your textures go in.

In short: the "$cdmaterials" path = the folder path you must recreate under "materials".
Basically, the folder path you set in "$cdmaterials"




After creating the folders, you’ll need to name your texture files. You can technically give them any name you like, but they must match the material names your model is using. That’s why I told you earlier to keep "Crowbar" and "HLMV++" open.

Go into Crowbar, load your model’s ".MDL" file, and check the "View" tab — it lists every material name the model is expecting:




As you can see, it shows the used material names. Most of the time, the texture and material names match, so just copy the names directly from Crowbar. You can also Double-check using HLMV++, which also shows which materials are used or missing..




-- "Create VMT" --

After that, we’ll need to create a material file (the VMT).
Go up to "Tools""Create VMT File". A small menu will pop up.

On the first page, you don’t need to change anything — just head straight to the "Options" tab.

Now, look at the "Shader" box. By default, it’s always set to "LightmappedGeneric". That one’s only for world textures (maps). Models need to use "VertexLitGeneric", so make sure to select that instead.

Once you’ve set it, click "Create". Don’t worry about the other options under it — we’ll overwrite them later with parameters from our own template.

A save window will pop up, already pointing to the same folder where your texture file is. Just hit "Save". No need to rename anything — it will automatically match the texture file’s name.




[⚠️Very Important ]
》You only need to convert and save a shared texture once—even if multiple materials use it.


For example, if both "Face" and "Face_alpha" use the same texture, you only need to save it once (like for "Face"). Then, just make separate VMT files for the others and point them back to that same texture. That way, you save time, avoid clutter, and keep everything nice and clean.

Here’s an example: that model below uses 5 different materials, but they all share a single texture. So keep an eye out for situations like that. It doesn’t happen with every model, but when it does, it’s good to know how to handle it.




Alright, now just repeat the same process for every texture — including the ones used for "Color Variations". When saving them, keep the same base name but add a number or a color tag at the end. That way you’ll stay organized and won’t lose track of which is which later on.

[💡Tip ]
》I recommend that you open a lot of "VTFEdit" and load every texture and work with all of them at once.

-- "Main parameters" --

Hey, done converting your textures and making the material files? Nice one. Let’s keep it moving.

Head into the folder where you saved your converted textures and material files. Inside, open up the “VMT & Shaders” folder. You’ll see a bunch of VTFs and two template VMTs (just like the QC setup) — one is normal and the other is clean. Always use the clean one for your model. The normal one is only there if you want to read the explanations.

Now, open the Clean VMT template with Notepad++. You’ll see a bunch of parameters inside — select everything and copy it over into one of your VMT files.

After then, copy all the VTFs from the “VMT & Shaders” folder into your materials folder. The ones named “Toonshader”, “Normal”, and “Phong”. They are shader files to use in your model.






Copy all of them by pressing "Ctrl + A" and "Ctrl + C", then paste them into one of your VMT files. If you’re wondering where to paste, just press Enter two or three times at the bottom of your VMT file’s parameters. This will make it easy to copy and paste the $basetexture path and replace it with the $basetexture from the template.





Now, let’s start editing. First, we’ll replace the path with our own. Select "My materials/My model/" and press "Ctrl + H" to open the find and replace menu—it’s super handy for this. Copy your original $basetexture path, excluding the texture name, and paste it into the Replace with box. Click "Replace All", and all the paths will update to your folder. After that, remove the original parameters from the VMT you created and leave only the parameters from the template. See below.




And, we'll replace "Texture name" with our current texture's name. I know you know which one you're editing for. For me, I'm editing the "Hair"'s material file. So, I'll replace it with "Hair" in "Texture name".




[💡Tip ]
》You can see the changes in "HLMV++" by pressing "F5". You'll need to do it every time you want to preview if it's working or not.

We’ll leave "$bumpmap" as it is for now. If your model comes with "Normal" textures, you’ll need to perform additional steps before using them with your model. Check the Normal maps section after editing the VMT for instructions.



Another parameter to note is "$lightwarptexture". This is used for the Toon/Cel-shading shader. You’ll see three "Toonshader" texture files. You can replace the Shader parameter with "Toonshader, Toonshader2, or Toonshader3". I’ll explain the differences below.






The shaders are shown in order:
  • The first one is the most commonly used. It gives a nice Cel-Shading effect. The effect is subtle overall but noticeable in areas like the ears. You can use this shader for the entire model.
  • The second one has no shading effect but improves the look of the part without shading. This works well if you’re also using Phong.
  • The third one is similar to the first but with a lighter shading effect.
  • The last one is the most intensive and delivers the full Cel-Shading effect, but a bit pinkish..
Alright, we'll go for more in the next part. It's too much for this section now.


《 🎨 VTF & VMT · III 》
We're back for more. Alright, the next coming parameters need to be adjusted for the right result. Let's see.

-- "No Decal & No cull" --

Another parameter we’ll see is “$nodecal”. You might have an idea what it does—or maybe not. Essentially, it disables decals on the material. That means things like “Bloods” and other decals won’t appear on the part using that material.

For example, I set “$nodecal 1” on my hair material. And, decals won’t show up in the model’s hair.

It’s recommended to set it to “1” if your model has over “65536” vertices. Even if it’s set to “0”, decals might not show due to engine limitations— it will spam errors in the console. To avoid that, just use “1”.




Alright, Next upcoming parameter is "$nocull". We'll use it when any issues arise while using "$translucent". It'll disable the "backspace culling", which will result in triangles showing from both sides. It should be fine to leave it at "0" as we used "mostlyopaque".




-- "Phong Shading" --

[💡Tip ]
》Preview the changes of phong shading inside "HLMV++". Press "F5" for it.

Ok, let's start with the "Phong". This one is a little bit complex. It adds a shading method called "Phong" shading to your model. It's useful on models that need proper reflections on the parts. Examples as a robot character or models with reflective surfaces.




[⚠️Warning]
》Set the "$phong" to "0" if you're using "ToonShader" except "ToonShader2". "Phong" will disable the "Cel-shading" effect if it's enabled.

The first parameter is “$phong”. This turns the Phong shading effect on or off. Set it to “0” if you don’t need it or are using other shaders.

The second is “$phongexponenttexture”. You don’t need to change this—it’s set up after replacing the paths. This texture controls the size of the highlight for Phong shading on the material.

The third parameter is “$phongexponentfactor”. It multiplies the exponent texture. You can adjust it or leave it as is.

The fourth is “$phongboost”, which controls the brightness of the Phong shading. You can set it to any value and see how it affects the reflection.

The fifth parameter is “$phongfresnelranges”. This controls the range of Phong lighting or the Fresnel effect. It works with “[ X Y Z ]” values, so you might need to experiment to get the look you want—or just leave it as is.

The last one is “$phongalbedotint”. It tints the Phong reflection with the color of the $basetexture, so the reflection isn’t just plain white—it adapts to your texture’s color. Set it to “0” if you don’t want this effect.

That’s all the Phong parameters. You can remove the whole section if you don’t need it or aren’t using Phong shading.




-- "Rimlight" --

ou might not know—or maybe you do—what “Rimlight” is. Rimlighting is a lighting trick that adds a bright outline or glow around the edges of a 3D model, usually opposite the main light source. It helps the model stand out from the background and gives it a cool highlight effect—like a halo glow along the edges. Example shown below; see the edges around her.






Yes, those white outlines you see? That’s “Rimlight”. You can add this effect to your model using several parameters:

The first is “$rimlight”, which simply turns the effect on or off. Set it to “0” if you don’t want rimlight.

Next is “$rimlightexponent”. This controls the tightness of the highlight. A higher exponent creates a smaller, sharper outline, while a lower exponent makes it broader and softer. Note: these parameters might not show in HLMV; not confirmed, but you can still adjust or leave it as is.

Finally, “$rimlightboost” controls the intensity of the rimlight effect.
That’s it! You can tweak the values, keep the defaults, or remove the effect entirely.




-- "Alpha" --

Another set of parameters you’ll deal with is for alpha. You might ask, "How can I see if my texture has an alpha channel or not?" It’s easy. Open your VTF file, click View, then Mask. If you see white and gray checkerboards with some translucent areas on top, that means your texture has an Alpha channel. You’ll also notice a translucent background in your model’s texture if it has alpha. Check below:






Textures with an Alpha channel are common for effects in models—like Blush effects used as Shapekeys. In Blender, they may appear as a floating pink object, but the alpha channel is what makes them render correctly.

There are two main ways to handle alpha: “$translucent” and “$alphatest + $allowalphatocoverage”. Most of the time, $translucent is the preferred choice. If there are any issues, you can try $nocull 1 or experiment with the other method.

Here’s a quick comparison.
Use this as a reference when setting up your alpha materials.




Don't worry, she's just making that face to showcase her blush effect :P. I'll explain the difference between those parameters.

"$translucent" will specifies that the material should be partially see-through. The alpha channel of the $basetexture is used to decide translucency per-pixel, and it's expensive to render.

"$alphatest" specifies a mask to use to determine binary opacity. White represents fully opaque, while black represents fully transparent, and it's cheap to render.

"$allowalphatocoverage" creates translucent steps based on alpha values. It can be used for softer edges, as well as greatly reducing shimmering when viewed at a distance.

But, only use those parameters when the texture has an alpha channel. Using it on textures without an alpha mask will simply mess up or make the part invisible. So, make sure you don't set those parameters on other materials without an alpha channel. Even I sometimes get my model messed up by having "$translucent" on in materials that don't need it.

That's all for now. Parameters below are for specific stuff. We'll see sooner.


《 🪨 Normal Maps [Optional] 》
[🗒️Note ]
》Only if there are normal maps textures for your model.

Using "Normal maps" in the "Source Engine" needs a small fix before you use it. You might ask, "Why tho?"

Normal maps baked in "Blender" or "Maya" use "OpenGL", which uses the "+Y" green channel. But Source uses "DirectX" — it needs "-Y" instead.
So yeah, you gotta flip the green channel before using it or your lighting will look goofy. We'll use "GIMP" for that. But as I mentioned, you can use any other "Photoshop" software.

-- "Flip Y channel” --

Open "GIMP" first. You'll need to import your "Normal map". It's very simple. Just drag and drop your normal map into "GIMP" and it'll import your normal map.




After that, click "Colors" and then hover your cursor on "Components" and click "Decompose..". And then a small menu will pop up. Make sure "Color model" is "RGB" and "Decompose to layers" is ticked and click "OK". It'll open another window.




In another window, it'll be a gray image. Now, you'll need to hide "red' and "blue" channel. Just click the eye icon beside them. Only leave "green" visible and click the image box beside "green" and click "Colors" and click "Invert". That's it. Our normal map's green channel is flipped. We'll need to "Compose" it back. Click "Colors". Hover your cursor on "Components" and click "Compose". Wait a bit until the bar goes full.




And, we'll switch back to our first window first. You'll see that your normal map looks a bit different now. Click "File" and click "Overwrite xxxxxx.png".




It'll export and overwrite our normal map texture with a flipped channel. And, you'll have to use "VTFEdit" to convert into "VTF". Save it to your material folder, where your converted textures and materials are located. It's the same process, just like you convert the textures into "VTF".

-- "Edit $bumpmap” --

When you save your normal map, make sure to name it like "xxxx_normal".
The "xxxx" part should match the texture it’s meant for. For example, if your main texture is "Skirt", name your normal map "Skirt_normal". Keep everything clean and easy to link up.

Now, open your texture's material file with "Notepad++". We'll have to edit "$bumpmap" parameter. It should be "$bumpmap xxxx/xxxxxx/Normal" to "$bumpmap xxxx/xxxxxx/(Your normal map texture name)". Just change "Normal" to your normal map's name and you're good to go. it'll make the model's texture crisper and better :D. See below.






《 💡 Alpha & Emission [Optional] 》
[🗒️Note ]
》Only if there are alpha mask and emission mask for your model. We ain't going to make one.

In rare cases, Model authors don't apply alpha to base textures and use a mask called "Alpha mask". it's a "Grayscale mask" and can be used in custom shaders like in "Unity" and other tools. But, "Source Engine" can't use alpha masks directly. Which'll need to be applied to the texture. We'll use "GIMP" for this one.

[⚠️Warning]
》In some models, model authors applied the alpha mask to textures that needed but still put an alpha mask in the texture or mask folder. So, make sure your texture hasn't applied an alpha mask yet.

-- "Apply Alpha mask” --

Open "GIMP" first. And then, drag & drop your texture, which is going to be applied by alpha mask. Please make sure your texture and alpha mask are matched.




Alright, your texture should be imported into "GIMP". And, we'll drag and drop the "Alpha mask" into "GIMP". Now, your alpha mask will cover the whole main texture.




In some cases, the Alpha mask can be smaller than the main texture. Don't worry, just right-click the alpha mask. Click "Scale Layer" and type in "4096" into "Width" and "Height". And then click "Scale". It'll be scaled and matched with your main texture's size.
[💡Tip ]
》If your alpha mask is "1024x1024" and main texture is "2048x2048". Type in "2048". Match with your main texture's size.




Alright, now we'll select our main texture and right-click, and then click "Add Layer Mask..". A small menu will pop up. Select "White (Full Opacity)" and click "Add". A white box will appear beside our main texture. We'll apply the mask there first.




After that, we'll click our "Alpha mask" and then press "Ctrl + A" and press "Ctrl + C". It'll copy the alpha mask. And, click the "Eye" icon beside the alpha mask to hide the mask. Select the white box beside our main texture and press "Ctrl + V". You'll see that our alpha mask is applied, and some of the parts will be changed to alpha parts. And we'll press "Ctrl + H" or click the green button with the anchor icon to anchor it. Done?. Nope. Let's apply it for real. Right-click the applied mask and click "Apply Layer Mask". You can also delete the alpha mask layer if you want to.



[⚠️Warning]
》Please do know that when I put my cursor on the alpha mask. I was copying the mask by pressing "Ctrl + A" and "Ctrl + C". You can see that the edge outlines of the mask go white.

Done. We'll overwrite our original main texture file by clicking "File" and then "Overwrite xxxxxx.png".

[⚠️Warning]
》In some cases, the alpha mask will remove parts of the main texture and leave only the alpha parts. When that happens, click "Export as" instead of overwriting. A big export menu will appear, opening the same folder where you imported the textures. Rename the file to a different name to avoid overwriting the main file, for example "xxxxx_alpha.png", and then click "Export". Another menu will pop up; click "Export" again. You can adjust the "Compression level" for faster export, keeping in mind that lower values export faster with bigger file sizes, while higher values are slower but smaller. After that, convert it to "VTF" and use it separately for the alpha material, for example "Face_Alpha".




-- "Emission masks” --

"Emission masks" are used for glowing parts on models, like glowing eyes. They’re pretty straightforward to use in "Source", and in this guide, we’ll be using them with the "$detail" parameter.

Most emission masks (about 95%) are "colored", while 5% are "grayscale". If your emission mask is grayscale, treat it like an alpha mask: use "GIMP" to export it as a separate texture and convert it to "VTF".



If your emission mask is colored, just convert it to "VTF" and open the "VMT" file of the material you want to apply it to. Scroll down and remove the "//" from all "$detail..." parameters. Replace "Emission_Mask" with the name of your emission mask texture. You can ignore the other two parameters below, but "$detailblendfactor" controls glow intensity and can be set anywhere from "0-1", like "0.3" or "0.6", depending on how strong you want the glow.



That’s all for applying masks. If you’re porting from "Unity", "MMD", or "VRoid", you might encounter extra masks like "Outline mask, Shadow mask, Rim mask". Only the "Rim mask" has a chance of working in "Source". Others aren’t supported, and adapting them is tricky—I’m still experimenting with them.

《 🌈 Color Variations [Optional] 》
[🗒️Note ]
》Only if there are Color variation textures for your model.

Adding "Color variations" is easy to do. But, you might ask, where am I going to use it in Gmod? You might know that some of the workshop models have a button in the context menu named "Skingroups". You can use it to change the model to different skins and colors. That's what we're going to do for our model.



-- "Add $skingroup” --

ou might notice a ".txt" file named "Color variation.txt" in the template folder. Open it with Notepad++, and you’ll see "4" types of "$skingroup" commands. Here’s what each one does:



  1. Simple Skingroup
    This is the most basic type. You’re swapping between two groups, and each group uses just one material per slot. So it’s just two materials in total—clean and easy.

  2. Double-Material Skingroup
    Similar to the simple one, but each slot now uses two materials. Switching swaps two materials with another two. It’s still straightforward, just doubled up.

  3. Triple Skingroup
    Each slot still uses two materials, but now there are three groups. You can swap two materials with four others across the other two groups. This gives you more variety and combinations.

  4. Mixed Skingroup
    This one’s a bit more advanced. You can reuse the same material for some slots across different groups while changing others. For example, one slot stays the same across two groups, while another slot switches materials. Essentially, you can mix and match freely between groups.

This is just a basic rundown of how skingroups work and how they’re used, similar to the "$bodygroup" command. You can create your own skingroups with multiple slots—three, four, six, eight, or even ten. Unlike "$bodygroup", skingroups allow for extensive mixing and matching between groups.

So, simply copy one of them, put it into your model's QC file. Hey, I heard you asking "Where do I put those commands in QC?. Put them under $cdmaterial" command. Just like this one.




Ya. That's how you put those commands. So, you might be thinking, How should I edit it?. It’s simple. First, rename "My colorgroup type x" to whatever you want. The name itself doesn’t matter and won’t appear in-game. Then, replace "TextureA/B/C" with your actual materials that you’ll use for color variations.



For example, in the screenshot, I replaced the placeholders with the material names of my color variation textures. Make sure the names match exactly with what you put in your "QC" file. If they don’t, the textures will show up as missing in-game.






















You can also add multiple "$cdmaterial" commands if you want your materials and color variation materials separately and clean. But make sure you also create the folders for them.



After all, you'll have to compile the model again and test it in Model Viewer. Simply click "Model" tab and click "Skin 1" and switch between the groups.



❖─────────❖─────────❖
《 👐 Custom Arms · I 》
Using a player model in Source needs "custom arms (C-arms)". By default, first-person arms are the Male ones. To fix this, we’ll add your model’s arms.

I’ll show you two ways: the Fast way and the Better way. Both start the same, but the Better way adds extra steps in Pose Mode for a cleaner result. Don’t worry—it’s easy with me.

-- "Removing the Body” --

As the name suggests, we only need the arms, not the "body". Import your model first, but only the body and clothing on the arms. Skip the head and any parts unrelated to the arms. For this section, I’ll use a harder example.

[💡Tip ]
》Click "File", "Import", and then "Source Engine (.smd, .vta, .dmx, .qc)". Remember, the First part uses "Make New Armature" mode, and the rest uses "Validate against target" for "Bone append" mode.




Imported? Cool. Let’s start. First, hide the armature — click the eye icon next to "proportions". Then switch to "Wireframe" by holding "Z" and hovering over it. Select one part, press "A" to select all, then hit "Tab" to enter "Edit Mode".




Now switch to the "-Y" view using the "Viewpoint preset" button. This makes it easier to remove extra parts. Use "Box Select" — just press "B", drag over the middle parts, then press "Del" and choose "Vertices". See below.




Bam! The body’s gone. Check for leftover vertices by pressing "A". Always use "Wireframe" for this — other shading modes only select front vertices, but "Wireframe" lets you grab everything through the mesh.

Next, clean up the parts. Even after deleting vertices, "Blender" still shows them. Switch back to "Object Mode" ("Ctrl + Tab""Object Mode") and remove leftover parts from the "Outliner". Select each one — if nothing highlights on your model, delete it.




That’s it for the "Fast" method. Time to export the arm. No need to merge parts — we’ll use them as "armgroups", same as bodygroups. Set your export path to "C-arm Export" inside the "Custom arms" folder in the template. Choose "DMX" and export as "Scene Export".



But, for the "Better" method, we’ll go deeper. It looks complicated, but if you’re comfortable with the tools, you’ll manage.


-- "Making C-arms in a Better Way · I [Optional]" --

This method is more accurate but harder. Skip it if you prefer simple setups or if your model’s arms/fingers are basic. Only do it if you really want to.

First, "Import" the default C-arm. Go to "Custom arms""Default C-arm" folder, then import "c_arms_citizen.dmx" with "Make New Armature" mode. This will bring in the default C-arm.




The default C-arm's height might be higher/lower than your model. Simply select it and its armature, then adjust the position to match your model’s height by moving it up or down. Press "7" on the numpad to switch to the "Z" axis (top view). From there, select your model’s C-arm and armature, then align it with the default C-arm by moving along the "Y" axis using the green gizmo arrow. Don’t forget to apply transforms!

[💡Tip ]
》Recommended to use "Tranform" tool instead of using "Move" and "Rotate" in this section!






Now select your model’s armature and press "Ctrl + Tab" to enter "Pose Mode". Here we’ll match your C-arm to the default. Start with the forearm bone (left or right). Use the "Bone" tab or "Outliner" to confirm selection. Move it along the "X" axis (red arrow) to stretch the arm until it lines up with the default C-arm. Don’t worry if it looks stretched — simply adjust the length to match. No need for perfection. See below.




Next, match the fingers — the hardest part, but perfection isn’t required. Stretch them to match the default C-arm roughly. If your model has large fingers (like a robot hand), skip exact fitting — adjusting the forearm is enough, and it’ll still work with the default in "Blender".




Use Move and Rotate tools to match. Start with the "Thumb". Default C-arm thumbs may be rotated, but most models aren’t. Select "ValveBiped.Bip01_L_Finger0" (first thumb bone), then rotate/stretch as needed. Adjust the "Forearm" too — stretch more or less to line up with the fingers. See below.






Now for the other fingers. Sometimes you may need to move your model’s C-arm to match the index, middle, and ring fingers. Don’t hesitate — adjust as needed. You might also need to stretch the "Forearm". Always select your model’s C-arm armature and apply transforms after each move. Adjust gradually while matching. See below.




I haven’t adjusted everything perfectly yet, so we’ll fix it afterward if needed to avoid mismatching the thumb. Next, match the "Index" and "Middle" fingers. Select each bone in order: stretch the first, then the second, then the third, rotating as needed until it matches. See below. It can be a bit tricky.




Alright, yours might be easier or harder. Mine is a hard one. Don't give up on fitting the fingers. Anyway, that's only fitted from the top view. Not in the front view. We'll see more in Part II.


《 👐 Custom Arms · II 》
[🗒️Note ]
》Only if you're doing C-arms in the second method. Scroll down to "Editing C-arm QC” if you're doing the "Easy" method.

Now, let’s adjust the fingers from the side view. This step is easier since we already aligned them in the top view. You won’t need to stretch the fingers or the forearm anymore — just focus on rotating each finger so it fits naturally in the front view. This final adjustment helps the C-arm align more accurately with the default position of the C-arm.

-- "Making C-arms in a better way · II" --

Ok, in most cases, you can just select the default C-arm and its armature, and then move a little bit up until it matches the height of your model's fingers.
[🗒️Note ]
》I used "Solid" shading mode in the GIF.




You might also need to rotate or move some fingers to fit. It's just how it goes.. See below for more..








I know the default C-arm is a bit deformed. The original is in "A-pose", which makes matching tricky. My friend converted it to "T-pose" with some finger tweaks — probably ran into some issues. We don’t need a perfect fit for our model’s arm, so I’ll assume this side is done.

But, that’s just one side. You’ll need to fit the other side too. It’s the same process, so give it a try on your own. Don’t rush — take it easy.




Both sides done? Great. Hide the default C-arm and its armature. Next, we need to apply our bones’ pose. Blender won’t let us do this directly, as stretched parts would revert.

First, press "Ctrl + Tab" to switch to "Object Mode". Select your model’s arm or a part, then go to the "Modifier" tab (blue wrench icon). You’ll see the "Armature" modifier — click the small arrow next to the camera icon and choose "Apply". Repeat for all parts. See below.




And then, Select your model’s armature and press "Ctrl + Tab" to enter "Pose Mode". Press "F3", type "Apply pose as Rest Pose", and click it to save your edited pose.

Switch back to "Object Mode". Select a part, go to the "Modifier" tab, click "Add Modifier""Deform""Armature", then assign your model’s armature ("proportions") in the "Object" box. Repeat for all parts.

Finally, apply all transforms: select everything ("A") → "Ctrl + A""All Transforms".

That’s it — our "C-arm" is ready to export. No need to merge parts; we’ll use them as "armgroups" via the "QC". But, "armgroups" is just a name. "$bodygroup" defines it. Set the export path to "C-arm Export" inside the "Custom arms" folder in the template. Choose "DMX" and export as "Scene Export".



-- "Editing C-arm QC” --

First thing, you'll have to copy the "anims" folder from your proportioned model folder into the "C-arm Export" folder inside the "Custom arms" folder. There'll also be a "anims" folder inside the "C-arm Export" folder. We'll also use proportion trick animations from our model. It fixes some issues with the fingers. Anyway, Time for editing the "QC" of the C-arm.

Tired of "QC" editing?. Don't worry, this one is easy peasy and very short.
Go inside the "Custom arms" folder.

First one you're going to see is "$modelname".. Familiar, Right?. Just replace "Model arms name.mdl" with the name you want as output in "C-arm" files. Example as "My model_arms.mdl".

Next one is "$bodygroup" commands. You know how you can work with them. Don't ya. Simply use them as you want to. You can remove every "$bodygroup" if there aren't any other parts than the arm.




Last command you're going to edit is "$cdmaterials". It's easy. Just copy the path from your model's "QC" and paste it into your arm "QC".



You can ignore the commands below. And then, save it. Compile the "QC". And view it if you want to. Just to know, viewing C-arms inside "HLMV" doesn't work properly. Test it in-game after the "Lua" section.


《 📜 Lua & Add-on 》
We’re almost done. Adding your model into Gmod is actually very simple — it just requires the proper folder structure. Luckily, the template already has this structure set up and ready to use.

Also, "Lua" is completely optional if you’re only planning to use your model as a "Ragdoll". However, since you’ve already spent hours working on this model, it’s definitely worth setting it up as a "PM" and "NPC" too, so you can get the most out of it.

-- "Addon Structure" --

Firstly, we’ll grab our model files. You can find them inside the "Compiled" folder, which is located in your "Work folder" within the template. Go into that folder and copy all of your compiled model files — "MDL, VTX, PHY, etc.".

Next, go back and open the "Addon" folder. Inside, you’ll see a single folder named "My model". Rename this folder to whatever you want as your addon’s name. Once inside, you’ll see three folders: "models", "materials", and "lua".

Head into the "models" folder. Here, you can either paste your files directly or create a new folder (named however you like) to keep things organized. Finally, paste all your compiled model files into that folder.




Now, we can use our model in-game, without textures. Yup, we still need our materials. Go into the "materials" folder inside Gmod's main folders. The folder where you converted your textures and materials.




Remember that material folder?. Alright, simply copy your material folder and paste it into the "materials" folder inside your addon folder.




And, it's time for "Lua". You can completely ignore this if you're only going to use "Ragdoll" only as I said before.

-- "PM & NPC Lua" --

Editing "Lua" is easy, but you’ll need to pay attention to the file paths (similar to "$cdmaterials" in your QC). Now, go back and open the "lua" folder, then inside "autorun". Everything in here runs automatically when Gmod starts.

You don’t need to make one from scratch. In the "PM & NPC Lua" folder, you’ll see two example files — one normal, one clean. I recommend starting with the normal one for this one. Just copy it, paste it into your "autorun" folder, and rename it to whatever you like (remember, only lowercase letters).




The normal lua file explains a lot of stuff on its own. But I know it's not enough for a beginner like you. Let's get started.

First two lines are for "PM". Aka. Playermodel. The first one "player_manager.AddValidModel" adds your model as "Playermodel" into the game. The second one "player_manager.AddValidHands" adds your model's custom arms into the game. Editing those two lines is pretty simple.

Replace "Name" from both lines with the name you want to give to your player model. Both of the names must be the same. Don't even try to give "my model" and "my model arms".I'm serious. And then, we'll replace "My model/Name/modelname.mdl" with the path you made for your compiled model files and your model "MDL" name. Example shown below.






[⚠️Warning]
"models" in your path must included. "Lua" will read your model files starting from "models" folder. So, add "models" first and then your path and your "MDL" file name.

That's one for adding "PM". The next one will be for adding "NPCs". "Friendly" and "Hostile" both.

First thing we're going to edit is "local Category". This one is very simple. Just replace "Category" with any name you want your NPC to appear under in the "NPC" tab of the spawn menu.




Next, there are two groups of commands: one for "Friendly" and one for "Hostile". Start with the "Name Friendly/Hostile" command — replace both with the name you want, e.g., "xxxxx Friendly" and "xxxxx Hostile".

Do the same for the "list.Set(" commands — replace "Name" with your model’s name, not "NPC". See below.




Alright, Next one you're going to edit is "Health". You can leave it at "100" or edit it to any amount you want. Another one, same as it is "Numgrenades" for hostile. You can edit or leave it as "4" for the amount of grenades the hostile NPC will carry.




Alright, the last command we're going to edit is the path for the NPCs. But, hey, Wanna speed this up?. Remember the "Fine & Replace" function?. Simply select "My model/Name/modelname.mdl" and press "Ctrl + H". And, copy the path from "player_manager.AddValidModel" you set for the "PM" and put it in "Replace with" and click "Replace all". Job done.

[⚠️Warning]
》You'll have to edit the name of the ".MDL" if you compiled models for PM, Friendly, and Hostile. Example as "Model = "My model/Pal/Pal_friendly.mdl",.

-- "Testing in-game" --

We’re almost done. Now, place your addon folder into Gmod’s addon folder. Just copy the folder you renamed — not the "Addon" folder itself — and paste it here:

"C:\Program Files (x86)\Steam\steamapps\common\GarrysMod\garrysmod\addons"

[⚠️Warning]
》Your path might be different if you installed Gmod in another location. Just go into the main folder and go into "garrysmod" folder and you'll see "addons" folder.




You can boot up your Gmod and test your model now. You will need this addon for your model to show up in the spawn menu.

When you're in, you'll see "Addons - Legacy" under "Browse" section in "spawnlist" tab. Expand it and you'll see your addon folder's name. Click it and you'll see your model. That's where you're going to spawn the ragdoll of your model.




Spawn it, Fling it around with "Physic Gun" and see if there are any issues. No issues with ragdoll?. Now, click "NPCs" tab. You'll see the category of your model that you renamed in the Lua file. Click it and spawn the "NPCs". Spawn both of them and see if it's missing. If not, you're done..!



[💡Tip ]
》If there are any issues, Visit "Errors & Solutions" sections!

Alright!. That's all. You ain't going to see "Spawnicons" for the NPCs for now. You can learn to make them in the next section.

"It always seems impossible until it’s done."
— Nelson Mandela

《 👥 NPC spawnicons 》
Ok.. You want spawnicons for your NPCs?. Fine, it's easy. Just follow my instructions carefully. We're going to mess with "VTFEdit" a bit.

-- "Making Spawnicons" --

First, you need to make 2 screenshots in-game for the friendly and hostile spawnicons. These can be simple, low-effort shots or fancy ones that really show off your model — it’s up to you. This is for the "Spawnicon", so just make sure it represents your model.

If you’re not confident posing in "Gmod", you can also make spawnicons in "HLMV++". Load your model via "Crowbar", click "Sequence""Reference", and pick any animation. You can use the little blue button in the "Frame" bar to pause on the exact frame you want for the perfect pose.




[💡Tip ]
》Some animations can't be stopped, and some animations may be broken and cause your model to stretch. Don't worry. It's fine as it is. You already tested your model in-game. Don't ya?.

I recommend using "idle_suitcase", "LineIdle01/02/03", "plazaidle1/2/3/4, "Seafloor_Poses", "sit", "sitcouchknees" and more..

After that, click "Flex", Pose your model's face. Example as a happy face for friendly and an angry face for hostile.




and click "options" and then "background color". You can change background colors to green for friendly and red for hostile. Zoom in close to your model. Don't move the camera away from the model. Also, if there are two floating yellow things, go to "Render" and click "Enable IK".


















Alright, that's an example. To take screenshots, click "Options" and click "Make screenshot". You can also use "Win + Shift + S" for taking screenshots, and it's better. Save the screenshot anywhere you want. Do the same for another spawn icon.




Somehow, I had to optimize a lot for this GIF, so sorry for the noisy GIF..
Ok, we'll crop the screenshots to be exactly "1:1". We'll go into this page[squareanimage.com]. It's an online tool where you can easily crop the images to exactly 1:1. Click "Upload images". Upload both of your screenshots. And use the slider to resize your screenshot.




Just like that.. And click "Download Current Image" when you're satisfied. Do the same for the other one. So, download both of them.

When you're done. Open two "VTFEdit". Because we're going to work with two spawnicons. Import the cropped spawnicons into "VTFEdit". But, We'll change the "Maximum Width" and "Maximum Height" to "1024". You can use any formats I described in "VTF & VMT · I" section, but why not go with "BGR888" :). After that, click "OK".




Alright, wait a thousand years. Just kidding. They should be imported at the lightspeed. If not.. Then idk. We'll save them. Click the "Save". But, we'll need to create two folders inside our addon's "materials" folder. "vgui" and "entities". See below. I'm tired of typing lol.




We'll save the file, but the name of the file. Remember what we gave the name at the "list.Set( "NPC", "XXXXX (Friendly/Hostile)", NPC ) " in our lua?. We'll save the "VTF" by the name you edited in that line. For example, Mine is "list.Set( "NPC", "Pal (Friendly)", NPC )" for friendly NPC. So, I'll have to save the "VTF" as "Pal (Friendly).vtf". Simple.







And, we'll create the "VMT" for it. Click "Tools" and "Create VMT File". Click "options" and select "UnlitGeneric" in "Shader". Untick "Translucent" and tick "Vertex Alpha" and "Vertex Color". Save it. It'll be the same name as "VTF", so you don't need to worry about the name for the "VMT".




That's all. Do the same for another one. And your NPC spawnicons should show up in-game. If not, Double-check if your "VTF" name and the name from "list.Set( "NPC", "XXXX (Friendly)", NPC )" is matched.






《 🌍 Publishing [Optional] 》
Ooo. Uploading your work. Good. You're telling the community that you made something!. Let's publish the work in "Workshop". We'll use "Crowbar" for this as well. I know it's very useful. Thanks to "ZeqMacaw" for making that tool.

-- "⚠ [Important]" --

Alright, hang on. I’ll have to warn you about something before you upload your model. This is important, and you can get banned for days if you break that rule. Steam does have a system for copyright law called DMCA. It’s a copyright system, and you might’ve heard the Nintendo addons got taken down from the GMod Workshop due to copyright reasons. I just want to warn you that you shouldn’t upload your model if it’s paid and copyrighted. Don’t even think about uploading copyrighted models.

Let’s just consider it from the model author’s side — He/She might’ve worked very hard on the model to get paid from it. Maybe they’re a college student saving money from their creations. Even if they make NSFW models — I don’t care. But please, don’t upload copyrighted content.

You can upload models if they are:
  • Free
  • – Or you have permission from the model author, even if it’s paid or copyrighted.
Example as this Ultrakill model I uploaded. It’s a free model and doesn’t have any copyright issues. You might ask “What about the Chinese modders and some others who are uploading them?”
Yeah, even if they’re doing it, you shouldn’t. I don’t like them.

So if the model is paid or copyrighted, just keep it as yours. You ported it, you deserve it — just don’t upload it. Thank you.

-- "Publish your mod" --

So, Open "Crowbar". Click "Publish" and you'll need to select the game to "Garry’s Mod" if you haven't selected it. Oh, hey, before you publish. Make sure your "Steam" is running. As it says "Publish requires Steam". In this time, "Crowbar" will use "Steam" directly for publishing your add-on. Sounds cool, right?




Ok, we'll click the small button named "Refresh Game Items". It's a small green button. It'll refresh and load workshop items if you published before, but it won't, as you haven't uploaded anything. So, we'll add an item by clicking "Add Item".




We'll add some stuff here. First thing we're going to do is "Title". Give the title for your addon. Example as "Pal - Playermodel/NPC & Ragdoll". Or something fancy. This is important as the title will attract visitors. Simple addon titles won't work well :).

Another one is "Description". You can just type random things for now and leave them. We'll edit them in "Steam page" of our addon. And, we'll select our addon type from "Server Content" to "Model". Yes, you ported a model. You're going to upload a model. You can select "Tags". If your model is a cartoon character, go with "Cartoon" and "Comic". You can select up to two tags.




We'll select our addon files in "Content folder or File". Click "Browse". Browse into Gmod's addon folder where your addon folder is located. You'll have to go into your addon folder and click "Open". Don't go into "materials", "models" or "lua". That's it. Your addon folder will be selected.




The last one we're going to do is "Preview" image. For this, you can use any images or screenshots that are "512x512" or "1:1" size. Go do a preview in-game or use "HLMV" just like we do spawnicons, but without background colors. Use the online tool we used for "Spawnicons". Simply click "Browse" and select your preview image. And set "Visibility" to "Hidden" for now. And click "Publish". Just wait till it's done.




-- "Edit Workshop page" --

When your model is uploaded. Click "Open Workshop Page". It'll open your addon's workshop page. We'll edit the "Description" and add more images. Click "Edit title & description". You can edit the addon's title and description from there.




You can use "BBCode" system for fancy description. See here!. You can also add more images from "Add/edit images & videos". Every image & video shouldn't be bigger than "2 MB". It's a tight limit, but try to survive with that :P.



And change the addon's visibility by clicking "Change Visibility" to "Public". Or change to "Friends-Only" if you want your addon to be only accessible from friends. That's all. You just uploaded your work!. Good luck porting more models and uploading more!.

"I used to be a modder like you; then I took a Crowbar in the knee."
— ZeqMacaw


❖─────────❖─────────❖
《 ❌ Errors & Solutions · I 》
Oh, Errors when you compiled the model? Or any other issues? I know it's very frustrating. But hey, I'm here to help you. None of the guides tell you how to solve the errors until you comment on the guide and wait for days for the creator to finally reply with the solution.

I'll be listing every solution modders mostly encounter when compiling models. Feel free to wander around and search for the error you got from compiling.

-- "Complie Errors" --
  • Error 1 : ”ERROR : X.qc(Y): - Could not load file Z.DMX"
    Known Causes : The "Z" DMX file on line "Y" of the "X".qc could not be loaded/found.
    Solution 1 : Check the line number ”Y” in your QC and see if the DMX file name is correct. Common in ”$bodygroup” commands.
    Solution 2 : Make sure that the DMX file is in the same folder as the QC.

  • Error 2 : ”ERROR : Too many bone influences per vertex!”
    Known Causes : Vertices in model linked/weighted more than 3 bone weights at once.
    Solution : Import your model, set the ”Weight Link Cull Threshold” to “1.00” and export and try again.

  • Error 3 : ”ERROR: Too many bones used in model, used X, max numbers 256”
    Known Causes : Model used more than ”255” bones in compilation progress.
    Solution : Try removing some Jigglebones until it reaches ”255” bones. Remember, Try to balance the jigglebones.

  • Error 4 : ”Line X is incomplete”
    Known Causes : Line ”X” is incomplete or incorrect.
    Solution : Check line ”X” to see if it’s incomplete command or incorrect.

  • Error 5 : “ERROR: X.qc(Y) - Bad command Z”
    Known Causes : This means the command “Z” inside line “Y” of “X.qc” is invalid or not recognized by the compiler.
    Solution : Open “X.qc”, go to line “Y”, and look for the command “Z”. That’s the incorrect part causing the error. Fix it.

  • Error 6 : “ERROR: Too many materials used, max 32”
    Known Causes : This means your model used more than ”32” materials or too many ”$cdmaterials” lines that together add up to ”32”.
    Solution 1 : You won’t get this error unless your model is very bloated or has color variations used. Merge same textures in ”Optimization” tab inside ”CATS” addon.
    Solution 2 : If your model has color variations, compile the normal version of the model and the Color variations version of the model separately. Make sure you removed ”$skingroup” lines and ”$cdmaterials” lines that use color variations textures in the QC when you compile normal one.
    Solution 3 : If your model used exactly ”32” materials. import your model and physics mesh. Select your physics mesh. Go inside ”Materials” tab and select the material “phy”. Click the small arrow on the left side and select any materials from your model, and export them. Try compiling, and it’ll be solved. Keep in mind that physics mesh also uses one material. But using this trick solves it.

  • Error 7 : “ERROR: Too many texture coordinates in model! ”
    Known Causes : Too many UV islands. Very rare in "SFM" compiler as it can handle more UV islands than Gmod's one. You must be an unlucky guy if you got this.
    Solution : Try to split up your model's parts. So, every DMX will store fewer UV islands.

  • Error 8 : “ERROR: 'EXCEPTION_ACCESS_VIOLATION' (assert: 1)”
    Known Causes : Having too many vertices. Classic error for model porters.
    Solution 1 : Everyone would tell you to optimize the model, but this error won't show up if you don't delete the "$maxverts" command from QC. It'll allow you to compile models with a lot of vertices. I even compiled models with millions of vertices. If you accidentally removed it, add it back. You won't have to optimize your model.
    Solution 2 : Sometimes, It can show that error even you have ”$maxverts” inside. Check your model’s parts and you might find a part with a lot of polygons like over 100K. Then, Separate it to two or three parts and add them as bodygroups. Compile again and you’ll be fine. This only happens with models that have only a single mesh or a few meshes while being very high-poly.

  • Error 9 : “ERROR: 'EXCEPTION_STACK_OVERFLOW' (assert: 1)”
    Known Causes : Same as above, but there can be other causes I don't know.
    Solution : Same as above.

  • Error 10 : “WARNING: Model has 2-dimensional geometry (less than 0.500 inches thick on any axis)!!!”
    Known Causes : Collision model has a hole. Another cause is not having smooth-shaded but my collision models are smooth-shaded.
    Solution : Make sure you didn't delete anything from the collision model. You only need to fit it and not delete the vertices and parts in your way.

That's all of the compile errors you're going to see, mostly. There are other errors, but they're not common and won't happen if you followed the guide carefully. If your error isn't listed here, just comment about it, and I'll add the error and solution here. Let's see the errors you'll encounter inside "HLMV". I advise you to always view models before you use them.

-- "HLMV Errors" --

  • Error 1 : ”Model being pink/black checkerboard.”
    Known Causes : Incorrect VMT name/ VTF name in commands inside VMT.
    Do first : Drag and drop your ".mdl" file into Crowbar's "View" tab. It'll show what materials are being used.
    Solution 1 : Match with your "VMT" file names and material names from the "Crowbar" and rename the VMT if mismatched.
    Solution 2 : Check inside "VMT" and see if the path and texture name for commands such as "$basetexture", "$bumpmap", "$detail" and more commands that needs path to textures.

  • Error 2 : ”Model is invisible, only white wireframe is visible”
    Known Causes : Incorrect shader in the VMT file.
    Solution : Make sure the shader is "VertexlitGeneric". Fix if it's incorrect.

  • Error 3 : ”Model is invisible, not showing white wireframes unlike No.2”
    Known Causes : Accidentally using "$translucent "1" on materials that shouldn't be.
    Solution : Remove "$translucent "1" on materials that shouldn't be used with or materials without any alpha channels.

  • Error 4 : ”Model textures being white”
    Known Causes : Missing $basetexture, Maybe a typo in $basetexture.
    Solution : You might accidentally removed "$basetexture". Add it back. Don't mess around, bruh.

  • Error 5 : ”HLMV crashes/can't view anymore after accidentally unticking ”Normal mapping"
    Solution : I don't know why that happened, but you shouldn't untick it. Also, view your model by using "View as Replacement" again, and it'll be fine.

  • Error 6 : ”Model's parts not attached/floating in middle.”
    Known Causes : That part not being weighted to the main bones or doesn't have an "armature".
    Solution 1 : Make sure that the mesh has a "Armature" modifier. If not, import the mesh with an armature and link it in "Modifiers" just like you did for the "Collision Model".

    Solution 2 : Those parts might not be weighted properly or messed up. See here[streamable.com] for a fix. It's a video tutorial.

    Alright, that's all for "HLMV" problems. Now, it's time for "In-game" errors. They don't show up in other places except "In-game". See in "part II". You know why.


《 ❌ Errors & Solutions · II 》
Sorry for the inconvenience. The character limit striked on me again. Anyway, We're here to see more errors and solutions. For "In-game" errors. Let's see.

-- "In-game Errors" --

  • Error 1 : ”Model being T-pose instead of ragdoll when killed or spawned as ragdoll"
    Known Causes : No armature in the "Collision model".
    Solution : You forgot to use your model's armature for the collision model. Go do that. You shouldn't forget about that..

  • Error 2 : ”Model being T-pose when spawned as NPC"
    Known Causes : No animations in the model for NPC.
    Solution : Add $includemodel commands for the animations and compile the model again.

  • Error 3 : ”Only "Error" model showing up when you spawn the model as NPC."
    Known Causes : Incorrect/missing model's path in "Lua" commands that need the path to the model file.
    Solution : Double-check the path to see if it's correct or not. Check "player_manager.AddValidModel" and "Model" commands.

  • Error 4 : ”ERROR: Rotation constraint on bone "X" which has no parent!!!"
    Known Causes : No parents on bone "X".
    Solution 1 : Make sure that the bone is parented to the correct parent. Example as "Head1" should be parented to "Neck1" and "Thigh" should be parented to "Pelvis".
    Solution 2 : Sometimes, it just pops up randomly even if it's parented correctly. It's extremely rare, but if it happened. Add "$jointmerge "X" "Y". "X" should be the bone you're having problem with, and "Y" for the bone that should be parented.

  • Error 5 : ”Model's ragdoll being stretchy and broken into multiple parts."
    Known Causes : The Collision model has some unweighted parts, which caused the ragdoll to break into parts.
    Solution : You might have accidentally removed the weights or some vertex groups from the collision model. Don't do that. You'll need to weight the missing parts and also add vertex groups for them, or redo without messing around.

  • Error 6 : ”Model completely invisible, No white wireframes."
    Known Causes : Incorrect ".vtx" file name or different name from other model files. Example as "pel.vtx" and "pal.mdl". It will result in an invisible model as it can't find the vertex file of the model.
    Solution : Double-check if the ".vtx" file and other model files' names are matched.

    Alright, that's all of the errors I encountered. I might've missed some errors I encountered, but comment if you got any errors I didn't list here. I'll add that error to these sections. Have fun solving errors!.


❖─────────❖─────────❖
《 🏁 Final Words 》
Huge congratulations! Completing this guide means you’ve mastered the process from start to finish. From importing and adjusting your model to editing QC and Lua, to generating spawnicons — you’ve done it all. Now your models are ready to shine in Gmod, and you can proudly call yourself a true model porter!. :D



Look at yourself now. You've become the modder I wanted to be.
I truly hope you keep going, keep creating, and become the kind of modder that the GMod community remembers.

If you ever need some help or have a problem with using this guide. Join my Gmod modding server[discord.gg]. It's called "Gm_Modding".



Oh—and if this guide helped you out, feel free to share it with someone who needs it.
Or if you used this for your add-on, a little credit in the description would mean a lot. Thank you!


《 🖼️ Gallery 》
I'll put your artworks or screenshots made using your ported models here!. Feel free to comment below with a link to the artwork/screenshot and a title for it, and it'll be added. No NFSW allowed..



《 👑 Credits & Changelogs 》
Credits to everyone who deserves it and, ”Changelog” for the guide.

”Credits”

Writing the guide
My friend who taught me a lot of stuff about Source Engine.
The creator of Blender Source Tools.
The creator of Crowbar modding tool
The creator of HLMV++ and Hammer++
The one who made the Bone rename script
For using this guide!. Thank you :D

”Change Log”

V1.0 - ”Guide released!.”

• Released the guide.
──────────────────────────────────────────────────────

V1.1 - ”Small update.”

• Small grammar fixes.
• Added Emojis to section headers.
• Clarify "Bone Rename" section.
• Add more images to some sections to make the guide not bloated with text.
I'm fixing some sections. So, report any issues or parts that you're not clear about.
──────────────────────────────────────────────────────

V1.2 - ”Another Small update.”

• Added missing $bonemerge lines into the QC files.
• Removed Alyx, Kleiner, Zombie, and Metrocop animations as they are not useful.
──────────────────────────────────────────────────────

V1.3 - "Better C-arm" method update.

• Added a new method and harder method for accurate and better C-arms.
• Added "Proportion Trick" lines for the "C-arms" QC.
• Added Default C-arm and a new folder into "Custom arms" folder.
──────────────────────────────────────────────────────

V1.4 - "Color Variation" section update.

• Clarify and fix some parts of the section.
• Added some examples.
──────────────────────────────────────────────────────

V1.4.1 - ”Some small fixes”

• Fix some parts in ”Editing QC I”. Clarifying that you can remove ”$bodygroup” commands if your model only has a single mesh.
• Added warnings for you to ”Apply transforms” every time you export something or at the part where you’re about to export something.
──────────────────────────────────────────────────────

V1.4.2 - ”Just a Hot fix”

• Fixed broken "Collision Model III" bone weights. You may need to redownload the template file for that.
──────────────────────────────────────────────────────

V2 - ”Rewrite Part : I”

• Fixed broken sections.
• Rewrote some sections.
• Made texts less bloated and sorted.
• Made callouts more obvious.
• Fixed some images.
• Fixed some misinformations.
This is the part I for the "100" ratings update. I'll be adding more sections in "Part II update". Anyway, thank you for "100" ratings as well!
──────────────────────────────────────────────────────

V2.1 - "Small Update to template"

• Added "Collision Model IV" for A-pose Chibi/Small models.
• Removed unnecessary $includemodel lines
• Removed Spine1, Spine2, and Spine4 from $collisionjoint commands as they're not necessary and not bone-weighted in the collision model.
• Changed "Shader" to "ToonShader" as the default in template VMT.
• Changed "Spine2" to "Spine" in collision models.
• Fixed some broken sections in the guide,

──────────────────────────────────────────────────────

V2.2 - "Compiler Hotfix"

• Fixed an issue with collision models being messed up in some models by the modified SFM compiler. I've changed the code of removing weight cull from nothing to 0.001, which fixed the issue. I hope there won't be any other issues with changing to 0.001, as it's still very low.
• Fixed $jointcollide's spine2 to spine.

──────────────────────────────────────────────────────

V2.21 - "Some fixes"

• Fixed some unclear parts.
• Added a video tutorial for fixing the floating/unweighted model parts.

──────────────────────────────────────────────────────

Feel free to report any mistakes and parts you’re not clear about. Also, make sure to keep your eyes on the update logs as I update some important stuff.!

❖─────────❖─────────❖
40 Comments
乃ㄖ乃爪卂匚 Ü  [author] 7 Sep @ 2:32am 
Because your PM’s materials are stored in the “materials” folder of Gmod’s main folder and it got wiped after you reinstalled Gmod..

I think you didn't copy your materials into your addon’s materials folder before doing that..
Killcommand 6 Sep @ 8:25pm 
i have a problem so i made my pm it worked then i reinstalled gmod and now the textures are messed up
乃ㄖ乃爪卂匚 Ü  [author] 5 Sep @ 4:57pm 
Hey, You can "Decompile" the compiled models files (.MDL) into Blender importable files using "Crowbar" . You'll get files such as "SMD (Model files) , QC, VTA and animations"[/b]. You'll need to import them properly when using in Blender. Maybe, Hop into the Discord server. I can help you more there. :GDNormal:
Duan 5 Sep @ 8:02am 
Thank you very much for the tutorial, but I'm sorry, I want to ask if there is a tutorial for gmod importing blender and then importing gmod by the way, I'm noob, but I would love to change the model.
Shiro Azimuth 5 Sep @ 3:21am 
thank you for responding, i thought i was messed something that makes collision models like streched up 🙏🏻
乃ㄖ乃爪卂匚 Ü  [author] 4 Sep @ 11:29pm 
A hotfix for the modified SFM compiler has been released. Before, there was a chance that your model's collision model might get messed up due to a modification in the compiler that removes weight bone culling 5%. Which causes stretchy ragdolls and some weird ragdolls.

Now, it's fixed and changed to 0.001 from almost nothing. I don't know why absolute nothing value breaks some of the collision model's bone weights.

You'll have to update the template to update it.
乃ㄖ乃爪卂匚 Ü  [author] 4 Sep @ 1:08pm 
Yes. This is the right place to learn how to port models.
小卡齐娜3095 4 Sep @ 9:33am 
I came from a reddit user sent me the link to here, i try to figuring out how people port their models from diffrent game in to the gmod? is it help here ?? I try on learn like GLua and port models
hunterject 31 Aug @ 4:08am 
thanks for this Guide!
now i can make vrc avatar to npc model
乃ㄖ乃爪卂匚 Ü  [author] 28 Aug @ 6:52am 
Currently updating the guide. So, You might not have access to the guide sometimes. But, You only need to refresh the guide's page until it loads. Steam has a automation process to check malicious stuff everytime the item gets updated but just for a moment.