Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Работа Raycast.

Работа Raycast.

ErmitashПостоялецwww22 мая 201810:13#0
Добрый день, появился вопрос. В Unity есть Physics.RayCast и с помощью данного метода можно найти все точки, которые пересекает луч. И вот мне стало интересно, а как он работает? Есть вариант, что он с начала отрезка прибавляет какую-то дельту каждый раз и смотрит есть ли столкновение коллайдера в этой точке или нет. Если все работает так, тогда а что если столкновение произойдет между этими точками, тогда как понять? Помимо этого самое интересное, что мы сравниваем не 2 конкретных объекта, что можно было бы решить системой уравнений пересекаются ли они или нет, а бесконечное количество и на этом луче может попасться как 0 так 100000 объектов и очень стало интересно, а как это работает?:)
DuraneПостоялецwww22 мая 201811:28#1
Обычно реализация идет через отсечение колайдеров по дереву, сферам, баундинг боксам, расстоянию и пр. Дальше рейкаст оставшихся колайдеров и сортировка точек попадания от источника
MadwareУчастникwww22 мая 201811:46#2
Ermitash
> И вот мне стало интересно, а как он работает?
Вы знаете как работает рейтрейсинг?
Если нет, сходите и узнайте, все вопросы сразу отпадут
ErmitashПостоялецwww6 июня 201817:34#3
Madware, мда...
Сейчас читаю про барицентрические координаты. Вопрос первый, почему юзают их, а не просто формулу пересечение отрезка с плоскостью? Вопрос второй, то есть реально приходится прочесывать все collider-ы на сцене? И выходит, что в каждом коллайдере идет разбиение на треугольники и проверка пересечение луча с треугольником?

Правка: 6 июня 2018 17:35

ArochПостоялецwww7 июня 20181:27#4
Ermitash
> И выходит, что в каждом коллайдере идет разбиение на треугольники и проверка
> пересечение луча с треугольником?
>
пока дело дойдет до проверки треугольников если всё правильно сделано, то после стадии более простых проверок останется проверить совсем небольшую группу треугольников. (как правило от нескольких до несколько сотен в худшем случае при какой угодно детализации сцены).
ErmitashПостоялецwww7 июня 20189:07#5
Так о каких стадиях более простых проверок идет речь? Допустим сделать прогрузку коллайдеров в опр. радиусе от камеры, как только объект попадает в радиус действия, то прогружаются коллайдеры. Окей, допустим это так, однако если радиус большой, а коллайдеров много, то это все равно как-то не эффективное использование ресурсов я считаю.
DelfigamerПостоялецwww7 июня 201810:36#6
Ermitash
> Так о каких стадиях более простых проверок идет речь?
Space partitioning - когда всё пространство разбивается на области, и рейкаст производится сначала по самим областям, а затем - только по тем коллайдерам, которые легли в затронутые лучом области.
На уровне объектов - ещё LOD. Например, когда рассчитывается пересечение луча с куклой игрока - сначала проверяется AABB вокруг этой куклы, если есть пересечение - только тогда уже проверяются составные части объекта. Если нужна ещё большая точность - то пересечения с полигонами проходят уже следующей стадией, только для тех полигонов, которые лежат в соответствующей составной части.
В общем, принцип получается такой - сначала по грубой проверке коллайдеры отсекаются большими группами, и следующий уровень детализации просчитывается уже с небольшим числом оставшихся.
Иллюстрация.

Правка: 7 июня 2018 10:36

ErmitashПостоялецwww7 июня 201812:21#7
Чем-то похоже на бинарный поиск. Довольно неплохо, спасибо!)

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр