Чому розробники ігор віддають перевагу Windows?


396

Це DirectX легше чи краще, ніж OpenGL, навіть якщо OpenGL є кросплатформою? Чому ми не бачимо справжніх потужних ігор для Linux, як там, для Windows?


55
Неправдиве приміщення - де є докази того, що розробники ігор віддають перевагу windows? Я думаю, що @ user17674 це було більш точно - вони хочуть розвиватися для платформ, щоб вони могли продати більше і заробляти більше грошей :-)
Rory Alsop

258
Також розробники вірусів віддають перевагу Windows. Вся справа в базі користувачів.
CesarGon

4
Чому програмісти Windows віддають перевагу DirectX перед OpenGL - це, мабуть, цікавіше історичне питання. Як посилання на інтерв'ю з Carmack нижче може вказувати, DX був ненависним. Було б цікаво знати, як він утримував достатньо користувачів для MS, щоб підтримати його, поки Xbox і сучасні переписування не зробили його більш популярним. А може, це було просто завжди досить добре, тому люди застрягли з цим.
CodexArcanum

100
Чому люди грабують банки? Тому що там гроші .
GrandmasterB

7
@CesarGon: Це не тільки через базу користувачів, але й для простоти розробки.
Джорджіо

Відповіді:


1154

Багато відповідей тут справді, дуже хороші. Але проблеми OpenGL та Direct3D (D3D), ймовірно, повинні бути вирішені. А для цього потрібен ... урок історії.

І перш ніж почати, я знаю набагато більше про OpenGL, ніж я про Direct3D . Я ніколи не писав рядки коду D3D у своєму житті, і я писав підручники на OpenGL. Тож, що я збираюся сказати, це не питання упередженості. Це просто питання історії.

Народження конфлікту

Одного разу, десь на початку 90-х, Microsoft озирнувся. Вони побачили, що SNES та Sega Genesis є приголомшливими, керуючи безліччю екшн-ігор тощо. І вони побачили DOS . Розробники кодували ігри DOS на зразок консольних ігор: безпосередньо до металу. На відміну від консолей, де розробник, який зробив гру SNES, знав, яким обладнанням користувач користуватиметься, розробникам DOS довелося писати для кількох можливих конфігурацій. І це досить важче, ніж це звучить.

І у Microsoft була більша проблема: Windows. Дивіться, Windows хотіла володіти обладнанням, на відміну від DOS, який в значній мірі дозволяв розробникам робити все, що завгодно. Володіння обладнанням необхідно для співпраці між додатками. Співпраця - це саме те, чого ненавидять розробники ігор, оскільки вони вимагають дорогоцінних апаратних ресурсів, які вони могли б використовувати, щоб бути приголомшливими.

Щоб сприяти розробці ігор в Windows, Microsoft потребувала єдиного API, який був низькорівневим, працював у Windows, не сповільнюючись цим, і найбільше крос-апаратного забезпечення . Єдиний API для всієї графіки, звуку та обладнання для введення даних.

Таким чином, DirectX народився.

3D прискорювачі народилися через кілька місяців. І Microsoft натрапила на місце проблеми. Дивіться, DirectDraw, графічний компонент DirectX, стосувався лише двовимірної графіки: розподілення графічної пам'яті та виконання бітових проміжків між різними виділеними ділянками пам'яті.

Тож Microsoft придбала трохи проміжного програмного забезпечення та перетворила його на Direct3D версії 3. Це було повсюдно скасовано. І з розумною причиною; дивитися на код D3D v3 - це як заглянути в Ковчег завіту.

Старий Джон Кармак в програмі Id Software один раз подивився на цей смітник і сказав: "Викрутіть це!" і вирішив написати на інший API: OpenGL.

Дивіться, інша частина багатоголового звіра - Microsoft була зайнята роботою з SGI над реалізацією OpenGL для Windows. Ідея полягала в тому, щоб розробити судові розробники типових програм GL: додатків для робочих станцій. Інструменти САПР, моделювання подібних речей. Ігри були найдавнішою річчю на їхньому розумі. В першу чергу це була річ Windows NT, але Microsoft вирішила додати її і до Win95.

Як спосіб залучити розробників робочих станцій до Windows, Microsoft вирішила спробувати підкупити їх доступом до цих новомодних 3D графічних карт. Microsoft впровадила протокол встановленого драйвера клієнта: виробник графічних карт може перекрити впровадження програмного забезпечення Microsoft OpenGL на апаратному. Код може автоматично використовувати апаратну реалізацію OpenGL, якщо така була доступна.

У перші дні відеокарти на рівні споживачів не підтримували OpenGL. Це не зупинило Carmack просто перенести Quake на OpenGL (GLQuake) на його робочу станцію SGI. Як ми можемо прочитати з readme GLQuake:

Теоретично glquake працюватиме на будь-якому сумісному OpenGL, який підтримує розширення текстурних об'єктів, але, якщо це не дуже потужне обладнання, яке прискорює все необхідне, гра не буде прийнятною. Якщо йому доведеться пройти будь-які шляхи емуляції програмного забезпечення, продуктивність, швидше за все, буде значно нижче одного кадру в секунду.

У цей час (березень 97 року) єдине стандартне обладнання для opengl, яке може грати на глюкейк, - це інтергральний реалізм, який ДУЖЕ дорога карта. 3Dlabs значно покращив свою ефективність, але з наявними драйверами це все ще недостатньо добре для гри. Деякі з поточних драйверів 3dlabs для блискучих та перимедійних дощок також можуть збити NT при виході з повноекранного режиму, тому я не рекомендую запускати glquake на апаратному забезпеченні 3dlabs.

3dfx надав opengl32.dll, який реалізує все, що потребує glquake, але це не повна реалізація opengl. Інші програми opengl навряд чи будуть працювати з ним, тому вважайте це в основному "драйвером glquake".

