Когда мы иной раз говорим другим разработчикам игр, что в нашей игре Overgrowth мы использовали OpenGL, нам недоуменно возражают: зачем, разве будущее не за DirectX? Когда мы говорим представителям видеокарт, что используем OpenGL, температура в помещении опускается на 10 градусов.
Это нас озадачивает. Среди веб-разработчиков считается хорошим тоном ругать стандартные технологии, такие как Silverlight, Flash или ActiveX, зато всячески приветствуется кросс-платформенная разработка. Ни один уважающий себя спец не испытывает восторга от работы с закрытыми стандартами типа документов Word или серверов Exchange. И что же произошло с этим миром, что инженеры вдруг принялись не только рукоплескать проприетарному API Microsoft, но ещё и активно ругать его открытого конкурента?
Прежде чем мы объясним, почему мы за OpenGL, немного истории.
Что такое OpenGL
В 1982 году Silicon Graphics начала продажи высокопроизводительных графических терминалов на основе проприетарного API под названием Iris GL (GL — graphics library, графическая библиотека). Через несколько лет Iris GL превратился в монстра, которого стало очень сложно поддерживать. Тогда Silicon Graphics пошла на радикальный шаг — полностью переработала Iris GL и создала на его основе открытый стандарт. Теперь Открытую графическую библиотеку (OpenGL) могли использовать конкуренты, но при этом они должны были её поддерживать и обновлять.
Сегодня поддержкой OpenGL занимается Khronos Group — некоммерческая организация, в которую входят представители самых разных компаний, объединённых общим интересом: иметь высококачественные медийные API. Непосредственной поддержкой занимается Наблюдательная комиссия по архитектуре OpenGL. OpenGL поддерживают все игровые платформы, включая Mac, Windows, Linux, PS3 (через GCM), Wii, iPhone, PSP и DS. То есть все платформы, кроме Xbox. И это плавно приводит нас к следующей теме:
Что такое DirectX
После MS-DOS в Microsoft осознали, что при выборе операционной системы пользователь не в последнюю очередь принимает во внимание игры. Тогда в 1995 году Microsoft создала проприетарный набор библиотек с целью поощрить выход эксклюзивных игр для новой ОС Windows 95. Среди этих библиотек были Direct3D, DirectInput и DirectSound, а весь набор в совокупности получил название DirectX. Когда в 2001 году Microsoft сама вошла в игровой рынок, появилась консоль DirectX Box, она же Xbox. Xbox стала рекордсменом по убыткам, потеряв свыше $4 млрд. Целью проекта было заложить основы для доминирования на игровом рынке, которое предполагалось осуществить только в следующем поколении.
Если судить по сегодняшнему игровому рынку, эта стратегия себя оправдала. Большинство главных игр для PC используют DirectX и работают на Windows и Xbox 360. За редкими исключениями они не работают на конкурирующих платформах, таких как PlayStation, Mac OS или Wii. Так Microsoft теряет довольно серьёзные рынки, а мы ставим важный вопрос:
Почему все используют DirectX?
Все используют DirectX потому, что выбор API при разработке игры обладает эффектом обратной связи — своего рода замкнутый круг. Начиная с 2005 года популярность DirectX постоянно растёт: чем больше разработчиков её использует, тем лучше её поддерживают поставщики видеокарт, тем лучше программисты умеют с ней работать и опять-таки тем популярнее она становится — круг замыкается.
Рынок начал смещаться в сторону DirectX под воздействием двух факторов: агрессивная реклама DirectX при запуске Xbox 360 и Windows Vista, которая заставила многих усомниться в будущем OpenGL, и оголтелое преувеличение достоинств DirectX. Эти факторы были усилены описанным эффектом обратной связи, и в результате OpenGL почти полностью исчезла из главных игровых новинок.
1. Эффект обратной связи и порочные круги
В среде Windows графические драйверы DirectX поддерживаются лучше, чем OpenGL. Причиной этого является порочный круг под названием «поддержка производителей». Чем больше разработчиков по той или иной причине переходит с OpenGL на DirectX, тем меньше производители видеокарт получают сообщений об ошибках в драйверах OpenGL; следовательно, они становятся хуже, и ещё больше разработчиков уходит с OpenGL на DirectX. Круг замыкается.
Факт и в том, что в DirectX разбирается больше программистов графики, чем в OpenGL; следовательно, создать игру под DirectX дешевле, потому что для этого требуется меньше затрат на обучение. И это ещё один порочный круг: чем больше игр использует DirectX, тем больше программистов должны её изучить. Чем больше программистов изучают DirectX, тем дешевле DirectX обходится игровым проектам в сравнении с OpenGL.
2. Vista и сомнения в отношении OpenGL
При выпуске Vista Microsoft начала активно сеять в пользователях сомнения и неуверенность в отношении OpenGL. В 2003 году Microsoft покинула Наблюдательную комиссию по архитектуре OpenGL, показав тем самым, что её больше не интересует судьба этой библиотеки. На SIGGRAPH (конгресс специалистов по графике) и WinHEC (конференция разработчиков аппаратного обеспечения под эгидой Microsoft) представители корпорации заявили, что в Windows Vista OpenGL будет поддерживаться на самом минимальном уровне, чтобы только обеспечить обратную связь с приложениями XP. OpenGL будет накладываться поверх DirectX, что приведёт к резкому снижению производительности. Это вызвало самую настоящую панику в рядах OpenGL, в результате чего многие профессиональные программисты графики перешли на DirectX.
Когда Vista наконец вышла, оказалось, что эти заявления не соответствовали действительности: поставщики создали быстрые устанавливаемые клиентские драйверы (ICD), вернувшие системе нативную поддержку OpenGL. Комиссия по OpenGL разослала письмо с доказательствами, что OpenGL по-прежнему в строю и ничем не уступает Direct3D на Vista. К сожалению, нужный Microsoft результат уже был достигнут: доверие к OpenGL серьёзно пошатнулось.
3. Лживые рекламные кампании
Выпуск Windows Vista и Windows 7 сопровождался агрессивной рекламой DirectX: Microsoft показывала эффектные картинки «до» и «после» применения различных версий DirectX. Сегодня многие игроки искренне верят, что переход от DirectX 9 к DirectX 10 волшебным образом улучшает яркость картинки, тогда как раньше она была убого затемнённой, а уровень реализма сразу же становится как в Crysis. Игровые журналисты уже доказали, что в том же Crysis на DX9 и DX10 нет никакой разницы, а пресловутые эксклюзивные для DX10 функции работают и под DX9 при соответствующих настройках в конфигурационном файле. Однако рекламная кампания снова сделала своё дело: многие игроки поверили, что установка DX10 — единственный способ получить графику по последней моде.
Далеко не все игры поддерживают этот маркетинговый фарс Microsoft. Многие настоящие профессионалы графики, такие как Джон Кармак (John Carmack), относятся к DX10 скептически. Он однажды сказал: «Лично я не стал бы сейчас переходить на что-то вроде DX10. Я бы подождал, когда всё немного утрясётся и для этого появится действительно объективная необходимость».
Так почему же мы используем OpenGL?
Учитывая всё вышесказанное: слабую поддержку производителей, отсутствие в играх, нападения со стороны Microsoft, спорные рыночные перспективы, – почему мы по-прежнему её используем? Не выгоднее ли отказаться от OpenGL и перейти к DirectX, как все остальные? Нет, потому что на самом деле OpenGL мощнее DirectX, поддерживает больше платформ и крайне важна для игровой индустрии.
1. OpenGL мощнее DirectX
Общеизвестно, что вызовы отрисовки в OpenGL быстрее, чем в DirectX. Верить нам на слово необязательно: на этот счёт существуют официальные презентации NVIDIA. Благодаря расширениям поставщиков новые функции видеопроцессоров на OpenGL начинают поддерживаться раньше. OpenGL сразу даёт прямой доступ ко всем новым графическим решениям на всех платформах, тогда как DirectX лишь предоставляет выборочные снимки на новых версиях Windows. Та же мозаичная технология (tesselation), которую Microsoft активно продвигает в DirectX 11, уже три года существует для OpenGL в качестве расширения. Я не знаю, какие новые технологии появятся в ближайшие годы, но я точно знаю, что первыми они появятся в OpenGL.
Microsoft хорошо поработала над DirectX 10 и 11, и теперь они почти так же быстры и функциональны, как и OpenGL. Однако остаётся одна большая проблема: они не работают в Windows XP! У половины игроков PC по-прежнему стоит XP, и для них варианта DirectX 10 и 11 просто не существует. Поэтому, если вы действительно хотите добиться наилучших результатов и донести их до максимально возможного числа игроков, вариантов помимо OpenGL просто нет.
2. OpenGL кроссплатформенная
Свыше половины игроков нашей Lugaru играет на Mac или Linux, и мы не удивимся, если так же будет и с новой игрой Overgrowth. В беседах с крупными игровыми разработчиками мы часто слышим, что поддержка Mac и Linux — пустая трата времени. Но мне никогда не встречались доказательства этого утверждения. Blizzard всегда выпускает версию своих игр для Mac одновременно с другими платформами. Если они в чём-то принципиально не сходятся с другими, то я думаю, что правы они, а не другие.
Когда Джона Кармака спросили, работает ли Rage под DirectX, он ответил: «Нет, это OpenGL, хотя мы использовали API в стиле D3D [на Xbox 360] и CG для PS3. Вы знаете, технологиям довольно неинтересно, какой вы используете API и какого поколения ваши технологии. API интересуется буквально несколько файлов, а миллионы строк кода совершенно безразличны к вашей платформе». Если можно достичь всех платформ с OpenGL, то зачем себя искусственно ограничивать, привязываясь к DirectX?
Даже если вас не интересует ничего, кроме Windows, позвольте ещё раз напомнить, что половина пользователей Windows работает на XP, и они не смогут играть в вашу игру, если у вас будут последние версии DirectX. Единственный способ дать новейшие графические решения пользователям Windows XP (а это крупнейшая игровая платформа на PC) — использовать OpenGL.
3. У OpenGL больше перспектив на игровом рынке
OpenGL — это некоммерческий открытый стандарт, преследующий цель предоставить графику высочайшего качества пользователям всех платформ. Позиции OpenGL пошатнулись в результате монополистического нападения со стороны одного корпоративного колосса, который решил прибрать к рукам слишком молодую и потому неспособную за себя постоять индустрию. Microsoft держит рынок игр для PC мёртвой хваткой, которая тем сильнее, чем более эксклюзивны позиции Direct3D в Windows.
Для понижения цен и повышения качества необходима конкуренция. Монополия Microsoft на игровом рынке очень вредна и игрокам, и разработчикам.
Cможет ли OpenGL вернуть утраченные позиции?
В 1997 году была очень похожая ситуация. Microsoft начала агрессивную рекламную кампанию в пользу Direct3D, и однажды утром все проснулись и узнали, что она и быстрее, и лучше, чем OpenGL. Ситуация стала меняться после того, как Крис Хэкер (Chris Hecker) опубликовал открытое письмо против DirectX. Вскоре после этого Джон Кармак опубликовал свою знаменитую оду OpenGL, которую тут же подкрепил делом: перевёл все игры Id Software на OpenGL. Так он раз и навсегда доказал, что DirectX совершенно необязательна для трёхмерных игр высшей категории.
Однако за последние несколько лет этот урок оказался подзабыт. Большинство игровых разработчиков либо поддались чарам маркетологов Microsoft, либо утонули в порочных кругах рыночной конъюнктуры. Настало время отбросить пустые рекламации и модные тренды и посмотреть в глаза правде. Если вы пишете под DirectX, вам приходится либо брать слабую и раздутую DX9, либо жертвовать значительной частью пользовательской базы с DX10 и 11.
С другой стороны, если вы пишете под OpenGL, вы получаете более быструю и мощную графику, чем в DirectX 11, причём на всех версиях Windows, Mac и Linux, а также PS3, Wii, PSP, DS и iPhone. Кроме того, вы получаете всё это в рамках динамично развивающегося стандарта WebGL, который вполне может стать базовым для браузерных игр следующего поколения.
Если вы — разработчик игр, я прошу вас провести исследование, сравнить цифры и решить для себя, лучше OpenGL или нет. Некоторые программисты привержены стилю DirectX 11, но вы в любом случае перенесёте низкоуровневые API на уровень абстракции, поэтому этот фактор не может быть решающим. Если что-то в OpenGL вам не нравится, просто попросите наблюдательную комиссию это поменять — она для того и существует!
Если вы играете в игры на Windows XP, Mac или Linux, вы должны понять, что DirectX существует только для того, чтобы закрыть вам доступ к новым играм. И у вас есть только один способ повлиять на ситуацию — начать поддерживать игры, использующие OpenGL.