в реальном времени в контексте игры - PullRequest
1 голос
/ 27 марта 2012

У меня есть проблема с пониманием концепции реального времени (ИМО плохо названа, разные значения в разных контекстах). Я понимаю программное обеспечение реального времени как программное обеспечение, где время является ключевой переменной. События должны происходить в данное время. Скажем, смена железнодорожного вокзала в 15:02, а следующая должна быть в 15:05, несмотря ни на что.

Но как насчет этого примера. В игре, когда FPS игрока падает ниже 16, выход из игры и говорит пользователю обновить его оборудование или убить другие приложения. Поэтому, когда одна итерация игрового цикла занимает более 1/16 секунды, вывод программы совершенно другой.

Это в реальном времени? Можно ли считать это вычислением в реальном времени?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

В быстро приближающейся канонической статье Исправьте свой временной шаг! , Гленн Филдер рассматривает многочисленные способы решения этой проблемы. Хотя статья в основном посвящена физике, ключевые моменты применимы к любой системе, которая представляет собой функцию времени, то есть вещей, связанных с движущимися вещами.

Краткое содержание этой статьи (которую стоит прочитать) таково:

Вы можете сделать свою физику детерминированной (ну, столько, сколько можно достичь с помощью несовершенного ввода), используя дискретные физические временные шаги. Это выглядит так:

  • Визуализируйте как можно быстрее
  • Передайте дельту времени, которая показывает, сколько шагов предыдущий предпринял этот кадр
  • Время дельта процесса по модулю временного шага число физических шагов
  • Сохраните остаток дельты, который вы не смогли обработать, в аккумуляторе

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

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

Edit:

Отказ от ответственности: я никогда не писал программ для реального времени, работал только в компании, которая имела!

В ответ на действительно реальное программное обеспечение реального времени, вряд ли кто-то создал игру, которая может быть квалифицирована как эта, по крайней мере, в программном обеспечении. (Я не уверен, как можно квалифицировать игры на ПЗУ или игры, которые не работают под операционной системой хоста?) Хотя в качестве вашего примера можно привести попытку с программным обеспечением реального времени, большинством программного обеспечения реального времени. проходит период сертификации, в котором определяется максимальное количество времени, затрачиваемое на инструкцию или на логический блок операции. Игры могут приближаться к этому в некотором смысле, когда, например, лицензиары платформ предъявляют требования (как я полагаю, XBLA) относительно минимальных 30 кадров в секунду или аналогичных. Тем не менее, эти сертификаты, как правило, устанавливаются через период испытаний, а не путем математического доказательства.

2 голосов
/ 27 марта 2012

Ваш вопрос трудно понять, вы имеете в виду вычисления в реальном времени, или имитацию реального времени, или что-то совершенно другое?

Имитация реального времени: в игре можно симулировать в реальном времениопрос для событий.Сохраните время события, а затем, когда наступит время рендеринга кадра, игра должна многократно «перемотать вперед», перемещая текущее время ко времени следующего события и обрабатывая событие.Это должно повторяться до тех пор, пока больше не будет событий или пока не появится значение «текущее».

Для этого необходимо, чтобы все, что является функцией времени (например, скорость, положение, ускорение), было рассчитано в соответствии сТекущее время.Это означает, что вы не будете периодически обновлять эти атрибуты, и ваша игра будет детерминированной, поскольку «игровое время» больше не зависит от реального времени.Это также делает такие вещи, как скорость игры и паузы, очень простыми в реализации.

Если вы ссылаетесь на концепцию систем реального времени, то я бы сказал, что недостаточно информации, чтобы определить, является ли этот «игровой цикл»в режиме реального времени.Это зависит от операционной среды игры и логики в «игровом цикле».Согласно википедии, должен соблюдаться крайний срок в реальном времени, независимо от загрузки системы .

...