Це було народження водіїв miniGL. Вони з часом перетворилися на повноцінні реалізації OpenGL, оскільки апаратне забезпечення стало достатньо потужним, щоб реалізувати більшість функцій OpenGL в апаратному забезпеченні. nVidia першою запропонувала повну реалізацію OpenGL. Багато інших постачальників боролися, і це одна з причин, чому розробники віддавали перевагу Direct3D: вони були сумісні з більш широким спектром обладнання. Врешті-решт залишилися лише nVidia та ATI (тепер AMD), і обидва мали гарну реалізацію OpenGL.

OpenGL Ascendant

Таким чином встановлюється етап: Direct3D проти OpenGL. Це справді дивовижна історія, враховуючи, наскільки поганим був D3D v3.

Управління архітектурного огляду OpenGL (ARB) є організацією, відповідальною за підтримку OpenGL. Вони випускають ряд розширень, підтримують сховище розширень та створюють нові версії API. ARB - це комітет, який складається з багатьох гравців графічної індустрії, а також деяких виробників ОС. Apple і Microsoft в різні часи були членами АРБ.

3Dfx виходить разом з Voodoo2. Це перше обладнання, яке може робити мультитекстурування, що OpenGL раніше не міг зробити. Хоча 3Dfx був рішуче проти OpenGL, NVIDIA, виробникам наступного багатотекстового графічного чіпа (TNT1) це сподобалось. Таким чином, ARB випустив розширення: GL_ARB_multitexture, яке дозволило б отримати доступ до багатотекстового тестування.

Тим часом виходить Direct3D v5. Тепер D3D став фактичним API , а не тим, що може вирвати кішка. Проблема? Немає багатотекстових.

На жаль

Тепер це не зашкодило б майже стільки, скільки повинно бути, бо люди не використовували багатотекстургування. Не безпосередньо. Мультитекстур зашкодив продуктивність зовсім небагато, і в багатьох випадках цього не варто було порівняно з багатопрохідним. І звичайно, розробники ігор люблять стежити за тим, щоб їхні ігри працювали на старому апаратному забезпеченні, яке не було багатотекстурне, тому безліч ігор поставляються без нього.

Таким чином, D3D отримав відшкодування.

Проходить час, і NVIDIA розгортає GeForce 256 (не GeForce GT-250; найперший GeForce), що майже закінчує конкуренцію у відеокартах протягом наступних двох років. Основним місцем продажу є можливість перетворення вершин та освітлення (T&L) в апараті. Мало того, NVIDIA так любила OpenGL, що їх двигуном T&L ефективно був OpenGL. Майже буквально; Як я розумію, деякі їхні регістри насправді приймали перелічувачі OpenGL безпосередньо як значення.

Виходить Direct3D v6. Нарешті, мультитекстура, але ... немає апаратного T&L. OpenGL завжди мав трубопровід T&L, незважаючи на те, що до 256 років він був реалізований у програмному забезпеченні. Тому NVIDIA дуже просто перетворила їх реалізацію програмного забезпечення на апаратне рішення. Це було б до D3D v7, поки D3D нарешті не отримала апаратну підтримку T&L.

Світанок Шейдерів, Сутінки OpenGL

Потім вийшов GeForce 3. І багато справ сталося водночас.

Microsoft вирішила, що вони знову не спізнюватимуться. Тож замість того, щоб дивитись на те, що робить NVIDIA, а потім копіювати це після факту, вони зайняли дивовижну позицію - підійти до них і поговорити з ними. А потім вони закохалися і трохи потішили разом.

Пізніше розлучення настало пізніше. Але це вже іншим разом.

Це означало для ПК те, що GeForce 3 вийшов одночасно з D3D v8. І не важко зрозуміти, як GeForce 3 впливав на шейдери D3D 8. Піксельні шейдери Shader Model 1.0 були надзвичайно специфічні для обладнання NVIDIA. Ніякої спроби не було вилучено апаратне забезпечення NVIDIA; SM 1.0 був лише тим, що робив GeForce 3.

Коли ATI почала стрибнути у гонку з графічними картками продуктивності з Radeon 8500, виникла проблема. Трубопровід для обробки пікселів 8500 був більш потужним, ніж матеріали NVIDIA. Тож Microsoft випустила модель Shader 1.1, яка в основному була "Що б не зробила 8500".

Це може здатися збоєм з боку D3D. Але невдача та успіх - це питання ступенів. І епічна невдача сталася в OpenGL-land.

NVIDIA полюбила OpenGL, тому коли потрапила GeForce 3, вони випустили низку розширень OpenGL. Власні розширення OpenGL: лише для NVIDIA. Природно, коли 8500 з'явився, він не міг використовувати жоден із них.

Подивіться, щонайменше, на землі D3D 8, ви можете запустити шейдери SM 1.0 на апаратному забезпеченні ATI. Звичайно, вам довелося написати нові шейдери, щоб скористатися прохолодою 8500, але принаймні ваш код спрацював .

Щоб мати шейдери будь-якого типу на Radeon 8500 в OpenGL, ATI довелося записати ряд розширень OpenGL. Власні розширення OpenGL: лише для ATI. Тож вам знадобився кодовий шлях NVIDIA та кодовий шлях ATI, просто щоб мати шейдери взагалі.

Тепер ви можете запитати: "Де була ARGL OpenGL, завданням якої було підтримувати OpenGL поточним?" Там, де часто комітети закінчуються: нерозумно.

Дивіться, я згадував ARB_multitexture вище, тому що він враховує все це. ARB здавалося (з погляду сторонніх людей) хоче взагалі уникнути ідеї шейдерів. Вони подумали, що якщо вони нанесуть достатню конфігурацію на трубопровід з фіксованою функцією, вони можуть дорівнювати здатності трубопроводу шейдера.

Тож ARB випустив розширення після розширення. Кожне розширення зі словами "text_env" у ньому було ще однією спробою закріпити цей старечий дизайн. Перевірте реєстр: між розширеннями ARB та EXT було зроблено вісім таких розширень. Багато хто був просунутий до основних версій OpenGL.

