BaseMaterial3D in Godot – Complete Guide

Welcome to our tutorial on the BaseMaterial3D class in Godot 4. If you are passionate about creating visually-stunning 3D games, understanding how materials work is essential. Materials define how the surfaces of your 3D objects interact with light, creating effects that can make or break the look of your game. BaseMaterial3D is a powerful and versatile class that simplifies this process, aiding you in achieving the right aesthetic without delving deep into shader programming. So, let’s embark on this journey to discover the potential of BaseMaterial3D and how it can elevate your game development skills.

What Is BaseMaterial3D?

BaseMaterial3D is a default material type in the Godot Engine, designed for 3D rendering. As a base class, it can be extended to create more specific material types such as ORMMaterial3D and StandardMaterial3D. BaseMaterial3D comes packed with a broad range of features that can be easily tweaked within the Godot Editor. This enables developers to create complex visual effects, from lifelike textures to dynamic lighting, without writing a single line of shader code.

What Is It Used For?

Utilizing BaseMaterial3D, game developers can control various properties of an object’s appearance, including its color, texture, roughness, and emission, to name a few. These materials are essential for defining how objects look and feel in the game world. They help simulate different surface types – like the shininess of metal or the translucence of glass – thereby enhancing the realism and immersion within the game environment.

Why Should I Learn About BaseMaterial3D?

Learning about BaseMaterial3D will give you:

– The ability to create intricate and appealing visual styles with ease.
– A robust understanding of how 3D materials work in the Godot Engine.
– An edge in crafting detailed game worlds without the necessity for complex shader programming.

As an integral part of game development, mastering materials allows you to breathe life into your game’s visuals and make them stand out in today’s competitive market. Whether you’re a beginner or an experienced coder, acquiring knowledge about BaseMaterial3D opens up a world of creative possibilities. Let’s dive in and explore how to utilize this class with some coding examples!

CTA Small Image

Creating and Applying a BaseMaterial3D

Before we dive into the particulars, let’s start by creating a BaseMaterial3D and applying it to a mesh. In the Godot Editor, this can be conducted via the Inspector panel with a few simple clicks.

var material =

# Assuming you have a MeshInstance node
var mesh_instance = $MeshInstance
mesh_instance.set_surface_material(0, material)

This code snippet above creates a new BaseMaterial3D instance and assigns it to the first surface material of a MeshInstance node. Remember that surface indexing starts at 0.

Adjusting Material Properties

The appearance of your mesh can be drastically altered by changing the properties of its material. Here’s how to adjust some basic properties programmatically:

# Set the material’s color
material.albedo_color = Color(1, 0, 0)  # Red

# Make the material emit light with a specific glow color
material.emission = Color(0, 1, 0)  # Green
material.emission_energy = 0.8

In the first line, we set the albedo color to red. Albedo reflects the base color of a material. The latter lines make the material emit a green glow, giving it an energy level of 0.8, thus enabling a basic emission effect.

Working with Textures

Textures can significantly enhance the aesthetics of any material, and BaseMaterial3D makes it a breeze to add them:

# Assuming you have a texture resource
var texture = preload("res://textures/wood_texture.jpg")

# Apply the texture to the material
material.albedo_texture = texture

The code loads a texture from the project’s resources and applies it as an albedo texture, which will provide the object with a wood-like appearance.

Handling Metallic and Roughness Properties

To simulate different types of surfaces, you can alter the metallic and roughness properties of your material. Here’s how:

material.metallic = 0.5  # 0 is non-metallic, 1 is metallic
material.roughness = 0.2  # 0 is completely smooth, 1 is completely rough

This segment of code sets the material’s metallic property at a midpoint, allowing for partial reflection. It also makes the surface quite smooth with a low roughness value.

Implementing Transparency and Alpha

Transparency is key when creating materials for glass or other see-through objects. To enable transparency, use the following:

# Set the flag to render the material as transparent
material.flags_transparent = true

# Set the alpha value of the albedo color for transparency
material.albedo_color = Color(1, 1, 1, 0.5)

The first line tells Godot to render the material with transparency, and the second line sets the albedo color to white with a 50% opacity level.

