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
1446
Питер
А если натянуть сетку на шар-360, и трассировать ячейки квадро-деревом, уходя в глубину только в там, где плотность потока влезает в допустимое окно, остальное обрезать? Где слишком большой поток (близко) - все убито, трассировать (уточнять детализацию) не за чем. Где слишком маленький (слишком далеко) - все цело, тоже дальше трассировать не за чем. Плюс всякие костыли с зенитными углами.

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


08/08/14

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

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


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

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


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

(Оффтоп)

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

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

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



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

Сейчас этот форум просматривают: granit201z


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

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