Making a custom breakable surface: Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 19: | Line 19: | ||
*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. | *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 | :{{note|It's good practice to name your materials (whatever)001a for the first frame then (whatever)001b for the second frame and so on when you are switching between said materials on a brush face(s) in game}} | ||
==The intact texture== | ==The intact texture== |
Revision as of 09:27, 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 for the first frame then (whatever)001b for the second frame 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).