Microsoft в цей час була частиною ARB; вони покинули час удару D3D 9. Тож цілком можливо, що вони якось працювали над саботажем OpenGL. Я особисто сумніваюся в цій теорії з двох причин. По-перше, їм довелося б отримати допомогу інших членів АРБ, щоб зробити це, оскільки кожен член отримує лише один голос. І найголовніше два: ARB не потребувала допомоги Microsoft, щоб накрутити речі. Ми побачимо подальші докази цього.

Врешті-решт ARB, ймовірно, під загрозою як ATI, так і NVIDIA (обох активних членів), врешті-решт витягнув голову досить довго, щоб забезпечити фактичні шейдери стилів складання.

Хочете чогось навіть дурнішого?

Обладнання T&L. Щось OpenGL було першим . Ну, це цікаво. Щоб отримати максимально можливу продуктивність від апаратних T&L, вам потрібно зберігати свої вершинні дані в GPU. Зрештою, саме GPU насправді хоче використовувати ваші вершинні дані.

У D3D v7 Microsoft представила концепцію буферів вершин. Це виділені ділянки пам'яті GPU для зберігання даних вершин.

Хочете дізнатися, коли OpenGL отримав їх аналог? О, NVIDIA, будучи любителем усіх речей OpenGL (якщо вони є власними розширеннями NVIDIA), випустила розширення діапазону вершин, коли GeForce 256 вперше потрапила. Але коли ARB вирішила надати подібний функціонал?

Два роки по тому . Це було після того, як вони затвердили шейдери вершин та фрагментів (піксель мовою D3D). Ось так довго знадобилося ARB, щоб розробити кросплатформенне рішення для зберігання даних вершин у пам'яті GPU. Знову ж , то , що апаратне забезпечення T & L необхідно для досягнення максимальної продуктивності.

Одна мова, щоб їх усіх погубити

Отже, середовище розробки OpenGL на якийсь час було розламане. Немає міжобладнання шейдерів, немає міжгалузевого зберігання вершин GPU, в той час як користувачі D3D користувалися обома. Чи могло погіршитися?

Ви ... ви могли це сказати. Введіть 3D-лабораторії .

Хто вони, можете запитати? Вони є неіснуючою компанією, яку я вважаю справжніми вбивцями OpenGL. Звичайно, загальна невмілість ARB зробила OpenGL вразливим, коли він мав би володіти D3D. Але 3D-лабораторії - це, мабуть, найбільша причина, на яку я думаю, про поточний ринковий стан OpenGL. Що вони могли зробити, щоб викликати це?

Вони розробили OpenGL Shading Language.

Дивіться, 3D Labs була вмираючою компанією. Їх дорогі GPU були маргіналізовані завдяки зростаючому тиску NVIDIA на ринку робочих станцій. І на відміну від NVIDIA, 3D-лабораторії не мали жодної присутності на основному ринку; якщо виграла NVIDIA, вони померли.

Що вони зробили.

Отже, намагаючись залишатись актуальним у світі, який не хотів їхніх продуктів, 3D-лабораторії показали на конференції розробників ігор, яка проводила презентації на те, що вони називали "OpenGL 2.0". Це було б повноцінним переписанням API OpenGL з нуля. І це має сенс; У API OpenGL в той час було багато суворості (зауважте: ця суть все ще існує). Подивіться, як працює завантаження та зв'язування текстур; це напівсханний.

Частиною їхньої пропозиції була мова затінення. Природно. Однак, на відміну від нинішніх розширень ARB на міжплатформних платформах, мова їх затінення була "високорівневою" (C - високий рівень для мови затінення. Так, справді).

Тепер Microsoft працювала над власною мовою затінення високого рівня. Котрий вони, у всій колективній уяві Майкрософт, назвали ... Мова затінення високого рівня (HLSL). Але їх принципово інший підхід до мов.

Найбільша проблема мови шейдерів 3D Labs полягала в тому, що він вбудований. Дивіться, HLSL була мовою, яку визначає Microsoft. Вони випустили компілятор для цього, і він створив код складання Shader Model 2.0 (або пізніші моделі шейдерів), який ви б ввели в D3D. За D3D v9 днів D3D ніколи не торкався HLSL. Це була приємна абстракція, але вона була суто необов’язковою. І розробник завжди мав можливість піти за компілятор і налаштувати вихід для досягнення максимальної продуктивності.

Мова 3D Labs не мала нічого подібного . Ви дали водієві мову, схожу на С, і це створило шейдер. Кінець історії. Не монтажний шейдер, не те, чим ви годуєте щось інше. Фактичний об'єкт OpenGL, що представляє шейдер.

Це означало, що користувачі OpenGL були відкриті для капризів розробників, які тільки почали збирати мови, схожі на збірки. Помилки компілятора невпинно поширилися на новохрещеному OpenGL Shading Language (GLSL). Що ще гірше, якщо вам вдалося отримати шейдер для компіляції на декількох платформах правильно (не маючи на увазі подвиг), ви все ще зазнали оптимізаторів дня. Які не були настільки оптимальними, як могли бути.

Хоча це був найбільший недолік у GLSL, це був не єдиний недолік. На сьогоднішній день .

У D3D та на старих мовах асемблери в OpenGL ви можете змішувати вершини та фрагменти (пікселі). Поки вони спілкувалися з одним і тим же інтерфейсом, ви могли використовувати будь-який вершинний шейдер з будь-яким сумісним шейдером для фрагментів. І навіть існували рівні несумісності, які вони могли прийняти; вершина шейдера може записати вихід, який фрагмент шейдер не прочитав. І так далі.

У GLSL цього не було. Шейдери вершин та фрагментів були злиті разом у 3D-лабораторії, яка називається "програмним об'єктом". Отже, якщо ви хотіли поділитися вершинами та фрагментами програм, вам довелося побудувати декілька об’єктів програми. І це спричинило другу найбільшу проблему.

