Почему Microsoft не разрабатывает Halo-подобный заголовок следующего поколения с использованием С#?
Вопрос может выглядеть субъективным, но с учетом Microsoft:
- Владелец платформы Xbox 360
- Владелец платформы Windows
- У них есть собственная игровая студия (MGS).
- Собственные другие сторонние разработчики
- Является основным издателем
заставляет меня задаться вопросом, почему Microsoft не продвигает свой флагманский язык, чтобы доказать, что не только вы можете сократить значительное время разработки и, следовательно, деньги, но и показать, что вы можете выпустить следующий заголовок, где интерактивность в реальном времени не " страдают.
Если Microsoft будет делать это один раз, я уверен, что многие разработчики AAA тоже прыгнут на этот вагон.
Ответы
Ответ 1
Во-первых, XNA не будет вариантом. Он сделан с целью устранения различий между ПК и 360. Высокопроизводительная игра не может этого сделать. Он должен использовать различия. Там, где светит 360, производительность должна быть увеличена. Там, где это отстойно, необходимо разработать обходные пути. И наоборот для ПК.
Вот почему существуют и другие оболочки DirectX (SlimDX приходит на ум как гораздо более прямая обертка D3D).
Что касается управляемого кода в целом, то возникает несколько проблем:
- У них уже есть большая база кода, которую они хотели бы использовать. Способ сократить время разработки не, чтобы выкинуть все из окна и начать с нуля на другом языке.
- Большинство игровых студий по-прежнему имеют некоторую автономию, даже если они принадлежат Microsoft. Если они предпочитают писать свою игру на С++, может ли Microsoft отменить ее? Будет ли это хорошей идеей? Это, безусловно, смутило бы разработчиков, и злобные разработчики обычно не очень хорошо.
- Производительность: Да, С# и .NET отлично работают на ПК, но на консолях это совсем другая история. Он использует .NET CF, который, между прочим, имеет ужасно примитивный сборщик мусора. Его компилятор JIT откровенно сосет..NETCF не предназначен для того, чтобы превзойти хорошо отрегулированный собственный код.
- Управление: то, как вы обычно пишете консольные игры AAA, должно использовать все, что может предложить консоль. Каждый байт памяти должен быть более или менее учтен, каждый цикл процессора используется. Управляемый код просто менее предсказуем. Когда выполняется GC? Сколько памяти используется в любой момент времени? Мы не знаем. Консоли имеют очень ограниченный объем памяти. (У 360 есть 512 МБ iirc. Это не так много для современной игры, и можно только сделать такие игры, как Halo 3, если вы точно знаете, кто использует, сколько из этой памяти).
- Большинство функций на 360 просто не подвержены .NET. Многие аппаратные функции требуют использования либо CUP-взаимодействия, либо ассемблера.
Когда это будет сказано, использование .NET для громкой игры в ПК будет работать намного лучше. Полная платформа .NET имеет гораздо лучшие характеристики производительности, и доступное оборудование на ПК будет меняться в любом случае, поэтому жесткий контроль над точной памятью менее критичен.
Но в конечном итоге, почему они это сделают? Это был бы большой риск, для этого потребовалось бы много переписывания кода и что именно они пытаются доказать? Большинство студий делают кросс-платформенные игры, и для них .NET - это не вариант, какой бы удивительной он ни был. Они хотят иметь возможность запускать свой код на PS3, а также Wii или....
Ответ 2
Вам нужно задать несколько другой вопрос.
Почему Microsoft не переписывает существующие сильно настроенные игровые движки на совершенно другом языке.
Это, надеюсь, более самостоятельный объяснительный вопрос.
Я практически ничего не знаю о базе кода игровой системы, но я, конечно, не думаю, что она маленькая. Преобразование любого другого, кроме тривиального приложения из С++, на любой другой управляемый язык - это огромный.
Забыв обо всех различиях синтаксиса и функциях/хаках С++, которые нельзя сделать на С#, с игровым приложением одна проблема в начале беседы будет перфомансом. С# не медленный, но он имеет очень разные характеристики производительности. Он почти уверен, что очень настроенный игровой код С++ не будет работать почти так же, если он напрямую портируется на С#. Весь новый раунд настройки производительности должен был произойти и не был бы дешевым.
Ответ 3
Совершенно просто, для проблем с производительностью в реальном времени, таких как представленные шутерами первого лица, С# не подходит для задачи. Не то, чтобы это не был хороший язык, я использую его и люблю работать с ним, но факт в том, что неопределенность, введенная Garbage Collection на С#, делает ее непригодной для игр с высокими требованиями к производительности. То же самое можно сказать и о Java. Только когда вы доберетесь до точки, где у вас есть определенная избыточная производительность, вы действительно можете сделать что-то подобное; проблема в том, что кто-то другой возьмет эту дополнительную производительность, и вместо того, чтобы погрузиться в требования к среде выполнения С# (или Java, которые будут иметь схожие проблемы), они просто сделают более красивую игру. Поскольку потребителю не важно, с какой технологией была разработана игра, они обычно идут с более красивой игрой, которая ставит любые игры, разработанные с помощью С# (или Java, как я уже сказал), в значительном недостатке.
Ответ 4
Microsoft имеет такую платформу, которая называется XNA, которую они разрабатывали в течение последних трех лет. Существует ряд доказательств концепции, стартовых наборов и других ресурсов для разработчиков хобби и студий AAA.
XNA позволяет всем видам разработчиков использовать свои существующие навыки С# и мощь Xbox 360/Windows для создания игр для обеих платформ. Они еще не разработали коммерческую игру, использующую платформу, но уже довольно много интересных проектов для использования XNA.
Посмотрите на некоторые из игр, которые были созданы, используя XNA.
Кроме того, для комментариев о производительности С# вас может заинтересовать обсуждение форума по этой теме. Это определенно достаточно быстро для многих игр; Фактически, механизм выполнения XNA на Xbox оптимизирован несколькими способами для сценариев разработки игр и сокращения затрат на сбор мусора (у меня нет источника для цитирования, но я работал в качестве стажера для механизма выполнения .NET для Xbox 360).
Ответ 5
Собственно, если вы посмотрите на то, как обстоят дела, MS не имеет почти столько же участия в игровых студиях. Bungie теперь полунезависимая сущность, они закрывали ансамбль (Age of Empires, Halo Wars), кто знает, в чем причина... они закрыли группу Flight Simulator, они позволили своей исключительности с Bioware (Dragon Age, Baldurs Gate, NWN ) и Bizarre (Project Gotham Racing) идут, и они закрывают FASA Interactive (Shadowrun). На данный момент, что у них действительно есть в доме? Все, о чем я могу думать, это... Редкий и Lionhead.
Что касается того, почему они не делали названия AAA с С#. Я предполагаю, что большой кусок этого был унаследованными проблемами. PGR, Forza, Age of Empires, Halo, Flight Sim, почти каждая игра, которую они сделали, была итерацией предыдущей серии, поэтому она уже имела бы значительные инвестиции в существующие инфраструктуры.
Это оставляет третьи стороны. Почему третьи лица не используют С#? Это легко, его недоступно на Wii или PS3.
Ответ 6
.NET framework в целом не предназначен для разработки игр. Предпочитаемая аудитория в .NET - это, прежде всего, бизнес-приложения (я знаю, что ее можно использовать гораздо больше, но виснет с темой на минуту).
Когда вы пишете игры, вам нужен язык, который позволяет вам как можно более интимно взаимодействовать с оборудованием. С++ и Assembly являются классическими примерами, где вы можете сжимать каждую последнюю производительность производительности с процессора, графического процессора и графической библиотеки.
Структура .NET не была разработана с учетом такого управления..NET подходит для быстрого создания приложений очень выразительно - не обязательно вести мельчайшие детали высокопроизводительного графического процессора.