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

Упрощение геометрии

#0
19:48, 22 июня 2015

чего есть хорошего по теме упрощения геометрии
в идеале нужно - раскидать 10-30 боксов так, чтобы максимально точно апроксимировать геометрию
модификатор MultiRes (в 3д максе) возможно тоже катит, только программно нужно, какие то описания алгоритмов хорошие (пока 1 пейпер годный нашел только)
возможно что-то с вокселизацией меша есть
+ хочется удалить всякие дыры в меше (вроде окон в стене)
+ как-то общий объем сохранить

#1
15:17, 1 июля 2015

В общем случае различные иерхические структуры, хоть R-tree, могут сгенерировать боксы, которые относительно оптимально покроют меш.
А вообще упрощение геометрии/симплификация и накидать боксы - это немного разные вещи. Я бы не рекомендовал заниматься построение прогрессив меша в реалтайме.

#2
19:14, 1 июля 2015

Kashey
>Я бы не рекомендовал заниматься построение прогрессив меша в реалтайме.
не, в рилтайме не планируется... предрассчет

симплификацию попробывал (MultiRes в максе) - что-то совсем плохо... возможно пойдет, но нужно свой алгоритм писать c кучей каких-то своих эвристик
с деревьями тоже не слишком понятно
- во-первых сложно с наклонными поверхностями
- потом не слишком понятно как ячейки объединять - хочется объединять занятые ячейки в одну, при этом что делать если встретили пустую маленькую ячейку на пути
надо побывать разные варианты
может правда кто-то похожее уже делал

вот, нашел что то похожее. Но мало написано, зато есть гора кода.

#3
19:59, 1 июля 2015

А какая итоговая цель - графика, физика, что-то другое?
Боксы должны быть outer(как обычно) или можно inner(как в примере по ссылке)?

#4
21:30, 1 июля 2015

Kashey
>А какая итоговая цель
оптимизация колижена для физики
сейчас - очень детализированный статик-меш (с которым идет колижн), этих мешей много... в общем - излишне ресурсоемко
пайплайн не хочется усложнять (делать ручками колижн), поэтому нужно упростить геометрию автоматически
в принципе сойдет и меш, но нужно сократить количество треугольников раз в 10
либо наставить коробок, чтобы примерно меш аппроксимировать...

>Боксы должны быть outer(как обычно) или можно inner(как в примере по ссылке)?
ни то, ни то
новая геометрия может как захватывать кусочки пустого пространства так и не полностью содержать текущую геометрию
условно - визуально хорошо аппроксимировать текущую геометрию

#5
21:48, 1 июля 2015

Такие вещи обычно ручками на уровне дизайнера рисуются. А под мешами подразумеваются монстры (которых много, которые высоко и "детально" полигональные, которые двигаются) или здания/уровни?
В среднем меша - внешний и внутренний. Оба низкополигональные, или вообще не полигональные - есть решения и через OOBB и даже через metaballs.
Не-хит в первый - значит вообще не попали в фигуру, хит во второй - точно попали. Иначе в "среднем", нормальном меше можно искать нужную точку.
Эх, хренова для физики работать с полигонами, не аналитические поверхности :(

#6
22:27, 1 июля 2015

Kashey
>Не-хит в первый - значит вообще не попали в фигуру
все сильно хуже) это не для трассировки луча, а для колижена & симуляции)

>...или здания/уровни?
это они !

>Эх, хренова для физики работать с полигонами, не аналитические поверхности :(
угу, вот и надо заоптимизировать

хочется подсобирать информации, прежде чем свое писать - кидаем ссылки если есть интересное по теме

#7
23:26, 1 июля 2015

"Convex Hull Covering of Polygonal Scenes for Accurate Collision Detection in Games"
https://www.cs.sfu.ca/~haoz/papers.html

А можно забить на боксы, и как этот чувак хейтмапы делать
http://www.youtube.com/watch?v=kYatkTM4hJw

#8
20:39, 2 июля 2015

Battle Angel Alita
многоуровневый hf думаю да, но есть куча ситуаций с не очевидным решением
- как уровни выделить... ну вот есть полуразрушенное здание, все изрезанное... если трассировать сверху - то можем получить 0-5 пересечений и что с ними делать не очень понятно
- надо еще разобраться умеет ли физ движок какие то нерегулярные hf рассматирвать... ну например если мы в серединке не хотим колизиться с группой полигонов или сбоку вырезать
- что делать со всякими колонами, получаем большую горку
- что со стенами которые условно по синусоиде могут быть нарезаны
ну и т.д. - много случаев где все очень спорно...

с конвексами вроде как более интересно получается
- есть алгоритмы всякие уже, по convex decomposition гугл выдает много интересного
- если не получается разрезать не небольшое количество конвексов (вороным например - много занятого пустого пространства получаем), то можно нарезать на достаточно большое число мелких конвексов, которые потом объединить в несколько больших (которые могут пересекаться даже)

#9
18:39, 6 июля 2015

Если препроцессинг - можно попробовать "в лоб".
1. Создаем 3д массив 100x100x100 (x1bit). Или oct-tree
2. Рендерим в него геометрию (трасировка 10000 лучей)
3. Там где "не пусто" - увеличиваем точность, трасиуем еще раз
4. На выходе у нас матрица "входов" и "выходов" лучей через предметы. Остается только ее заполнить "квадратиками" нужного размера.
5. На квадратики надо применить что-то типа 3D RLE, в общем обьединить те, что рядами стоят.

Что-то типа иеархии BoundingBox, в том числе данные по уровню можно хранить в oct-tree. Для физики сойдет, только не факт что будет лучше.

#10
18:58, 6 июля 2015

simplygon

#11
20:13, 7 июля 2015

Kashey
>На квадратики надо применить что-то типа 3D RLE, в общем обьединить те, что рядами стоят.
ну вот собственно тут интересней всего,
вокселизация геометрии это ладно - как быть например с наклонными крышами? или там - скос разрушенной стены и т.п.
я не в том смысле что решения в голове нет - оно просто чудовищное и требует много итераций в духе - проверить одну формулу, потом другую, параметры подергать - все проверять надо в общем

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

Тема в архиве.