Shader code
// CC0, ElSuicio, 2025
// GODOT v4.4.1.stable
shader_type spatial;
render_mode ambient_light_disabled;
render_mode skip_vertex_transform;
#define TRANSLATION_MATRIX(t) mat4(\
vec4(1, 0, 0, t.x),\
vec4(0, 1, 0, t.y),\
vec4(0, 0, 1, t.z),\
vec4(0, 0, 0, 1)\
);
#define ROTATION_MATRIX_X(a) mat4(\
vec4(1, 0, 0, 0),\
vec4(0, cos(a), -sin(a), 0),\
vec4(0, sin(a), cos(a), 0),\
vec4(0, 0, 0, 1)\
);
#define ROTATION_MATRIX_Y(b) mat4(\
vec4( cos(b), 0, sin(b), 0),\
vec4(0, 1, 0, 0),\
vec4(-sin(b), 0, cos(b), 0),\
vec4(0, 0, 0, 1)\
);
#define ROTATION_MATRIX_Z(c) mat4(\
vec4(cos(c), -sin(c), 0, 0),\
vec4(sin(c), cos(c), 0, 0),\
vec4(0, 0, 1, 0),\
vec4(0, 0, 0, 1)\
);
#define ESCALATION_MATRIX(s) mat4(\
vec4(s.x, 0, 0, 0),\
vec4(0, s.y, 0, 0),\
vec4(0, 0, s.z, 0),\
vec4(0, 0, 0, 1)\
);
group_uniforms _Transform;
uniform vec3 _Position = vec3(0.0);
uniform vec3 _Rotation = vec3(0.0);
uniform vec3 _Scale = vec3(1.0);
varying vec4 vertex_os;
varying vec4 normal_os;
varying vec4 binormal_os;
varying vec4 tangent_os;
varying vec3 color;
mat4 ROTATION_MATRIX(vec3 euler_angles_rad)
{
mat4 x = ROTATION_MATRIX_X(euler_angles_rad.x)
mat4 y = ROTATION_MATRIX_Y(euler_angles_rad.y)
mat4 z = ROTATION_MATRIX_Z(euler_angles_rad.z)
return y * x * z;
}
void vertex()
{
/* 3D AXIS COLOR */
color = normalize(NORMAL * NORMAL); // Axis in Object Space prev to 3D transform.
/* ROTATION */
vec3 angle_rad = radians(_Rotation);
/* VERTEX */
vertex_os = vec4(VERTEX, 1.0);
vertex_os *= ESCALATION_MATRIX(_Scale)
vertex_os *= ROTATION_MATRIX(angle_rad);
vec4 vertex_ws = MODEL_MATRIX * vertex_os;
vertex_ws *= TRANSLATION_MATRIX(_Position)
vec4 vertex_vs = VIEW_MATRIX * vertex_ws;
VERTEX = vertex_vs.xyz;
/* NORMAL */
normal_os = vec4(NORMAL, 0.0);
normal_os *= ROTATION_MATRIX(angle_rad);
vec4 normal_ws = MODEL_MATRIX * normal_os;
vec4 normal_vs = VIEW_MATRIX * normal_ws;
NORMAL = normalize(normal_vs.xyz);
/* BINORMAL */
binormal_os = vec4(BINORMAL, 0.0);
binormal_os *= ROTATION_MATRIX(angle_rad);
vec4 binormal_ws = MODEL_MATRIX * binormal_os;
vec4 binormal_vs = VIEW_MATRIX * binormal_ws;
BINORMAL = normalize(binormal_vs.xyz);
/* TANGENT */
tangent_os = vec4(TANGENT, 0.0);
tangent_os *= ROTATION_MATRIX(angle_rad);
vec4 tangent_ws = MODEL_MATRIX * tangent_os;
vec4 tangent_vs = VIEW_MATRIX * tangent_ws;
TANGENT = normalize(tangent_vs.xyz);
/* PROJECTION */
vec4 vertex_proj = PROJECTION_MATRIX * vertex_vs;
POSITION = vertex_proj;
}
void fragment()
{
ALBEDO = color;
}
Live Preview
Tags
3d,
rotation,
scale,
Transform,
Translation