|
Улучшенные возможности программирования
Одна из проблем при разработке игры заключается в том, чтобы перенести мысли и видение художника на экран компьютера. Человек в уме может представить любую абстрактную картинку, содержащую все те детали, которые мы встречаем в окружающем мире. Компьютерная графика - совершенно другое дело, поскольку логика нашего мозга намного более динамична и выразительна, чем у компьютера. Кремний всегда будет таким, каким его сделали на полупроводниковом заводе. И так было до появления программируемых шейдеров. Впрочем, программируемые шейдеры - всего лишь один из компонентов движка рендеринга. Здесь есть другие ограничения: что-то может быть вычислено, а что-то нет. Так что вычислительная мощность всегда чем-то ограничивается.
По мере того, как росли потребности программистов, появлялись новые стандарты как в аппаратных реализациях, так и в программировании. Перед нами очередной виток эволюции, и новый Direct3D вновь поднимает планку возможностей шейдеров.
Ниже представлена таблица, в которой приведены изменения в модели шейдеров. Мы не будем углубляться в детали. В двух словах: Shader Model 4.0 (SM 4.0) намного более продвинутая модель, чем предыдущая версия. Кроме того, можно смело прощаться с концепцией разделения шейдеров на пиксельные и вершинные. Шейдеры с фиксированными функциями остались в прошлом.
Строгие аппаратные спецификации
Между аппаратными дизайнами ATi и nVidia существует ощутимое различие. И одна из жалоб программных разработчиков касалась слишком большой разницы в возможностях аппаратных дизайнов, в результате чего в играх появлялись несколько путей кода, а на экране - разная по качеству картинка для разных видеокарт. Например, если игра определяет старую видеокарту, она запустит специальный путь кода, который сможет дать нормальные fps в этой игре за счёт уступок в качестве картинки. Вы можете посмотреть это на примерах в нашей
Разработчики игр под приставки избавлены от этой проблемы, поскольку архитектура графической подсистемы жёстко обозначена. Но, к сожалению, разработчики игр под ПК такой роскоши не имеют. Если у них и созрели в уме новые идеи и техники, которые они желали бы видеть в игре, то после реализации остаётся только надеяться, что игра пойдёт на современном "железе" именно с тем путём кода, который продемонстрирует все фантастические функции. Но, как мы знаем по опыту, большинство геймеров играют не с максимальным количеством возможных визуальных функций. По причине как старого "железа", так и желания принести качество в жертву более высоким fps.
Что ещё хуже, в DirectX 9 некоторые части стандарта были слишком свободны для трактовки, а некоторые части были вскоре изменены и не успели утвердиться в дизайнах ATi и nVidia. В результате в стане разработчиков возникла определённая путаница, скажем, касающаяся разных стандартов точности вычислений у конкурирующих производителей "железа". Последним пришлось учить разработчиков сильным сторонам и возможностям своих видеокарт. В целом, конфликт стандартов отнюдь не ускорил появление качественных игр на рынке.
Direct3D 10 определяет стандарты на требуемый набор функций, число доступных ресурсов, точность вычислений и разные форматы хранения. Если внутри "железа" Direct3D 10 всё должно быть 32-битным (как в целых числах, так и с плавающей запятой), форматов хранения будет несколько. Ниже они приведены.
В списке можно видеть и полные форматы одинарной точности, и форматы с половинной точностью, например, unorm и snorm16. float16 используется для таких функций, как HDR-освещение, но его недостатком можно считать слишком большой объём и требования к пропускной способности. Были созданы другие альтернативные форматы, например, 11-11-10. Это комбинация двух блоков float11 и одного float10 (11 на красный, 11 на зелёный и 10 на синий) на 32 бита вместе с форматом с общей экспонентой (RGBE).