Чем должна и не должна заниматься игра на старте?

Спасибо огромное всем, кто проголосовал в опросе (увы, пока движок блога не позволяет размещать опросы здесь, приходится их делать у себя в ЖЖ).

Как обычно, результаты очень показательные, особенно если учесть возможность посмотреть ответы и сравнить выпущенные разработчиками игры.

Я озвучу свою собственную точку зрения на вопрос “требуется ли такая диагностика в игре и если да, то каким образом ее делать”. Кстати судя по ответам, по состоянию на 11:47 24 апреля я должен растаться с 29 литрами пива (именно столько людей проголосовало за пункт 1). Впрочем, пиво почти наверняка останется при мне, потому что я готов привести конфигурации компьютеров и настроек, на которых ваша версия GetTotalVideomem() даст неправильный ответ.

А раз вы не можете быть уверены в результате, то что же делать?

Разумеется, очевидно, что для PC-игр конфигурация компьютера может быть сильно различной. И для борьбы с этим явлением многие разработчики вынуждены вводить видео-опции. Кто-то вводит технологические опции, такие так “Lightmaps”, “Texture filtering”, “HDR” и т.п., кто-то – более игровые “Render quality” и т.п. Ну и иногда делаются кнопки типа “максимальное качество” / “сбалансированные настройки” / “минимальные настройки”. Хотя настройки типа Lightmaps/Shadows позволяют (наверное) сбалансировать качество vs производительность лучше, чем один ползунок “Render quality”, не совсем понятно, какое количество игроков будет готово заниматься таким тщательным тюнингом.

Но речь даже не об этом. Стремление помочь игроку в познании игры в ее максимальном качестве иногда приводит к совершенно невообразимым результатам. Из них вполне получился бы такой же “Топ 10″, какой я делал про самые нелепые падения игр. Установка игре high process priority и автоматическая блокировка процесса icq.exe – это еще не самое страшное, что может быть. Требование на определенный размер своп файла – это уже веселее. Требование на /3Gb пока еще не встречал, и слава богу. Но это все меркнет перед тем, на какие реальные шаги разработчики готовы пойти, ради того, чтобы оградить пользователя от плохого впечатления от игры, вызванного низкой производительностью…

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

Я хотел бы развеять несколько мифов.

Миф номер 1. Вы можете определить конфигурацию компьютера. На сам деле ни хера вы не можете. Даже тактовую частоту процессора вы не определите. А даже если и определите (и даже если еще про количество ядер не забудете), что вам это даст? И вы уверены, что тактовая частота больше 4294967296 Гц не вызовет в вашей программе переполнения int? Про видеопамять уже писал выше, даже повторяться не буду. Вы конечно можете потратить несколько человеко-месяцев на борьбу с текущим детектированием конфигурации компьютера и несколько человеко-месяцев на борьбу с будущими конфигурациями (примеры ниже). Но это все равно бесперспективно.

Миф номер 2. Пользователю требуется регулярная проверка конфигурации компьютера и установка параметров в автоматическом режиме. Ни хрена. Он будет благодарен вам, если вы настроите игру в момент инсталляции. Если он купит другую железку или покрутит настройки в биосе, то он достаточно опытен, чтобы найти окно “Video options”. Если хотите совсем казуального решения – сделайте отдельную утилиту “Автоматическое детектирование конфигурации компьютера”, чтобы она переустановила настройки игры (альтернативный вариант – ключ запуска игры типа -reset – приведен ниже).

Миф номер 3. Игра должна блокировать свой запуск, если конфигурация компьютера не соответствует системным требованиям. Поскольку миф номер 1 – это действительно миф, то блокировка запуска игры – это самый худший вариант, который вы можете предложить игроку. Вы можете сообщить, что его компьютер плохой, и что он может не потянуть с нужной производительностью (Continue/Cancel). Вы можете сообщить, что из-за капсов у него что-то не будет рисоваться или рисоваться с глюками или даже вообще программа может упасть. Но физически запрещать запуск игры – я надеюсь, что среди издаваемых нами продуктов я такого больше не увижу. Потому что когда появился Core 2 Duo некоторые наши игры начали выдавать следующий перл: “Ваш компьютер имеет тактовую частоту 2.1 ГГц. Для игры требуется 3 ГГц. Нажмите Ok,. чтобы выйти из программы” (это еще к мифу номер 1).

На самом деле, какие вопросы надо решить разработчику:
1. Надо, чтобы игра установилась на компьютер;
2. Надо, чтобы она “по умолчанию” работала достаточно адекватно;
3. Надо, чтобы ни при каком развитии событий у пользователя не возникло дедлока, что он не может запустить игру (разумеется, про критические рантайм ошибки речь не идет);
4. Надо, чтобы ее запуск не отжирал продолжительное время;
5. Надо, чтобы у продвинутого пользователя была возможность настроить / отбалансить игру под свой компьютер и под себя;
6. Надо, чтобы у обычного “казуального” пользователя при помощи службы техподдержки была возможность дистанционно решить какие-то проблемы или настроить игру под свой компьютер.

