Я пытаюсь создать шейдер 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