Skip to content

Materials

Radik edited this page Feb 3, 2025 · 29 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 textures you need to VTF via VTFEdit Reloaded

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

  $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;

VMTShaderBasedMaterial

This is a basic ShaderMaterial but also it passes texture parameters into a specified shader.

shader_type spatial;

uniform sampler2D albedo_texture; // Comes from VMT
uniform sampler2D emission_texture; // Comes from VMT

void fragment() {
  ALBEDO = texture(albedo_texture, UV).rgb;
  EMISSION = texture(emission_texture, UV).rgb;
}

Material Sync

GodotVMF provides another one plugin called GodotVMF - Material Sync that automatically converts all godot materials placed in materials.target_folder into VMT/VTF to be able to see them in Hammer during development.

This plugin requires VTFCmd to work. Unpack the archive into your project folder (res://tools/vtfcmd for example), update the config file and turn the plugin on.

// vmf.config.json
{
    "vtfcmd": "res://tools/vtfcmd/VTFCmd.exe"
    ...
}

Clone this wiki locally