В 1992 году появился OpenGL. Это графический API, созданный компанией Silicon Graphics. Эта компания с начала 80-х создавала мощные рендер-фермы стоимостью $50000, на которых был сделан жидкий Терминатор во второй части кинофраншизы, а также динозавры в Парке юрского периода. Только это было несколько ранее, чем 1992 год, когда вместо OpenGL был Iris GL. Именно этот проприетарный API лёг в основу открытого стандарта OpenGL.
В 1994 году, Майкрософт и Silicon Graphics выпустили OpenGL для Windows NT. Планировалось создавать рабочие станции под управлением этой операционной системы.
В 1996 году, Microsoft представила Direct3D - свой API, созданный для конкуренции с OpenGL. Однако на протяжении многих лет, Direct3D проигрывал OpenGL в популярности.
Возможно, и не было бы никакого OpenGL на домашних компьютерах, если бы не Id Software. Когда ведущий программист этой компании Джон Кармак попробовал OpenGL на компьютерах от Стива Джобса - NextSTEP - он влюбился в этот API, и приложил много усилий для того, чтобы этот API появился на домашних компьютерах.
В 1996 году появилась игра Quake. Она стала супер популярной. По умолчанию там использовался софтварный рендеринг, однако поддерживался и OpenGL. Вот только аппаратных ускорителей для компьютеров IBM PC ещё не было.
Но в том же 1996 году появляется 3dfx Voodoo. Это первый 3D-ускоритель, завоевавший популярность. Более того - популярность этого 3D-ускорителя была взрывной. До них были NVIDIA NV1, и что-то от Creative, но ни то, ни другое, не стало популярным.
3DFX Voodoo не поддерживал ни OpenGL, ни Direct3D. Он поддерживал только свой собственный API под названием Glide. Этот API является так называемым "native" API, то есть, очень сильно привязан к особенностям конкретного графического чипа. Тогда как OpenGL и Direct3D были довольно-таки "толстыми" API, которые жрали производительность. На современных видеокартах это не чувствуется, потому что они очень мощные по сравнению с 3D-ускорителями 1996 года. А тогда был, можно сказать, каждый такт на счету, поэтому были популярны нативные API.
Но как же запустить супер-популярный Quake на 3DFX Voodoo? Игнорировать такую игру было просто невозможно! И тогда 3dfx создала враппер miniGL, транслирующий вызовы OpenGL в Glide. Враппер реализовывал те, и только те вызовы, которые использует Quake, и ни одного больше. Поэтому запустить какую-нибудь другую игру, использующую OpenGL, было невозможно. Зато Quake работал идеально.
Использование native API стало для 3DFX и благом, и проклятием одновременно. В краткосрочной перспективе, они выпустили свой продукт раньше конкурентов на полгода, что позволило захватит рынок практически монопольно. В долгосрочной перспективе, это сделало создание нового графического ускорителя - очень трудной задачей. Нужно было как-то сохранять совместимость со старым продуктом, а стоило внести хоть малейшее изменение в чип, как совместимость могла быть утраченной. Впрочем, можно было сделать так же, как фирмы-производители игровых консолей: Sega Megadrive имеет совместимость с Master System благодаря наличию процессора от старой системы, позже такое будут проворачивать Sony и Nintendo.
В 1999-2000 годах, у компании 3dfx начались финансовые проблемы. Растущая конкуренцая в сумме с ошибками самой компании 3dfx стали тому причиной. Последней соломинкой, переломившей хребет верблюду, стал просчёт с Voodoo 4 и 5. Компания перекинула ряд талантливейших инженеров, работавших над чипом Rampage, чтобы "быстренько состряпать" ответ графической карте GeForce 256. Получившийся ответ не превосходил по скорости GeForce 256, однако выдавал схожую производительность. И вдруг NVIDIA выпускает GeForce 2... В декабре 2000 года, 3dfx объявила о начале процедуры банкротства, и о продаже своих активов компании NVIDIA.
Итак, у нас есть один вендор графических карт - это NVIDIA. ATI, S3, Matrox не в счёт - они занимают лишь малую долю популярности (Matrox был популярен в профессиональной среде, а не на домашних компах). NVIDIA в равной степени поддерживает OpenGL и Direct3D, оба этих API выдают максимальную производительность. Следующим шагом NVIDIA выпускает графическую карту Quadro, которая базируется на том же графическом чипе, что и GeForce 2, и предназначалась не для домашнего использования, а для бизнеса. Для рендеринга спецэффектов в кино, а также инженеров, работающих в AutoCAD. Этстало билетом для NVIDIA в мир большого бизнеса, в котором ранее были представлены такие компании, как SGI, Sun и HP.
Затем NVIDIA выпускает графическую карту NVIDIA GeForce 3 Ti. В этой графической карте появились программируемые шейдеры, которые ранее в какой-то степени присутствовали в GeForce 2. В новой графической карте появляется полная поддержка Direct3D 8, который впервые обошёл OpenGL по фичам (как раз-таки в плане шейдеров). OpenGL начал стагнировать и медленно развиваться - во многом "благодаря" саботажу со стороны компании Microsoft. Все это заметили, и поэтому поддержка OpenGL в новых играх почти прекратилась. Из Far Cry OpenGL вырезали непосредственно перед релизом - поэтому мы можем увидеть в меню игры - выпадающий список с выбором графического API, в котором есть только один пункт - Direct3D. Если же включить OpenGL в конфигах, то в процессе игры будут пропадать некоторые текстуры. По всей видимости, рендер OpenGL не успели доделать, и вырезали в процессе разработки ввиду падения его популярности. Последними AAA-проектами, поддерживающими рендер OpenGL, стали World of Warcraft, Neverwinter Nights 1 и 2, Unreal Tournament 2003 и 2004, а также Doom III. В 2004 году вышел Half Life 2 без поддержки OpenGL, и это поставило на данном API точку. Тем не менее, OpenGL прекрасно себя чувствовал на Apple Machintosh и Linux. Это если говорить про домашние компьютеры. На профессиональных рендер-фермах от всё той же SGI, OpenGL никуда не пропадал, а никаким Direct3D там и не пахнет.
Однако я что-то поторопился переходить в 2004 год. В 2002 году, компания ATi приобрела компанию FireGL, создававшую 3D-ускорители для профессионального сегмента рынка (рендер-фермы и рабочие станции). На основе графических карт FireGL, компания ATi выпустила графическую карту ATi Radeon. Это был первый сколько-нибудь серьёзный конкурент NVIDIA за долгое время. Фактически, NVIDIA была монополистом весь 2001 год, но с 2002 года у неё появился сильный конкурент.
В 2003 году, у NVIDIA произошёл первый серьёзный просчёт. Компания выпустила графическую карту GeForce FX (ну или GeForce 5, если считать по-порядку). Карточка имела ряд проблем. И в этот момент ATi выпускает Radeon 9700 - первую графическую карту от ATi, которая смогла обогнать NVIDIA. Причём обогнала сильно. С тех пор, и по сей день, продолжается соревнование между NVIDIA и ATi за первое место.
В 2006 году, ATi была поглощена компанией AMD.
В 2006 году, вышла новая операционная система Windows Vista. В ней появился новый графический API - Direct3D 10. Однако вистой никто не хотел пользоваться, и Direct3D 10 тоже было долго никому не нужен. Тем более, что были популярны игровые консоли PS3 и Xbox 360, в которых использовались графические чипы времён Direct3D 9. А многие игры были мультиплатформенными, причём основной платформой был не ПК, а именно консоли. В совокупности этих двух факторов, Direct3D 10 игры почти не выпускались. Единственным исключением был Crysis. Это была легендарная игра от создателей Far Cry, которая поражала воображение своим уровнем графики. Однако эта игра требовала передовых на то время компьютеров, которые были далеко не у всех. GeForce GTX 8800 стоил $1000.
В ответ на релиз Direct3D 10, вышел OpenGL 3.0. Тогда как Direct3D 10 требовал новую модель драйверов, которая есть только в Windows Vista, и на которую производители графических карт переходили с большим трудом - OpenGL 3 предоставлял выбор между Core Profile и Compatibility Profile. Первый был полностью переработанным API (и, как я понимаю, требующий для работы висту - поправьте меня в комментариях, если я ошибаюсь), а второй - старым API с возможностью использовать все новые расширения OpenGL. Это как дать возможность 16-битной программе вызывать новые i386-инструкции без переписывания программы под 32-бит.
Затем были Direct3D 10.1 и 11, а также OpenGL 3.2 и 4.
Вдруг компания AMD создала новый графический API под названием Mantle. Он был более низкоуровневым API, чем Direct3D и OpenGL, но не являлся native API, как glide, что давало преимущества в скорости исполнения кода, но не давало недостатков в виде привязки к конкретному графическому чипу. Главным образом, Mantle позволял параллелить код по потокам CPU, избавляясь от эффекта "бутылочного горлышка", когда GPU может выдавать больше FPS, но CPU занят на 100% и не даёт GPU работать в полную силу. При этом занято лишь одно-два ядра CPU, а остальные простаивают. В отличие от Direct3D и OpenGL, Mantle позволял задействовать все ядра CPU, однако был более сложным в использовании.
Microsoft и Apple воспользовались концепцией Mantle, чтобы создать свои API Direct3D 12 и Metal. Причём API под названием Metal уже было 15 лет до этого в графических картах S3 Savage 3D, и являлось native API.
Затем компания AMD прекратила развитие Mantle и отдала API в распоряжение консорциума Khronos Group, который развивает OpenGL. Хронос груп сделали на основе Mantle - API Vulkan.
Теперь у нас есть 5 API: старые Direct3D 11 и OpenGL 4, а также новые Direct3D 12, Vulkan и Metal. Причём последние два заменили собой и OpenGL ES, и OpenCL.
Отдельно стоит сказать про гейминг в линуксе. После практически полного прекращения выпуска игр на Linux в 2005 году, стал популярен эмулятор Cedega, базирующийся на Wine, и позволяющий запускать под сотню самых популярных Windpws-версий игр под линуксом. В 2008 году, обычный Wine догнал по возможностям Cedega. Впоследствие, Cedega была переименована в GameTree, а затем прекратила существование.
В том же 2008 году, смартфоны стали теснить по популярности кнопочные телефоны. На смартфонах использовались мобильные GPU, которые использовали API под названием OpenGL ES. Это облегчённая версия OpenGL. Мобильный гейминг начал набирать обороты.
В 2010 году на Mac OS X и линукс стали массово портироваться инди-игры в рамках проекта Humble Bundle, конечно же использовался OpenGL, так как в этих операционных системах нет Direct3D. В 2012 году, супер известная компания Valve объявила о начале портирования Steam на Linux (годом ранее вышла версия для Mac OS X), а также игр на движке Source (Half Life 2, Counter Strike: Source, Left 4 Dead 2, Portal, Portal 2, Team Fortress 2, Dota 2). Релиз состоялся в 2013 году.
В играх на движке Source использовался транслятор toGL, который в 2006 году был создан AMD. Дело в том, что удаление OpenGL произошло ещё до релиза Half Life 2, и вернуть таковую поддержку, скорее всего, было очень трудно. Зато игровой движок Source 2 получил нативную поддержку OpenGL, так как создавался сразу с поддержкой обоих API - Direct3D и OpenGL.
Затем последовали и другие игровые движки с поддержкой OpenGL. Unreal Engine 3 поддерживал OpenGL и раньше, однако Linux-версий игр практически не было до того момента, пока не появился Steam для Linux. Первой такой игрой стала Dungeon Defenders, затем Killing Floor и Painkiller: Hell and Damnation. Игра Bioshock Infinite, которая также использует Unreal Engine 3, была портирована через транслятор.
Затем Epic Games выпустила Unreal Engine 4 с открытым исходным кодом. Поддержка Linux была доступна изначально. Примеру "эпиков" последовали разработчики CryEngine, выпустив пятую версию своего движка в формате открытого исходного кода.
Из наиболее известных игровых движков, получивших поддержку OpenGL после выхода Steam для Mac OS X и Linux, можно выделить Unity3D и Serious Engine. Пожалуйста, дополните меня, если я какой-то движок забыл
В 2014 году, через год после появления Steam для Linux, Valve анонсировали Steam Machines - собственную игровую консоль. Особенностями данной игровой консоли являлась операционная система SteamOS на базе Linux, и игровой контроллер Steam Controller.
Многие разработчики компьютерных игр сразу выпустили Linux-версии своих игр (извините за тафтологию). Например российская компания Gaijin Entertaiment выпустила Linux-версию игры War Thunder.
Но к сожалению, Steam Machines не стали популярны, а Steam Controller на данный момент бльше ен выпускаются.
В 2018 году появился проект DXVK. Это транслятор Direct3D в Vulkan почти без потери производительности. Раньше Wine транслировал вызовы Direct3D в OpenGL, что давало потерю производительности в 20-30%. Причём поддерживалась лишь трансляция вызовов Direct3D 9, а 10 и 11 почти не поддерживались. Теперь же, производительность игр зачастую равна нативному запуску игры под Windows, а иногда даже выше. В полной мере поддерживались API Direct3D 10 и 11, а потом появился проект D9VK с поддержкой Direct3D 9. D9VK был форком DXVK, но вскоре проекты объединились.
Во многом, успех DXVK произошёл потому, что Mantle изначально имел свой совместимости с Direct3D. Похоже, что при создании Vulkan на основе Mantle, и её тоже удалось перенести. Vulkan поддерживает директридешный шейдерный язык HLSL наравне с опенджиельным языком GLSL.
Valve создала на основе Wine Staging + DXVK продукт под названием Proton. Proton позволял запускать Windows-версии игр напрямую из Steam для Linux. И это работало очень хорошо.
В 2022 году, Valve создала портативную игровую консоль Steam Deck на базе SteamOS 3 и Proton. При желании, можно установить туда Windows. Steam Deck конкурирует с портативной игровой консолью Nintendo Switch.
|