Как создать шейдер с несколькими стоп-градиентами?

Я пытаюсь создать фрагментный шейдер OpenGL ES 2.0, который выводит несколько градиентов остановки по одной оси. Он должен интерполировать несколько цветов в точках, определенных в процентах.

Я достиг этого с помощьюifФрагмент шейдера, вот так:

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);
}

Говорят, что ветвление во фрагментном шейдере может снизить производительность. Есть ли хитрая хитрость, которая может быть использована для интерполяции между многими значениями без использованияifs? Стоит ли это на самом деле (это очень субъективно, я знаю, но как правило)?

Чтобы проиллюстрировать мою проблему, полный исходный код (все еще короткий) в этой ссылке GLSL Sandbox:http://glsl.heroku.com/e#8035.0

Ответы на вопрос(1)

Ваш ответ на вопрос