Дивіться, 3D-лабораторії думали, що вони розумні. Вони грунтували модель компіляції GLSL на C / C ++. Ви берете .c або .cpp і компілюєте його в об’єктний файл. Потім ви берете один або кілька об’єктних файлів і зв'язуєте їх у програму. Отже, так компілюється GLSL: ви збираєте свій шейдер (вершину чи фрагмент) в об'єкт шейдера. Потім ви розміщуєте ці об'єкти шейдерів в програмному об’єкті і зв'язуєте їх разом для формування вашої фактичної програми.

Хоча це дозволяло потенційним крутим ідеям, таким як мати "бібліотечні" шейдери, які містили додатковий код, який могли б викликати основні шейдери, на практиці це означало, що шейдери складалися двічі . Одного разу на етапі компіляції та одного разу на етапі сполучення. Зокрема, компілятор NVIDIA був відомий тим, що в основному виконував компіляцію двічі. Він не генерував якогось посередника коду об'єкта; він просто скомпілював його один раз і відкинув відповідь, а потім скомпілював її знову під час посилання.

Тож навіть якщо ви хочете пов’язати вершину шейдера з двома різними шейдерами фрагментів, вам доведеться зробити набагато більше компіляції, ніж у D3D. Тим більше, що компіляція мови, схожої на C, робилася в режимі офлайн , а не на початку виконання програми.

З GLSL були й інші проблеми. Можливо, здається неправильним покласти провину на 3D-лабораторії, оскільки ARB врешті-решт схвалила та включила мову (але більше нічого з їхньої ініціативи "OpenGL 2.0"). Але це була їхня ідея.

І ось справді сумна частина: 3D-лабораторії були праві (здебільшого). GLSL не є векторною мовою затінення, заснованої на векторі, як тоді був HLSL. Це пояснювалося тим, що обладнання 3D Labs було скалярним обладнанням (подібним до сучасного обладнання NVIDIA), але в кінцевому рахунку вони мали рацію в тому напрямку, у якому багато виробників обладнання працювали зі своїм обладнанням.

Вони мали рацію перейти з онлайн-моделлю для компіляції для мови "високого рівня". D3D навіть перейшов до цього з часом.

Проблема полягала в тому, що 3D-лабораторії були правильні в неправильний час . І намагаючись викликати майбутнє занадто рано, намагаючись бути впевненими у майбутньому, вони відкидають теперішнє . Це схоже на те, як у OpenGL завжди була можливість функціонування T&L. За винятком того, що трубопровід OpenGL T&L був ще корисним перед апаратними T&L, тоді як GLSL був відповідальним перед тим, як світ його наздогнав.

GLSL - це хороша мова зараз . Але на час? Це було жахливо. І OpenGL постраждав за це.

Падіння до апофеозу

Хоча я стверджую, що 3D-лабораторії завдали фатального удару, саме АРБ загнав останній цвях у труну.

Це історія, яку ви, можливо, чули. До моменту OpenGL 2.1 OpenGL зіткнувся з проблемою. У ній було багато спадщини. API вже не був простим у використанні. Існувало 5 способів зробити речі, і ідея, яка була найшвидшою. Ви можете "вивчити" OpenGL за допомогою простих навчальних посібників, але ви насправді не вивчили API OpenGL, який дав вам справжню продуктивність та графічну потужність.

Таким чином, ARB вирішила спробувати ще один винахід OpenGL. Це було схоже на "OpenGL 2.0" у 3D-лабораторіях, але краще, тому що ARB стояв за ним. Вони називали це "Довгий пік".

Що такого поганого в тому, щоб витратити якийсь час на покращення API? Це було погано, оскільки Microsoft залишила себе вразливими. Дивіться, це було під час переключення Vista.

З Vista, Microsoft вирішила внести деякі необхідні зміни у драйвери дисплея. Вони змусили водіїв подати в ОС для віртуалізації графічної пам’яті та інших інших речей.

Хоча можна обговорювати достоїнства цього чи чи це було насправді можливо, факт залишається фактом: Microsoft вважала D3D 10 лише Vista (і вище). Навіть якщо у вас було обладнання, здатне D3D 10, ви не можете запустити програми D3D 10, не запустивши також Vista.

Ви можете також пам’ятати ту Вісту ... гм, скажімо, що вона не спрацювала добре. Таким чином, у вас була недостатня продуктивність ОС, новий API, який працював лише на цій ОС, і нове покоління обладнання, яке потребувало цього API та ОС, щоб зробити щось більше, ніж швидше попереднього покоління.

Однак розробники могли отримати доступ до функцій 10 класу D3D через OpenGL. Ну, вони могли б, якби ARB не зайнялася роботою над Longs Peak.

По суті, ARB витратив на роботу, щоб покращити API півтора-два роки. На той момент, коли OpenGL 3.0 з'явився фактично, прийняття Vista закінчилося, Win7 був за кутом, щоб поставити Vista за ними, і більшість розробників ігор взагалі не переймалися особливостями класу D3D-10. Зрештою, апаратне забезпечення D3D 10 запустило програми D3D 9 просто чудово. І з підйомом портів на ПК на консоль (або розробники ПК, що переходять на розробку консолей. Виберіть свій вибір), розробникам не потрібні особливості класу D3D 10 класу.

Тепер, якщо розробники мали доступ до цих функцій раніше через OpenGL на машинах WinXP, то розробка OpenGL, можливо, отримала б так потрібний удар у руку. Але ARB упустила свою можливість. А ти хочеш знати найгіршу частину?

Незважаючи на те, що витратили два дорогоцінні роки на спробу відновити API з нуля ... вони все-таки зазнали невдач і просто повернулися до статусу кво (за винятком механізму депресації).

Таким чином, ARB не тільки пропустила важливе вікно можливостей, вони навіть не виконали завдання, яке змусило їх упустити цей шанс. Досить багато епосу провалюється навколо.

І це казка про OpenGL проти Direct3D. Казка про пропущені можливості, про грубу дурість, навмисну ​​сліпоту та просту дурість.


