Making a custom breakable surface: Difference between revisions
(I chose not to use the code ({) format for the VMT code because they included dots at the start of each line. This is my first article, if you believe that you can improve the formatting, go ahead and do it.) |
No edit summary |
||
Line 179: | Line 179: | ||
Modifications to the independent parameters (e.g $lightmaptint) can be made without any loss of functionality, however since func_breakable_surf is mostly used for glass, it has been optimised as such (hopefully). | Modifications to the independent parameters (e.g $lightmaptint) can be made without any loss of functionality, however since func_breakable_surf is mostly used for glass, it has been optimised as such (hopefully). | ||
[[Category:Material System]] | |||
[[Category:Tutorials]] |
Revision as of 09:14, 1 December 2019


What you need
You will need:
- A VTF editor/maker (VTFEdit was used in the making of this tutorial, but VTEX can be used also.) to make the textures VTF files
- A VTF texture to represent the intact material
- A VTF texture with an alpha channel (8-bit for semi-transparent surfaces) to represent the damaged material
A mask for both textures is optional.
Handling the material/texture files
- After you've got your 2 masks and/or textures, place them in the appropriate game/mod materials directory (and whatever subfolders you wish to put them in) (e.g Half-Life 2/hl2/materials).
- Create 2 text documents in the same folder your VTFs are in, with each one having the same file name as a respective VTF. Make sure you have extensions visible and change the file extension to .vmt, or save the text documents as .vmt in whatever text editor you're using.
Note:It's good practice to name your materials (whatever)001a/(whatever)001b and so on when you are switching between said materials on a brush face(s) in game
The intact texture
After you have created the material/textures in the appropriate paths, copy and paste the following code into your intact material VMT:
{
"$basetexture" "(VTF NAME HERE)"
"$envmap" "env_cubemap"
"$surfaceprop" "(Surface properties goes here, it's ***glass*** by default)"
"%keywords" "c17industrial"
"$envmapmask" "(VTF MASK NAME GOES HERE)"
"$translucent" 1
"$multipass" 1
"$nocull" 1
"$crackmaterial" "(DAMAGED MATERIAL PATH GOES HERE)"
{
"$envmaptint" "[ .08 .08 .08]"
}
}

Insert the appropriate paths where $basetexture, $envmapmask and $crackmaterial are specified
Save the VMT in the same folder as your first (intact) VTF file
The damaged texture
The damaged texture needs to have an alpha channel otherwise skybox/black texture will appear when the surface breaks.
Copy and paste the following code into your damaged material VMT
{
"$basetexture" "(VTF NAME GOES HERE)"
"$detail" "(VTF NAME GOES HERE)"
"$envmap" "env_cubemap"
"$surfaceprop" "(Surface properties goes here, it's ***glass*** by default)"
"%keywords" "c17industrial"
"$envmapmask" "(TEXTURE MASK GOES HERE)"
"$translucent" 1
"$basetexturetransform" "scale .7 .7"
"$detailscale" 0.7
"$unlitfactor" 0.0
{
"$unlitfactor" 0.3
// This is roughly equal to the average value of envmapmask of the unbroken texture
"$envmaptint" "{201 201 201}"
}
// On the low end, envmaptint + lightmap tint both use the average alpha value
{
// This is roughly equal to the average value of alpha channel of the unbroken basetexture
"$lightmaptint" "{128 128 128}"
// This is roughly equal to the average value of envmapmask of the unbroken texture
// times the average value of the alpha value of the unbroken base texture
"$envmaptint" "{100 100 100}"
}
"$nocull" 1
"Proxies"
{
{
}
}
}

End
Provided you have done everything right, you should now have a texture that works fully with the func_breakable_surf brush entity provided all except 1 side is Nodraw.
Modifications to the independent parameters (e.g $lightmaptint) can be made without any loss of functionality, however since func_breakable_surf is mostly used for glass, it has been optimised as such (hopefully).