Quick answer: Add render_mode particles_billboard (or y_billboard). Or rewrite MODELVIEW in vertex to face camera.
Custom shader for damage numbers. Not facing camera; rotates with object. Render mode missing.
The Fix
shader_type spatial;
render_mode blend_mix, depth_draw_alpha_prepass, particles_billboard;
void vertex() {
// no manual matrix; render_mode handles it
}
// Or manual
void vertex() {
MODELVIEW_MATRIX = VIEW_MATRIX * mat4(
vec4(1, 0, 0, 0),
vec4(0, 1, 0, 0),
vec4(0, 0, 1, 0),
MODEL_MATRIX[3]);
}
render_mode is declarative and faster. Manual gives you control over which axes lock.
Verifying
Sprite faces camera at any angle. Walk around object: stays facing.
“Render mode billboard. Or matrix math.”
Related Issues
For shader UV flip, see UV flip. For 2D light, see 2D light.
render_mode billboard. Faces.