24
Ви це десь писали, чи писали, якщо вгорі голови?
Крістофер Хох

38
@ Крістофер: Я не знаю, чи можна це назвати "вгорі голови" за те, що на композицію пішло годину або близько, але мені не було кудись записано.
Нікол Болас

18
@ F.Aquino: Отже, ви готові віднести це до системи візуалізації, яку використовують ігри FPS, а не самого двигуна? Навіть незважаючи на те, що CS базується на Half-Life 1, який базується на Quake? Вибачте; не купуючи його. Зрозуміло, я не купую припущення, що нові FPS не мають потенціалу е-спорту, хоча є багато турнірів з електронних видів спорту, орієнтованих на нові FPS. Вони можуть не мати ту саму привабливість, що CS робить для деяких гравців, але не помиляйтесь, думаючи, що ці гравці складають усі FPS-е-види спорту.
Нікол Болас

165
Ого. Мене навіть не цікавить більшість цього матеріалу, і це все ще чудово читати!
Пітер Роуелл

12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).LOLled більше 6 хвилин на цьому.
ApprenticeHacker

133

Мені здається дивним, що всі зосереджуються на базі користувачів, коли питання - "розробники ігор", а не "редактори ігор".

Для мене, як розробника, Linux - кривавий безлад. Існує так багато версій, настільних менеджерів, наборів інтерфейсу користувача тощо. Якщо я не хочу розповсюджувати свою роботу як відкритий код, де користувач може (спробувати) перекомпілювати, щоб вона відповідала його унікальній комбінації пакетів, бібліотек та налаштування, це кошмар !

З іншого боку, Microsoft забезпечує (більшу частину часу) неймовірну відсталість та стабільність платформи. Можна націлити цілий спектр машин із одним установщиком із закритим кодом, наприклад, на комп'ютери з ОС Windows XP, Vista та 7, 32 та 64 біт ароматів без встановлення належних перерозподілів DX або VC тощо.

І останнє, ЗАБУДУЙТЕ ВСІ БЕЗКОШТОВНО В ІНТЕРНЕТ-СТОПІВ, ЩО ПІДКЛЮЧАЮТЬ ОПЕРАЛЬНИЙ І ПРЯМИЙ! Або порівняйте Direct3D з OpenGL або не робіть цього . DirectX забезпечує підтримку вводу, підтримку звуку, відтворення фільмів тощо тощо, що OpenGL не має.


40
"Для мене, як для розробника, Linux - це кривавий безлад". Справді! Я працюю в середовищі з Fedora та Ubuntu. У нас є проблеми навіть між цими двома. (Треба додати, що я фанат Linux.)
Девід Пул

48
@ jv42: Це здається поширеною помилкою: майже всі ці версії та менеджери настільних ПК, набори користувальницького інтерфейсу тощо не мають великого значення для отримання гри та роботи. Якщо ваша гра (як постачається) залежить більше від libGL, libX11 і libasound (або libopenal, libao або liboss), ви робите щось не так.
greyfade

19
@greyfade "Якщо ваша гра (як постачається) залежить більше від libGL, libX11 та libasound (або libopenal, libao або liboss), ви робите щось не так". - А потім ви посилаєтесь на libao-0.0.4alpha, а у вашого користувача є libao-0.0.5beta і нічого не працює.
Quant_dev

17
Упакувати бінарне так, щоб він працював на всіх дистрибутивах Linux, не так складно. Чортів, розробники Blender роблять це з кожним випуском. Існує лише один (ну два, 32-ти та 64-бітний) пакет Blender для випуску Linux.
datenwolf

8
Користувачі Linux платять більше за ігри. Дивіться: koonsolo.com/news/linux-users-show-their-love-for-indie-game та 2dboy.com/2009/10/26/pay-what-you-want-birthday-sale-wrap-up
Олександр

88

Це тому, що на планеті є більше користувачів Windows, ніж Linux та Mac. Правда полягає в тому, що люди роблять речі для того, хто має найбільший ринок.
Те саме стосується мобільних телефонів: Android та iPhone мають дивовижні ігри, але Windows Mobile та Symbian не ...


24
@Mahmoud Hossam: Це неправда. Використання OpenGL не означає, що вся ваша програма просто магічно працюватиме в середовищі * nix, це означає, що графічний двигун буде (і навіть тоді це не означає, що немає ніяких химерностей (наприклад, Windows), які не виконують існують на Linux і навпаки). Це ще не весь кошик, і, безумовно, є вагомі витрати на підтримання їх коду для декількох платформ.
Ред С.

5
@Mahmoud: Саме так. І якщо ви все одно не будете перейматися переносом на Linux / Mac OS, то чому б не використовувати рідну бібліотеку? DirectX набагато краще підтримується в Windows, ніж OpenGL.
Дін Хардінг

10
@Mahmoud: вся передумова питання "чому розробники віддають перевагу Windows". Відповідь: адже саме цим користуються геймери. Немає сенсу переносити на Linux / Mac, якщо він складає лише 2% вашого ринку, і в цьому випадку немає сенсу використовувати OpenGL, якщо ви все-таки не збираєтесь портувати.
Дін Гардінг

4
@Mahmoud, це не робота розробника ігор, щоб змусити людей перейти на Linux.
GrandmasterB

6
@John 10+ мільйонів гравців World of Warcraft хотіли б поговорити з вами. І це лише одна гра.
Marcelo

50

Оскільки Windows має понад 90% частки ринку, а Linux (оскільки ви спеціально запитали про Linux) має репутацію того, що має багато користувачів, які не люблять платити за програмне забезпечення. Незалежно від того, правда це чи наскільки це правда, не має значення; сприйняття є і воно впливає на рішення людей.


1
Якщо розробники використовують OpenGL, він підтримуватиме як Windows, так і Linux, тому маркетинговою перевагою буде власне залучення користувачів Linux, які готові платити і користуються Linux, оскільки вони вважають, що це краще.
М.Самер

