Поделиться через


Этап шейдера корпуса (HS)

Этап шейдера корпуса (HS) является одним из этапов тесселяции, которые эффективно разбивают одну поверхность модели на многие треугольники. Этап шейдера корпуса (HS) создает геометрическое исправление (и константы исправлений), которые соответствуют каждому входному исправлению (четыре, треугольник или линия). Шейдер корпуса вызывается один раз на исправление, и он преобразует входные точки управления, определяющие поверхность с низким порядком в точки управления, составляющие исправление. Он также выполняет некоторые вычисления для каждого исправления, чтобы предоставить данные для этапа Tessellator (TS) и этапа шейдера домена (DS).

Назначение и использование

схема этапа шейдера корпуса

Три этапа тесселяции работают вместе, чтобы преобразовать поверхности более высокого порядка (которые позволяют модели просто и эффективно) выполнять много треугольников для подробной отрисовки в графическом конвейере. Этапы тесселяции включают этап шейдера корпуса (HS), этап Tessellator (TS) и этап шейдера домена (DS).

Этап шейдера корпуса (HS) — это программируемый этап шейдера. Шейдер корпуса реализуется с функцией HLSL.

Шейдер корпуса работает на двух этапах: этап контрольной точки и константный этап исправления, которые выполняются параллельно оборудованием. Компилятор HLSL извлекает параллелизм в шейдере корпуса и кодирует его в байт-код, который управляет оборудованием.

  • Этап контрольной точки работает один раз для каждой контрольной точки, считывая контрольные точки для исправления и создавая одну выходную точку управления (определяемую ControlPointID).
  • Этап константы исправлений работает один раз на каждый исправление, чтобы создать факторы тесселяции ребер и другие константы для каждого исправления. Во внутреннем режиме многие этапы константы исправлений могут выполняться одновременно. Этап константы исправлений имеет доступ только для чтения ко всем точкам управления входными и выходными данными.

Ввод

Между 1 и 32 входными точками управления, которые вместе определяют поверхность низкого порядка.

  • Шейдер корпуса объявляет состояние, требуемое этапом Tessellator (TS). Сюда входят такие сведения, как количество контрольных точек, тип лица исправления и тип секционирования, используемый при тесселлатинге. Эта информация обычно отображается как объявления в передней части кода шейдера.
  • Факторы тесселяции определяют, сколько нужно разделить каждое исправление.

Выходные данные

Между 1 и 32 выходными точками управления, которые вместе составляют исправление.

  • Выходные данные шейдера между 1 и 32 контрольными точками независимо от количества факторов тесселяции. Выходные данные контрольных точек из шейдера корпуса можно использовать на этапе шейдера домена. Константы исправлений могут использоваться шейдером домена. Факторы тесселяции можно использовать этапом Tessellator (TS) и этапом шейдера домена (DS).
  • Если шейдер корпуса устанавливает любой коэффициент тесселяции ребра ≤ 0 или NaN, то исправление будет выброшено (опущено). В результате этап tessellator может или не может выполняться, шейдер домена не будет выполняться, а видимые выходные данные не будут созданы для этого исправления.

Пример

[patchsize(12)]
[patchconstantfunc(MyPatchConstantFunc)]
MyOutPoint main(uint Id : SV_ControlPointID,
     InputPatch<MyInPoint, 12> InPts)
{
     MyOutPoint result;
     
     ...
     
     result = TransformControlPoint( InPts[Id] );

     return result;
}

См . практическое руководство. Создание шейдера корпуса.

Графический конвейер