Как создать шейдер с несколькими стоп-градиентами?
Я пытаюсь создать фрагментный шейдер 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);
}
Говорят, что ветвление во фрагментном шейдере может снизить производительность. Есть ли хитрая хитрость, которая может быть использована для интерполяции между многими значениями без использованияif
s? Стоит ли это на самом деле (это очень субъективно, я знаю, но как правило)?
Чтобы проиллюстрировать мою проблему, полный исходный код (все еще короткий) в этой ссылке GLSL Sandbox:http://glsl.heroku.com/e#8035.0