9
Навіть при використанні OpenGL є витрати на розробку та тестування крос-платформи, які ринок Linux не виправдовує. Наразі Directx є (на жаль) кращою платформою для ігор на ПК на даний момент, ніж OpenGL - на ПК відкривається дуже мало нових ігор на ПК, що будуються на OpenGL.
Мартін Бекетт

25
Крос-платформинг не такий простий, як "просто код для OpenGL".
Система вниз

13
Це насправді не так, що користувачі Linux не платять за програмне забезпечення. Humble Indie Bundle (пакет ігор, який ви можете отримати за будь-яку суму грошей, яку ви хочете заплатити) робився вже двічі, і кожен раз він показував, що користувачі Linux платять більше, ніж користувачі Windows за цей пакет.
Htbaa

9
@Htbaa Звичайно, вони заплатили більше, вони були відчайдушними, це, мабуть, єдині ігри, які вони можуть грати на своїй ОС.
Марсело

11

Оскільки Windows підтримується величезною організацією, вона більше десяти років тому вирішила, що хочуть, щоб розробка ігор відбувалася на їх платформі .

Це не було правдою для Mac, і це неправда зараз. Навіть не для iOS. Apple не пропонує інструментів для розробки ігор для iOS. Але це величезний ринок (там більше iPhone, ніж ПК у 1995 році) з відносно малою конкуренцією, тому люди так чи інакше роблять.

Що стосується Linux, то навіть не існує якоїсь центральної установи, яка могла б визначити будь-які пріоритети. Напрямок, в якому рухається Linux, менше визначається купою дуже хороших, але трохи неземних програмістів.

Для того, щоб сьогодні створити комп'ютерну гру, вам потрібно багато художників 2d / 3d, ігрових дизайнерів, сценаріїв, акторів, тестерів і чого іншого. Що стосується власне програмування, ви можете просто використовувати фактичний ігровий движок (CryEngine, Unreal Engine, Quake Engine, Source Engine). Таким чином, ви могли б зробити все це без фактичних програмістів.

Через це та через характер бізнесу програмісти мало говорять, яку саме платформу обрали. І, як правило, менеджери шукають підтримки, яку Microsoft вимагає запропонувати, і мати справу з речами, які так чи інакше підходять для їхніх мислителів, що з відкритим кодом не є.

З цієї причини більшість комерційних розробок програмного забезпечення для кінцевих користувачів здійснюється на Windows.
Я працюю в компанії, яка створює флеш ігри, і тому не прив’язана до певної платформи. Однак ми всі розробляємо у Windows, оскільки більшість інструментів, які ми використовуємо, недоступні для Linux.


2
"Отже, ви могли б зробити все це без фактичних програмістів." Ви забули сарказм.
Аллон Гуралнек

@AllonGuralnek: Ніякого сарказму немає. У класичній розробці ігор для великих ігор програмісти створюватимуть двигуни та засоби для забезпечення вмісту та поведінки (через візуальні редактори чи фактичні сценарії), а потім дизайнери ігор / рівня / місії використовуватимуть ці засоби. Якщо ви купуєте працюючий і досить потужний двигун, ви в основному можете вирізати перший крок.
back2dos

2
Чи є у вас конкретний приклад досить помітної гри, створеної без написання жодного рядка коду?
Аллон Гуралнек

1
@AllonGuralnek: Я не сказав, що хтось створюватиме ігри без коду , але без програмістів . Вам не потрібно бути програмістом, щоб створити мод, що повністю змінюється в грі. DotA - найпопулярніший, про який я можу придумати голову.
back2dos

1
@AllonGuralnek: Ні. Люди, які пишуть код - це люди, які пишуть код. Дизайнер рівня повинен мати певне розуміння сценаріїв. Часто програмістам часто потрібно мати певну кількість управлінських навичок. Це не робить першого програмістом, а другого - менеджером. Також ваша оцінка DotA помилкова. По-перше, це повністю змінюється в грі, перетворюючи RTS в новий жанр, по-друге, багато ліги електронного спорту, включаючи ESWC
back2dos

10

Як уже було сказано, найважливіша частина - це база користувачів. 95% користувачів ПК використовують Windows. ПК-геймери використовують майже виключно Windows. Навіть ті, хто використовує Mac чи Linux, найчастіше запускають ігри Windows через певну віртуалізацію чи емуляцію (за дуже-дуже невеликими винятками).

Але демографічне - це не все. Я б не недооцінював ту частину, яку робить Microsoft, щоб зробити платформу більш привабливою для розробників ігор. В основному ви отримуєте повнофункціональний набір інструментів безкоштовно , головне, XNA Game Studio . Це дозволяє не тільки розробляти для Windows, але і для Xbox360 . І з останнім виданням навіть для телефонів WP7. Очевидно, оскільки це інструмент Microsoft, він використовує DirectX, а не OpenGL.


3
Примітка для будь-яких читачів, що подорожують часом: Станом на квітень 2014 року, XNA буде офіційно мертвою. Останній реліз (4.0) був опублікований у 2010 році, і він не побачить нову версію між тепер (2013) та заходом сонця.
Арен

1
Ще одна примітка будь-яким читачам, що подорожують часом: розвиток Windows 8 (і новіших версій) у майбутньому більше не буде безкоштовним .
Fouric

6

Ewwww, я не хочу. Я використовую Linux майже виключно. Я подвійно завантажуюся до Windows для створення Windows, і використовую Mac для Mac, але це все.

Трюк - це кросплатформна структура, яку ми розробляли протягом багатьох років. Наші ігри побудовані поверх цього, і поводяться однаково в Linux / OpenGL, Mac / OpenGL та Windows / Direct3D (і незабаром в iOS / OpenGL).

Дійсно, моя компанія не займається титрами AAA, тому вона може не застосовуватись до них, але ми робимо найкращі випадкові ігри (див. Веб-сайт - CSI: NY, Murder She Wrote та два майбутні 2011-і - приклади заголовків із використанням важливих ліцензій. Втрачені випадки Шерлока Холмса 1 та 2 також були досить успішними)

