КОМПЕНСАЦИЯ ДВИЖЕНИЯ НА ОСНОВАНИИ ВВОДА ИГРОКА ПОСРЕДСТВОМ ПРОГНОЗИРОВАНИЯ ВЕКТОРОВ ДВИЖЕНИЯ
MOTION COMPENSATION BASED ON PLAYER INPUT BY MOTION VECTORS PREDICTION

Ссылка на родственные заявки
[0001] Согласно настоящей заявке испрашивается приоритет в соответствии с такими предварительными заявками на патент США: №62/488 526, поданная 21 апреля 2017 г., №62/634 464, поданная 23 февраля 2018 г., №62/640,945, поданная 9 марта 2018 г., и №62/644,164, поданная 16 марта 2018 г.
Предпосылки к созданию настоящего изобретения
[0002] В удаленных играх, в которых игра на стороне сервера управляется игроком на стороне клиента, предпринимались попытки кодировать выходной видеосигнал от движка трехмерной (3D) графики в режиме реального времени с использованием существующих или специально настроенных кодировщиков. Однако интерактивный характер видеоигр, в частности, контур обратной связи с игроком между выходным видеосигналом и вводом игрока, делает потоковую передачу игрового видео более чувствительным к задержкам, чем в традиционной потоковой передаче видео. Существующие способы кодирования видеосигналов могут использовать вычислительную мощность, и практически ничего более, для уменьшения времени кодирования. Новые способы интеграции процесса кодирования в процесс рендеринга видео могут обеспечить существенное уменьшение времени кодирования, а также сокращение вычислительной мощности, повышение качества кодированного видео и сохранения исходного формата данных битового потока для поддержания функциональной совместимости существующих аппаратных устройств.
[0003] В отличие от обычного воспроизведения видео, видеоигры характеризуются уникальным вводом игрока в контур обратной видеосвязи. Игроки остро ощущают задержку между вводом и выходным видеосигналом. Длительная задержка в контуре ввод игрока-обратная связь является камнем преткновения в потоковой передаче видеоигр, когда серверная копия видеоигры управляется удаленным игроком. Любой процесс, способный сократить время между вводом и обратной связью, может напрямую улучшить впечатления от использования.
[0004] Клиентское аппаратное обеспечение в игровой потоковой среде может характеризоваться разными уровнями вычислительной мощности, но специализированные аппаратные декодеры Н.264 становятся все более распространенными даже в мобильных и других маломощных устройствах. Аппаратный декодер хорошо выполняет небольшой набор вычислений, таких как компенсация движения, которые постоянно выполняются в соответствии со стандартом кодирования Н.264. Сильные стороны специализированного аппаратного обеспечения для декодирования могут быть использованы для обеспечения лучшего взаимодействия с игроками в игровой потоковой среде, независимо от общей вычислительной мощности клиента.
[0005] В локальных приложениях рендеринга без потоковой передачи игровой движок может добавлять несколько кадров задержки между вводом игрока и обратной видеосвязью. При потоковой трансляции игр дополнительная задержка появляется в цикле ввод игрока-обратная связь из-за того, что ввод игрока должен пройти через сеть на удаленный сервер и выходной видеосигнал должен быть закодирован, передан и декодирован перед тем, как игрок принимает обратную связь. Для некоторых вводов игрока клиент может оценивать результаты по обратной видеосвязи за счет выполнения немедленной компенсации движения, отсекая сетевую задержку.
[0006] Компенсация движения на основании ввода игрока, на базовом уровне, представляет собой методику смещения групп пикселей, жертвуя некоторой четкость изображения в обмен на уменьшение задержки между вводом и обратной связью в ситуациях, когда видеоигра запущена на сервере и управляется удаленно сетевым клиентом. Эта методика хорошо себя проявляет при уменьшении задержки между вводом игрока и обратной связью, что приводит к получению соответствующих векторов движения, например, при поворотах обзора игрока в играх от первого лица.
[0007] В видеоигре контекст игрока определяется как текущее состояние игры, являющееся результатом предыдущих действий, вводов и решений игрока. Клиент в системе потоковой трансляции игры не знает о контексте игрока, то есть клиент принимает только выходной видеосигнал без информации о состоянии игры, которая будет определять результаты определенных вводов игрока. Существует широкий диапазон вводов, которые приводят к уникальным, но предсказуемым движениям, на основании информации о состоянии игры. Эти вводы выиграли бы от уменьшения задержки между вводом игрока и обратной связью, но они не могут быть предварительно кешированы на стороне клиента для традиционной компенсации движения на основании ввода игрока, поскольку клиент не будет обладать информацией о контексте игрока. Дополнительно объем преобразования контекста игрока может быть слишком велик для предварительного генерирования векторов движения для способов с использованием копированных повторяющихся векторов движения. Эти системы и способы описаны в предварительных заявках на патент США №62/488526; 62/634464 и 62/640,945; все из которых включены в настоящий документ во всей своей полноте. Игровой сервер может осуществлять компенсацию за счет генерирования прогнозируемых векторов движения и обновления кеш-памяти компенсации движения на основании ввода на стороне клиента при изменении контекста игрока. Это позволяет клиенту использовать методики компенсации движения на основании ввода игрока для ограниченного набора зависящих от контекста вводов, что приводит к уменьшению задержки между вводом и обратной связью.
[0008] В патенте США №9661351 («патент '351») раскрываются системы и способы пропуска кадра во время передачи от сервера на клиентское устройство, причем, в ответ на обнаружение пропущенного кадра, клиентское устройство генерирует спрогнозированный кадр, который заменяет пропущенный кадр в сжатом видеопотоке, причем спрогнозированный кадр генерируется на основании расширенной дельта-информации из одного или нескольких предыдущих кадров, декодированных клиентским устройством. Для этой технологии прогнозирование кадров на стороне клиента для одного или нескольких восстановленных или спрогнозированных кадров используется после пропущенного кадра на основании данных (например, векторов движения, остаточных кадров и т.д.) одного или нескольких предыдущих кадров. Эта технология также отдает приоритет распределению битов и/или кодированию под признаков. Кодированные единицы слоя сетевой абстракции (NALU) могут быть разделены на (1) векторы движения и (2) остаточные кадры. Вместо фактического пропуска кадра устройство может только отправлять минимальные кодированные данные согласно приоритету. Например, оно может отправлять только векторы движения, если движение в приоритете. Технология согласно настоящему изобретению превосходит технологию патента '351 по меньшей мере потому, что в патенте '351 не раскрывается клиентское устройство, которое использует таблицы поиска, переданные от сервера, для сопоставления ввода пользователя с векторами движения, а также маркирует и суммирует эти векторы движения. В патенте '351 также не раскрывается применение этих суммированных векторов движения к декодированным кадрам для оценки движения в этих кадрах. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0009] В патенте США №8678929, («патент '929») раскрывается управление сетевой интерактивной игровой системой. Раскрытые способы направлены на уменьшение запаздывания в сети за счет определения значений положения со скорректированным курсом для общего глобального объекта посредством двустороннего наложения. Термин «наложение» в указанном патенте предусматривает стадии сетевого моделирования с отправкой вычисления позиции для локального игрока на локальной консоли. Консоль осуществляет наложение локального и сетевого моделирования. В способах также осуществляют наложение общих глобальных объектов за счет использования наложенной позиции локального игрока для определения значения положения для общего глобального объекта на локальной консоли. Технология согласно настоящему изобретению, опять-таки, превосходит технологию патента '929 по меньшей мере потому, что в патенте '929 не раскрывается клиентское устройство, которое использует таблицы поиска, переданные от сервера, для сопоставления ввода пользователя с векторами движения, а также маркирует и суммирует эти векторы движения. В патенте '929 также не раскрывается применение этих суммированных векторов движения к декодированным кадрам для оценки движения в этих кадрах. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она не требует наличия клиента с чрезвычайно высокой вычислительной мощностью, уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0010] В патенте США №8069258, («патент '258») раскрыто использование локальной обработки кадров для уменьшения явного запаздывания в сети при многопользовательском моделировании. Описанные способы предусматривают прерывание вводов от локального пользователя, определение данных о состоянии удаленного объекта при сетевом моделировании из предыдущего кадра игры и определение взаимодействий недетерминистических объектов из множества игровых систем, которые представляют собой часть сетевого моделирования. Эти данные о взаимодействии, вместе с данными о состоянии и локальным вводом, используются для локального моделирования видеокадра. Таким образом, локальное и сетевое моделирование могут быть запущены асинхронно для одного кадра, причем каждый кадр соответствует одной временной фазе в игре. Это обеспечивает возможность обновления локального моделирования в режиме реального времени в процессе сетевой игры, при этом оно остается (по существу) синхронизированным с сетью. Технология согласно настоящему изобретению, опять-таки, превосходит технологию патента '258 по меньшей мере потому, что в патенте '258 не раскрывается клиентское устройство, которое использует таблицы поиска, переданные от сервера, для сопоставления ввода пользователя с векторами движения, а также маркирует и суммирует эти векторы движения. В патенте '929 также не раскрывается применение этих суммированных векторов движения к декодированным кадрам для оценки движения в этих кадрах. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она не требует наличия клиента с чрезвычайно высокой вычислительной мощностью, уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0011] В патенте США №9665334 В2 («патент '334») раскрываются системы и способы для протоколов рендеринга, в которых применяется множество процессов и компоновщик для рендеринга комбинированного графического изображения на дисплее. Технология работает следующим образом: когда сервер одновременно выдает игровой экран на несколько клиентских устройств, вычислительная нагрузка от процесса рендеринга на сервере приводит к «утяжелению», например, игрового содержимого, которое требует быстрого отклика. То есть, количество клиентских устройств, на которые сервер может выдавать экран, ограничено в зависимости от его характеристик рендеринга и требуемого отклика. В отличие от этого, когда каждое клиентское устройство управляется для выполнения обработки, которая может быть осуществлена с использованием общих характеристик рендеринга для совместного выполнения процессов рендеринга между сервером и клиентским устройством, экран может быть выдан на большее количество клиентских устройств. Кроме того, в целом, игровой экран, который подвергнут рендерингу без применения наложения текстуры, характеризуется высокой эффективностью сжатия, и может быть отправлен на меньшей ширине полосы посредством сети, такой как Интернет. Технология согласно настоящему изобретению превосходит технологию патента '334 по меньшей мере потому, что в нем не раскрыты генерирование векторов движения на сервере на основании предварительно определенных критериев и передача сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Кроме того, в нем не раскрыты отдача сервером команды клиенту на прием ввода от пользователя, а также использование этого ввода для сопоставления копированных векторов движения или указателей недействительности, причем эти векторы или указатели недействительности используются при компенсации движения. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0012] В патенте США №9736454 («патент '454») раскрыты системы и способы кодирования, предусматривающие анализ доступности блока глубины, совместно расположенного с блоком текстуры, определение способа прогнозирования для блока текстуры на основании доступности совместно расположенного блока глубины и нахождение первого блока прогнозирования для блока текстуры на основании доступности совместно расположенного блока глубины. Опять-таки, технология согласно настоящему изобретению превосходит технологию патента '454 по меньшей мере потому, что в нем не раскрыты генерирование векторов движения на сервере на основании предварительно определенных критериев и передача сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Кроме того, в нем не раскрыты отдача сервером команды клиенту на прием ввода от пользователя, а также использование этого ввода для сопоставления копированных векторов движения или указателей недействительности, причем эти векторы или указатели недействительности используются при компенсации движения. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0013] В патенте США №9705526 («патент '526») раскрыты системы и способы энтропийного кодирования в мультимедийных и связанных с изображениями приложениях. Технология касается системы, в которой сжатие начинается с приема источника данных изображения или видео, как указано. Затем применяется схема сжатия без потерь. Блок прогнозирования/вычисления разности затем получает ввод и пытается уменьшить избыточность входных данных с использованием вычисления разности между соседними входными элементами. Затем эти значения кодируются с использованием заданного статистического моделирования в энтропийном кодере для получения сжатых данных изображения и/или видео. Аналогично вышеописанному, технология согласно настоящему изобретению превосходит технологию, описанную в патенте '526, по меньшей мере потому, что в нем не раскрыты генерирование векторов движения на сервере на основании предварительно определенных критериев и передача сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Кроме того, в нем не раскрыты отдача сервером команды клиенту на прием ввода от пользователя, а также использование этого ввода для сопоставления копированных векторов движения или указателей недействительности, причем эти векторы или указатели недействительности используются при компенсации движения. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0014] В патенте США №8873636 В2 («патент '636») раскрывается сервер распределения динамических изображений (например, на котором запущена онлайн-игра), который подает кодированные данные изображения на ПК пользователя, на котором запущена локальная копия игры. Для выполнения этого процесса в соответствующих деталях ЦП (центральный процессор) в ПК (персональный компьютер) пользователя указывает область, на которую следует ссылаться, для декодирования вектора движения, связанного с выбранным блоком на экране предшествующего кадра. Это осуществляется за счет отсылки к вектору движения, связанному с выбранным блоком (вектору, который включен в информацию предварительной обработки, которую он обеспечивает), и извлекает изображение этой области в качестве эталонного изображения. Как и в случае с другими упоминаемыми документами, технология согласно настоящему изобретению превосходит технологию, описанную в патенте '636, по меньшей мере потому, что в нем не раскрыты генерирование векторов движения на сервере на основании предварительно определенных критериев и передача сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Кроме того, в нем не раскрыты отдача сервером команды клиенту на прием ввода от пользователя, а также использование этого ввода для сопоставления копированных векторов движения или указателей недействительности, причем эти векторы или указатели недействительности используются при компенсации движения. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0015] В международной публикации патента № WO 2009138878 А2 («публикация '878») раскрыты обработка и потоковая передача множества интерактивных приложений в централизованном сервере приложений потоковой передачи с управлением уровнями детализации и постфильтрации различных отрендеренных объектов. В этой системе централизованный сервер интерактивных приложений на своем видеопроцессоре предварительной обработки выполняет пространственную и временную фильтрацию последовательности кадров перед кодированием сжатого потока аудиовизуального содержимого, поступающего на клиентские устройства, которые декодируют сжатый поток и отображают содержимое. Командный процессор ГП (графический процессор) централизованного сервера интерактивных приложений содержит модуль, который также вычисляет оценку компенсации движения для каждого макроблока в целевом кодированном кадре в видеокодере. Тем не менее, технология согласно настоящему изобретению по-прежнему превосходит технологию, описанную в публикации '878, по меньшей мере потому, что в нем не раскрыты генерирование векторов движения на сервере на основании предварительно определенных критериев и передача сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Кроме того, в нем не раскрыты отдача сервером команды клиенту на прием ввода от пользователя, а также использование этого ввода для сопоставления копированных векторов движения или указателей недействительности, причем эти векторы или указатели недействительности используются при компенсации движения. Технология согласно настоящему изобретению также превосходит эту технологию, поскольку она уменьшает задержку между вводом и обратной связью, которая существенно уменьшается за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0016] В патенте США №9358466 В2 («патент '466») раскрывается улучшение характеристик видеоигр посредством повторного использования копированных данных. Раскрытые системы оценивают характеристики кеш-памяти для разных сгенерированных миссий видеоигры по меньшей мере частично за счет идентификации используемых цифровых активов и определения того, хранятся ли идентифицированные цифровые активы в кеш-памяти. Показатели кеш-памяти могут быть вычислены на основании скорости повторного использования кеш-памяти, соответствующей пропорции цифровых активов для миссии, которые уже находятся в кеш-памяти. Другие методики для генерирования показателей кеш-памяти могут учитывать такие факторы, как общие размер комбинации цифровых активов для миссии, которые уже находятся в кеш-памяти, и/или общий размер комбинации цифровых активов для миссии, которые уже не находятся в кеш-памяти. За счет кеширования данных таким образом, запросы этих данных и других некешированных данных становятся более эффективными. Технология согласно настоящему изобретению по-прежнему превосходит технологию, описанную в патенте '466, по меньшей мере потому, что в нем не раскрыты кеширование повторяющихся векторов движения, вычисление оценки движения исходя из данных ввода или обновление сохраненной библиотеки векторов движения на основании данных ввода, вследствие чего клиент может использовать сохраненную библиотеку векторов движения для инициации движения перед приемом актуальных данных вектора движения от сервера.
[0017] В патенте США №6903662 В2 («патент '662») раскрывается настраиваемое компьютерное устройство ввода, которое, в частности, кеширует данные ввода для поддержания более короткого времени отклика. Система сопоставляет нажатие на клавиши с внутренним запоминающим устройством (или кеш-памятью) для определения того, была ли ранее идентифицирована конкретная клавиша. Если система не была связана с этой клавишей ранее, система может извлекать данные, соответствующие вводу, из памяти клавиши. Система затем обновляет свое внутреннее запоминающее устройство (кеш-память) с внесением идентификатора клавиши и соответствующих данных. Система затем может отправлять данные ввода от клавиши на главный компьютер. Однако в следующий раз, когда система сталкивается с этой клавишей в нажатом состоянии, она может обратиться к собственному запоминающему устройству (кеш-памяти) вместо извлечения того же кода опроса из памяти клавиши снова. Технология согласно настоящему изобретению превосходит технологию, описанную в патенте '662, по меньшей мере потому, что в нем не раскрыты кеширование повторяющихся векторов движения, вычисление оценки движения исходя из данных ввода или обновление сохраненной библиотеки векторов движения на основании данных ввода, вследствие чего клиент может использовать сохраненную библиотеку векторов движения для инициации движения перед приемом актуальных данных вектора движения от сервера.
[0018] В патенте Японии № JP 6129865 B2 («патент '865») раскрываются системы и способы передачи данных отрендеренного игрового содержимого для подмножеств сегментов пути на игрового клиента для сохранения на локальной кеш-памяти, вследствие чего данные игрового содержимого могут быть доступны при необходимости во время игрового процесса в режиме реального времени. Опять-таки, технология согласно настоящему изобретению превосходит технологию, описанную в патенте '865, по меньшей мере потому, что в нем не раскрыты кеширование повторяющихся векторов движения, вычисление оценки движения исходя из данных ввода или обновление сохраненной библиотеки векторов движения на основании данных ввода, вследствие чего клиент может использовать сохраненную библиотеку векторов движения для инициации движения перед приемом актуальных данных вектора движения от сервера.
[0019] В патенте США №9762919 («патент '919») раскрываются системы и способы кеширования эталонных данных в схеме обработки блоков. Технология в патенте '919 касается кеш-памяти (например, полностью ассоциативной кеш-памяти), которая может быть реализована, например, в локальном (относительно схемы) запоминающем устройстве, таком как SRAM (статическое оперативное запоминающее устройство), в которое части эталонных данных о цветности (например, 64-байтовые блоки запоминающего устройства), соответствующие векторам движения, определенным для макроблоков на более ранних стадиях схемы, могут быть предварительно загружены из запоминающего устройства. Кеш-логика цветности может поддерживать кеш-память, и может проходить по нескольким стадиям схемы. Загрузки векторов движения заданного макроблока, проходящие через схему, могут быть инициированы кеш-логикой цветности на одну или несколько стадий перед стадией компенсации движения цветности для предоставления времени (т.е. нескольких циклов схемы) для считывания соответствующих блоков запоминающего устройства из запоминающего устройства и записи в кеш-память перед тем, как они потребуются для компенсации движения цветности. Однако настоящее изобретение превосходит патент '919. Технология согласно настоящему изобретению превосходит технологию, описанную в патенте '919, по меньшей мере потому, что в нем не раскрыты кеширование повторяющихся векторов движения, вычисление оценки движения исходя из данных ввода или обновление сохраненной библиотеки векторов движения на основании данных ввода, вследствие чего клиент может использовать сохраненную библиотеку векторов движения для инициации движения перед приемом актуальных данных вектора движения от сервера.
[0020] Как очевидно из приведенного выше описания уровня техники в этой технологии, в данной области техники существует необходимость в улучшении существующей компьютерной технологии, связанной с кодированием игровых сред в режиме реального времени.
Краткое раскрытие настоящего изобретения
[0021] Таким образом, целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет методик компенсации движения, в которых клиентское устройство использует таблицы поиска, переданные от сервера, для сопоставления ввода пользователя с векторами движения, а также маркировки и суммирования этих векторов движения. Когда удаленный сервер передает кодированные видеокадры клиенту, клиент декодирует эти видеокадры и применяет суммированные векторы движения к декодированным кадрам для оценки движения в этих кадрах.
[0022] Другой целью настоящего изобретения является предоставление систем и способов, в которых кодированные видеокадры декодируют без обработки остаточных кадров.
[0023] Еще одной целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет методик компенсации движения, в которых клиент применяет одну или нескольких функций сглаживания к суммированным маркированным векторам движения в очереди.
[0024] Еще одной целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет методик компенсации движения, в которых маркеры, связанные с векторами движения на клиентском устройстве, являются хронологическими по своей сути.
[0025] Другой целью настоящего изобретения является предоставление систем и способов уменьшения задержки между вводом и обратной связью за счет генерирования векторов движения на сервере на основании предварительно определенных критериев и передачи сгенерированных векторов движения и одного или нескольких указателей недействительности клиенту, который осуществляет кеширование этих векторов движения и указателей недействительности. Сервер отдает клиенту команду на прием ввода от пользователя и использование этого ввода для сопоставления с копированными векторами движения или указателями недействительности. На основании этого сравнения клиент затем применяет сопоставленные векторы движения или указатели недействительности для осуществления компенсации движения в графическом интерфейсе.
[0026] Другой целью настоящего изобретения является предоставление систем и способов уменьшения задержки между вводом и обратной связью за счет кеширования векторов движения в таблице поиска.
[0027] Еще одной целью настоящего изобретения является предоставление систем и способов уменьшения задержки между вводом и обратной связью за счет связывания указателей недействительности с одним или несколькими копированными векторами движения.
[0028] Другой целью настоящего изобретения является предоставление систем и способов уменьшения задержки между вводом и обратной связью за счет отдачи клиенту команды на удаление одного или нескольких копированных векторов движения, если ввод сопоставлен с копированным указателем недействительности, связанным с одним или несколькими векторами движения.
[0029] Еще одной целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет кеширования повторяющихся векторов движения на сервере, который передает ранее сгенерированную библиотеку векторов движения клиенту. Клиент сохраняет библиотеку векторов движения и отслеживает данные ввода пользователя. Сервер отдает клиенту команду на вычисление оценки движения исходя из данных ввода и отдает клиенту команду на обновление сохраненной библиотеки векторов движения на основании данных ввода, вследствие чего клиент применяет сохраненную библиотеку векторов движения для инициации движения в графическом интерфейсе перед приемом актуальных данных вектора движения от сервера.
[0030] Другой целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет кеширования повторяющихся векторов движения, в которых сервер передает обновление контекста клиенту для запрещения применения сохраненной библиотеки векторов движения.
[0031] Еще одной целью настоящего изобретения является предоставление систем и способов уменьшения задержки за счет кеширования повторяющихся векторов движения, в которых один или несколько коэффициентов масштабирования применяют к библиотеке векторов движения.
Краткое описание фигур
[0032] Более полное понимание настоящего изобретения и многих сопутствующих его преимуществ будет легко получено, поскольку оно станет более понятным при обращении к следующему подробному описанию, рассматриваемому со ссылкой на прилагаемые фигуры, на которых:
[0033] на фиг. 1 показана структурная схема, на которой в иллюстративных целях изображена удаленная игровая система, в которой видеоигра запущена на сервере и управляется посредством ввода на удаленном клиенте;
[0034] на фиг. 2 показана блок-схема, в иллюстративных целях описывающая уменьшение задержки между вводом и обратной связью в потоковой передаче игр за счет применения компенсации движения для соответствующего ввода игрока;
[0035] на фиг. 3 показана структурная схема, на которой в иллюстративных целях изображен приведенный в качестве примера момент во время исполнения среды потоковой передачи видеоигры, в который используется компенсация движения на основании ввода игрока;
[0036] на фиг. 4 показана схема, на которой в иллюстративных целях изображен приведенный в качестве примера макроблок во время компенсации движения на основании ввода игрока согласно фиг. 3;
[0037] на фиг. 5 показана схема, на которой в иллюстративных целях изображен альтернативный способ применения векторов движения во время компенсации движения на основании ввода игрока на клиенте;
[0038] на фиг. 6А, 6В и 6С показан приведенный в качестве примера макроблок, подвергающийся компенсации движения на основании ввода игрока и наложению для альтернативного способа, показанного на фиг. 5;
[0039] на фиг. 7 показана схема, изображающая генерирование прогнозируемых векторов движения во время исполнения;
[0040] на фиг. 8 показана блок-схема, в иллюстративных целях изображающая передачу и хранение на стороне клиента прогнозируемых векторов движения с целью компенсации движения на основании ввода игрока;
[0041] на фиг. 9 показана схема, изображающая приведенный в качестве примера процесс определения недействительности прогнозируемых векторов движения;
[0042] на фиг. 10 показана схема, изображающая приведенный в качестве примера способ генерирования библиотеки векторов движения и приведенной в качестве примера библиотеки повторяющихся векторов движения для кеширования;
[0043] на фиг. 11 показана блок-схема, на которой в иллюстративных целях изображен процесс кеширования, применения и обновления библиотек векторов движения для компенсации движения на основании ввода игрока;
[0044] на фиг. 12 показана схема, на которой в иллюстративных целях изображен способ обновления соответствия векторов движения; и
[0045] на фиг. 13 показана схема, на которой изображено приведенная в качестве примера модификация применения многокадровых векторов движения во время компенсации движения на основании ввода игрока, в частности, в случае копированных векторов движения.
Подробное раскрытие предпочтительных вариантов осуществления
[0046] При описании предпочтительных вариантов осуществления настоящего изобретения, изображенных на фигурах, для ясности будет использоваться конкретная терминология. Однако настоящее изобретение не ограничивается конкретными выбранными терминами, и следует понимать, что каждый конкретный термин включает в себя все технические эквиваленты, функционирующие аналогичным образом для выполнения подобной цели. Несколько предпочтительных вариантов осуществления настоящего изобретения будут описаны в иллюстративных целях, но следует понимать, что настоящее изобретение может быть реализовано в других формах, не показанных на фигурах.
[0047] Определенные типы ввода игрока являются лучшими вариантами для компенсации движения на основании ввода игрока. На пригодность заданного ввода влияет два фактора: чувствительность игрока к задержке между вводом и обратной связью и сложность реализации компенсации движения на основании ввода игрока без внесения заметных артефактов. Каждый ввод должен оцениваться на пригодность. Например, в шутере от первого лица игрок очень чувствителен к повороту обзора, осуществляемому мышкой, то есть задержка в долю секунды, всего лишь 16 мс, между вводом игрока и выходным видеосигналом будет заметной. Однако в той же ситуации поворот обзора, осуществляемый геймпадом, как правило, медленнее, и игроки могут быть менее чувствительными к задержке между вводом и обратной связью. Поворот обзора может быть приблизительно оценен за счет сдвига сцены в направлении, противоположном направлению поворота, но возможно появление нежелательных артефактов вдоль края изображения в направлении поворота. При небольших поворотах обзора, например при корректировке прицела на находящемся на экране враге, игроки могут даже не заметить артефактов на краю. В другом примере ускорение машины в гоночной игре может обладать низким приоритетом для компенсации движения на основании ввода игрока из-за отсутствия чувствительности игрока и/или инерции к задержке, но вводы, связанные с поворотом и торможением, могут обладать высоким приоритетом, поскольку игроки заметят задержку между вводом и обратной связью.
[0048] Время между приемом ввода игрока и отображением вывода движения представляет собой задержку между вводом игрока и обратной связью. За счет использования компенсации движения оцененное движение может обеспечивать обратную связь практически сразу, несмотря на ожидание обработки сервером ввода игрока. Таким образом, задержка между вводом игрока и обратной связью существенно уменьшается при потоковой передаче игр. За счет реализации компенсации движения на основании ввода игрока при потоковой передаче игр оценка движения может быть обеспечена в следующем доступном кадре. В отличие от этого, поступление ввода на сервер, создание выходного кадра и возврат занимают несколько кадров. Компенсация движения на основании ввода игрока также может обеспечивать некоторое преимущество в традиционных «непотоковых» играх, в которых игровой движок и рендерер могут испытывать задержку между вводом игрока и обратной связью в несколько кадров.
[0049] Клиент не будет обладать соответствующим контекстом для отслеживания перемещения объекта относительно экрана. Компенсация движения на основании ввода игрока не подходит для случаев, когда местоположение конкретных макроблоков или видеообъектов неизвестно клиенту. Например, в 2D-платформере персонаж может перемещать по экрану слева направо. Клиент не будет знать, где персонаж расположен, когда игрок нажимает ввод, связанный с прыжком; таким образом, компенсация движения на основании ввода игрока сама по себе не может использоваться в этом случае для уменьшения задержки между вводом и обратной связью.
[0050] В целом, векторы движения для компенсации движения на основании ввода игрока должны генерироваться заранее. Для такого движения, как поворот камеры игроком, векторы движения могут быть вычислены на основании того, как игра определяет весовой коэффициент ввода. Согласно некоторым вариантам осуществления векторы движения могут представлять собой значение ввода, умноженное на весовой коэффициент чувствительности. Для движения, которое нельзя вычислить непосредственно, такое как анимированное движение, анимация может быть запущена во время разработки, вследствие чего векторы движения могут быть непосредственно измерены и сохранены. Измерение векторов движения может быть осуществлено посредством тех же методик оценки движения, которые выполняются во время кодирования по стандарту Н.264.
[0051] На фиг. 1 изображена приведенная в качестве примера система, в которой видеоигра управляется удаленным клиентом. В этой системе на сервере 100 размещено программное обеспечение 102 видеоигры и графический движок 104, который осуществляет рендеринг выходного видеосигнала. Видео кодируется в кодеке (также называемом кодирующим движком или кодером) 106, и кодированные видеоданные 108 передаются на удаленный клиент. Серверная архитектура 100 может представлять собой любую комбинацию программного или аппаратного обеспечения, которое может поддерживать функции как графического движка 104, так и кодека 106. В приведенном примере графический движок 104 может быть реализован в виде, например, ГП 110, управляемого программным обеспечением 102 видеоигры, загруженным в некоторое машиночитаемое запоминающее устройство 112, при этом кодек 106 может быть реализован в виде ЦП 114, на котором запущено программное обеспечение для кодирования видео.
[0052] Удаленный клиент состоит из компьютерной системы 116, выполненной с возможностью запуска кодека 118 на стороне клиента для декодирования передаваемых кодированных видеоданных 108 и клиентского приложения 120 для применения компенсации движения на основании ввода игрока. Компьютерная система 116 клиента также содержит контроллер 122 дисплея для управления аппаратным обеспечением 124 дисплея. Ввод от периферийных устройств 126 ввода на стороне клиента преобразуется клиентским приложением 120 в управляющие данные 128, которые передаются обратно на программное обеспечение 102 игры, запущенное на сервере 100. Ввод от периферийных устройств 126 также используется для определения того, какую компенсацию движения на основании ввода игрока следует применить, если вообще стоит, как изображено более подробно на фиг. 2.
[0053] На фиг. 2 показана блок-схема, описывающая стадии, необходимые для выполнения компенсации движения на основании ввода игрока для одного ввода. Когда клиент запускается, сервер отправляет таблицу поиска, содержащую вводы и их связанные векторы движения, на стадии 200, которую затем кеширует клиент на стадии 202. В этом варианте исполнения клиент является общим устройством, обслуживающим потребности множества потоковых игр. Согласно некоторым вариантам осуществления характерный для игры клиент может пропускать стадии 200 и 202, поскольку он уже содержит таблицу поиска для игры. В альтернативном варианте исполнения характерный для игры клиент может постоянно хранить таблицу поиска векторов движения без необходимости в кешировании от сервера.
[0054] Когда клиент принимает ввод игрока от устройства ввода, такого как мышь или геймпад на стадии 204, клиентское приложение проверяет кешированную таблицу поиска векторов движения на наличие соответствующих вводов на стадии 206. Если соответствующего ввода игрока нет, клиент не совершает дополнительных действий и отправляет ввод на сервер без дополнительно модификации. Если в кеш-памяти есть соответствующий ввод игрока, клиент применяет компенсацию движения на основании ввода игрока. Необязательно кеш-память может быть выполнена с возможностью изменения записей в таблице поиска на основании ввода игрока. Например, когда игрок нажимает кнопку «пауза», все вводы игрока, связанные с движением, должны быть запрещены, пока игрок не выйдет из экрана паузы. В одном варианте исполнения управляемая клиентом таблица поиска может характеризоваться наличием двух наборов вводов: один для использования в меню паузы, и один для использования вне меню паузы, которые переключаются, предпочтительно клиентом, каждый раз, когда игрок выбирает ввод, связанный с паузой. В альтернативном варианте исполнения сервер может переключать содержимое кешированной таблицы поиска на клиенте.
[0055] Когда клиентское приложение принимает ввод игрока для компенсации движения, клиент добавляет маркер к вводу игрока и связанным с ним векторам движения на стадии 208. Маркированный ввод отправляют на сервер на стадии 210. Маркер представляет собой любой идентификатор, который может соотнести ввод игрока с будущим кадром. Например, маркер может представлять собой целое число, которое увеличивается каждый раз, когда клиент принимает ввод, который будет использоваться для выполнения компенсации движения на основании ввода игрока. Маркер может быть добавлен в качестве метаданных в тот же сетевой пакет, что и ввод игрока, или отправлен по аналогичной схеме передачи, которая сохраняет маркерную информацию в синхронизации с информацией ввода. Клиент подтверждает, принят или нет маркер, на стадии 213. Когда ввод игрока маркирован и отправлен, клиент применяет векторы движения, содержащиеся в кешированной таблице поиска, на стадии 212. Эти векторы движения будут применяться к каждому входящему кадру до тех пор, пока маркер соотнесения не будет возвращен от сервера. Подробное описание приведенного в качестве примера способа применения этих векторов движения изображено на фиг.3.
[0056] Когда сервер принимает маркированный ввод игрока, маркированный ввод игрока передается в игру, которая генерирует выходной кадр на стадии 214. Видеоизображение затем кодируют на стадии 216. Перед отправкой кодированного кадра назад клиенту, маркер ввода игрока прикрепляют к кодированному кадру на стадии 218. Это тот же маркер, который ранее был отправлен с вводом игрока, и он означает, что выходной кадр содержит актуальную обратную видеосвязь от ввода игрока. Прикрепление маркера к кодированному кадру может быть осуществлено за счет добавления маркера в качестве метаданных к тому же сетевому пакету, в котором находится кодированный кадр. Маркированный кодированный кадр отправляют назад клиенту на стадии 220. Когда клиент принимает кодированный кадр с маркером, клиент может соотносить маркер с предыдущей компенсацией движения на основании ввода игрока. Клиент затем прекращает применять предыдущую компенсацию движения на стадии 222.
[0057] На фиг. 3 показано изображение приведенного в качестве примера момента во время исполнения среды потоковой передачи видеоигры, в котором используется компенсация движения на основании ввода игрока. Когда клиент принимает какой-либо ввод игрока на стадии 300, он может быть сравнен с таблицей поиска векторов движения на стадии 302. Если есть соответствующий ввод игрока, связанные векторы движения будут использованы для компенсации движения на основании ввода игрока. Векторы движения маркируют на стадии 306 с помощью уникального маркера ввода на стадии 304. В этом примере выбранный маркер представляет собой целое число «1003». Маркированные векторы движения добавляют в очередь на стадии 308, содержащую любые другие маркированные векторы движения, используемые в настоящее время для компенсации движения на основании ввода игрока.
[0058] Следующий кадр поступает в битовом потоке от сервера на стадии 320. Этот кадр маркируют с помощью уникального идентификатора на стадии 318, в этом случае целого числа «1001», которое указывает, что кадр содержит итоговое движение всех предыдущих вводов игрока вплоть до ввода, соответствующего маркеру «1001», и включая его. Маркер «1001» указывает клиенту, что он может прекратить применение компенсации движения на стадии 322 для этого маркированного ввода. Векторы движения с маркером «1001» затем удаляют из очереди маркированных векторов движения на стадии 308 вместе с любыми векторами движения с более ранними маркерами, которые могут оставаться в очереди в случае, если предыдущие пакеты были утеряны.
1
2
1
2
1
1
2
2
[0059] Кодированное видео 316 декодируют на стадии 324. Вместе с тем, оставшиеся векторы движения в очереди векторов движения на стадии 308 суммируют на стадии 310. Векторы движения, как правило, представляют собой векторные поля с вектором для каждого макроблока в изображении. Для суммирования векторов движения векторы суммируют поэлементно, вследствие чего в результате получают векторное поле с вектором для каждого макроблока. Сумма двух векторных полей представляет собой сумму векторов для каждого точки в поле, вследствие чего сумма двух наборов векторов движения представляет собой сумму векторов для каждого макроблока в изображении. Сумма двух векторов определяется как покомпонентная сумма их компонентов, которая может быть представлена следующим образом: {u, u}+{v, v}={u+v, u+v}. В этом примере два набора векторов движения с маркерами «1002» и «1003» содержится в очереди; эти два набора векторов движения суммируют. Маркеры являются хронологическими по своей сути, что позволяет клиенту знать порядок ранее маркированных вводов игрока. Это позволяет клиенту отбрасывать маркированные векторы движения вплоть до маркера возврата во входящем кадре, и включая его. Дополнительно, маркирование, описанное выше, является более дешевым с точки зрения вычислений, чем более сложные способы. Необязательные функции сглаживания могут быть применены в этот момент для предотвращения артефактов зажатия или ослабления подобных вносимых артефактов.
[0060] Артефакты зажатия вносятся, когда макроблоки перемещаются за пределы экрана, и проявляются как смазывание цвета пикселя перпендикулярно краю экрана. Приведенная в качестве примера функция сглаживания уменьшает величину направленных наружу векторов движения, когда они приближаются к краю изображения. Необходимо ослабить только направленный наружу компонент, компонент у для направленных наружу векторов в направлении верхнего и нижнего краев изображения, и компонент х для направленных наружу векторов в направлении левого и правого краев изображения. Для векторов, которые направлены к границе, компонент вектора может быть умножен на квадрат расстояния до края, вследствие чего при приближении к нулю расстояния до границы, компонент вектора будет приближаться к нулю. В этом примере направленный наружу вектор в направлении правого края изображения будет преобразован из {х,у} в {x*d*d,y}, где d - расстояние от края. Это ослабит артефакты зажатия в обмен на небольшое искажение изображения возле границы изображения. Искажение намного менее заметно для игрока, чем артефакты зажатия.
[0061] После завершения процесса декодирования на стадии 324 на кодированном видеокадре, суммированные векторы движения используются в компенсации движения на стадии 312. Полученное в результате видео выводят на стадии 314. Выходной сигнал содержит данные компенсации движения на основании ввода игрока и будет отображаться на клиенте. Этот выходной кадр представляет собой первый кадр, содержащий оценку движения для ввода с маркером соотнесения «1003». Выходной кадр также содержит оценку движения для предыдущего ввода с маркером соотнесения «1002», для которого клиент по-прежнему ожидает возврата от сервера актуальных векторов движения. Этот выходной кадр также представляет собой первый кадр, содержащий актуальные векторы движения для предыдущего ввода с маркером соотнесения «1001», по которому клиент ранее оценил движение. В результате, в этом способе есть три состояния оценки движения: одно состояние новой оценки для новых вводов; одно состояние продолжающей оценки, ожидающее актуальных результатов; и состояние другой оценки, которое прекращается, поскольку актуальные результаты поступили клиенту.
[0062] На фиг. 4 показана схема, на которой изображен приведенный в качестве примера макроблок во время стадии компенсации движения на основании ввода игрока согласно фиг. 3. Стадия компенсации движения на основании ввода игрока в процедурном аспекте подобна процессу, выполняемому во время декодирования Н.264, когда декодированные векторы движения используются для определения того, откуда переместились макроблоки в текущем кадре из предыдущего кадра. Для компенсации движения на основании ввода игрока применяемые векторы движения оценивают будущую обратную связь для ввода игрока за счет перемещения макроблоков в текущем кадре перед отображением выходного видеосигнала игроку. На фиг. 4А показаны два набора маркированных векторов движения в очереди на стадии 400 из приведенных в качестве примера маркированных векторов движения, показанных на стадии 308 на фиг. 3. Эти два набора суммируют, взяв сумму векторов для каждого макроблока в изображении, для создания одного набора векторов движения на стадии 402 на фиг. 4В. Каждый из векторов движения в этом наборе представляет оцененное перемещение для каждого макроблока в текущем кадре. Для каждого вектора в суммированных векторах движения на стадии 402, соответствующий макроблок в приведенном в качестве примера изображении на фиг. 4С будет сдвинут. Один приведенный в качестве примера макроблок показан на фиг. 4С сдвинутым на соответствующий вектор движения при вводе игрока на стадии 404. Каждый макроблок в приведенном в качестве примера изображении будет сдвинут таким образом. Приведенное в качестве примера изображение на фиг. 4С содержит только 50 макроблоков, но изображение с высоким разрешением будет содержать тысячи макроблоков. Приведенные в качестве примера векторы движения, показанные на фиг.4, отображают равномерное движение как твердого тела, но описанная методика компенсации движения на основании ввода игрока может использоваться с векторами движения произвольной сложности для описания поворотов, вибраций или других сложных движений в экранном пространстве, которые известны в уровне техники.
[0063] На фиг. 5 показано изображение альтернативного способа применения векторов движения во время компенсации движения на основании ввода игрока на клиенте. Согласно некоторым вариантам осуществления этого способа нет необходимости обрабатывать остаточные кадры во время кодирования и декодирования видео. После нахождения соответствующего ввода игрока в таблице поиска, связанные векторы движения маркируют на стадии 500 и используют для компенсации движения на основании ввода игрока, как показано на стадиях 208 и 212 на фиг. 2. Во время процесса декодирования в следующем кадре векторы движения при вводе игрока добавляют к декодированным векторам движения и вводят в стадию компенсацию движения на стадии 502, определенной согласно стандарту кодирования Н.264. Деблочный фильтр, определенный согласно стандарту кодирования Н.264, применяют на стадии 504, но только к тем блокам, которые не были модифицированы за счет компенсации движения на основании ввода игрока. Полученный в результате выходной сигнал, показанный на стадии 506, характеризуется компенсацией движения на основании ввода игрока и будет отображаться на клиенте. Выходной сигнал затем помещают в буфер на стадии 506 и на стадии 518 он становится предыдущим изображением для использования при компенсации движения в следующем кадре. В отличие от варианта исполнения, показанного на фиг. 3, в этом варианте исполнения маркированные векторы движения при вводе игрока применяют только один раз. Это означает, что они не должны суммироваться со всеми маркированными векторами движения в очереди, поскольку предыдущее изображение, показанное на стадии 518, будет содержать сумму предыдущих маркированных векторов движения. Время между приемом ввод и отображением выходного видеосигнала представляет собой задержку между вводом и обратной связью, которая будет существенно уменьшена за счет использования компенсации движения на основании ввода игрока вместо ожидания возврата от сервера выходного видеосигнала.
[0064] В то же время на стадии 500 клиент отправляет соответствующий маркированный ввод игрока на сервер, как показано на стадиях 208 и 210 на фиг. 2. Клиент в конечном итоге принимает кодированное видео, как показано на стадии 508, с тем же маркером 510 в битовом потоке от сервера на стадии 512, как показано на стадии 220 на фиг. 2. Маркер 510, связанный с видео, обозначает, что актуальное движение, ранее оцененное за счет компенсации движения на основании ввода игрока, представлено в кодированном видео, как показано на стадии 508. Кодированное видео проходит через энтропийное декодирование на стадии 514, а также обратное квантование и обратное преобразование на стадии 516, как определено стандартом кодирования Н.264.
[0065] На предыдущей стадии компенсации движения на основании ввода игрока, которая была выполнена перед стадиями 508, 510, 512, 514 и 516, описанными в предыдущих абзацах, уже были сдвинуты макроблоки, которые актуальные векторы движения из кодированного кадра пытаются сдвинуть. Таким образом, применение актуальных векторов движения приведет непосредственно к сдвигу неправильных макроблоков. Битовый поток будет содержать два связанных элемента данных: кодированный видеокадр и маркер соотнесения. Кодированный кадр отправляют на энтропийное декодирование на стадии 514, а маркер отправляют дальше в процесс наложения на стадии 520. Для компенсации в процессе наложения на стадии 520 применяют поправочные векторы движения за счет вычисления разности между входящими актуальными векторами движения и ранее использованными векторами движения при вводе игрока 500 с соответствующим маркером соотнесения. Разность может быть вычислена за счет добавления обратных векторов движения для маркера соотнесения к актуальным векторам движения и описывается более подробно со ссылкой на фиг. 6. Поправочные векторы используются вместо декодированных векторов движения для компенсации движения на стадии 502. Оставшаяся часть схемы декодирования продолжается как обычно, с использованием деблочного фильтра на стадии 504, следующим выходным видеокадром на стадии 506, и помещением в буфер выходного сигнала на стадии 518. Эти стадии могут продолжаться для повторения для каждого кадра до бесконечности. В целом, процесс наложения на стадии 520 осуществляется после обратного квантования (стадия 514) и обратного преобразования (стадия 516), поскольку актуальные векторы движения не будут доступны до этого момента. После того как актуальные векторы движения станут доступны, они будут использованы в процессе наложения для вычисления разности между актуальными и оцененными векторами движения.
[0066] На фиг. 6 изображен приведенный в качестве примера макроблок, подвергающийся компенсации движения на основании ввода игрока и наложению. В момент времени 0 мс игрок нажимает на кнопку и делает ввод для поворота обзора камеры влево. Связанные векторы движения для компенсации движения на основании ввода игрока, показанные как «PIMC» 600, из таблицы поиска применяются ко всем макроблокам в следующем кадре. На фиг. 6А показан приведенный в качестве примера макроблок, сдвинутый вправо. Результаты компенсации движения на основании ввода игрока появляются в следующем декодированном кадре, что приводит к максимальной задержке между вводом и обратной связью, составляющей 16 мс, то есть продолжительности одного кадра для видео, идущего с частотой 60 кадров в секунду. Согласно другим вариантам осуществления максимальная задержка между вводом и обратной связью может составлять 33 мс для видео, идущего с частотой 30 кадров в секунду. Таким образом, предполагается, что настоящее изобретение применяется при различных частотах кадров, ограничивая максимальную задержку между вводом и обратной связью продолжительностью одного кадра. Когда маркированное видео возвращается от сервера, оно содержит актуальные векторы движения 602, кодированные сервером, как показано на фиг. 6В. В этом примере кодированное видео возвращается в момент времени 100 мс, но это сильно зависит от задержки в сети. Актуальные векторы 602 относятся к макроблокам, которые уже были сдвинуты во время компенсации движения на основании ввода игрока 600, поэтому актуальные векторы 602 не могут применяться непосредственно к существующему кадру. Вместо этого, поправочные векторы 604 должны быть вычислены за счет нахождения разности между актуальными векторами 602 и векторами движения при вводе игрока 600. Разность может быть вычислена за счет добавления обратных векторов движения при вводе игрока к актуальным векторам движения. Нахождение этих разностей векторов называется наложением на стадии 524 на фиг. 5. Чем меньше поправочный вектор 604, тем более успешен был способ компенсации движения на основании ввода игрока при оценке актуальных векторов движения. Итоговое движение 608, показанное на фиг. 6С для приведенного в качестве примера макроблока, аналогично актуальном вектору движения 602. Этот пример отображает, как с помощью компенсации движения на основании ввода игрока можно оценить обратную видеосвязь для ввода игрока, и показывает результат для времени между 16 мс и 100 мс, при этом немодифицированная система не будет отображать обратную связь на ввод игрока до 116 мс после приема ввода игрока.
[0067] Во время разработки разработчики игры должны решить, какие движения и анимации будут отправлять прогнозируемые векторы движения во время исполнения. Уникальные, но прогнозируемые векторы движения являются наилучшими вариантами для прогнозируемых векторов движения. Однозначный пример включает анимации, которые адаптивно изменяются движком, например анимации, которые используют уравнения кинематики для вычисления углов соединения, анимации, в которых изменен масштаб времени, или анимации, которые иным образом растянуты или сжаты. Например, анимация зацепа за край воспроизводится, когда игрок находится в пределах зоны определенного края объекта и подпрыгивает. Анимация зацепа за край растягивается таким образом, что руки игрока находятся на краю, но по-прежнему прикреплены к телу игрока. Анимация воспроизводится в течение определенного количества кадров, в результате чего игрок перемещается на верх края. Исходная точка в этом примера является варьируемой, при этом возможен ряд допустимых местоположений и ориентаций. Эта анимация зацепа за край является хорошим вариантом для генерирования прогнозируемых векторов движения, поскольку точная анимация не известна заранее, но может быть сгенерирована программными средствами игровым движком по требованию. Клиент, в частности, не может знать векторы движения для этой анимации, поскольку у клиента нет контекстуальной информации о местоположении игрока в среде потоковой передачи игры.
[0068] Прогнозируемые векторы движения будут пригодны только в ограниченном контекстуальном или временном диапазоне, например при конкретном местоположении камеры, небольшом временном окне или некотором другом специфичном контексте игрока. Для каждого набора прогнозируемых векторов движения должен быть сгенерирован соответствующий указатель недействительности. Указатель недействительности может использоваться на клиенте для предотвращения применения прогнозируемых векторов движения после того как они станут действительными. Согласно некоторым вариантам осуществления указатель недействительности может представлять собой набор из любых вводов игрока, который приведет к изменению игрового контекста, вследствие чего применение прогнозируемых векторов движения больше не будет целесообразным. Согласно другим вариантам осуществления указатель недействительности может представлять собой временное окно, в котором прогнозируемые векторы движения могут быть действительными. Согласно еще одним вариантам осуществления указатель недействительности может представлять собой комбинацию вводов обеспечения недействительности и временного окна. Например, прогнозируемые векторы движения, генерируемые для анимации зацепа за край, действительны только для ограниченного местоположения и ориентации игрока, и, таким образом, указатель недействительности обязательно будет включать любой ввод, связанный с перемещением или поворотом. Указатели недействительности должны быть спроектированы и реализованы во время разработки функции прогнозируемых векторов движения. Прогнозируемые векторы движения также могут быть отключены или обновлены в результате событий или сообщений, отправленных от сервера, как описано ниже со ссылкой на фиг. 10-13, на которых раскрывается использование копированных повторяющихся векторов движения для компенсации движения.
[0069] Прогнозируемые векторы движения могут быть сгенерированы заранее или они могут быть сгенерированы при необходимости во время исполнения. Для анимаций, которые характеризуются ограниченным количеством изменений, например, прогнозируемые векторы движения могут быть сгенерированы в режиме оффлайн посредством инициации каждого изменения и записи векторов движения. Согласно некоторым вариантам осуществления для общего клиента векторы движения хранятся на стороне сервера, а затем отправляются клиенту для кеширования по требованию. Когда векторы движения отправляются клиенту, они кешируются в таблице поиска. Предварительно сгенерированные прогнозируемые векторы движения могут храниться на сервере и будут в виде читаемого игрой формата файла, что позволяет серверу отправлять предварительно сгенерированные векторы движения, подлежащие кешированию в таблице поиска, клиенту во время исполнения игры. Анимации, которые генерируются во время исполнения, например анимации, вычисленные посредством обратной кинематики, не могут быть предварительно сгенерированы, поскольку может не быть отдельного количества возможных изменений анимации. Обратная кинематика - это способ, обычно применяемый при рендеринге в режиме реального времени для обеспечения соответствия анимации набору граничных условий. Например, персонаж игрока в видеоигре хочет сделать зацеп за ближайший край, граничные условия будут определены местоположениями, где руки игрока берутся за край, и анимация зацепа за край будет изменена соответственно посредством обратной кинематики. Для адаптивно изменяемых анимаций, таких как эти, игра может теоретически осуществлять рендеринг возможных анимаций на изображении за пределами экрана с векторами движения во время исполнения и записывать прогнозируемые векторы движения при необходимости. Например, если игрок находится возле края, за который можно зацепиться, игра может прогнозировать, что игрок будет скоро делать зацеп за край, и игра может теоретически осуществлять рендеринг анимации зацепа за край для генерирования прогнозируемых векторов движения. Адаптивно изменяемые анимации, для которых должны быть сгенерированы прогнозируемые векторы движения во время исполнения, должны быть идентифицированы разработчиком заранее.
[0070] Существующие игровые системы, которые описывают контекст игрока, например отслеживание местоположения игрока, системы сценариев, зоны с триггером или системы поиска пути, могут использоваться для генерирования события, которое будет сигнализировать о том, когда игра должна теоретически осуществлять рендеринг анимации. Например, игра может отслеживать близость игрока к краю, за который можно зацепиться, и сигнализировать игре о том, что необходимо теоретически осуществить рендеринг анимации зацепа за край и записать прогнозируемые векторы движения. Некоторые анимации, типа взятия в руки оружия, использования рычага или нажатия кнопки, могут быть растянуты или отрегулированы на основании близости игрока к месту взаимодействия и ориентации игрока. Эти анимации характеризуются очень большим количеством изменений, чтобы можно было осуществить предварительное генерирование, но они могут также быть сгенерированы во время исполнения, как в иллюстративных целях показано на фиг. 7. Движения, которые воспроизводятся аналогичным образом каждый раз, могут быть сгенерированы и записаны в режиме оффлайн. Они, как правило, представляют собой движения, которые происходят каждый раз в одном и том же экранном пространстве и с одной и той же скоростью, когда они инициируются. Векторы движения для этих анимаций могут быть записаны в режиме оффлайн за счет инициации все возможных изменений анимации и записи сгенерированных игрой векторов движения или генерирования векторов движения посредством более традиционных методик оценки движения, таких как используются в кодеке Н.264. Согласно предпочтительному варианту осуществления сгенерированные игрой векторы движения, как описано выше со ссылкой на фиг. 1-6, используются для обеспечения оценок движения высокого качества. Этот процесс может происходить в любой момент времени в течение разработки, но предпочтительно добавить этот процесс в качестве стадии процесса сборки или другого существующего процесса настройки активов, например предварительного генерирования MIP-карт и уровней детализации («LOD»). Настройка активов может включать любой процесс, который осуществляет компиляцию активов игры из человекочитаемых исходных форматов в машиночитаемые форматы. Например, MIP-карты могут быть сгенерированы заранее за счет преобразования созданных художником файлов текстур в готовые для игры форматы, которые характеризуются множеством разрешений. Например, LOD могут быть сгенерированы заранее за счет преобразования созданных художником файлов моделей в готовые для игры форматы, которые характеризуются множеством уровней детализации. Генерирование векторов движения может быть добавлено в существующий процесс настройки активов, которые преобразует форматы созданной художником анимации в готовые для игры форматы.
[0071] На фиг. 7 изображен приведенный в качестве примера способ генерирования векторов движения в режиме оффлайн или во время исполнения. Анимации могут быть отрендерены для поверхности/изображения вне экрана, стадия 700, и векторы движения могут быть записаны для немедленного использования. Должны быть отрендерены только те части экрана, которые перемещаются, другие объекты в сцене можно игнорировать. Обведенный пунктирной линией объект, показанный на стадии 702, и обведенный сплошной линией объект, показанный на стадии 704, представляют положение анимированного объекта в предыдущем кадре и текущем кадре соответственно. Перемещение из предыдущего кадра в текущий кадр захватывается на стадии 706 в форме векторов движения, показанных на стадии 708. Векторы движения могут быть захвачены из сгенерированных игрой векторов движения или захвачены посредством более традиционных методик оценки движения, например используемых в кодеке Н.264. Согласно предпочтительному варианту осуществления сгенерированные игрой векторы движения, как описано выше со ссылкой на фиг. 1-6, используются для обеспечения векторов движения высокого качества. Ценность нескольких кадров прогнозируемых векторов движения может быть быстро вычислена для заданной анимации за счет повторения процесса, изображенного на стадиях 700-708, до тех пор, пока векторы движения не будут сгенерированы для всех необходимых кадров. Не все из кадров в анимации должны быть сгенерированы - необходимы только те, которые должны быть воспроизведены на клиенте, пока видеопоток догружается. Минимальное количество сгенерированных кадров будет зависеть от задержки между отправкой ввода игрока и приемом итогового видеопотока на клиенте; и продолжительность сгенерированного отрезка анимации должна по меньшей мере не уступать задержке. Кадры прогнозируемых векторов движения могут быть масштабированы по скорости во время воспроизведения, как описано ниже со ссылкой на фиг. 10-13, на которых раскрывается использование квитированных повторяющихся векторов движения при оценке движения. Если воспроизведение кадров прогнозируемых векторов движения масштабировано по времени, генерирование прогнозируемых векторов движения для отрезка анимации, равного задержке, приведет к масштабированию скорости воспроизведения, равному 50%. Генерирование векторов движения для более продолжительного отрезка анимации приведет к воспроизведению, которое характеризуется менее выраженным масштабированием по скорости.
[0072] При записи векторов движения должен учитываться размер макроблока, используемый для кодирования видео, и должен быть предусмотрен вектор движения для каждого макроблока. Согласно предпочтительному варианту осуществления, сгенерированные игрой векторы движения генерируются как попиксельные векторы движения и преобразуются в помакроблочные векторы движения за счет поиска среднего арифметического для каждой группы макроблоков попиксельных векторов движения.
[0073] На фиг. 8 изображены передача и хранение на стороне клиента прогнозируемых векторов движения с целью компенсации движения на основании ввода игрока. Во время разработки программного обеспечения видеоигры, события должны быть настроены для сигнализации о намечающихся чувствительных к контексту анимациях, запускаемых от ввода. Например, разработчик игры хочет отправить прогнозируемые векторы движения, чтобы они были доступны, когда игрок выполняет анимацию зацепа за край. Разработчик реализует событие, которое будет инициировано каждый раз, когда игрок обращен к краю, за который можно зацепиться, и находиться вблизи от него. В этом примере, когда игрок приближается к краю, за который можно зацепиться, во время игры, приведенное в качестве примера событие принимается на стадии 800 «Прием события во время исполнения игры». Тип события будет описывать, должны ли быть сгенерированы прогнозируемые векторы движения, как в случае адаптивно изменяемых анимаций, или были ли прогнозируемые векторы движения предварительно сгенерированы в режиме оффлайн, как в случае анимаций, которые никогда не изменяются, а воспроизводятся редко или зависят от контекста игрока. В приведенном выше примере анимация зацепа за край растягивается на основании расстояния игрока от края, что означает, что векторы движения должны быть сгенерированы во время исполнения на стадии 802 «Генерирование прогнозируемых векторов движения». В другом случае векторы движения могут быть сгенерированы в режиме оффлайн и считаны из запоминающего устройства на стадии 804 «Считывание предварительно сгенерированных векторов движения».
[0074] Один пример предварительно сгенерированные векторы движения может представлять собой переключение между видами оружия в большом арсенале. Количество возможных изменений при переключении оружия может достаточно сильно возрасти, что делает нецелесообразным кеширование всего набора итоговых векторов движения. В целом, если векторы движения занимают чрезмерный объем в ограниченной кеш-памяти и не используются достаточно часто, они не являются подходящими вариантами для предварительного кеширования. Прогнозируемые векторы движения отправляют клиенту на стадии 806 «Отправка прогнозируемых векторов движения и указателей недействительности». Прогнозируемые векторы движения добавляют в таблицу поиска векторов движения на стадии 808 «Кеширование прогнозируемых векторов движения и указателей недействительности». Согласно одному варианту осуществления система определения недействительности функционирует аналогично системе, которая инициирует применение векторов движения в таблице поиска, но вместо этого запрещает применение векторов движения. Когда набор векторов движения и указателей недействительности принят на стадии 808 «Кеширование прогнозируемых векторов движения и указателей недействительности», указатели недействительности должны быть зарегистрированы системой определения недействительности.
[0075] В способе компенсации движения на основании ввода игрока, как описано выше со ссылкой на фиг. 1-6, сравнивают все вводы игрока с записями в таблице поиска векторов движения. В приведенном выше примере, когда игрок осуществляет необходимый ввод для инициации анимации зацепа за край, ввод будет сопоставлен с ранее копированным вводом в таблице поиска на стадии 810 «Сопоставление принятого ввода игрока». Если копированные прогнозируемые векторы движения еще не были признаны недействительными, прогнозируемые векторы движения будут применены на стадии 812 «Применение компенсации движения на основании ввода игрока». Если соответствующий ввод игрока будет делать недействительными прогнозируемые векторы движения, или если прогнозируемые векторы движения становятся недействительными через предварительно определенный период времени, или если прогнозируемые векторы движения становятся недействительными после однократного применения, прогнозируемые векторы движения удаляют из таблицы поиска на стадии 814 «Признание недействительности» и не применяются.
[0076] На фиг. 9 описан приведенный в качестве примера способ отправки сигналов, которые могут определить недействительность набора прогнозируемых векторов движения. Определение недействительности представляет собой тип обновления таблицы поиска, где набор прогнозируемых векторов движения удаляется из таблицы поиска, которая предпочтительно кешируется на клиенте. В дополнение к реакции на события обновления, принятые от сервера, механизм обновления может отслеживать вводы игрока и содержать таймеры обратного отсчета определения недействительности. Когда набор прогнозируемых векторов движения подвергнут кешированию в таблице поиска, его указатель недействительности вероятно будет зарегистрирован с помощью функции/механизма обновления. Указатель недействительности представляет собой любой сигнал данных, который инициирует обновление определения недействительности таблицы поиска. Приведенная в качестве примера таблица поиска, «Таблица поиска», показанная на стадии 900, содержит три набора прогнозируемых векторов движения: прогнозируемую анимация двери, показанную на стадии 902 «Прогнозируемая анимация двери», прогнозируемую анимацию зацепа за край, показанную на стадии 904 «Прогнозируемый зацеп за край», и прогнозируемую анимацию убийственного удара, показанную на стадии 906 «Прогнозируемая анимация убийственного удара». Прогнозируемые векторы движения могут быть признаны недействительными после однократного применения. В примере векторы движения прогнозируемой анимации двери, показанные на стадии 902 «Прогнозируемая анимация двери», применяют, когда игрок нажимает ввод на стадии 908 «Ввод для открывания двери», чтобы открыть ближайшую дверь. Одновременно, ввод для открывания двери на стадии 908 «Ввод для открывания двери», удаляется из регистра и прогнозируемые анимации двери, показанные на стадии 902 «Прогнозируемая анимация двери», могут быть удалены из таблицы поиска на стадии 910 «Признание недействительности после использования». Аналогично, другие вводы могут делать недействительными прогнозируемые векторы движения перед их применением. В этом примере набор прогнозируемых векторов движения для анимации зацепа за край, показанной на стадии 904 «Прогнозируемый зацеп за край», действителен только в пределах ограниченного расстояния до края.
[0077] Если игрок перемещается в сторону от края за счет использования ввода для перемещения, показанного на стадии 912 «Ввод для перемещения», перед тем как игрок подпрыгнет, чтобы зацепиться за край (за счет использования ввода для прыжка, показанного на стадии 914 «Ввод для прыжка»), векторы движения прогнозируемого зацепа за край, показанные на стадии 904 «Прогнозируемый зацеп за край», будут признаны недействительными на стадии 916 «Признание недействительности при вводах». Другие примеры вводов обеспечения недействительности могут представлять собой случаи, в которых у игрока есть абордажный крюк или некоторое другое оружие, основанное на перемещении, которое может сделать недействительными прогнозируемые векторы движения, и случаи, в которых игрок нажимает кнопку, которая активирует специальную возможность. Поскольку вводы обеспечения недействительности являются характерными для контекста, другие варианты могут быть очевидными на основании конкретного варианта исполнения. Прогнозируемые векторы движения также могут становиться недействительными с течением времени. В указанном примере возможность убийственного удара предоставляется игроку только в течение трехсекундного окна. Если игрок не нажимает ввод для ближнего боя, показанный на стадии 918 «Ввод для ближнего боя», в течение трехсекундного окна, векторы движения для прогнозируемой анимации убийственного удара, показанные на стадии 906 «Прогнозируемая анимация убийственного удара», будут признаны недействительными на стадии 920 «Признание недействительности по таймеру прекращения действия». Прогнозируемые векторы движения могут характеризоваться наличием множества указателей недействительности и наоборот. Например, прогнозируемый зацеп за край может быть признан недействительным, если принят ввод для перемещения или после использования векторов движения зацепа за край, в зависимости от того, что наступит раньше.
[0078] На фиг. 10 показан приведенный в качестве примера способ генерирования библиотеки векторов движения и приведенная в качестве примера библиотека повторяющихся векторов движения для кеширования. Поскольку выбранные движения очень повторяющиеся по своей сути, они будут воспроизводиться аналогичным образом каждый раз при инициации. Это позволяет сгенерировать векторы движения заранее и организовать их в библиотеки. Генерирование библиотеки векторов движения может осуществляться в любой момент времени в течение разработки, но есть смысл добавить этот процесс в качестве стадии во время процесса сборки или некоторой другой фазы настройки активов. В этом примере библиотеку векторов движения генерируют для каждого доступного оружия в шутере от первого лица. Когда генерирование библиотеки для первого оружия начинается на стадии 1000 «Генерирование библиотеки», анимацию первого оружия инициируют на стадии 1002 «Инициация анимации» и векторы движения записывают на стадии 1004 «Запись векторов движения». Векторы движения могут быть сгенерированы игрой или сгенерированы посредством более традиционных методик оценки движения, например используемых в кодеке Н.264. Согласно предпочтительному варианту осуществления сгенерированные игрой векторы движения, как описано в предварительных заявках на выдачу патента США №62/488256 и 62/634464, которые включены в настоящий документ во всей своей полноте, используются для обеспечения оценок движения высокого качества. Если записанные векторы движения не точно или правильно квантованы, они будут вносить артефакты при использовании во время компенсации движения на основании ввода игрока. Стадии 1002 и 1004 повторяют до тех пор, пока векторы движения не будут записаны для каждой очень повторяющейся анимации в библиотеке. Генерирование библиотеки начинается снова на стадии 1000 до тех пор, пока все библиотеки не будут сгенерированы.
[0079] Пример, показанный на стадии 1006 «Библиотека векторов движения», представляет собой очень упрощенную версию библиотеки повторяющихся векторов движения для плазменного ружья в шутере от первого лица. Этот пример является упрощенным, чтобы включить две простые анимации: одну 2-кадровую анимацию для анимации отдачи, которая воспроизводится, когда игрок стреляет из плазменного ружья, как показано на стадии 1008, и одну 4-кадровую анимацию для покачивающего движения ружья, которая происходит, когда игрок идет вперед, как показано на стадии 1010. В обычной среде реального мира оружие вероятно будет характеризоваться большим количеством анимаций, и продолжительность анимации может быть значительно длиннее, чем четыре кадра.
[0080] На фиг. 11 изображен процесс кеширования, применения и обновления библиотек векторов движения для компенсации движения на основании ввода игрока. Когда игра начинается, сервер отправляет библиотеки предварительно сгенерированных векторов движения клиенту на стадии 1100 «Отправка библиотек повторяющихся векторов движения при запуске». Клиент сохраняет библиотеки векторов движения в запоминающем устройстве, как правило, в форме таблицы поиска, на стадии 1102 «Кеширование повторяющихся векторов движения». В этом варианте исполнения клиент является общим устройством, обслуживающим потребности множества потоковых игр. В альтернативном варианте исполнения характерный для игры клиент может постоянно хранить библиотеки векторов движения без необходимости в кешировании повторяющихся векторов движения от сервера.
[0081] В этот момент времени клиент может начинать отслеживать ввод игрока и сравнивать входящие вводы с записями в таблице поиска компенсации движения на основании ввода игрока. Когда у входящего ввода есть соответствующая запись в таблице поиска на стадии 1104 «Сопоставление принятого ввода игрока», векторы движения, связанные с вводом игрока, используются для обеспечения оценки движения, как в иллюстративных целях описано со ссылкой на фиг. 1-10 на стадии 1106 «Применение компенсации движения на основании ввода игрока». Может быть несколько случаев, в которых прием конкретного ввода может требовать изменения таблицы поиска на стадии 1112 «Обновление соответствия копированных повторяющихся векторов движения». Примером ввода, который приводит к изменению таблицы поиска, является нажатие кнопки «пауза», которая может запрещать такие вводы игрока, как перемещение персонажа, анимации выстрела из оружия или другие связанные с игрой движения. После применения векторов движения и необязательно обновления таблицы поиска, клиент продолжает отслеживать ввод игрока. После обновления таблицы поиска на стадии 1112 «Обновление соответствия копированных повторяющихся векторов движения», входящий ввод игрока сравнивается с обновленными записями в таблице поиска.
[0082] В любой момент времени в течение исполнения игры, изменение контекста для игрока может требовать изменения таблицы поиска. Например, игрок может осуществлять смену оружия, что требует переключения библиотеки копированных движений от ранее взятого оружия на новое оружие. В приведенном в качестве примера варианте исполнения серверная игра может отслеживать конкретные игровые события. Эти события настроены посредством способов, известных в уровне техники, во время разработки игры и они могут быть отправлены посредством существующей системы отправки сообщений или предупреждения о событиях игры. Когда запущенная копия игры принимает одно из этих событий на стадии 1108 «Прием события во время исполнения» сообщение будет сгенерировано и передано клиенту на стадии 1110 «Отправка обновления контекста». Обновление контекста может быть отправлено для любого игрового события, которое изменяет взаимосвязь между вводом игрока и векторами движения, содержащимися в таблице поиска. Обновления контекста могут разрешать или запрещать инициацию посредством ввода игрока набора векторов движения, изменение векторов движения, связанных с указанным вводом, или иным образом добавлять или удалять связи между вводом игрока и векторами движения для компенсация движения на основании ввода игрока. Когда сообщение поступает клиенту, таблица поиска изменяется согласно изменившемуся контексту на стадии 1112 «Обновление соответствия копированных повторяющихся векторов движения».
[0083] На фиг. 12 показана схема, на которой изображен способ обновления соответствия векторов движения. Таблица 1200 поиска, которая хранилась в кеш-памяти 1202 клиента, используется клиентом для нахождения того, какие векторы движения связаны с указанным вводом игрока. Могут быть моменты времени в течение исполнения игры, в которые контекстуальные изменения приводят к изменению характера вводов игрока. Например, если игрок перемещается вперед, но сталкивается с препятствием, таким как стена, должно быть прекращено применение спрогнозированных векторов движения для перемещения вперед. Когда это происходит, сервер отправляет обновление контекста клиенту, как показано на стадии 1110 на фиг. 11. Это событие 1204 блокирования перемещения принимается, что сигнализирует клиенту об отключении связи между вводом 1206 для перемещения вперед и соответствующими векторами 1208 движения. Применение векторов движения для перемещения вперед прекращается, когда игрок использует ввод для перемещения вперед, пока другое событие от сервера не возобновит связь между вводом для перемещения вперед и векторами движения для перемещения вперед. В этом примере игра сгенерирует событие, когда перемещение игрока перестанет блокироваться, и передаст обновление контекста клиенту для повторного установления связи между вводом для перемещения вперед и векторами движения для перемещения вперед в таблице поиска.
[0084] В другом примере игрок держит плазменное ружье, но выполняет смену на дробовик. Библиотека 1210 векторов движения плазменного ружья хранится в кеш-памяти вместе с его векторами 1209 движения при стрельбе, которые соответствуют конкретному вводу 1211 для стрельбы. В кеш-памяти также хранятся библиотеки векторов движения для других видов оружия, включая дробовик 1212 и пистолет 1214. Когда клиент принимает событие 1216 на смену оружия от сервера, библиотека 1210 векторов движения плазменного ружья заменяется в таблице 1200 поиска на библиотеку 1212 векторов движения дробовика. Для предотвращения неправильного осуществления компенсации движения на основании ввода игрока во время смены оружия, два события могут использоваться совместно, чтобы сначала исключить библиотеку 1210 векторов движения плазменного ружья, пока воспроизводится анимация смены оружия, а затем включить две библиотеки векторов движения после завершения анимации смены оружия.
[0085] Для более продолжительных многокадровых векторов движения можно растянуть их применение таким образом, что последний кадр векторов движения применяется, когда последний кадр актуального видео принимается от сервера. Это позволит серверу догнать оцененное движение в момент, когда на клиенте заканчиваются копированные векторы движения. Коэффициент масштабирования для векторов движения определяется как масштаб скорости воспроизведения, вычисляемый, как указано ниже.
[0086] Здесь задержка - время между начальным событием ввода игрока и приемом актуального видео на клиенте. Эта задержка включает время, необходимое для отправки ввода по сети на сервер, обработку на сервере, включая логику игры, логику рендеринга, время рендеринга ГП и время кодирования, а также время в сети для возврата видео обратно игроку. Задержка должна непрерывно измеряться в любой среде потоковой передачи игры. Согласно предпочтительному варианту осуществления компенсации движения на основании ввода игрока используется маркер соотнесения, как описано в предварительных заявках на выдачу патента США №62/488256 и 62/634464, для соотнесения ввода игрока и актуального видео. Перед отправкой входящего ввода игрока на сервер, маркер соотнесения прикрепляют в качестве уникального идентификатора. Когда видеокадр возвращается от сервера с маркером соотнесения, клиент сопоставляет уникальный идентификатор с предыдущим вводом. Это отдает сигнал клиенту прекратить оценку движения для соотнесенного ввода или отменить предыдущую оценку движения посредством методик наложения. Продолжительность кешированного отрезка анимации, или время кешированной анимации, может быть вычислено за счет умножения количества кадров в кешированной анимации на продолжительность каждого кадра.
[0087] На фиг. 13 приведенная в качестве примера анимация, содержащая 10 кадров, используется для компенсации движения на основании ввода игрока в игре с частотой 60 кадров в секунду и задержкой 100 мс. Когда ввод игрока инициирует компенсацию движения на основании ввода игрока, масштаб скорости воспроизведения вычисляется для копированных векторов движения, как указано ниже.
[0088] Ввод игрока был принят в момент времени 0 мс. Скорость воспроизведения векторов движения масштабируют 1300 посредством вычисленного масштаба скорости воспроизведения. Первый кадр векторов движения применяют к следующему доступному кадру в видеопотоке от сервера. Кадры масштабированных векторов интерполируют для сохранения плавности анимации. Поскольку кадры векторов движения масштабируют на нескольких кадрах, интерполяция представляет собой способ, который может использоваться для вычисления того, «насколько» вектор движения должен быть применен в любом указанном кадре. В приведенном в качестве примера варианте исполнения может использоваться линейная интерполяция, основанная на вычисленном масштабе скорости воспроизведения. Для этого примера вычисленный масштаб скорости воспроизведения составляет 0,625, что означает, что один набор векторов движения будет растянут по 1,6 кадров отображения. Интерполяция представляет собой способ вычисления того, насколько вектор движения должен быть применен в указанном кадре. То есть с помощью интерполяции вычисляют, насколько переместить макроблок по вектору движения, когда набор векторов движения растянут по нескольким кадрам отображения. Только часть первых масштабированных векторов движения должна быть применена в первом кадре отображения на моменте времени 17 мс, равном масштабу скорости воспроизведения, составляющем 0,625. Во втором кадре отображения на моменте времени 33 мс применяется оставшаяся часть первых масштабированных векторов движения, вычисленных как 1 - 0,625=0,375, затем применяется первая часть вторых масштабированных векторов движения, вычисленная как результат вычитания из масштаба скорости воспроизведения оставшейся части первых масштабированных векторов движения или 0,625 - 0,375=0,25. В третьем кадре отображения на моменте времени 50 мс продолжает применяться второй набор масштабированных векторов движения, причем макроблоки перемещаются следующие 62,5% по векторам движения. В четвертом кадре отображения на моменте времени 67 мс применяется оставшаяся часть вторых масштабированных векторов движения, вычисленных как 1 - 0,25 - 0,625=0,125, и применяется первая часть третьих масштабированных векторов движения, вычисленная как результат вычитания из масштаба скорости воспроизведения оставшейся части вторых масштабированных векторов движения: 0,625 - 0,125=0,5. Линейная интерполяция продолжается при применении масштабированных векторов движения.
[0089] Многокадровые векторы движения могут отправлять маркер соотнесения для каждого кадра кешированной анимации для соотнесения каждого кадра оцененного движения с будущим актуальным видео.
[0090] Задержка будет сильно зависеть от сетевого пути и архитектуры между клиентом и сервером. В этом примере используется задержка 100 мс, но размер задержки может варьировать от десятков до сотен миллисекунд. Меньшие задержки обеспечивают лучшее впечатление для игрока, но методики компенсации движения на основании ввода игрока могут помочь скрыть влияние большой задержки в некоторых случаях. После задержки 1304 принимают 1302 актуальное видео. Для серверов с граничным расположением или серверов, которые физически находятся близко к потребителям, время задержки может составлять не более 30 мс. Для более обычных расположений сервера более вероятна задержка 100 мс. Актуальное видео сохраняет исходную продолжительность анимации 1306 поскольку оно не было масштабировано. Актуальное видео применяется в соответствии с методиками компенсации движения на основании ввода игрока.
[0091] Если клиент не может идеально осуществить наложение предыдущей компенсации движения, стандарт кодирования Н.264 обеспечивает резервную функцию отсечения по плоскости, которая может исправить любые временно распространившиеся ошибки. На основании настроек профиля Н.264 каждая плоскость кодируется как внутренняя плоскость (плоскость I) и отправляться по скользящему графику с определенной частотой. Поскольку внутренние плоскости не содержат векторов движения, векторы движения для наложения должны применяться только тогда, когда актуальные векторы движения поступают в плоскости р. Это предотвращает применение векторов для наложения в макроблоках, которые появились в плоскости I, перед возвратом маркированного кадра от сервера.
[0092] Представленное выше описание и фигуры следует рассматривать только как приведенные в целях иллюстрации принципов настоящего изобретения. Настоящее изобретение не ограничено предпочтительным вариантом осуществления и может быть реализовано различными способами, которые будут очевидны специалисту в данной области техники. Специалистам в данной области техники будут очевидны многочисленные области применения настоящего изобретения. Таким образом, настоящее изобретение не ограничено конкретными раскрытыми примерами или точной конструкцией и принципом работы, которые показаны и описаны. Наоборот, могут использоваться все подходящие модификации и эквиваленты, которые находятся в пределах объема настоящего изобретения.