Wie erstelle ich einen Gradientenfragment-Shader mit mehreren Stopps?

Ich versuche, einen OpenGL ES 2.0-Fragment-Shader zu erstellen, der mehrere Stopp-Verläufe entlang einer Achse ausgibt. Es sollte zwischen mehreren Farben an Punkten interpolieren, die in Prozent definiert sind.

Ich habe dies mit erreichtifs Der Fragment-Shader sieht folgendermaßen aus:

float y = gl_FragCoord.y;
float step1 = resolution.y * 0.20;
float step2 = resolution.y * 0.50;

if (y < step1) {
    color = white;
} else if (y < step2) {
    float x = smoothstep(step1, step2, y);
    color = mix(white, red, x);
} else {
    float x = smoothstep(step2, resolution.y, y);
    color = mix(red, green, x);
}

Sie sagen, dass das Verzweigen in Fragment Shader die Leistung beeinträchtigen kann. Gibt es einen cleveren Trick, mit dem man zwischen vielen Werten interpolieren kann, ohne sie zu verwenden?ifs? Lohnt es sich wirklich (das ist sehr subjektiv, ich weiß, aber als Faustregel)?

Um mein Problem zu veranschaulichen, vollständige Quelle (immer noch kurz) in diesem GLSL-Sandbox-Link:http://glsl.heroku.com/e#8035.0

Antworten auf die Frage(1)

Ihre Antwort auf die Frage