Godot Shader笔记:你的第一个3D Shader 第一部分(三)

原文地址:Docs » Shading » Your first shader » Your first Spatial shader

uniform变量

uniform变量允许你从游戏中向Shader传递数据。他们对于控制Shader效果非常有用。uniform变量可以是几乎任何Shader中的数据类型,如果要使用uniform,可以在Shader中使用uniform关键字来声明它。

让我们用一个uniform变量来改变地形的高度吧。

uniform float height_scale = 0.5;

Godot允许你用一个默认值来初始化uniform变量;在这里height_scale被设置为0.5。你可以在GDScript中通过调用shader所对应的materialset_shader_param()方法来设置uniform变量。

# 从MeshInstance节点调用
mesh.material.set_shader_param("height_scale", 0.5)

注意:在3D 节点(Spatial node)中改变uniform变量和在2D节点(CanvasItem node) 有些不同。在这里(3D节点中),我们需要在PlaneMesh资源中设置材质。在其他类型的mesh资源中你可能先要通过surface_get_material()来访问材质。而在MeshInstance中,你将使用get_surface_material()material_override来访问材质。

译者注

  • 2D节点都包含有Material属性,用来直接关联材质资源,而在3D节点中是通过Mesh属性关联网格模型,材质是关联在网格模型的表面上的。

注意,set_shader_param()中的字符串参数一定和Shader中的uniform变量名一致。你可以在Shader的任何地方使用uniform变量。在这里,我们将用它来设置height值。

VERTEX.y += height * height_scale;

现在,地形看起来更好了。

Godot Shader笔记:你的第一个3D Shader 第一部分(三)_第1张图片
image

我们甚至可以每一帧都修改uniform变量,使地形产生动画效果。有时再结合Tween节点,对于一些简单动画是非常有效的。

你可能感兴趣的:(Godot Shader笔记:你的第一个3D Shader 第一部分(三))