save code

This commit is contained in:
xsl
2025-11-28 18:10:23 +08:00
commit fee064c3f0
49 changed files with 64353 additions and 0 deletions
@@ -0,0 +1,22 @@
shader_type spatial;
#define GPU_TRAIL
#include "res://addons/GPUTrail/shaders/gputrail_lib.gdshaderinc"
varying vec2 trail_uv;
void vertex(){
PREPARE_TRAIL();
// Save the trail UV coordaintes for later
trail_uv = UV;
// Scroll textures slowly along the length of the trail
//UV.x -= fract(TIME*.4);
}
void fragment(){
PREPARE_TRAIL_TEXTURES();
// Alpha erosion
ALPHA = max(ALPHA - trail_uv.x, 0.0);
}
@@ -0,0 +1 @@
uid://b0um4dniff5cs
@@ -0,0 +1,15 @@
shader_type spatial;
#define GPU_TRAIL
#include "res://addons/GPUTrail/shaders/gputrail_lib.gdshaderinc"
varying vec2 trail_uv;
void vertex(){
PREPARE_TRAIL();
}
void fragment(){
PREPARE_TRAIL_TEXTURES();
}
@@ -0,0 +1 @@
uid://df5unx54alf3g
@@ -0,0 +1,121 @@
#ifdef GPU_TRAIL
//#define GPU_TRAIL
// TODO make optional
render_mode unshaded,world_vertex_coords,cull_disabled;
uniform sampler2D tex : repeat_enable, source_color, hint_default_white;
uniform vec2 uv_offset = vec2(0);
uniform sampler2D color_ramp : repeat_disable, source_color, hint_default_white;
uniform sampler2D curve : repeat_disable, hint_default_white;
uniform mat4 emmission_transform = mat4(1);
uniform int flags = 0;
/*uniform bool vertical_texture = false;
uniform bool use_red_as_alpha = false;
uniform bool billboard = false;
uniform bool dewiggle = false;
uniform bool snap_to_transform = false;*/
#define vertical_texture bool(flags & 1)
#define use_red_as_alpha bool(flags & 2)
#define billboard bool(flags & 4)
#define dewiggle bool(flags & 8)
#define snap_to_transform bool(flags & 16)
#define clip_overlaps bool(flags & 32)
varying float scale_interp;
varying vec2 clip;
varying vec2 mesh_uv;
void missing_parens(){}
#define PREPARE_TRAIL { \
mesh_uv = UV; \
\
mat4 my_model_matrix = MODEL_MATRIX; \
if(snap_to_transform && INSTANCE_CUSTOM.w==2.0){ \
my_model_matrix[1] = emmission_transform * vec4(0,1,0,1); \
my_model_matrix[2] = emmission_transform * vec4(0,-1,0,1); \
} \
\
if(billboard){ \
vec3 t0 = my_model_matrix[0].xyz-my_model_matrix[3].xyz; \
vec3 t1 = my_model_matrix[1].xyz-my_model_matrix[2].xyz; \
\
vec3 up0 = length(t0)*normalize( \
cross( \
my_model_matrix[3].xyz-INV_VIEW_MATRIX[3].xyz, \
t0)); \
vec3 up1 = length(t1)*normalize( \
cross( \
my_model_matrix[2].xyz-INV_VIEW_MATRIX[3].xyz, \
t1)); \
\
my_model_matrix[0] = my_model_matrix[3]; \
my_model_matrix[1] = my_model_matrix[2]; \
\
my_model_matrix[0].xyz += up0; \
my_model_matrix[3].xyz -= up0; \
\
my_model_matrix[1].xyz += up1; \
my_model_matrix[2].xyz -= up1; \
} \
\
vec3 a = mix(my_model_matrix[1].xyz,my_model_matrix[0].xyz,UV.x); \
vec3 b = mix(my_model_matrix[2].xyz,my_model_matrix[3].xyz,UV.x); \
\
UV.x = (UV.x + INSTANCE_CUSTOM.w-1.0 - 2.0)/(INSTANCE_CUSTOM.z-1.0); \
\
\
float h = textureLod(curve, vec2(UV.x), 0.0).x; \
\
VERTEX = mix(a,b,(UV.y-0.5)*h + 0.5); \
\
if(dewiggle){ \
scale_interp = h; \
UV *= scale_interp; \
} \
\
\
clip.x = dot(VERTEX - INV_VIEW_MATRIX[3].xyz,cross(my_model_matrix[1].xyz - INV_VIEW_MATRIX[3].xyz,my_model_matrix[2].xyz - INV_VIEW_MATRIX[3].xyz)); \
clip.y = dot(VERTEX - INV_VIEW_MATRIX[3].xyz,cross(my_model_matrix[3].xyz - INV_VIEW_MATRIX[3].xyz,my_model_matrix[0].xyz - INV_VIEW_MATRIX[3].xyz)); \
} missing_parens
#define PREPARE_TRAIL_TEXTURES { \
vec2 clip0 = clip; \
float ababab = clip0.x*clip0.y; \
\
if(clip_overlaps && ababab < 0.0) { \
if(abs(mesh_uv.x-0.5)<0.5) \
discard; \
} \
\
vec2 base_uv = UV; \
\
if(dewiggle){ \
base_uv /= scale_interp; \
} \
\
vec2 raw_uv = base_uv; \
\
base_uv -= uv_offset; \
\
if(vertical_texture){ \
base_uv = base_uv.yx; \
} \
\
vec4 T = textureLod(tex, base_uv, 0.0); \
ALBEDO = T.rgb; \
ALPHA = T.a; \
\
if(use_red_as_alpha){ \
ALBEDO = vec3(1); \
ALPHA = T.r; \
} \
\
T = textureLod(color_ramp, raw_uv, 0.0); \
ALBEDO *= T.rgb; \
ALPHA *= T.a; \
} missing_parens
#endif /*GPU_TRAIL*/
@@ -0,0 +1 @@
uid://lxfndmjp47ua
+43
View File
@@ -0,0 +1,43 @@
shader_type particles;
render_mode keep_data,disable_force,disable_velocity;
void process() {
// CUSTOM.w tracks the particles place in the trail, in range (0..LIFETIME]
// requires that LIFETIME = number of particles
float amount = LIFETIME;
vec4 a = EMISSION_TRANSFORM * vec4(0,1,0,1);
vec4 b = EMISSION_TRANSFORM * vec4(0,-1,0,1);
// start
if(CUSTOM.w == 0.0){
CUSTOM.w = float(INDEX)+1.0;
// needed to pass to draw pass
CUSTOM.z = amount;
// needed to initialize in case of CUSTOM.w == 2.0
TRANSFORM = mat4(a,a,b,b);
}
// restart
if(CUSTOM.w == amount+1.0){
CUSTOM.w = 1.0;
}
if(CUSTOM.w == 1.0){
// sets the quad to the line to cache this frame, it is not yet visible
TRANSFORM = mat4(a,a,b,b);
}
if(CUSTOM.w == 2.0){
// sets the right edge of the quad
TRANSFORM[1] = a;
TRANSFORM[2] = b;
}
CUSTOM.w++;
}
+1
View File
@@ -0,0 +1 @@
uid://x3g5fson40t2
@@ -0,0 +1,130 @@
shader_type spatial;
render_mode unshaded,world_vertex_coords,cull_disabled;
uniform sampler2D tex : repeat_enable, source_color, hint_default_white;
uniform vec2 uv_offset = vec2(0);
uniform sampler2D color_ramp : repeat_disable, source_color, hint_default_white;
uniform sampler2D curve : repeat_disable, hint_default_white;
uniform mat4 emmission_transform = mat4(1);
uniform int flags = 0;
/*uniform bool vertical_texture = false;
uniform bool use_red_as_alpha = false;
uniform bool billboard = false;
uniform bool dewiggle = false;
uniform bool snap_to_transform = false;*/
#define vertical_texture bool(flags & 1)
#define use_red_as_alpha bool(flags & 2)
#define billboard bool(flags & 4)
#define dewiggle bool(flags & 8)
#define snap_to_transform bool(flags & 16)
#define clip_overlaps bool(flags & 32)
varying float scale_interp;
varying vec2 clip;
varying vec2 mesh_uv;
void vertex(){
mesh_uv = UV;
mat4 my_model_matrix = MODEL_MATRIX;
if(snap_to_transform && INSTANCE_CUSTOM.w==2.0){
my_model_matrix[1] = emmission_transform * vec4(0,1,0,1);
my_model_matrix[2] = emmission_transform * vec4(0,-1,0,1);
}
if(billboard){
vec3 t0 = my_model_matrix[0].xyz-my_model_matrix[3].xyz;
vec3 t1 = my_model_matrix[1].xyz-my_model_matrix[2].xyz;
//vec3 up1 = up0;
vec3 up0 = length(t0)*normalize(
cross(
my_model_matrix[3].xyz-INV_VIEW_MATRIX[3].xyz,
//-INV_VIEW_MATRIX[2].xyz,
t0));
vec3 up1 = length(t1)*normalize(
cross(
my_model_matrix[2].xyz-INV_VIEW_MATRIX[3].xyz,
//-INV_VIEW_MATRIX[2].xyz,
t1));
my_model_matrix[0] = my_model_matrix[3];
my_model_matrix[1] = my_model_matrix[2];
my_model_matrix[0].xyz += up0;
my_model_matrix[3].xyz -= up0;
my_model_matrix[1].xyz += up1;
my_model_matrix[2].xyz -= up1;
}
vec3 a = mix(my_model_matrix[1].xyz,my_model_matrix[0].xyz,UV.x);
vec3 b = mix(my_model_matrix[2].xyz,my_model_matrix[3].xyz,UV.x);
UV.x = (UV.x + INSTANCE_CUSTOM.w-1.0 - 2.0)/(INSTANCE_CUSTOM.z-1.0);
float h = textureLod(curve, vec2(UV.x), 0.0).x;//h=1.0;
VERTEX = mix(a,b,(UV.y-0.5)*h + 0.5);
if(dewiggle){
scale_interp = h;
UV *= scale_interp;
}
clip.x = dot(VERTEX - INV_VIEW_MATRIX[3].xyz,cross(my_model_matrix[1].xyz - INV_VIEW_MATRIX[3].xyz,my_model_matrix[2].xyz - INV_VIEW_MATRIX[3].xyz));
clip.y = dot(VERTEX - INV_VIEW_MATRIX[3].xyz,cross(my_model_matrix[3].xyz - INV_VIEW_MATRIX[3].xyz,my_model_matrix[0].xyz - INV_VIEW_MATRIX[3].xyz));
}
void fragment(){
//if(billboard && !FRONT_FACING) discard;
vec2 clip0 = clip;
float ababab = clip0.x*clip0.y;
//ababab += dFdx(ababab) + dFdy(ababab);
//clip0 -= fwidth(clip0);
if(clip_overlaps && ababab < 0.0) {
if(abs(mesh_uv.x-0.5)<0.5)
discard;
}
vec2 base_uv = UV;
if(dewiggle){
base_uv /= scale_interp;
}
vec2 raw_uv = base_uv;
// Handle UV scrolling
base_uv -= uv_offset;
if(vertical_texture){
base_uv = base_uv.yx;
}
vec4 T = textureLod(tex, base_uv, 0.0);
ALBEDO = T.rgb;
ALPHA = T.a;
if(use_red_as_alpha){
ALBEDO = vec3(1);
ALPHA = T.r;
}
T = textureLod(color_ramp, raw_uv, 0.0);
ALBEDO *= T.rgb;
ALPHA *= T.a;
//ALBEDO = vec3(UV,0);
if((base_uv.x < .01) || (.99 < base_uv.x)){
//ALBEDO = vec3(1,0,1);
}
}
@@ -0,0 +1 @@
uid://7xkxpgsmixhn