Я выполнил свою справедливую долю программ по 3D-играм для моего (бывшего) работодателя, а также в своих собственных движках для своих собственных инди-игр.
Первоначально я начал с Direct3D 9 и D3DX9, которые в значительной степени сделали все для меня, и не требовали, чтобы я вообще думал о шейдерах.
После этого я написал свои первые шейдеры Direct3D 9, но в основном использовал один очень простой шейдер для всего, что я делал.
В самой последней итерации моего игрового движка я перешел на Direct3D 11, и с этим я создал много шейдеров. Я делал скины для GPU, вычислял частицы в GPU, много эффектов освещения и постобработки, все в GPU. Действительно классные вещи.
До сих пор я использовал только вершинные и пиксельные / фрагментные шейдеры. Несмотря на то, что есть еще много вещей, которые я еще не сделал, я думаю, что у меня есть четкие знания о том, что делают вершинные и пиксельные / фрагментные шейдеры, и как все это вписывается в весь 3D конвейер.
Догоняя последние разработки, я очень заинтересовался новыми этапами шейдера. То есть шейдер Geometry, и еще новее шейдеры Hull и Domain.
Я никогда не использовал эти этапы, но из того, что я знаю, шейдер Geometry, если он включен, запускается после вершинного шейдера, один раз для каждой преобразованной вершины (или один раз для примитива?) И позволяет отбрасывать вершины (и примитивы?) и создавать новые (которые, я думаю, вернутся к началу конвейера?).
Я предполагаю, что основным использованием геометрического шейдера будет программная генерация геометрии в графическом процессоре. Распространенным применением было бы создание квадратов билбордов на основе одной вершины, но я на самом деле не представляю много других распространенных сценариев, кроме генерации фракталов и других вещей, которые вы можете генерировать на 100% программно.
Что касается шейдеров Hull и Domain, кажется, что они связаны с тесселяцией (создание более гладких поверхностей из шероховатых поверхностей?) И должны использоваться вместе или не использоваться вообще. Термин «патч» также, кажется, распространен здесь.
Кто-нибудь захочет объяснить мне, на практике, для чего нужны эти новые шейдерные стадии, как они вписываются в трехмерный конвейер и в каких случаях я должен рассмотреть их использование?