In this part of the tutorial, we’ve covered creating a BaseMaterial3D, working with basic properties, textures, metallic and roughness settings, as well as implementing transparency. You’ve taken the first steps towards mastering how to manipulate the properties of BaseMaterial3D to start creating dynamic visual effects for your 3D games! Stay tuned for our next section, where we will delve deeper into the advanced properties and capabilities of BaseMaterial3D.As we continue exploring BaseMaterial3D, we’ll delve into some of the more nuanced features that enable even greater control over the visual aesthetics of your game models.

Normal Mapping for Added Realism

Normal mapping is a technique used to fake the lighting of bumps and dents on textures, providing a sense of depth without the need for additional polygons. Here’s how you can set a normal map in BaseMaterial3D:

# Assuming you have a normal map texture resource
var normal_map = preload("res://textures/wood_normal_map.jpg")

# Apply the normal map to the material
material.normal_texture = normal_map

Applying a normal map can significantly enhance the level of detail on the surface of your object, giving it a more realistic and complex appearance with minimal performance cost.

Using Emission for Light Effects

Emission can make parts of your material appear as if they are emitting their own light, which can create effects like glowing screens or bioluminescent creatures:

material.emission = Color(0, 0.5, 1)  # A soft blue glow
material.emission_energy = 2.0  # Brightness of the emission

With emission properties, you can imbue your objects with a dynamic light source, enhancing atmospheric and visual storytelling in your game’s scenes.

Adjusting Refraction for Glass-like Materials

Refraction manipulates the material’s ability to bend light, crucial for creating realistic glass or liquid materials. Here’s how to adjust the refraction in BaseMaterial3D:

material.refraction = 0.05  # Amount of light bending

Even subtle refraction can create a convincing illusion of light passing through glass, water, or other transparent substances.

Detail Mapping for Enhanced Textures

Detail maps allow you to add texture details without requiring higher resolution base textures, which can be an efficient way to enhance the surface intricacy of your models:

# Assuming you have a detail map texture resource
var detail_map = preload("res://textures/wood_detail_map.jpg")

# Apply the detail map to the material
material.detail_albedo = detail_map

By adding a detail map, your materials gain additional complexity that can bring out the realism of your textures, especially when viewed up close.

Configuring Rim Effect for Stylish Edges

The rim effect adds a subtle highlight to the edges of your models, which can make your character or object stand out against various backgrounds:

material.rim = 0.3  # Rim intensity
material.rim_tint = 0.5  # The amount of albedo color applied to the rim

This effect gives a more distinct silhouette to your characters or objects, which is particularly appealing in stylized or cartoony graphics.

Setting Up Subsurface Scattering for Skin and Vegetation

Subsurface scattering simulates how light penetrates translucent materials like skin or leaves, giving a more lifelike representation of such materials:

material.subsurface_scattering_strength = 0.8

By adjusting subsurface scattering, you can create soft light diffusion characteristics of organic and inorganic materials, adding an extra layer of depth and realism to the visuals.

By experimenting with these code snippets and exploring the comprehensive range of properties that BaseMaterial3D has to offer, we enable ourselves to craft diverse and interesting visual effects that can significantly impact the player’s experience of our games. As we wrap up this tutorial, remember: the key to mastery is practice, so don’t hesitate to experiment with these properties and others to fine-tune the look and feel of your 3D models to perfection. Happy game developing!Certainly! Let’s explore additional capabilities of BaseMaterial3D to further enhance the visuals of our 3D scenes in Godot.

Creating Anisotropic Effects

Anisotropic reflections mimic how certain surfaces, like brushed metal or hair, scatter light in a particular direction. Achieving this look in Godot is straightforward:

# Enable anisotropy and set its level
material.anisotropy = 0.5

# Assuming you have an anisotropy flowmap texture
var flowmap = preload("res://textures/anisotropy_flowmap.png")

# Apply the flowmap to the material
material.anisotropy_flowmap = flowmap

These settings apply anisotropy to the material, with the flowmap guiding the direction in which the surface scatters light, giving it a distinctive, directionally-reflected appearance.

Utilizing Clearcoat for Additional Layer of Reflection

Clearcoat can be used to simulate a clear, reflective layer on top of a material, like the clear coat on car paint or varnished wood:

# Enable clearcoat and set its intensity
material.clearcoat = 0.8
material.clearcoat_gloss = 0.9

This layer cooperates with the base reflection properties, providing an extra level of depth and realism with reflections that simulate a protective enamel or varnish.

