Такой вопрос, есть у нас условно патч треки - несколько объектов которыми грубо весьма условно нанесен путь для нашего вагончика. Естественно нам нужно его как то сгладить, однако я столкнулся с некоторой особенностью. Всё дело в том что сгладить сами повороты довольно просто, но помимо поворотов есть ещё довольно длинные пути которые к ним так же подмешиваются, и в итоге вагончик едет уже не по рельсам, а начинает как бы заранее съезжать с них в сторону поворота.
Как можно решить такую проблему не прибегая к увеличению количества объектов?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Если ты мапал в Джеке под ку3 с использоаанием патчей безье, то знаешь, что ответ на твой вопрос: "ДА НЕ КАК!!!".
Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).
Ну я знаю как минимум 1 способ не идеальный и костыльный, это пускать объект по неинтерполированной траектории и уже за ним по сглаженной траектории пускать мой вагончик. Примерно так работают некоторые сглаживалки пера планшета. Но может быть кто то из вас знает более элегантное и простое решение.
Цитата:
XaeroX писал: Впрочем, оно и не нужно. Возьми редактор, который визуализует сглаженный путь, и подгони кривую под рельсы, двигая корнеры. Волатила+джек поддерживают это (path_spline).
Так суть задачи как раз в том чтобы сохранить оригинальный путь.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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.
XaeroX писал: Волатила+джек поддерживают это (path_spline).
Кстати, а какую формулу безье ты используешь? Ведь их много видов. И насколько это дорого?
Цитата:
(_-=ZhekA=-_) писал: Если в юнити есть сплайны, то пусти поезд по сплайну
Изкоробки нет, но их довольно просто написать. Но в рамках задачи использовать уже имеющийся путь, это ни о чём. Переделать впрочем не долго, но мне интересно именно что можно сделать с уже имеющимися.
Цитата:
XaeroX писал: Если ты собираешься просто заменить участки пути гладкими кривыми - то это уже не интерполяция. И выглядеть будет так себе, кмк.
Слишком много ручной работы.
Да просто сгладить резкие углы на поворотах. У меня кстати ещё одна идея появилась.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Кстати, а какую формулу безье ты используешь?
Кубический сплайн.
Цитата:
FiEctro писал: И насколько это дорого?
Не особо дорого на современных устройствах. Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.
Есть такая вот задумка, пустить опять же 2 точки на каком то фиксированном расстоянии по неинтерполированному пути, а потом просто записать положение центра отрезка между этими 2мя точками как отдельный путь. Похожим образом безьешки вроде и строятся, но тут можно будет уже регулировать насколько можно сгладить тот или иной участок задавая длину отрезка на пути внутри каждой ноды без использования отдельных контроллеров. Что думаете?
Т.е. если у нас путь длинный то отрезок у него будет маленький, а следовательно и отклоняться от исходной траектории он не будет, а вот если надо наоборот увеличить сглаживание, увеличиваем длину отрезка. Может я изобретаю велосипед и кто то знает уже что то похожее?
Цитата:
XaeroX писал: Это ж игровой код, он не каждый кадр выполняется. А гранулярити регулируется в настройках объекта, который по этому пути идёт/едет - камера, монстр или трейн. Чем меньше гранулярити, тем меньше расчётов, но и менее гладкий путь.
Ну да, это можно делать при загрузке. Однако я помню веревки из аранжмента под халфой строились достаточно долго. Там вроде тоже кубические безье использовали.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вот, правда тут поведение 2х точек немного отличается.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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,
XaeroX писал: Безье строятся анатилически, по формуле.
Цитата:
XaeroX писал: Это и есть сглаживание. Путь останется не вполне гладким, будут заметны переходы между корнерами. Чем больше расстояние между точками - тем он сглаженнее, но и тем дальше итоговая траектория будет от оригинальной неинтерполированной.
Существуют уже какие то алгоритмы такого сглаживания? Мне хотя бы названия.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол скользящего отрезка 1-2 к вышеупомянутому перпендикуляру.
Ну это очень абстрактно, там много разных методов. Конкретнее?
Цитата:
Crystallize писал: Я для рельсы решал задачу когда расстояние между бегунками постоянно. Там можно решить через пересечение окружностей т.е. квадратное уравнение но я решил иначе. Начинаем с перпендикуляра от бегунка 1 к отрезку Б, потом там треугольники считаем, в конце арктангенсом находим угол 1-2 к перпендикуляру.
Не очень понял. Есть какие то ссылки почитать?
Цитата:
FiEctro писал: Так же как и безье строются - в цикле.
В целом, а нафига так сложно, строить, а потом хранить? Просто пускать их как обычный поезд и в реалтайме искать центр между ними, лол. Ничего и сглаживать не надо. Остаётся только подобрать коэффициент сглаживания. Например его можно устанавливать в зависимости от угла между путями, ну или ещё как то, хоть вручную. Но надо проверять конечно, может я чего то не учёл.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!