Godot Shader笔记:你的第一个3D Shader 第一
2019-06-29 本文已影响0人
吃烧烤的老王
原文地址: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所对应的material
的set_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;
现在,地形看起来更好了。

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