Майкрософт представила DirectX 12 Ultimate
Сегодня компания Microsoft презентовала следующую ступень эволюции DirectX 12 - Direct X 12 Ultimate.И, если отбросить маркетинговую шелуху, что мы получаем и зачем это было сделано?
Сначала что мы получаем:
DirectX Raytracing 1.1 - доработанный API для трассировки лучей, позволяющее теперь инициировать трассировку из любой шейдерной стадии, без необходимости просить об этом планировщик потоков через CPU часть API, а так же возможность "догружать" (стримить) шейдеры трассировки в SBT таблицу (раньше она была статична).
Variable Rate Shading - уже знакомый нам VRS, который был доступен как расширение для Vulkan, теперь доступен и для DirectX 12. Для тех кто не в курсе что это - грубо говоря экран разбивается на блоки, для каждого проводится анализ насколько в нем много деталей, и для малодетализированных блоков понижается эффективное разрешение.
Mesh Shaders - еще одно нововведение пришедшее в DirectX 12 с Vulkan и Turing видеокарт Nvidia. Очень крупное нововведение, сильно меняющее vertex pipeline. Однако, при умелом использовании, открывает широчайшие возможности по оптимизации рендеринга/кулинга.
Sampler Feedback - позволяет получить информацию от GPU какую текстуру и в каком мип-уровне он пытался прочитать, и реактивно реагировать подстраивая стриминг. Должно сильно ускорить стриминг текстур.
Texture-space shading - нововведение (для DirectX) позволяющее производить шейдинг в "UV space" - таким образом можно как-бы закешировать освещение, и затем пере-использовать его на другом объекте. Должно стать основной оптимизацией для VR (на ряду с VRS).
А теперь отвечу на вопрос - а зачем это все было заворачивать в "новую упаковку", а не просто сделать DirectX 12.2 ?Все очень просто - все вышеописанное - это новые фичи консолей следующего поколения. Все то что принесли нам инженеры из Nvidia, AMD добавила и в свои GPU RDNA 2.А "новая упаковка" нужна для "печати качества". Теперь если на вашей видеокарте есть стикер "DirectX 12 Ultimate" - значит вы можете быть уверенным что все новые плюшки у вас поддерживаются (владельцы RTX карт уже полтора года как DirectX 12 Ultimate ready )
Вобщем ход правильный, как с маркетинговой стороны, так и с обывательской - в кои веки произошло слияние обеих платформ и теперь есть один общий API с общим набором фичей, что в итоге приведет повышению качества игр, ибо "портирование" как таковое будет не нужно.
Всем добра.
а так ясно понятно
физики как всегда ждать не стоит?
Вот посмотрел я видео, и задался вопросом: а на кой хрен нужно тесселировать все эти куски камня? Игра от третьего лица, объект появляется в кадре на пару секунд, тесселяция ни разу не меняет его внешний вид... зочем???
А что бы ты не забывал регулярно обновлять железо)))
Вот сейчас у меня стим сожрал 5 гигабайт оперативной памяти. Зачем???
А вдруг планируешь высадиться на один из астероидов или планету, выйти из корабля и прогуляться...
Сразу вспоминаю Star Citizen.
Какая-то просто беда с неймингом всего в последнее время. Хорошо хоть не "PRO".
Уже половина второго ночи, но я попробую вкратце
Геометрический шейдер - всего лишь одна из стадий фиксированного вершинного пайплайна, которая идет сразу после тесселяции (если включена), и имеет доступ к топологии (оперирует примитивами) и может рожать примитивы. Довольно мощный, но медленный инструмент, напрочь ломающий планировщик (хрен угадаешь что ты там сейчас родишь).
Меш шейдеры - это, грубо говоря, упрощенное название. Это комплекс шейдеров и смена пайплайна. Если раньше был фиксированный пайплайн, которому ты отдавал формат вершины, вершинный/тесселяционный/геометрический шейдеры, а там уже происходила магия планировщика и балансировщика, генерировались фетч-шейдеры и патчились твои шейдеры, и прочее.
Зато программист не парился - тупо швырял суп из полигонов и на выходе получал пикселы, которые освещал.
Но чем жирнее становятся современные шейдеры, тем понятнее стало что нужно больше давать грабли в руки программистам, пусть сами свое
говнодобро разгребают.И дали - программируемый вершинный пайплайн. Теперь давай все сам, ручками.
Просто льешь свою геометрию в память GPU, а дальше - считай что у тебя некое подобие compute shaders, в которых ты сам выгребаешь данные, распаковуешь, рассовываешь по потокам, вызываешь/пропускаешь нужные тебе стадии и так далее. Индексный буффер тоже сам вычитывай, заодно тебя никто не ограничивает в его формате
А, ну и оперируешь потом "мешлетами" - небольшими групками полигонов (256 максимум, ибо ограничено 1 байтом), и тут начинается магия - в процессе туда-сюда бегает еще один "индексный буфер" - но каждый индекс отвечает за свой мешлет. И вот у тебя есть, к примеру, стадия куллинга - та запускаешь N потоков, в каждом трансформируешь/куллишь мешлеты, что прошли куллинг - шлешь по пайплайну далее, там уже шейдишь и прочее, что хочешь.
За счет этого можно некисло разгрузить vertex processing и проталкивать просто сумасшедшие горы геометрии (резать прям по фрустуму, ну прям конфетка).
Сорри если сумбурно, хз как расписать нормально, хоть бери видос снимай у доски