Я работаю над вершинным шейдером, в котором я хочу условно отбросить некоторые вершины:
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
Есть ли еще лучший способ отбрасывать вершины, не полагаясь на геометрию?шейдер?
Заранее спасибо за любую помощь!