Skip to content

Materials

Radik edited this page Oct 15, 2025 · 22 revisions

This plugin adds almost full VMT/VTF file support with some extensions. VMT files will be imported as regular StandardMaterial3D except some cases.

Quick Video Tutorial

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:

image

Additional properties for VMT for use in Godot

"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 "res://path_to_shader" // By specifying this VMT becomes a ShaderMaterial instead of StandardMaterial3D
  $nextpass "res://path_to_next_pass_shader" // Adds VMTShaderBasedMaterial into the `next_pass` property
}

Want to add support a new field for the material?

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;

Shader materials

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;
}
Clone this wiki locally