Я пытаюсь разработать понимание уровня графического конвейера на высоком уровне. Одна вещь, которая не имеет для меня большого смысла, - это то, почему существует шейдер Geometry. Шейдеры Tessellation и Geometry, похоже, делают то же самое для меня. Может ли кто-нибудь объяснить мне, что делает шейдер Geometry отличным от тесселяционного шейдера, который оправдывает его существование?
Разница между тесселяционными шейдерами и геометрическими шейдерами
Ответ 1
Тесселяционный шейдер - это переменное подразделение. Важной частью является информация о смежности, поэтому вы можете правильно сглаживать и не заканчивать разрывами. Вы можете сделать некоторое ограниченное подразделение с геометрическим шейдером, но это не совсем то, для чего он нужен.
Геометрические шейдеры работают с примитивностью. Например, если вам нужно сделать материал для каждого треугольника (например, this), сделайте это в геометрическом шейдере. Я слышал о том, как производится экструзия теней. Там также "консервативная растеризация", где вы можете расширить границы треугольника, чтобы каждый пересеченный пиксель получал фрагмент. Примеры являются довольно специфичными для приложения.
Да, они также могут генерировать больше геометрии, чем вход, но они недостаточно масштабируются. Они отлично работают, если вы хотите нарисовать частицы и превратить точки в очень простую геометрию. Я много раз реализовывал маршевые кубы, используя геометрические шейдеры. Отлично работает с преобразованием обратной связи, чтобы сохранить полученную сетку.
Обратная связь с преобразованием также использовалась с геометрическим шейдером для выполнения дополнительных вычислительных операций. Один особенно полезный механизм заключается в том, что он выполняет уплотнение потока для вас (плотно сжимает его различный объем вывода, поэтому в результирующем массиве нет пробелов).
Другая важная вещь, которую предоставляет геометрический шейдер, - это маршрутизация в слоистые объекты рендеринга (массивы текстур, грани куба, несколько видовых экранов), что должно быть сделано для примитива. Например, вы можете отображать теневые карты кубов для точечных огней за один проход путем дублирования и проецирования геометрии 6 раз на каждую грань куба.
Не совсем полный ответ, но, надеюсь, дает суть различий.
См. также: