Вершинный шейдер вызывается до или после отсечения? - PullRequest
1 голос
/ 14 ноября 2011

Я думал, что ответ должен быть до . Но у меня есть шейдер, который, кажется, противоречит этому:

float4 vp(
        // Vertex Inputs
        in float4 position        : POSITION,
        uniform float4x4 worldViewProj) : TEXCOORD6
{
    float4 p = mul(worldViewProj, position);
    p.y /= 2.0;
    return p;
}

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

Это просто из-за того, что выбраковка GPU довольно грубая?

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Отбраковка происходит после стадии вершины.

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

Отбор по глубине (или окклюзия), который, скорее всего, означает, что вы имеете в виду «отбор», выполняется непосредственно перед пиксельным шейдером, после того как глубина пикселя была интерполирована.

1 голос
/ 14 ноября 2011

Сначала идет Vertex Shader, затем идет Clipping (см. http://download.microsoft.com/download/f/2/d/f2d5ee2c-b7ba-4cd0-9686-b6508b5479a1/direct3d10_web.pdf для полного конвейера D3D10)

Таким образом, вы в основном в своем Vertex Shader проектируете ВСЕ вершины на экран, а затем масштабируете их в пространстве экрана с помощью0,5.Таким образом, измененные вершины затем обрезаются, в результате чего весь экран заполняется геометрией.Полагаю, вы ожидали увидеть половину экрана заполненной и половину экрана пустой?

...