DirectX. Единая модель программ-шейдеров. Доступ к кадровому буферу в пиксельных программах, страница 5

На самом деле современные графические процессоры могут создавать новые треугольники, и, по сути, им так и приходится делать в ситуациях, когда используются примитивы линий или точечных спрайтов. Большинство графических процессоров потребительского уровня способны только растеризовывать треугольники, что означает, что все линии и точечные спрайты должны, в некоторый момент, быть преобразованы в треугольники. Поскольку как линия, так и точечный спрайт, в конце концов, будут преобразованы в два треугольника, которые могут иметь число вершин от двух до шести раз большее (в зависимости от метода индексации), будет лучше, если подобная операция осуществляется как можно позже. Преимущество заключается в том, что именно те же самые операций необходимы для теневых объёмов. Всё что требуется – сделать эту часть конвейера программируемой, и весь набор невозможных раньше сценариев становится возможным без опоры на главный процессор. Microsoft называет эту часть "процессором топологий (Topology Processor)", и он должен позволить теневым объёмам и меху обрабатываться полностью на графическом процессоре, вместе с должной проводкой линий, расширением точечных спрайтов и, вероятно, однопроходному рендерингу на кубические карты.

Вполне логично, что процессор топологий отделён от блока тесселяции. Однако вполне вероятно, что программируемый процессор примитивов с подходящим дизайном может быть использован для обоих видов операций.

Улучшения тесселяции.

Поверхности высокого порядка впервые появились в DirectX версии 8, и, на первый взгляд, они поддерживаются большим количеством графических процессоров (у nVidia в виде RT-патчей, у ATi в виде N-патчей), но они настолько ограничены, и их так трудно использовать, что лишь немногие разработчики отважились воспользоваться ими. Следовательно, все основные производители аппаратного обеспечения оставили поддержку поверхностей высокого порядка без внимания, пока не появился DirectX 9 с адаптивной тесселяцией и картами смещения. Поверхности высокого порядка по-прежнему использовать было проблематично, и они всё также оставались очень ограниченными, однако карты смещения оказались достаточно любопытными, чтобы забыть об этих проблемах, и некоторые разработчики стали проявлять к ним интерес, но до сох пор остаётся проблема ограничения формулировок поверхностей высокого порядка DirectX и отсутствует их аппаратной поддержка.

Делаются попытки создания на прямую графическими процессорами поддержки поверхностей высокого порядка, типа Catmull-Rom, Безье и B-сплайны, подразделение поверхностей, все конусы, а также другие мыслимые варианты. А также попытки аппаратного тесселирования  поверхностей. Если бы DirectX поддерживал все эти поверхности высокого порядка, то разработчиков вряд ли что-либо останавливало от их использования – вы могли бы импортировать сетки поверхностей высокого порядка напрямую из вашего любимого приложения по созданию цифрового контекста без всех этих проблем текущих систем. Такой особенностью и будет обладать следующий DirectX. В комбинации с картам смещения и новым процессором топологии нет никаких причин, чтобы не использовать эти функции (конечно, если их будет поддерживать графический процессор).

Общие улучшения API.

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