Godot Shader笔记:3D着色器(二)
2019-06-20 本文已影响0人
吃烧烤的老王
内置顶点属性(vertex built-ins)
当值注明为in
时,意味着只读,当值注明为out
时,意味着可以选择性地写入,但是并不一定提供一个有效值。当值注明为inout
时,它会提供一个有效的默认值,并且可以选择性地写入。采样器(sampler)不是可写对象,它们也没有被标记。
顶点数据(VERTEX
NORMAL
TANGENT
BITANGENT
)使用局部坐标表示(相对于摄像机的像素坐标),如果不改写的话,它们的值会原封不动地传递出去。
当使用world_vertex_coords
渲染模式的时候,顶点数据也可以选择性地使用世界坐标表示。
用户可以关闭内置模型视图变换(英文:modelview transform,注:但投影(projection)依然会发生),并使用如下代码手动实现:
shader_type spatial;
render_mode skip_vertex_transform;
void vertex() {
VERTEX = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
NORMAL = (MODELVIEW_MATRIX * vec4(NORMAL, 0.0)).xyz;
// same as above for binormal and tangent, if normal mapping is used
}
诸如UV
,UV2
以及COLOR
等内置属性(built-ins
),如果不加修改,也会原封不动传递给片元函数。
用户可以使用POSITION
属性重写模型视图(modelview)以及投影变换(projection transforms),当
POSITION
被利用以后,来自VERTEX
的值将被忽略并且投影也不会发生。然而VERTEX
的值还依然会传递到片元函数。
例如,内置属性INSTANCE_CUSTOM
包含着实例的自定义数据。在粒子中,这些数据往往如下形式:
x: Rotation angle in radians.
y: Phase during lifetime (0 to 1).
z: Animation frame.
这种机制允许你非常使用默认粒子材质非常方便地针对粒子系统调整着色器。
内置属性 | 描述 |
---|---|
inout mat4 WORLD_MATRIX | Model space to world space transform. |
in mat4 INV_CAMERA_MATRIX | World space to view space transform. |
inout mat4 PROJECTION_MATRIX | View space to clip space transform. |
in mat4 CAMERA_MATRIX | View space to world space transform. |
inout mat4 MODELVIEW_MATRIX | Model space to view space transform (use if possible). |
inout mat4 INV_PROJECTION_MATRIX | Clip space to view space transform. |
in float TIME | Elapsed total time in seconds. |
in vec2 VIEWPORT_SIZE | Size of viewport (in pixels). |
inout vec3 VERTEX | Vertex in local coordinates. |
inout vec3 NORMAL | Normal in local coordinates. |
inout vec3 TANGENT | Tangent in local coordinates. |
inout vec3 BINORMAL | Binormal in local coordinates. |
inout vec2 UV | UV main channel. |
inout vec2 UV2 | UV secondary channel. |
inout vec4 COLOR | Color from vertices. |
inout float POINT_SIZE | Point size for point rendering. |
out vec4 POSITION | If written to, overrides final vertex position. |
in int INSTANCE_ID | Instance ID for instancing. |
in vec4 INSTANCE_CUSTOM | Instance custom data (for particles, mostly). |
out float ROUGHNESS | Roughness for vertex lighting. |
in bool OUTPUT_IS_SRGB | True when calculations happen in sRGB color space (true in GLES2, false in GLES3). |