Можно ли написать 3D-игру размером с World of Warcraft в чистом Python?

Можно ли написать 3D-игру размером с World of Warcraft в чистом Python? Предполагая использование привязок DirectX/D3D или привязок OpenGL.

Если нет, то что будет самым большим препятствием для выполнения такого проекта на Python? Я знаю, что игры, как правило, попадают в область C и С++, но иногда люди делают что-то по привычке!

Любая информация поможет удовлетворить мое любопытство.

Edit:

Будет ли GIL опубликовать серьезную проблему для производительности 3d-клиента? И каково общее ограничение производительности при использовании утверждений, связанных с OpenGL или DirectX, вместо изначально использующих библиотеки?

Ответ 1

Да. Как это будет выполняться, это еще один вопрос.

Хорошим шаблоном для разработки было бы разработать его на чистом питоне, а затем профилировать его и переписать узкие места с критикой производительности либо в C/С++/Cython, либо даже в самом python, но с более эффективным кодом.

Ответ 2

Пока я не знаю всех технических деталей World of Warcraft, я бы сказал, что MMO его размера может быть построена в Stackless Python.

EVE Online использует его, и у них есть один сервер для 200 000 пользователей.

Ответ 3

Технически все возможно на любом языке программирования Turing Complete.

Практически, однако, у вас возникнут проблемы с созданием сетевого стека из языка высокого уровня, потому что сервер должен быть ОЧЕНЬ быстрым, чтобы обрабатывать так много игроков.

Игровая сторона вещей на клиенте не должна быть проблемой, потому что нет ничего сложного в графических интерфейсах или квестах или вводах с клавиатуры, и что у вас есть.

Проблемы будут в том, что происходит на вычислительном уровне на сервере. Все, что происходит в человеческом времени, например, при входе в систему, возможно, будет прекрасным, но если что-то должно быть мгновенно более чем десятью тысячами пользователей, вам может понадобиться внешняя библиотека, сделанная в C.

Теперь какой-то гуру-питон выйдет из дерева и разорвет голову, потому что, как я сказал наверху, технически, все может быть сделано с достаточным усилием.

Ответ 4

Игра Minions of Mirth является полной MMO более или менее по шкале WoW и была выполнена в основном в Python. Клиентская сторона использовала Torque Game Engine, который написан на С++, но код сервера и поведение были Python.

Ответ 5

Поскольку ваш основной вопрос уже был дан правильно, я отвечу на ваши последние вопросы:

Будет ли GIL опубликовать серьезную проблему с производительностью 3d-клиента?

В Python 2.6 была представлена ​​библиотека multiprocessing, поэтому вы можете использовать несколько процессорных ядер, не беспокоясь о GIL. Stackless Python также имеет некоторые довольно интересные вещи.

И каково общее ограничение производительности для использования, скажем, привязок OpenGL или DirectX и изначально используя библиотеки?

У меня нет никаких тестов для его резервного копирования, но штраф за использование привязок и родных библиотек достаточно мал, чтобы вам не нужно было беспокоиться об этом.

Ответ 6

В дополнение к Eve Online есть еще несколько реальных примеров индустрии. Бэкэнд сервера в проекте Ultima Online 2 в Origin в конце 90 года был в основном Python над инфраструктурой сервера С++, а поздняя игра Tablua Rasa от NCSoft (с большей частью той же команды разработчиков) имела одинаковую архитектуру.

Twisted Matrix. Первоначальная структура python-сервера была создана с этими точными целями - фактически от разработчика в проекте UO2 в то время, и там была компанией под названием Ninjaneering, которая пыталась коммерциализировать эту кодовую базу через проекты MMO.

В качестве механизма сценариев (например, EQ2) произошел переход к lua, поскольку его проще вставлять и экземплярить.

