# Tunnel Speed Lines

This is a 3D Particles Shader updated for Godot 4, to draw Tunnel Speed Lines.

Tunnel dimensions are set by **Tunnel Radius** and **Tunnel Length**.

Velocity is set by **Lifetime ( = Preprocess )**.

Draw Pass 1 draws **Quad-stripes** with editable **size x=3.0, y=0.4**.

Draw Pass 1 Material has a Shader Param **Texture Albedo**, to use your own **texture with alpha channel**.

##### Shader code

```
// particles shader for Godot 4
shader_type particles;
uniform float tube_radius : hint_range( 0.0, 10.0 ) = 3.0;
uniform float tube_length : hint_range( 0.0, 100.0 ) = 50.0;
float rand_from_seed(inout uint seed) {
int k;
int s = int(seed);
if (s == 0)
s = 305420679;
k = s / 127773;
s = 16807 * (s - k * 127773) - 2836 * k;
if (s < 0)
s += 2147483647;
seed = uint(s);
return float(seed % uint(65536)) / 65535.0;
}
uint hash(uint x) {
x = ((x >> uint(16)) ^ x) * uint(73244475);
x = ((x >> uint(16)) ^ x) * uint(73244475);
x = (x >> uint(16)) ^ x;
return x;
}
void start() {
if (RESTART_VELOCITY) {
VELOCITY = (EMISSION_TRANSFORM * vec4( -tube_length / LIFETIME * 1.0, 0.0, 0.0, 0.0)).xyz;
}
if (RESTART_POSITION) {
uint alt_seed1 = hash(NUMBER + uint(1) + RANDOM_SEED);
// set particle position by tube_radius and tube_length
float a = rand_from_seed( alt_seed1 ) * TAU;
TRANSFORM = mat4(
vec4( 1.0,0.0,0.0,0.0 ),
vec4( 0.0,sin(a),-cos(a),0.0 ),
vec4( 0.0,-cos(a),sin(a),0.0 ),
vec4( tube_length, sin( a + PI ) * tube_radius, cos( a + PI ) * tube_radius, 1.0 )
);
TRANSFORM = EMISSION_TRANSFORM * TRANSFORM;
}
}
```

This coulde be used in a sprite node or how?

Particles shader are 3D. You could draw this to a 2D viewport, explained here: https://docs.godotengine.org/en/stable/tutorials/rendering/viewports.html

I have created today an update for Godot 4