Страницы

Поиск по вопросам

среда, 4 декабря 2019 г.

Почему в играх непостоянная кадровая частота (FPS)?

#javascript #разработка_игр


Интересна технология по кадровой отрисовки игр.

В играх постоянная кадровая частота или она динамическая? Если постоянная то какая;
если динамическая, то от чего зависит?

Прочитал в википидия что к примеру для немого кино использовали постоянную кадровую
частоту в 16 FPS. А в играх она динамическая что ли?

Что на самом деле измеряют измерители FPS? Больше похоже, что количество FPS, которые
видео-карта может дать ещё, а не частоту кадров в игре.
    


Ответы

Ответ 1



Почему в играх непостоянная кадровая частота (FPS)? Потому что в каждый момент времени нагрузка по отрисовке кадров непостоянна - число объектов на экране меняется, дальность и объем видимости меняется, скорость с которой CPU готовит и "заказывает" новые кадры тоже разнится от многих факторов. Это в целом малопредсказуемый процесс (тем более что игрок может смотреть то в стену, то с высоты на почти всю местность). В играх постоянная кадровая частота или она динамическая? Если постоянная то какая; если динамическая, то от чего зависит? По разному. Обычно динамическая, но ограниченная сверху частотой обновления экрана (60-75Гц, нередко больше). Ограничение называется V-Sync (вертикальная синхронизация). Частота обновления зависит от скорости с которой видеокарта успевает рендерить графику, от частоты дисплей. Больше чем частота дисплея показать принципиально невозможно, но, на 1 кадре на дисплее могут быть совмещены несколько кадров (сверху-вниз, по мере того как они приходят от видеокарты). Сейчас уже есть дисплеи с адаптивной частотой, подстраивающиеся под видеокарту. Прочитал в википидия что к примеру для немого кино использовали постоянную кадровую частоту в 16 FPS. А в играх она динамическая что ли? Обычно динамическая - чем больше кадров в секунду, тем все плавнее выглядит. Что на самом деле измеряют измерители FPS? Больше похоже, что количество FPS, которые видео-карта может дать ещё, а не частоту кадров в игре. FPS - это обычно количество кадров в секунду, которое отдает видеокарта (разные игры могут считать это число немного по разному). Считается как время поделенное на немного усредненный интервал между готовыми кадрами (например 1000мс / 16мс = 62fps). Что вы имеете ввиду под частотой кадров в игре неясно. Хочу понять как строятся сцены в играх, чтобы сделать подобную по кадровую отрисовку для canvas Сцена в игре строится в общем-то (да простят мне такое упрощение) из треугольников, которые GPU умеет рисовать в нереально бешенных количествах, раскрашиваемых по правилам (текстурирование, пиксельные эффекты и т.п.) с вдвойне нереально бешенной скоростью. Все это рендерится в буфер (картинку) треугольник-за-треугольником, пиксель-за-пикселем. Как только картинка готова, она отдается на дисплей и начинает рисоваться следующая картинка. Для canvas (без использования видеокарты?) обычно тоже делается буфер, куда рисуется кадр (средствами CPU), и как только кадр окончен, он отдается на холст canvas для вывода на экран, а тем временем уже рисуется следующий кадр. Это можно делать как последовательно, так и по таймеру, если вы хотите получить статичный FPS. P.S. На Javascript все несколько сложнее, т.к. добавляется еще слой с браузером и ОС и их компоновкой картинки для вывода на экран, тут я не очень в теме.

Комментариев нет:

Отправить комментарий