Kelsidavis-WoWee/assets/shaders/m2_ribbon.frag.glsl
Kelsi 1108aa9ae6 feat: implement M2 ribbon emitter rendering for spell trail effects
Parse M2RibbonEmitter data (WotLK format) from M2 files — bone index,
position, color/alpha/height tracks, edgesPerSecond, edgeLifetime,
gravity. Add CPU-side trail simulation per instance (edge birth at bone
world position, lifetime expiry, gravity droop). New m2_ribbon.vert/frag
shaders render a triangle-strip quad per emitter using the existing
particleTexLayout_ descriptor set. Supports both alpha-blend and additive
pipeline variants based on material blend mode. Fixes invisible spell
trail effects (~5-10%% of spell visuals) that were silently skipped.
2026-03-13 01:17:30 -07:00

25 lines
826 B
GLSL

#version 450
// M2 ribbon emitter fragment shader.
// Samples the ribbon texture, multiplied by vertex color and alpha.
// Uses additive blending (pipeline-level) for magic/spell trails.
layout(set = 1, binding = 0) uniform sampler2D uTexture;
layout(location = 0) in vec3 vColor;
layout(location = 1) in float vAlpha;
layout(location = 2) in vec2 vUV;
layout(location = 3) in float vFogFactor;
layout(location = 0) out vec4 outColor;
void main() {
vec4 tex = texture(uTexture, vUV);
// For additive ribbons alpha comes from texture luminance; multiply by vertex alpha.
float a = tex.a * vAlpha;
if (a < 0.01) discard;
vec3 rgb = tex.rgb * vColor;
// Ribbons fade slightly with fog (additive blend attenuated toward black = invisible in fog).
rgb *= vFogFactor;
outColor = vec4(rgb, a);
}