:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/4.1/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/4.1/doc/classes/ShaderMaterial.xml. .. _class_ShaderMaterial: ShaderMaterial ============== **Inherits:** :ref:`Material` **<** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` A material that uses a custom :ref:`Shader` program. .. rst-class:: classref-introduction-group Description ----------- A material that uses a custom :ref:`Shader` program to render either items to screen or process particles. You can create multiple materials for the same shader but configure different values for the uniforms defined in the shader. .. rst-class:: classref-introduction-group Tutorials --------- - :doc:`Shaders documentation index <../tutorials/shaders/index>` .. rst-class:: classref-reftable-group Properties ---------- .. table:: :widths: auto +-----------------------------+-----------------------------------------------------+ | :ref:`Shader` | :ref:`shader` | +-----------------------------+-----------------------------------------------------+ .. rst-class:: classref-reftable-group Methods ------- .. table:: :widths: auto +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`get_shader_parameter` **(** :ref:`StringName` param **)** |const| | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_shader_parameter` **(** :ref:`StringName` param, :ref:`Variant` value **)** | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Property Descriptions --------------------- .. _class_ShaderMaterial_property_shader: .. rst-class:: classref-property :ref:`Shader` **shader** .. rst-class:: classref-property-setget - void **set_shader** **(** :ref:`Shader` value **)** - :ref:`Shader` **get_shader** **(** **)** The :ref:`Shader` program used to render this material. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Method Descriptions ------------------- .. _class_ShaderMaterial_method_get_shader_parameter: .. rst-class:: classref-method :ref:`Variant` **get_shader_parameter** **(** :ref:`StringName` param **)** |const| Returns the current value set for this material of a uniform in the shader. .. rst-class:: classref-item-separator ---- .. _class_ShaderMaterial_method_set_shader_parameter: .. rst-class:: classref-method void **set_shader_parameter** **(** :ref:`StringName` param, :ref:`Variant` value **)** Changes the value set for this material of a uniform in the shader. \ **Note:** ``param`` is case-sensitive and must match the name of the uniform in the code exactly (not the capitalized name in the inspector). \ **Note:** Changes to the shader uniform will be effective on all instances using this **ShaderMaterial**. To prevent this, use per-instance uniforms with :ref:`GeometryInstance3D.set_instance_shader_parameter` or duplicate the **ShaderMaterial** resource using :ref:`Resource.duplicate`. Per-instance uniforms allow for better shader reuse and are therefore faster, so they should be preferred over duplicating the **ShaderMaterial** when possible. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)` .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)` .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`