Я б не відмовлявся від gedit + gcc + gdb + valgrind ні для чого іншого.


3
gedit недооцінений для програмування
Олександр

2
@ Олександр, недооцінений навіть не починає пояснювати
Шахбаз

3
Вибачте, я все-таки відмовився від gedit. Зараз я використовую gvim, і я набагато щасливіший :)
ggambett

4
  1. Інертність. Якщо ви раніше використовували Windows, то перейти на щось інше - це клопоти. Якщо ви перебуваєте в Windows DirectX, простіше і швидше працювати, ніж OpenGL.
  2. Частка ринку. Частка ринку Windows на робочому столі більша, ніж у OS X, що, в свою чергу, більше, ніж у Linux. Гроші вирішують все.
  3. Бренд. DirectX більш відомий, ніж речі, такі як SDL (це те саме, що вам потрібно буде повторити деякі функції DirectX, що виходять за рамки OpenGL).
  4. Менше плутанини. Чи підтримує Linux Linux тільки до OpenGL 1.4 або OpenGL 2+? Чи можете ви використовувати підручник OpenGL 2.0, як вступ до сучасного OpenGL. Глава 1: Графічний конвеєр у вашій версії Linux?

У наші дні Linux є більш цікавим, коли мова йде про розробку ігор, і більшості розробників було б краще фіскально робити версію порту OS X перед версією Linux (див. Такі речі, як Steam). Навіть тоді ринок консолей коштує більше, ніж ці дві платформи, поєднані для ігор ...

Якщо ви хотіли моно платформи DirectX, це добре. Якщо ви хочете бути крос-платформою, є великий шанс, що вам доведеться перейти з OpenGL хоча б на деякі інші платформи.


2
Відповідь на питання 4: 2+. Mesa3D підтримує до OpenGL 2.1, а це означає, що всі графічні драйвери для 3D-обладнання для X11 підтримують принаймні OpenGL 2.1, починаючи з версії Mesa 6.8. Він охоплює всі дистрибутиви Linux, випущені за останні кілька років, і бінарні драйвери, які підтримують NVIDIA та AMD, підтримують версію 3.0 і вище. Це не включає користувачів Intel895, але вони застарілі.
greyfade

1
Боюся, це не так. Комп'ютери з чіпсетами i915 / i945 (GMA 900/950) (як і раніше) продаються і не застаріли. Навіть на сучасних дистрибутивах кілька місяців тому (Ubuntu 11.04 / Fedora 15) glxinfo поверне версію OpenGL не вище 1.4 (Mesa 7.11-devel). Таке обладнання Intel просто не може робити пізніші версії без допомоги програмного забезпечення, тому поки Softpipe не стане доступною за замовчуванням, Linux на таких картах ніколи не буде робити версію OpenGL вищої версії. Націлювання на OpenGL 2.0 (або вище) зупинить роботу програми на широкому діапазоні настільних систем Linux ...
Anon,

Незважаючи на це, я не бачу стурбованості. Ці самі набори мікросхем мають обмеження для Windows, тому більшість важких графічних ігор все одно не підлягають сумніву .
greyfade

4

Відповідь очевидна. Мета написання гри - заробити гроші. Більше кінцевих користувачів працює під керуванням Windows, тому існує більший ринок, і ви можете сподіватися, що зароблять більше грошей на грі Windows, ніж на грі Linux. Це так просто.

Якщо ви коли-небудь задаєте собі питання "Чому хтось робить ...", просто пам’ятайте, що гроші змушують світ кружляти.


1
Так, але ви можете зробити гру на багато платформ і отримати більше, ніж просто користувачів Windows;)
M.Sameer

Бути кросплатформою - це не все. Якщо кількість додаткових користувачів, які ви отримуєте, є відносно низьким відсотком, то вам потрібно збалансувати додаткову вартість розробки та поточну вартість підтримки з тим, що зайві ви збираєтеся отримати від них і приймати обгрунтоване рішення на основі фактичних важких даних. Не існує глобально правильної чи неправильної відповіді на цю, але є відповідь, правильна чи неправильна для кожної окремої програми, і те, що правильно для однієї програми, може бути неправильним для іншої.
Максим Мінімус

4

Інструменти, інструменти, інструменти.

Саме це і зводиться. Розвивайтесь у Windows, і ви отримаєте доступ до одних з найкращих інструментів розвитку планети. Ніщо не наближається до налагоджувача Visual Studio, час виконання налагодження DirectX є приголомшливим, PIX - приголомшливим, а подібні еквіваленти просто не існують на інших платформах / API. Звичайно, там є якісь хороші речі; Я не кажу, що інструменти на інших платформах погані, але ті, які надає MS, настільки далеко випередили пакет (почесне виняток: Valgrind), що це навіть не смішно.

Підсумок полягає в тому, що ці інструменти вам допомагають. Вони допомагають вам робити речі, допомагають вам бути продуктивними, вони допомагають вам зосередитись на помилках у власному коді, а не боротися з API, який ніколи не веде себе так, як задокументовано.


PIX - приголомшливий. Налагодження шейдерів, натиснувши набридливий піксель і побачивши, що сталося, це чудово!
Кріс Пітман

4

Тому я переглянув усі ці відповіді, і як розробник ігор, який має код на консольних іграх, що були на полицях Walmart, у мене є зовсім інша відповідь.

Поширення.

Дивіться, якщо ви хочете бути на консолі Nintendo, вам потрібно отримати дозвіл Nintendo, придбати на заводах Nintendo, оплатити накладні витрати Nintendo, домовитися з Walmart, розібратися зі складуванням, вам потрібні гроші на виробництво, друк ящиків, доставку , щоб зробити все страхування та ін.

Якщо ви хочете на XBox, переконайтеся, що є XBLA, але вам все-таки потрібно благословення Майкрософт, вам доведеться дочекатися своєї черги, це десятки тисяч доларів, щоб випустити виправлення тощо.

