Я работаю над вершинным шейдером, в котором я хочу условно удалить некоторые вершины:
float visible = texture(VisibleTexture, index).x;
if (visible > threshold)
gl_Vertex.z = 9999; // send out of frustum
Я знаю, что ветки убивают производительность, когда между соседними данными мало общности. В этом случае каждая другая вершина может получить другое "видимое" значение, что было бы плохо для производительности основного кластера ядра шейдера (из моего понимания).
На мой вопрос: лучше ли тернарный оператор (независимо от вопросов читаемости)?
float visible = texture(VisibleTexture, index).x;
gl_Vertex.z = (visible > threshold) ? 9999 : gl_Vertex.z;
Если нет, преобразует его в расчет, стоящий?
float visible = texture(VisibleTexture, index).x;
visible = sign(visible - threshold) * .5 + .5; // 1=visible, 0=invisible
gl_Vertex.z += 9999 * visible; // original value only for visible
Есть ли еще лучший способ сбросить вершины, не полагаясь на шейдер Geometry?
Заранее благодарим за помощь!