Garry's Mod Wiki


  IMaterial CreateMaterial( string name, string shaderName, table materialData )


Creates a new material with the specified name and shader.

Materials created with this function can be used in Entity:SetMaterial and Entity:SetSubMaterial by prepending a ! to their material name argument.

This will not create a new material if another material object with the same name already exists. All Materials created by this functions are cleaned up on map shutdown.

This does not work with patch materials.
.pngs must be loaded with Material before being used with this function.

Issue Tracker: 1531


1 string name
The material name. Must be unique.
2 string shaderName
The shader name. See Shaders.
3 table materialData
Key-value table that contains shader parameters and proxies.

Unlike IMaterial:SetTexture, this table will not accept ITexture values. Instead, use the texture's name (see ITexture:GetName).


1 IMaterial
Created material


Alternative to render.SetColorMaterial, mainly for use with Entity:SetMaterial

CreateMaterial( "colortexshp", "VertexLitGeneric", { ["$basetexture"] = "color/white", ["$model"] = 1, ["$translucent"] = 1, ["$vertexalpha"] = 1, ["$vertexcolor"] = 1 } )


Sample example of using material proxies. Keep in mind that you can only have 1 instance of each proxy type! This is a limitation of how Lua tables work

local mat = CreateMaterial( "combine_ball_animated", "UnlitGeneric", { ["$basetexture"] = "effects/comball/comball", ["Proxies"] = { ["AnimatedOffsetTexture"] = { ["animatedtexturevar"] = "$basetexture", ["animatedtextureframenumvar"] = "$frame", ["animatedtextureframerate"] = 30 } } } ) hook.Add( "HUDPaint", "HUDPaint_DrawATexturedBox", function() surface.SetMaterial( mat ) surface.SetDrawColor( 255, 255, 255, 255 ) surface.DrawTexturedRect( 50, 50, 128, 128 ) end )