Пункты 1 и 2 приводят нас к тому, что в процессе установки игра может проверить конфигурацию компа и предложить свой вариант для установки параметров по умолчанию. Если она такого делать не умеет – поставьте настройки в среднее значение, чтобы игра нормально запустилась на большинстве компьютеров. Если есть, если детектор отработал без падений (учитывая объем кода для того, чтобы вытащить размер видеопамяти из dxdiag, это важное замечание) и если его результатам можно доверять, поставьте настройки так, как считаете нужным.

Пункт 3 вроде бы как приводит нас к тому, что надо детектировать конфигурацию на каждом запуске. На самом деле не надо (пункт 4 запрещает нам делать это). И в наших техтребованях, и у многих других издателей есть пункт о том, что нужна либо отдельная программа, либо опция командной строки, которая позволяет обресетить все настройки игры и запустить ее в минимальном качестве. Делается за сутки, работает надежно на любой конфигурации.

И наконец, пункты 5 и 6 могут быть реализованы в игре при помощи каких-то дополнительных переключателей и настроек. Не обязательно даже в графическом режиме. Можно в текстовом файле при помощи команд set. Можно так, как это сделано в firefox (about:config). Можно как угодно. Желательно, чтобы эта возможность была, но при этом абсолютно не мешала 99% пользователей, которым это никогда не понадобится.

А освободившееся время лучше потратьте на профилирование и улучшение производительности. Пользователи вам будут намного более благодарны, чем если вы будете на каждом старте игры детектировать конфигурацию и “не пущать”.

  • CreatorCray

    >> Требование на определенный размер своп файла – это уже веселее
    Кстати да, убивать за такое надо. Таким маразмом занимается например Company Of Heroes при каждом запуске. Причем именно блокирует запуск с сообщением “хочу 768 метров свопа!”
    Взбесило до такой степени что в порыве ярости пропатчил exeшник. На работоспособности/производительности это никак не отразилось.

  • look4awhile

    зачем делать под разные конфиги? мы разве продаём видеокарточки? мы делаем игры

  • dDIMA

    Боря, консольный мир испортил тебя окончательно :)
    На ПэЦэ все же хочется, чтобы один могли насладиться игрой в максимальном качестве, а другие – поиграть хотя бы в “кубики на террейре”

  • http://www.creative-assembly.com.au/ Loyso

    > поиграть хотя бы в “кубики на террейне”
    Такие игроки не только не хотят платить, но и не платежеспособны.

    > На ПэЦэ все же хочется
    Главный вопрос как всегда: “Кому?”

  • dDIMA

    > Главный вопрос как всегда: “Кому?”
    Например, издателю, который заинтересован в том, чтобы максимально большая аудитория имела возможность запустить сей продукт на своей конфигурации.

  • look4awhile

    >> Главный вопрос как всегда: “Кому?”
    > Например, издателю, который заинтересован в том, чтобы максимально большая аудитория имела возможность запустить сей продукт на своей конфигурации.

    я такое всегда понимаю и понимал. и с очень давних времён считаю – что как только её (эту самую мин. конфигурацию) определили, то дизанить надо под неё. а не заниматься продажей топ-энд видеокарт; если, конечно, не занесли в консерваторию.

  • http://www.cgportfolio.ru/database/showthread.php?t=26 Vlasov Alexey

    look4awhile:

    >>> Главный вопрос как всегда: “Кому?”
    >> Например, издателю, который заинтересован в том, чтобы максимально большая аудитория имела возможность запустить сей продукт на своей конфигурации.

    > я такое всегда понимаю и понимал. и с очень давних времён считаю – что как только её (эту самую мин. конфигурацию) определили, то дизанить надо под неё. а не
    > заниматься продажей топ-энд видеокарт; если, конечно, не занесли в консерваторию.

    В моем понимании конфигурация в идеале должна быть одна. Минимальная. Т.е. вот как художнику хочется “круче” и достать до звезд “директ иксом одинадцатьсполовинным”, но на практике(и по опыту как следствие), кроме гемороя непонятного это не вызывает. Собираем кучу баг с топовыми видеокартами, оптимизация под разные конфиги начиная от текстур и заканчивая шейдерами, а в худшем случае и менеджером памяти и т.д. и т.п. Проект на PC, это либо бенчмарк, который “ставит на колени” любую видеокарту(Кризис) или игра ради игры(практиечки любой продукт Близарда, который сделан по принципу минимальной конфигурации). Как по другому, даже нет жедания смотреть на PC…

    p.s. В проектах в которых учавствовал _всегда_ было три различные настройки качества картинки и производительности игры. Даже не спрашивайте почему:)
    p.p.s. Если счастливое будущее таки наступит такое врятли повторится…

  • http://www.microsoft.com CEMEH

    Мне казалось, стараются делать все же не под мин-спек, а под мид-спек – т.е. то, что будет у большинства игроков, потому что надо же графикой удивлять.
    Если графика – основной selling point, то может и надо на hi-end ориентировать (см. Crysis/HL2).

    Но определенно – target config надо иметь может не одну, но две.