Все ли игры сделаны путем рисования каждого кадра?

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

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

2d 3d
60 голосов | спросил eeze 4 MarpmSun, 04 Mar 2018 14:47:56 +03002018-03-04T14:47:56+03:0002 2018, 14:47:56

6 ответов


67

Очень старые игры использовали технику, в которой только те части кадра были перерисованы, что изменилось на этом фрейме. Что я помню, игра «Little Big Adventure» использует эту технику (1994). Но вы можете видеть, что игра большую часть времени играет статическая камера. только когда вы выходите из видимой области, сцена перерисовывается. Если вы играете в игру, вы также заметите небольшое отставание в этом фрейме. На современных графических процессорах с современными игровыми движками все изменилось. Все перерисовывается на каждом кадре. В зависимости от техники рендеринга, некоторые вещи могут даже отображаться несколько раз. При правильной работе вычислительная мощность графического процессора невероятно высока. Но повторное использование происходит. Например, двигатель может решить обновить карту теней только каждый пятый кадр. Или освещение не обновляется до тех пор, пока не будет изменений в источниках света.

ответил Arne 4 MarpmSun, 04 Mar 2018 15:41:13 +03002018-03-04T15:41:13+03:0003 2018, 15:41:13
16

Нет.

По крайней мере, если вы включили старые игры из 70-х, которые использовали векторные дисплеи.

Например, широко известная игра «Астероиды», которая была первоначально разработана для векторных дисплеев, которые представляют собой принципиально другой способ визуализации графики на экран.

  

Векторные мониторы также использовались в некоторых аркадных играх конца 1970-х - середины 1980-х годов, таких как Астероиды, «Буря» и «Звездные войны». Атарировал термин Quadrascan, чтобы описать технологию, когда она используется в их аркадах видеоигр.

https://en.wikipedia.org/wiki/Vector_monitor

Современная графика на сегодняшний день составляет почти 100% для растеризатора, который по определению записывает содержимое графического буфера на дисплей каждого кадра.

ответил Sandy Chapman 5 MaramMon, 05 Mar 2018 00:39:43 +03002018-03-05T00:39:43+03:0012 2018, 00:39:43
11

На самом низком уровне графический процессор на вашем компьютере будет действительно вычислять каждый кадр с нуля и отправлять его на экран. Тем не менее, вы будете подвержены этому, если сами будете управлять этим низкоуровневым материалом [1]. Любая графика (и с этим, game-) движок, однако, будет обрабатывать эти вещи для вас, и вы можете свободно выражать сцену с точки зрения многих объектов, которые вы могли бы изменить между фреймами, но будут постоянными.

  

... как этот метод будет работать для 3D-игр ...

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

[1] ... например, если вы написали свой собственный движок [2] с чем-то вроде OpenGL. Даже в этом случае вы, вероятно, сохранили бы стойкие вещи между кадрами.

[2] Что означает not вариант на вашем текущем уровне навыков.

ответил TauCraft 4 MarpmSun, 04 Mar 2018 15:36:08 +03002018-03-04T15:36:08+03:0003 2018, 15:36:08
2

Короткий ответ: Нет.

Длинная история:

Когда я изучил некоторые игровые программы в школе, нас научили делать следующее:

Определите, какую скорость fps мы хотели в игре (например, 30).

Напишите код, который добавляет 1 к счетчику для каждого интервала (33 мс для 30 кадров в секунду). Этот код работает одновременно с игровым циклом.

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

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

Но тогда в игре много чего, в процессоре будет больше работы, и обновление состояния игры будет приоритетным по отношению к рисованию на экран.

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

Все это было сделано с C ++ и без игрового движка, а также с графической картой. Все работало на одном ядре процессора. Мы использовали некоторые библиотеки для 2-й графики.

ответил user985366 5 MaramMon, 05 Mar 2018 00:57:58 +03002018-03-05T00:57:58+03:0012 2018, 00:57:58
0

Прежде чем можно будет сказать, будут ли видеоигры «рисовать» отображение каждого кадра, сначала необходимо определить, что понимается под «ничьей». Конечно, много видеоигр, конечно, не все рисуют каждый кадр, собирая растровое изображение с нуля; действительно, многие игровые платформы никогда не собирают полные растровые изображения вообще .

Существует несколько подходов к видеоиграм для создания дисплея. Очень небольшое число процессоров включает и выключает электронный пучок или для каждого пикселя, или для игр с векторным сканированием задает координату XY каждой точки, которая будет построена. Большинство игр, которые делают это, делают это в значительной степени для демонстрации того, что процессор достаточно быстр. Чаще всего игры будут иметь аппаратное обеспечение, которое при отсутствии участия в ЦП будет выводить на экран несколько шаблонов пикселей или векторов. Этот шаблон может быть получен путем последовательного считывания данных из области памяти и интерпретации каждого бита или группы битов в качестве цвета пикселя (это называется отображением бит-карты). В некоторых случаях аппаратное обеспечение может считывать байт памяти для каждой области 8x8, 16x16 или другого размера дисплея, а затем использовать этот байт для выбора диапазона памяти для чтения данных пикселя (это часто называют отображением символьной карты ). Некоторые аппаратные платформы могут накладывать несколько растровых дисплеев с настраиваемыми позициями. Они называются спрайтами.

Некоторые платформы не позволяют изменять шаблон отображения во время его отправки на экран, но вместо этого требуют, чтобы все обновления возникали после того, как луч завершил рисование одного кадра, но до того, как он начал рисовать следующий. На таких платформах все, что будет отображаться на кадре, должно быть загружено в аппаратное обеспечение дисплея до начала этого кадра, и дисплей будет ограничен показом шаблона, который можно настроить сразу. Если CPU остановился, пока отображается рамка, тот же кадр будет отображаться бесконечно. Другие платформы позволяют изменять шаблон или реконфигурировать, пока он тянется к экрану. Это позволяет отображать экран, который намного сложнее, чем видеосхема может обрабатывать сама по себе. Это может позволить аппаратной платформе, которая имеет восемь спрайтов, показать большее количество подвижных объектов, установив позиции восьми верхних объектов на экране, ожидая, что луч достиг точки где-то между нижней частью первого объекта и верхнюю часть девятого, устанавливая положение девятого объекта, ожидая, что луч пройдет между дном второго объекта и вершиной десятого (если он еще не существует), установив положение десятого объекта и т. д. Обратите внимание, что этот подход потребует участия ЦП в каждом созданном кадре видео, даже если ни один из объектов явно не перемещается, но ЦП не будет связан с «рисованием» каждого объекта.

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

ответил supercat 6 MarpmTue, 06 Mar 2018 20:47:54 +03002018-03-06T20:47:54+03:0008 2018, 20:47:54
-10

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

ответил Sakib Zang 4 MarpmSun, 04 Mar 2018 20:39:36 +03002018-03-04T20:39:36+03:0008 2018, 20:39:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132