Хочу всё знать. Языки управления шейдерами
Каждому увлекающемуся компьютерными играми гику известно понятие шейдера. Это компьютерная программа, исполняемая на видеокарте и, соответственно, отвечающая за графику в играх и мультимедиа. От того, насколько грамотно написаны шейдеры, зависит и визуальная составляющая, и fps (количество кадров в секунду).
Для написания шейдеров используются специальные языки программирования. Как правило, это упрощенные версии популярных представителей, часто С, содержащие специальные типы данных, такие как цвет, нормаль, вес, объем и т.д. Программирование на них сводится преимущественно к математическим операциям. Поэтому если вы плохо представляете, как изобразить на графике фигуру, похожую на молнию, лезть в дебри шейдеров пока рано.
Основные языки шейдеров:
- HLSL
- GLSL
- CG
- Metal
- ARB assembly language
Фактически языков создания шейдеров значительно больше. Так, к примеру, есть свой язык для PlayStation 4 или Adobe Flash, однако указанные популярнее и охватывают больше устройств. О них мы поговорим далее.
HLSL
Разработан компанией Microsoft и появился на свет в 2002 году. Поддерживается только консолями Xbox и устройствами с DirectX, то есть машинами под управлением Windows. Является переработанной версией С, содержащей большое количество операторов для проведения математических операций и работы со структурами.
Научиться программировать на HLSL, пожалуй, проще всего из-за огромного количества доступной информации. Вот несколько полезных ресурсов:
- Официальный программный гид от Microsoft.
- Большой вводный курс от Neatware.
- Курс по шейдерам на основе HLSL от RB Whitaker.
GLSL
Он же OpenGL язык шейдеров, он же glslang. Был выпущен Microsoft, также базируется на синтаксисе С с добавлением функций для работы с векторами и матрицами. Является языком высокого уровня, кроссплатформенным, то есть позволяет создавать программы для любого устройства с поддержкой OpenGL. Производительность с использованием GLSL будет не лучше, чем при использовании платформенных языков, но из универсальных инструментов, этот лучший.
По GLSL в сети тоже много крутых статей и уроков, вот несколько:
- Подробный материал по языку от TyphoonLabs с примерами программ, блок-схемами и теорией.
- Электронная книга на русском языке от Wingman.
- Введение в GLSL от NeHe.
CG
Высокоуровневый язык программирования от Nvidia, разработанный в тесном сотрудничестве с Microsoft. Именно его вы используете при работе с Unity, Unreal Engine, в Autodesk Maya и Adobe Photoshop. Несмотря на то, что последняя версия 3.1 вышла 5 лет назад и язык с тех пор не развивается, CG по-прежнему активно используют разработчики игр и графических приложений. Вот пара интересных публикаций для ознакомления и обучения:
К сожалению, официально Nvidia настоятельно рекомендует перейти на GLSL и HLSL, поэтому CG доживает последние годы.
Metal
Относительно молодой язык шейдеров от компании Apple, который используют устройства начиная с iPhone 5S и iPad Air 2013. Был представлен в 2014 году и, по сути, мало чем отличается от описанных выше языков. Основное преимущество в скорости, благодаря уменьшению количества runtime-валидаций и реализации параллельных вычислений. Но больше это имиджевый ход для использования закрытых технологий в экосистеме. Вот пара ссылок, которые познакомят вас с Metal:
- Metal with Swift. О новом витке графики в Apple от Raywenderlich.
- Официальная спецификация от Apple.
- Увлекательная вводная статья на Хабре.
ARB
Единственный низкоуровневый представитель списка, да еще и родом из 20 века. На рубеже веков стал отраслевым стандартом для GPU, поддерживаемым широким спектром устройств. Впоследствии развитие пошло по двум направлениям:
- Общие реализации. Ограничена Pixel Shader 2.0, далее рекомендуется не лезть на низкий уровень и работать с GLSL, который, в свою очередь, компилируется в язык ассемблера.
- Nvidia-реализация. Увеличено число функций, ориентация на GPU компании.
Изучить язык ассемблера для графики можно, познакомившись со спецификацией. Остальное - дело техники и желания копаться в низкоуровневом коде.