Производительность шейдеров (вершина ПРОТИВ фрагмента)

#performance #opengl #shader

#Производительность #opengl #шейдер

Вопрос:

Всегда ли лучше выполнять сложные вычисления внутри вершинного шейдера, а не во фрагментном шейдере? Даже для моделей с высокой ячеистостью, с более чем 100 000 полигонов (при условии, что существует множество уникальных вершин)?

Ответ №1:

Нет, это не всегда лучше.

Лучший способ выбрать правильное место вычислений — эксперимент. Попробуйте оба варианта и посмотрите, что лучше для ваших ограничений и аппаратного обеспечения.

Теоретически, однако, вы можете оценить количество обработанных фрагментов и сравнить его с количеством вершин. Современные графические процессоры используют одни и те же модули обработки для вершинных и фрагментных шейдеров, поэтому, взглянув на эти цифры, вы получите представление о том, где выполнять вычисления.

Советы делать все в vertex shader (если не на CPU) исходят из идеи, что соотношение пикселей к вершинам в визуализируемой 3D-модели всегда должно быть высоким. Нет необходимости в детализации геометрии, если вы видите объект на очень большом расстоянии, для этого используются уровни детализации геометрии (LOD). Итак, если вы делаете это «хорошим» способом — вам нужно будет вычислять на уровне вершины. Если вы не следуете ему — вы предоставлены сами себе.