HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Интерполяция путей (https://hlfx.ru/forum/showthread.php?threadid=6072)


Отправлено FiEctro 26-01-2024 в 11:17:

Интерполяция путей

Такой вопрос, есть у нас условно патч треки - несколько объектов которыми грубо весьма условно нанесен путь для нашего вагончика. Естественно нам нужно его как то сгладить, однако я столкнулся с некоторой особенностью. Всё дело в том что сгладить сами повороты довольно просто, но помимо поворотов есть ещё довольно длинные пути которые к ним так же подмешиваются, и в итоге вагончик едет уже не по рельсам, а начинает как бы заранее съезжать с них в сторону поворота.
https://i.ibb.co/rvvg0z0/lerp.jpg

Как можно решить такую проблему не прибегая к увеличению количества объектов?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-01-2024 в 13:28:

FiEctro
Если ты мапал в Джеке под ку3 с использоаанием патчей безье, то знаешь, что ответ на твой вопрос: "ДА НЕ КАК!!!".
Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).

__________________

xaerox on Vivino


Отправлено FiEctro 26-01-2024 в 13:50:

Цитата:
XaeroX писал:
"ДА НЕ КАК!!!".


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

Цитата:
XaeroX писал:
Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).



Так суть задачи как раз в том чтобы сохранить оригинальный путь.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено (_-=ZhekA=-_) 26-01-2024 в 13:52:

FiEctro
Если в юнити есть сплайны, то пусти поезд по сплайну

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено XaeroX 26-01-2024 в 14:09:

Цитата:
FiEctro писал:
Так суть задачи как раз в том чтобы сохранить оригинальный путь.

Если ты собираешься просто заменить участки пути гладкими кривыми - то это уже не интерполяция. И выглядеть будет так себе, кмк.
Цитата:
FiEctro писал:
Но может быть кто то из вас знает более элегантное и простое решение.

Не знаю. Мне известно только классические решение с интерполяцией, но по факту да, это уже другой путь.

__________________

xaerox on Vivino


Отправлено FiEctro 26-01-2024 в 14:39:

Цитата:
XaeroX писал:
Волатила+джек поддерживают это (path_spline).


Кстати, а какую формулу безье ты используешь? Ведь их много видов. И насколько это дорого?

Цитата:
(_-=ZhekA=-_) писал:
Если в юнити есть сплайны, то пусти поезд по сплайну


Изкоробки нет, но их довольно просто написать. Но в рамках задачи использовать уже имеющийся путь, это ни о чём. Переделать впрочем не долго, но мне интересно именно что можно сделать с уже имеющимися.

Цитата:
XaeroX писал:
Если ты собираешься просто заменить участки пути гладкими кривыми - то это уже не интерполяция. И выглядеть будет так себе, кмк.


Слишком много ручной работы.
Да просто сгладить резкие углы на поворотах. У меня кстати ещё одна идея появилась.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-01-2024 в 15:03:

Цитата:
FiEctro писал:
Кстати, а какую формулу безье ты используешь?

Кубический сплайн.
Цитата:
FiEctro писал:
И насколько это дорого?

Не особо дорого на современных устройствах. Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.

__________________

xaerox on Vivino


Отправлено FiEctro 26-01-2024 в 15:12:

Есть такая вот задумка, пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути, а потом просто записать положение центра отрезка между этими 2мя точками как отдельный путь. Похожим образом безьешки вроде и строятся, но тут можно будет уже регулировать насколько можно сгладить тот или иной участок задавая длину отрезка на пути внутри каждой ноды без использования отдельных контроллеров. Что думаете?

Т.е. если у нас путь длинный то отрезок у него будет маленький, а следовательно и отклоняться от исходной траектории он не будет, а вот если надо наоборот увеличить сглаживание, увеличиваем длину отрезка. Может я изобретаю велосипед и кто то знает уже что то похожее?

Цитата:
XaeroX писал:
Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.


Ну да, это можно делать при загрузке. Однако я помню веревки из аранжмента под халфой строились достаточно долго. Там вроде тоже кубические безье использовали.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Crystallize 26-01-2024 в 15:26:

Цитата:
FiEctro писал:
Есть такая вот задумка, пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути

И как же это делается?


Отправлено FiEctro 26-01-2024 в 15:27:

Цитата:
Crystallize писал:
И как же это делается?


Так же как и безье строются - в цикле.


Вот, правда тут поведение 2х точек немного отличается.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-01-2024 в 15:37:

Цитата:
FiEctro писал:
пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути, а потом просто записать положение центра отрезка между этими 2мя точками как отдельный путь

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

Добавлено 26-01-2024 в 10:33:

Цитата:
FiEctro писал:
Так же как и безье строются - в цикле.

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

Добавлено 26-01-2024 в 10:37:

Цитата:
FiEctro писал:

Ну да, это можно делать при загрузке.

Да не, это вполне можно делать в рантайме. Опять же - в волатиле один и тот же сплайновый путь могут использовать разные объекты с разными гранулярностями:
C++ Source Code:
1
int CSplinePath::BuildPath( int start_node, int max_node_count,
2
float granularity, float default_speed,
3
float default_yaw_speed, float default_fov,
4
vec3_t *array_of_origins, vec3_t *array_of_angles,
5
float *array_of_linear_speeds,
6
float *array_of_angular_speeds,
7
float *array_of_fovs )
8
{
9
  // ...
10
}

__________________

xaerox on Vivino


Отправлено FiEctro 26-01-2024 в 15:41:

Цитата:
XaeroX писал:
Безье строятся анатилически, по формуле.


Цитата:
XaeroX писал:
Это и есть сглаживание. Путь останется не вполне гладким, будут заметны переходы между корнерами. Чем больше расстояние между точками - тем он сглаженнее, но и тем дальше итоговая траектория будет от оригинальной неинтерполированной.


Существуют уже какие то алгоритмы такого сглаживания? Мне хотя бы названия.

Цитата:
XaeroX писал:

float *array_of_linear_speeds,
float *array_of_angular_speeds,


А зачем хранить ещё угловую скорость?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-01-2024 в 15:50:

Цитата:
FiEctro писал:
А зачем хранить ещё угловую скорость?

Это для trigger_camera, у неё ещё и угловая скорость интерполируется, так красивее синематика на движке получается. Ну не суть.
Цитата:
FiEctro писал:
Существуют уже какие то алгоритмы такого сглаживания? Мне хотя бы названия.

https://ru.wikipedia.org/wiki/%D0%9...%B2%D1%8B%D1%85

__________________

xaerox on Vivino


Отправлено Crystallize 26-01-2024 в 15:53:

Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол скользящего отрезка 1-2 к вышеупомянутому перпендикуляру.


Отправлено FiEctro 26-01-2024 в 15:54:

Цитата:
XaeroX писал:
https://ru.wikipedia.org/wiki/%D0%9...%B2%D1%8B%D1%85


Ну это очень абстрактно, там много разных методов. Конкретнее?

Цитата:
Crystallize писал:
Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол 1-2 к перпендикуляру.



Не очень понял. Есть какие то ссылки почитать?

Цитата:
FiEctro писал:
Так же как и безье строются - в цикле.


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

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Временная зона GMT. Текущее время 17:58. Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024