Этап шейдера поверхностей (HS)

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

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

схема этапа шейдера поверхностей

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

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

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

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

Вход

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

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

Выход

От 1 до 32 выходных контрольных точек, которые вместе образуют участок.

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

Примере

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

     return result;
}

См. раздел Инструкции по созданию шейдера поверхностей.

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