Войти
ПрограммированиеФорумГрафика

Работа Raycast.

#0
10:13, 22 мая 2018

Добрый день, появился вопрос. В Unity есть Physics.RayCast и с помощью данного метода можно найти все точки, которые пересекает луч. И вот мне стало интересно, а как он работает? Есть вариант, что он с начала отрезка прибавляет какую-то дельту каждый раз и смотрит есть ли столкновение коллайдера в этой точке или нет. Если все работает так, тогда а что если столкновение произойдет между этими точками, тогда как понять? Помимо этого самое интересное, что мы сравниваем не 2 конкретных объекта, что можно было бы решить системой уравнений пересекаются ли они или нет, а бесконечное количество и на этом луче может попасться как 0 так 100000 объектов и очень стало интересно, а как это работает?:)


#1
11:28, 22 мая 2018

Обычно реализация идет через отсечение колайдеров по дереву, сферам, баундинг боксам, расстоянию и пр. Дальше рейкаст оставшихся колайдеров и сортировка точек попадания от источника

#2
11:46, 22 мая 2018

Ermitash
> И вот мне стало интересно, а как он работает?
Вы знаете как работает рейтрейсинг?
Если нет, сходите и узнайте, все вопросы сразу отпадут

#3
(Правка: 17:35) 17:34, 6 июня 2018

Madware, мда...
Сейчас читаю про барицентрические координаты. Вопрос первый, почему юзают их, а не просто формулу пересечение отрезка с плоскостью? Вопрос второй, то есть реально приходится прочесывать все collider-ы на сцене? И выходит, что в каждом коллайдере идет разбиение на треугольники и проверка пересечение луча с треугольником?

#4
1:27, 7 июня 2018

Ermitash
> И выходит, что в каждом коллайдере идет разбиение на треугольники и проверка
> пересечение луча с треугольником?
>
пока дело дойдет до проверки треугольников если всё правильно сделано, то после стадии более простых проверок останется проверить совсем небольшую группу треугольников. (как правило от нескольких до несколько сотен в худшем случае при какой угодно детализации сцены).

#5
9:07, 7 июня 2018

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

#6
(Правка: 10:36) 10:36, 7 июня 2018

Ermitash
> Так о каких стадиях более простых проверок идет речь?
Space partitioning - когда всё пространство разбивается на области, и рейкаст производится сначала по самим областям, а затем - только по тем коллайдерам, которые легли в затронутые лучом области.
На уровне объектов - ещё LOD. Например, когда рассчитывается пересечение луча с куклой игрока - сначала проверяется AABB вокруг этой куклы, если есть пересечение - только тогда уже проверяются составные части объекта. Если нужна ещё большая точность - то пересечения с полигонами проходят уже следующей стадией, только для тех полигонов, которые лежат в соответствующей составной части.
В общем, принцип получается такой - сначала по грубой проверке коллайдеры отсекаются большими группами, и следующий уровень детализации просчитывается уже с небольшим числом оставшихся.
Иллюстрация.

#7
12:21, 7 июня 2018

Чем-то похоже на бинарный поиск. Довольно неплохо, спасибо!)

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