Проблемы с python в этой среде, как правило, находятся в интерфейсе между языками. Когда вы делаете неизбежную оптимизацию перехода некоторой высокопроизводительной системы с python на C/С++, то проблема с перетаскиванием данных вперед и назад по языковым границам и вызовам функций через языковые границы становится проблемой. Стоимость сериализации может быть высокой, если ее выполнить плохо. Например, использование ранних версий SWIG приведет к сериализации указателей в их строковое представление, а затем проанализирует строку обратно в указатель на другой стороне.

Просмотрите эту бумагу с середины 90-х годов:

Но, в долгосрочной перспективе, я думаю, что это возможно.

Ответ 7

Да, вы могли бы написать его в сборке, или Java, или Python, или brainfuck. Просто сколько времени вы готовы вложить в это. Языковая производительность больше не важна, больше о том, какие алгоритмы вы используете, а не о том, какой язык вы используете.

Ответ 8

Ответ на то, что я думаю, ваш конкретный вопрос: "... в чистом Python..." ответ НЕТ.

Python не достаточно быстр, чтобы называть OpenGL или DirectX достаточно эффективным, чтобы воссоздать World Of Warcraft с возможностью исключения частоты кадров.

Как многие другие ответили, учитывая некоторую работу фрейма высокого уровня, можно было бы использовать Python с языком сценариев, но, как минимум, вам понадобится какая-то графическая система, написанная на другом языке, например С++, для обработки графики, Для сетей, учитывая, что WoW не является игровой игрой, вы можете уйти с чистым питоном, но, скорее всего, эта часть также должна быть некоторой библиотекой, отличной от python.

Ответ 9

Я пробовал себя в написании 3D-игр на Python, и, учитывая хорошую структуру рендеринга (мой любимый OGRE) и приличные привязки, удивительно, с чем вы можете избавиться. Однако, особенно в играх, вы всегда пытаетесь сжать столько, сколько сможете, из аппаратного обеспечения. Недостаток производительности python в конечном итоге станет ощущаться.

Основная проблема, с которой я столкнулся в использовании python, - это огромные накладные расходы. Вызов функций python, даже из других функций python, очень дорог. В некотором роде это цена, которую вы платите за динамический характер python. Когда вы используете оператор функции "()" на символе, он должен решить, является ли это функцией или классом, просмотрите порядок разрешения метода, обработайте аргументы ключевого слова и т.д. И т.д. Все эти вещи выполняются раньше время в менее динамических (скомпилированных) языках.

Я видел людей, пытающихся преодолеть эту проблему, вручную встраивая вызовы функций. Мне не нужно говорить вам, что это лекарство хуже, чем болезнь.

Ответ 10

Просто потому, что он может дать интересное чтение, Цивилизация частично написана с использованием Python. Google на нем возвращает интересные материалы для чтения.

Ответ 11

Как технолог, я знаю:

Если его можно записать в C\С++, его можно записать в сборке (хотя это займет больше времени). Если он может быть записан в C\С++ и не является низкоуровневым кодом, он может быть записан в любой управляемой среде. WoW - это программа высокого уровня, написанная на C\С++ python - управляемая среда

Там для: WoW может быть написан на питоне, поэтому любая другая MMORPG в 3D...


Самая сложная часть - это 3D-движок, так как это самая тяжелая часть кода - вам нужно будет использовать внешний движок (написанный на C\С++\Assebly) или написать его и оптимизировать (не рекомендуется)

Ответ 12

Поскольку Python интерпретируется, будет хитов производительности, в отличие от C/С++, но вы хотели бы использовать что-то вроде PyOpenGL вместо DirectX, но для запуска в других операционных системах.

Но я не понимаю, почему вы не могли написать такую ​​игру в Python.

Ответ 13

Python не интерпретируется - он токенизирован/ "только во времени" байт-код "интерпретируется", и у него нет виртуальной машины, такой как Java. Это означает, что на английском языке это может быть daaaaaamnfast. Не все время, однако, это зависит от проблемы и библиотек, но python не медленный, это распространенное заблуждение даже среди известных людей (и это включает в себя людей с явным движком java, которые просто не ушли и попробовали python).