Я работаю над игрой, используя OpenGL ES 2.0
Как реализовать эту функцию без ветки if-else? (GLSL)
Я хотел бы удалить ветви в шейдере фрагмента, если это возможно. Но есть функция, которую я не могу улучшить:
float HS(in float p, in float c) {
float ap = abs(p);
if(ap > (c*1.5)) {
return ap - c ;
} else {
return mod(ap+0.5*c,c)-0.5*c;
}
}
The c
является постоянным в большинстве случаев, если это помогает в этой ситуации. Я использую эту функцию следующим образом:
vec3 op = sign(p1)*vec3(
HS(p1.x, cc),
HS(p1.y, cc),
HS(p1.z, cc)
);
Хотите повысить эффективность этого кода, или вы хотите удалить это условие? Потому что это две разные вещи. –
Я хотел бы увеличить производительность этого кода, сначала удалив ветки if-else. –
И что, если это не самый эффективный способ улучшить производительность здесь? –