-
-
Notifications
You must be signed in to change notification settings - Fork 11
Materials
Sergey Shavin edited this page Nov 29, 2025
·
24 revisions
This plugin adds almost full VMT/VTF file support with some extensions. VMT files will be imported as regular StandardMaterial3D except some cases.
Note
If you create a Godot Material (*.tres) that has the same name and path as some *.vmt file then the importer will use the Godot's one instead.
You can convert all materials you need into VMT and VTF via the following context menu:

"LightmappedGeneric"
{
$roughnesstexture "path_to_vtf"
$metalnesstexture "path_to_vtf"
$ambientocclusiontexture "path_to_vtf"
$roughnessfactor 0.7
$metallnessfactor 0.3
$specularfactor 0.6
$ambientocclusionlightaffect 0.43
$detailblendmode 1 // See blend modes for detail textures of Godot Material
$emissioncolor "0 255 0 255"
$emissionenergy 10.3
$emissionoperator 0 // 0 - add, 1 - multiply
$texturefilter LINEAR_WITH_MIPMAPS // or NEAREST, LINEAR, NEAREST_WITH_MIPMAPS, NEAREST_WITH_MIPMAPS_ANISOTROPIC, LINEAR_WITH_MIPMAPS_ANISOTROPIC
$shader "path_to_shader" // This path already includes res:// and by specifying this VMT becomes a ShaderMaterial instead of StandardMaterial3D (example: '"$shader" "shaders/gds/spatial_generic.gdshader"')
$nextpass "path_to_next_pass_shader" // This path already includes res:// adds VMTShaderBasedMaterial into the `next_pass` property
}Create a singleton class named VMTExtend in @tool mode and define a function with a name of the property you need to have or override.
@tool
extends Node
func basetexture(material: Material, value: Variant):
if "albedo_texture" not in material: return;
material.albedo_texture = VTFLoader.get_texture(value);
func emissionenergy(material: Material, value: Variant):
material.emission_energy_multiplier = value;For ShaderMaterials (VMTs with $shader) all fields from VMT will be moved directly into uniforms:
shader_type spatial;
uniform sampler2D basetexture; // albedo
uniform sampler2D selfillummask; // emission map
void fragment() {
ALBEDO = texture(basetexture, UV).rgb;
EMISSION = texture(selfillummask, UV).rgb;
}