2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++, трассировка лучей: динамическая дискретизация
Сообщение01.03.2017, 22:20 
Аватара пользователя


31/12/13
148
Моделируется воздействие осколочного поля на некий объект, представленный геометрическими примитивами.
Поле в данный момент задаётся множеством векторов — направлений разлёта. Каждое направление разлёта — маленький участок пространства в который разлетается поток осколков с некоторой плотностью и скоростью. Сейчас количество направлений разлёта постоянно. Имеем overkill на малых расстояниях: в предельном случае тестируем все направления. И недостаток разрешения на очень больших расстояниях. Дополнительно есть ускоряющая структура типа quad tree, которая позволяет быстро отбросить большую часть лучей на больших дистанциях основываясь на их угловых координатах (зенитный и азимутальный углы).
Думается, что улучшить код можно изменяя дискретизацию поля(количество направлений разлёта) в зависимости от расстояния до трассируемого объекта: если цель в 100 метрах от точки подрыва, то генерируешь очень подробную сетку в очень маленьком телесном угле в направлении цели. Если объект совсем рядом, генерируешь сетку с меньшим разрешением но в большем телесном угле.
В таком случае направление разлёта уже не представить вектором, это некая площадная фигура(разлетается в неком телесном угле), иначе как его доразбивать.
Как это сделать? С учётом того, что ускоряющую структуру придётся оставить, ведь чаще всего объект занимает очень маленький телесный угол. Получается, доразбитые направления нужно заново погружать в quad tree, чтобы не трассировать их все, а только часть.

 Профиль  
                  
 
 Re: C++, трассировка лучей: динамическая дискретизация
Сообщение05.03.2017, 18:04 
Аватара пользователя


07/02/12
1438
Питер
А если натянуть сетку на шар-360, и трассировать ячейки квадро-деревом, уходя в глубину только в там, где плотность потока влезает в допустимое окно, остальное обрезать? Где слишком большой поток (близко) - все убито, трассировать (уточнять детализацию) не за чем. Где слишком маленький (слишком далеко) - все цело, тоже дальше трассировать не за чем. Плюс всякие костыли с зенитными углами.

 Профиль  
                  
 
 Re: C++, трассировка лучей: динамическая дискретизация
Сообщение05.03.2017, 19:34 
Аватара пользователя


08/08/14

991
Москва
А может трассировать по поверхности цели, какая плотность осколков поилетит сюда.

 Профиль  
                  
 
 Re: C++, трассировка лучей: динамическая дискретизация
Сообщение14.03.2017, 02:30 
Аватара пользователя


07/02/12
1438
Питер
levtsn, на открытой и сложной местности это будет еще менее эффективным, чем простой трейсинг всвязи с огромной площадью.

 Профиль  
                  
 
 Re: C++, трассировка лучей: динамическая дискретизация
Сообщение20.08.2017, 14:28 
Аватара пользователя


31/12/13
148
Сейчас пробую реализовать следующим образом:
Всё пространство разлёта бъётся на сектора $2°\times2°$. В дерево квадрантов погружаются уже не лучи-направления разлёта, а четырёхугольники, вершины которых являются углами секторов, т.е., если это визуализировать, то будет шарик, поверхность которого аппроксимирована четырёхугольниками. Теперь от ускоряющей структуры будем иметь уже не индексы лучей-направлений разлёта, а секторов, далее, в зависимости от расстояния от точки разлёта до ограничивающего цель прямоугольника (AABB), в пределах секторов генерируется необходимое количество лучей. В таком случае имеем, что при небольшом расстоянии дерево выдаёт много индексов секторов, но плотность в каждом требуется невысокая, на большом расстоянии картина противоположная.
Пока не очень понимаю как учесть искажения плотности потока в пределах одного сектора, когда он находится близко к полюсам. С другой стороны форма сектора дополнительно искажается, когда к скорости потока осколков в статике прибавляется произвольно направленный вектор скорости снаряда\бч и аккуратный четырёхугольник превращается в нечто.
Вот как выглядит визуализация дерева:

(Оффтоп)

По диагонали видно уплотнение дерева, в этих направлениях разлетается основаная масса осесимметричного корпуса -- цилиндрическая часть
Изображение

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group