На iOS вам все одно потрібне нормально Apple, і вони можуть (і це зробити) примхливо тягнути вас.

На Steam вам все ще потрібен дозвіл Valve або зелене світло, і багато грошей.

.

У Windows? Ви налаштували веб-сайт та кнопку завантаження.

.

Я не кажу, що інші платформи не є цінними. Але так багато жахливих речей відбувається, коли ти намагаєшся розробити гру, що, як мені здається, обіцянки мати змогу просто ляпнути бінарне на сайті та зосередитись на роботі - принаймні для початку - дійсно знижує багато потенційних бар'єрів відмов.

"Ми можемо зробити порт XBLA пізніше, коли справи стабільні".

І в меншій мірі впевнений, що це добре і для Linux, і якщо сім клієнтів хороші, ви можете почати там.

Але у Windows є три масивні переваги: ​​справді відкрита розробка, справді відкрита розгортання та дуже велика, дуже активна клієнтська база, яка зацікавлена ​​у вигадливих речах.

Важко собі уявити, де ще я б почав.


3

Я думаю, ви повинні прочитати більше про історію DirectX та цю статтю .

Я думаю, що MS обрали DX через openGL, оскільки вони люблять замикати людей у ​​користуванні власною ОС.


4
ні, вони створили DX, оскільки OGL не оптимізований для Windows, не може бути швидко розширений, щоб скористатися новими апаратними та операційними системами, не містить звуку, керування введеннями тощо тощо.
jwenting

2
iow DX спеціалізується на Windows з міркувань продуктивності та дозволяє Microsoft зберегти його таким чином і швидко включити нову технологію, коли вона стане доступною. OpenGL застряг на рівні апаратної підтримки графіки, яка існувала 5 років тому, можливо, і більше, тому що це зусилля комітетів.
jwenting

1
@jwenting Я не думаю, що продуктивність була єдиною причиною того, що вони не перенесли його на інші платформи, я маю на увазі, якби вони хотіли перенести його, принаймні, вони відкрили б його та передали громаді для реалізації це.
Махмуд Хоссам

1
вони не відкривали джерело C #, вони подали специфікацію мови органам зі стандартів. Microsoft є членом цих органів зі стандартів і робить такі речі постійно (вони мають великий внесок, наприклад, у html, javascript та інші стандарти). Відкриття пошуку це означало б звільнення вихідного коду для компілятора та бібліотек під чимось на зразок APL.
jwenting

1
@jwenting: Для запису існує реалізація Direct3D 10 та 11 на Linux, яка спрямована на рамки Gallium3D. (І це не має нічого спільного з Wine.) Я також не погоджуюся з вашим твердженням, що "OGL не оптимізований для Windows". Це проблема реалізації драйверів апаратних засобів, а не обмеження OpenGL.
greyfade

1

Багато що стосується політики та контролю. Наприкінці 90-х SGI та MS фактично домовилися об'єднати зусилля:

http://en.wikipedia.org/wiki/Fahrenheit_graphics_API

SGI інвестував значні кошти в проект, MS не зробив. SGI потребували MS більше, ніж MS потрібні SGI. Решта - це історія.

D3D і OpenGL - це два дуже різні API, розробник повинен вибрати, який саме підходить для ваших потреб.


0

Просто тому, що Linux жахливо вийшов з ладу як настільна система. Як хтось раніше зазначав, Linux - це безлад для розробників (різні бібліотеки, набори інструментів тощо)

Ще одна проблема - фрітардизм та відсутність підтримки власного програмного забезпечення. Nvidia завжди забезпечує чіткі (фірмові) драйвери для Linux, проте Ubuntu та інші дистрибутиви не доставляють її. Також немає доступного бінарного інтерфейсу драйверів для Linux, як для Windows. (Є текстовий файл під назвою binaryApiNonsense.txt або щось подібне у джерелах Kernel) Сказавши, що тільки Linux Nvidia належним чином підтримується під Linux. Ви можете грати в більшість ігор програмного забезпечення ID, використовуючи апаратне забезпечення Nvidia під Linux.

Наступна річ інструменти розробки. MSFT забезпечує чудову підтримку C ++, а налагоджувач Visual Studio краще, ніж gdb, щодо C ++. І останнє, але не менш важливе, відсутні інші інструменти, такі як Photoshop. Також .net дозволяє швидко створювати інструменти gui. Багато ігрових студій кодують свої інструменти для внутрішнього використання, використовуючи рамки .net.

Я майже забув: Графічна система жахливо, ще в ті часи, коли вони перенесли X11, тому що це було найпростішою справою. Вони не змогли належним чином розробити та впровадити сучасну графічну систему, яку мають OSx та Win.


4
Хм? Мої картки Intel та Ati відмінно працюють у Linux ... А що не так з X11? Я завжди вважав, що це набагато краще, ніж альтернативи для інших ОС (особливо Windows) через його архітектуру клієнт-сервер.
альтернатива

Ні, вони не набирають glxinfo і бачать погоду, це гарно чи ні! X11 жахливо зламаний лише приклад theinvisiblethings.blogspot.com/2010/08/…
Nils

і якщо ви читаєте останнє речення, Лінус сам реалізував патч рівня ядра - не патч X11.
альтернатива

1
Я не знаю багато про графічну систему (у вас може бути точка), але кажу, що Linux не вдався як настільна система, це неправда або, принаймні, не точна. Я перейшов з Windows в Linux і з тих пір відчуваю себе значно продуктивнішим. Продуктивність Linux була і перевершує Windows на всіх машинах, які я використовував. Я також не кодую C ++ і хочу знати, де Eclipse стоїть як C ++ IDE порівняно з Visual Studio.
М.Самер

Відкладіть вогнемет. Я думаю, що загальновизнана думка полягає в тому, що VS - найкращий ІДЕ. Однак Eclipse ще молодий і йому належить піти - ми побачимо. Мені просто подобається, як легко все в сценаріях і налагоджено в Linux!
Vorac
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.