Depth Mapping for Displacement Effects

While normal maps simulate the appearance of depth, depth mapping actually displaces the surface of an object, providing a more tangible sense of relief and texture:

# Assuming you have a depth map texture
var depth_map = preload("res://textures/depth_map.png")

# Apply the depth map for displacement
material.depth_texture = depth_map
material.depth_scale = 0.1

Depth mapping can contribute to a compelling sense of realism, especially when the lighting interacts with the displaced surfaces to cast shadows and create highlights.

Incorporating Ambient Occlusion for Soft Shadows

Ambient occlusion strengthens the sense of weight and contact between objects by simulating the way light is occluded in tight spaces and crevices:

# Assuming you have an ambient occlusion texture
var ao_texture = preload("res://textures/ao_map.jpg")

# Apply the ambient occlusion texture to the material
material.ao_texture = ao_texture

Texture-based ambient occlusion is a cost-effective way to add shadows that enhance the three-dimensional form of objects without necessitating dynamic shadow calculations.

Enhancing Detail with UV2 Mapping

Godot’s materials allow secondary UV2 mapping for detail layers, lightmaps, or any texture information that requires a different UV map:

# Assuming you have a detail texture that uses a second UV map
var detail_texture_uv2 = preload("res://textures/detail_uv2.jpg")

# Apply the detail texture using the second UV map
material.detail_albedo_texture = detail_texture_uv2

By using a second set of UVs, you provide additional texture detail that can be manipulated independently of the primary UV mapping, helpful for multi-layered materials or optimizing lightmaps.

Dynamic Adjustments with Shader Parameters

Lastly, you might want to adjust material parameters dynamically during gameplay. This can be accomplished using the material’s shader parameters:

# Dynamically change the material color during runtime
material.set_shader_param("albedo_color", Color(0.8, 0.2, 0.2))

# Increase the emission energy over time
var new_emission_energy = material.get_shader_param("emission_energy") + 0.1
material.set_shader_param("emission_energy", new_emission_energy)

Adjusting shader parameters in code allows for versatile in-game effects such as objects changing color under certain conditions or emitting pulses of light energy.

With these code examples and explanations, you now have a robust set of tools for creating advanced materials in Godot 4 using BaseMaterial3D. Remember, the secret to creating breathtaking visuals in 3D game development lies in experimentation and an imaginative approach to using these material properties to their fullest potential. Enjoy bringing your artistic visions to life in Godot!

Continuing Your Godot Journey

Congratulations on reaching the end of this tutorial on BaseMaterial3D in Godot 4! Your learning journey doesn’t have to stop here, though. To dive deeper into the world of game development and to refine your newfound skills, exploring comprehensive learning paths is an excellent next step.

If you’re excited about expanding your Godot knowledge and capabilities, our Godot Game Development Mini-Degree could be the perfect resource for you. You’ll gain a practical understanding of how to build cross-platform games from scratch, covering topics ranging from GDScript and game mechanics to fully-fledged projects across a variety of game genres. This self-paced, online curriculum ensures you have the flexibility to learn at your own pace and gain hands-on experience to build a robust game development portfolio.

For a broader look at what we offer, check out our complete collection of Godot courses, suitable for both beginners and seasoned developers looking to sharpen their skills. With Zenva, you’ll find the guidance and resources you need to take your development skills from foundational knowledge to professional-grade expertise. Keep coding, keep creating, and keep leveling up your game development journey!


Exploring the BaseMaterial3D class in Godot 4 only scratches the surface of what’s possible in the vast universe of game development. By leveraging the power of this tool, you’re on the path to create visually stunning and engaging 3D games that captivate players. Remember that every great game is a blend of creativity, technical skill, and dedication – and with the techniques you’ve learned today, you’re well on your way to mastering the visual aspect of your games.

If you’re inspired to take your skills further, our Godot Game Development Mini-Degree is waiting to help you unlock even more potential. As you continue to grow as a developer, we’re here to support your learning journey with high-quality content and a community of like-minded individuals. Keep experimenting, keep learning, and always keep pushing the boundaries of what you can create! Your next groundbreaking game is just a project away.

Python Blog Image

FINAL DAYS: Unlock coding courses in Unity, Godot, Unreal, Python and more.