Skazochnik
Ученик
(163)
14 лет назад
Пожалуй, главное новшество, положенное в основу Direct3D 10, – максимальное недопущение «вольностей» со стороны производителей GPU из-за специфики структуры нового набора шейдеров SM 4.0. В результате многочисленные надстройки, придуманные производителями, теперь уйдут в прошлое. Вспомните чехарду с Direct3D 9, когда для соответствия спецификациям требовалась лишь поддержка SM 2.0, а уже сами разработчики за три года «додумали» столько, что версии 9.0с и 9.0а отличались такими «мелочами» , как SM 3.0, HDR, новые типы фильтрации, использование геометрических шаблонов и т. д. И все это кардинальным образом смогло изменить реализм трехмерной графики. Однако отсутствие жесткой стандартизации на уровне API привело к тому, что многие возможности пришлось снова поддерживать на уровне приложений (читай – игр) , а это вылилось в проблемы с совместимостью, потери производительности и др. Теперь только 100%-ное соответствие требованиям нового API позволит карте называться DirectX 10-совместимой, а выход за эти рамки станет бессмысленным. В результате получается, что по 3D-возможностям все новые видеокарты от ATI/AMD и NVIDIA, рассчитанные на Direct3D 10, будут архитектурно идентичными, разница лишь в быстродействии.
Полное избавление от фиксированных 3D-функций
Все принципы работы, заложенные в DirectX с версии 6 до 8,1, а именно: использование определенных (заранее обозначенных) функций формирования 3D-объектов, теперь уходят в прошлое. Так, начиная с DirectX 10 всем будут заведовать шейдеры.
Унификация типов шейдеров
Предусматривается использование полностью программируемых универсальных шейдеров при отсутствии разделения на вершинные и пиксельные, как это было раньше. Также добавлен новый тип шейдеров – геометрический, промежуточный между вершинным и пиксельным. Он дает возможность производить манипуляции над уже определившимся массивом треугольников после окончания работы вершинного шейдера и, самое главное, допускает произвольное изменение их геометрии.
Потоковый вывод
Следом за геометрическим шейдером идет новая процедура конвейера Direct3D10, названная потоковым выводом. Пожалуй, именно это нововведение позволит сделать еще один существенный шаг в сторону полноценной виртуальной реальности. Теперь данные, прошедшие обработку в вершинных и геометрических шейдерах, записываются в выделенные буфера видеопамяти без обязательной отрисовки в пиксельной части конвейера. В результате несколькими возвратами к вершинной части конвейера и определенными алгоритмами в геометрической части можно, к примеру, создавать неоднотипные детализированные ландшафты без потери производительности.
Унификация типов ресурсов
Подобно шейдреам четкое разграничение по типам ресурсов, используемых для подготовки объектов к визуализации, – также уже пережиток прошлого. Так, текстуры в DirectX 10 перестали быть объектом, доступным исключительно на стадии пиксельного шейдера, т. е. данными, необходимыми только для визуализации. Теперь равнозначный доступ к текстурам можно осуществлять на любой стадии конвейера – от вершинного до пиксельного. Плюс ко всему как текстуры могут быть трактованы массивы вершин или другие типы данных, хранящихся в буферах. Таким образом, подобная неразбериха привела к появлению нового типа данных – текстурному массиву с динамической индексацией в шейдере. Соответственно одни и те же данные, определенные шейдером как текстуры, нормали или набор вершин, дадут на выходе абсолютно разную картину.
HLSL 10 (high level shader language)
Бурное развитие языка программирования шейдеров высокого уровня за последние два с половиной года для Direct3D и OpenGL 2.0 привело к практически полному отказу от использования ассемблера в описании шейдера. Рассказывать о преимуществах языка высокого уровня мы не станем. Самое главное, что HLSL не требует серьезных знаний в области машинного программирования, в то же время ПО, написанное на этом языке, гораздо легче поддается модернизации.
FX 10
Новая система со