У меня проблемы с пониманием, когда экстраполировать, а когда интерполировать. В gaffer об играх он сказал, что нужно интерполировать, но затем в другой статье он рекомендовал экстраполировать игрока. Поэтому мой вопрос: когда лучше экстраполировать, а когда лучше интерполировать?
interpolation
extrapolation
Дж Леонг
источник
источник
Ответы:
Вы интерполируете, когда знаете значения «до» и «после».
Вы экстраполируете, когда угадываете, что будет в будущем, исходя из того, что вы уже знаете.
Экстраполяция используется в основном для прогнозирования движения. Он не нужен игровому серверу , но игровые клиенты нуждаются в нем, чтобы отображать несколько реалистичное и актуальное представление о состоянии игры, чтобы дать игрокам приятный визуальный опыт.
источник
Интерполяция выполняется, когда у вас есть начальное и конечное значение, и вы хотите оценить, что происходит между этим начальным и конечным значением. Примером может быть перемещение игрока из положения A в положение B плавным движением.
Экстраполяция выполняется, когда у вас есть начальное значение, но еще нет данных для конца. Затем вы можете экстраполировать на основе имеющихся у вас данных. Например, основываясь на предыдущих движениях игрока, вы можете определить, где он, вероятно, будет в следующем кадре.
источник
Всегда интерполируйте, когда можете.
Если у вас недостаточно информации для интерполяции, вам нужно экстраполировать.
Это действительно так просто, не переусердствуйте :)
Чтобы объяснить немного больше:
В общем, интерполяция лучше, потому что интерполяция всегда правильная. Для экстраполяции нужно угадать. Затем вам приходится иметь дело с тем, что происходит, если вы догадаетесь неправильно, что приводит к резиновому бинтованию или появлению трещин и всевозможным системам, чтобы справиться со всем этим и замаскировать его.
Что произойдет, если вы экстраполировали положение летучей мыши и показали, что она движется в нужном месте и отскакивает мяч, а затем понимаете, что вы ошиблись, и мяч не отскочил? Нет хорошего способа справиться с этим сценарием.
источник
Вы интерполируете, чтобы найти состояния между известными значениями, и вы экстраполируете, чтобы найти будущие состояния.
Думайте о проблеме в терминах переменных состояния, таких как положения и скорости. В лучшем из всех сценариев каждый компьютер, который должен работать с состоянием, имеет доступ к данным состояния в течение времени, когда они хотят работать. Например, алгоритм столкновения, позволяющий увидеть, выстрелил ли из лазерной винтовки X игрок А, в лучшую сторону, лучший из всех случаев, когда алгоритм знает точное положение каждого объекта в момент запуска лазера.
В реальном мире нам не всегда так везет. Иногда информация правды, которую мы получаем, более скудна. Например, если игрок А является удаленным игроком на другом компьютере, вы можете не знать точно, куда они идут, когда вы запускаете лазер, и вам нужно рассчитать выстрел. В этом случае вам необходимо создать оценщик для позиции А, обычно с интерполяцией или экстраполяцией.
Разница между ними заключается в том, есть ли у вас данные, ограниченные с обеих сторон, или только с одной стороны. Допустим, игрок A уже объявил свою правдивую позицию для t = 0 и t = 1. Игрок B стреляет лазером при t = 0,5. Во многих ситуациях объявление игрока A о своей позиции в момент времени t = 1 может произойти до того, как игрок B нажмет на курок. Почему? Во многих играх отзывчивость элементов управления менее чем мгновенная. В гоночном симуляции большая часть позиции игрока ограничена физикой движущегося транспортного средства. Вы можете объявить «будущую позицию», потому что знаете, что действительно не сможете управлять всем этим за короткий период. Если у вас есть информация в будущем, вы можете интерполировать между двумя значениями.
Что если вам не повезло иметь значение = 1? Что если игрок А не был в состоянии объявить свое будущее местоположение, и вы застряли, решая, ударили вы или пропустили только информацию с t = 0? В этом случае вы должны экстраполировать. В экстраполяции вы используете то, что знаете о движении, чтобы выйти за пределы ваших данных. Возможно, вы знаете, что у игрока А есть определенная скорость, поэтому предположите, что если вы умножите ее на время, вы сможете получить позицию в каждый раз.
Разница в поведении. Интерполяция требует, чтобы у вас была верхняя и нижняя границы, которые вы не всегда имеете. Однако почти во всех ситуациях он дает значительно лучшие результаты, чем экстраполяция. Экстраполяция может легко привести к нереалистичным движениям. Рассмотрим случай, когда игрок обходит стороной влево и вправо, чтобы не быть застреленным во время продвижения. В любой момент их скорость находится по диагонали, поэтому, если вы экстраполируете, игрок может уйти в сторону, хотя на самом деле он этого не делает. Если вы выполняете только интерполяцию, значения не отклоняются от реалистичных значений.
Интерполяция и экстраполяция - две крайности в мире фильтрации. Существует много-много-много-много фильтров для обработки таких данных, которые смешивают и сопоставляют свойства между интерполяцией и экстраполяцией. Соответственно, не удивляйтесь, если увидите алгоритмы, которые не имеют четкой интерполяции или явно экстраполяции. Эти двое - лишь верхушка айсберга.
источник
Интерполяция использует известные данные для вычисления данных в пределах набора данных (в том числе префикс «изнутри»). Экстраполяция - это расчет данных за пределами существующих данных (за исключением префикса «outside»). Оба используются для синтеза дополнительных данных, причем точный метод расчета определяет ожидаемую достоверность сгенерированных данных.
Или поместить это в очень простую диаграмму:
Учитывая данные точек,
A
иC
вы можете интерполироватьB
и экстраполироватьD
.Точность интерполяции или экстраполяции полностью зависит от того, насколько хорошо вы можете учесть каждую переменную в расчете. Если вы знаете все переменные и имеете уравнение, которое учитывает все из них, то вы можете с одинаковой легкостью интерполировать или экстраполировать.
Для игровой механики ограничивающими факторами будут точки, в которых на переменные влияют непредсказуемым образом, либо игроком, либо каким-либо случайным или псевдослучайным элементом.
Например, движение мяча в Breakout (в его простейшей форме) можно экстраполировать вплоть до точки, где он потенциально может взаимодействовать с веслом игрока. Все переменные могут быть учтены до этой точки, и вы можете точно моделировать действия мяча. Когда он достигает точки, где возможно взаимодействие с игроком, появляется ряд возможных результатов, и нет способа точно смоделировать, какой из них будет иметь место, пока это не произойдет. Это предиктивный предел модели физики игры.
В играх интерполяция проще, потому что вы работаете с известными точками и не должны задаваться вопросом, изменятся ли условия. Кроме того, вы имеете полный контроль над задействованными переменными и можете использовать любые правила, которые вы определили для определения пути объекта. Чем сложнее правила, тем сложнее интерполировать.
Для движения объекта с простыми столкновениями в игровом пространстве без гравитации (например, Breakout или Pong) механизм интерполяции вдоль линии на траектории представляет собой простую линейную интерполяцию точек, и тот же расчет можно использовать для экстраполяции линии на тест для будущих столкновений. После обнаружения столкновения вы можете экстраполировать эффект этого столкновения на вовлеченные объекты.
источник
Краткий ответ: вы интерполируете, когда вам нужно оценить значение между двумя известными значениями (то есть: за один час значение равно 1, за 3 часа это три, чтобы интерполировать значение при 2 при наиболее вероятном значении 2 с заданным ценности). Экстраполирование - это когда неизвестное находится за пределами того, что вы знаете, поэтому, когда известны 1 и 2, вы можете сделать обоснованное предположение о 3.
Интерполировать: между Экстраполировать: снаружи
Длинные ответы здесь, скорее всего, более точные и научно правильные, но я надеюсь, что мое простое объяснение может иметь смысл для некоторых
источник