Upload
akeem-everett
View
57
Download
4
Embed Size (px)
DESCRIPTION
Лекция 2 . Упрощение сеток. Высокопроизводительные методы геометрического моделирования. Михаил Бессмельцев к.ф.-м.н . Ольга Нечаева. Simplification Упрощение. 300. 12,000. 2,000. error. Зачем упрощать сетки?. Уменьшать количество информации для передачи и хранения сеток - PowerPoint PPT Presentation
Высокопроизводительные методы геометрического моделирования
Михаил Бессмельцев. .- . . кф мн Ольга Нечаева
2. Лекция Упрощение сеток
SimplificationУпрощение
12,000 2,000 300
?Зачем упрощать сетки Уменьшать количество информации
для передачи и хранения сеток Ускорять рендеринг (отрисовку) Контролировать разрешение модели
erro
r
Level of Detail (LOD) Уровень Детализации
Подробная сетка для близких объектов Грубая для далёких
Progressive Meshes Прогрессивные сетки
Упрощать за один шаг Приоритет: качество
Упрощать постепенно (Прогрессивные сетки) Приоритет: скорость
Mn 13,133 ver
Mc1
503 ver8903 ver
Mc2 Mc3
10,103 ver
Mn
13,133 ver
M0
503 ver 489 ver8903 ver10,103 ver
Mc1 Mc2 Mc3
Progressive Meshes Прогрессивные сетки
Hoppe, 1996
Подробная сетка - это самая грубая сетка + история, как с ней такое сделали (вся последовательность операций упрощения)
( , )Качество сеток например углы
Mn (12,946 faces)
192 faces 1,070 faces PM (200 faces) PM (1,000 faces)
Методология
Методология Упрощение – последовательность локальных
операций Каждая операция затрагивает только несколько соседних
вершин Каждая операция влияет на ошибку аппроксимации Каждый раз находим и применяем операцию, которая
влечет к наименьшей ошибке
: Операции удаление вершины Удаление вершины
v = v-1; f = f -2;
Новое множество вершин – подмножество старого
Operations: Edge Collapse: Операции Коллапс ребра
Коллапс ребра (Edge collapse) v = v -1; f = f - 2;
Вершины двигаются!
Operations: Pair contractionОперации: Слияние пары
Вершины двигаются!
Контроль ошибки Локальная ошибка
Быстро считать Нужно мало памяти Можно накапливать
Глобальная ошибка: сравнить что получилось с тем, что было Медленно Зато точнее контролируем ошибку Можно использовать в качестве условия останова Необходимо помнить начальную сетку
Измерение ошибки упрощения Меры
Расстояние до плоскости Кривизна
Обычно аппроксимируется Средняя плоскость Дискретная кривизна
Основной алгоритм упрощения Repeat
Найти элемент с минимальной ошибкой Выполнить операцию (удаление или слияние) Пересчитать ошибку
Пока не достигнут нужный размер / качество сетки
Детали реализации Структура данных сетки
Такая, чтобы было просто обходить соседей
Очередь с приоритетами (например, куча) Быстрый доступ к элементу с минимальной ошибкой
В случае кучи: Θ(1) для нахождения максимума O(log n) для извлечения максимума
Быстрое добавление Для кучи: O(log n)
Алгоритм удаления вершин
Алгоритм удаления вершин Операция упрощения: удаление вершины Мера ошибки: расстояние до плоскости Можно предохранять особенности сетки
Сохранение особенностей модели Оригинал (1972 вершины):
Сохранение особенностей модели Результат упрощения (200 вершин)
Сохранение особенностей модели Результат умного упрощение (те же 200 вершин)
Топологически корректный алгоритм упрощения
Schroeder et al. 1992
Алгоритм удаления вершин Исследовать локальную топологию/геометрию Посмотреть, какие вершины можно удалять Повторять
Удалить вершину Триангулировать образовавшуюся дырку Обновить ошибку нужных вершин
Пока не выполнено условие упрощения (например, на размер сетки)
Локальная топология и геометрия
ПростаяПростая
ГраничнаяГраничная
СложнаяСложная
ВнутренняяВнутренняя
УгловаяУгловая
Локальная топология и геометрия Простые вершины можно еще
классифицировать: if (двугранный угол между соседними
треугольниками > FeatureAngle), then их общее ребро – характерное ребро ВнутренняяВнутренняя
Если вершина принадлежит двум характерным рёбрам, то это внутренняя вершина.
Если трём или больше, то это угловая вершина.
УгловаяУгловая
Критерий удаления Пользователь задаёт Emax
Простая вершина Расстояние от неё до средней плоскости < Emax
Граничная вершина Расстояние от вершины до нового граничного ребра <
Emax
Расстояние
Расстояние
Триангулирование дырки После удаления вершины образуется неплоская дырка
(непланарный цикл) 2D алгоритмы в общем случае не сработают Рекурсивно разбивать дырку Следить за качеством получаемой триангуляции
Триангуляция может не сработать Тогда не удаляем вершину
Плюсы иминусы Эффективный Легко запрограммировать и использовать
Немного параметров для настройки Неплохая аппроксимация Работает на очень больших сетках - ( Выбирает из начального мн ва вершин не
)двигает
Ошибка не ограничена Т.к. ошибка меряется только локально
Алгоритм коллапса рёбер
Где и как используются ?структуры данных для сеток
Операция упрощения: коллапс ребра Мера ошибки: расстояние, псевдо-
глобальное Также упрощает топологию
: Мера расстояний Квадрика Найти точку, ближайшую к
множеству плоскостей
Сумма расстояний до множества плоскостей – это квадратичная форма – а значит, у нее есть минимум
: Мера расстояний Квадрика Плоскость
Ax + By + Cz + D = 0, где A2 + B2 + C2 = 1 p = [A, B, C, D], v = [x, y, z, 1], v pT = 0
Выражается в виде квадратичной формы p(v) = (v pT)2 = (v pT) (p vT) = v (pTp) vT = v
KP vT
2
2
2
2
DCDBDAD
CDCBCAC
BDBCBAB
ADACABA
KP =
Расстояние до множестваплоскостей
Tv
T
planes(v)pp
planes(v)p
Tp
planes(v)pp
vQv
v)K( v
)vK (v
)v()v(
После того, как v1 и v2 сливаются в v,
Qv Qv1+Qv2
Псевдо-глобальное Первую сетку/поверхность
храним всегда
Слияние двух вершин Цель: Пусть дано ребро e = (v1,v2), найти вершину
v = (x,y,z,1) «слияния», которая минимизирует функцию(v):
/x = /y = /z = 0 Для этого нужно решить следующую СЛУ:
Если решения нет, то выбираем середину
1
0
0
0
v
1000
qqqq
qqqq
qqqq
34333231
24232221
14131211
Слияние двух вершин Выбирать ребра из сетки Или вершины, которые находятся близко – с
заданным порогом
T
Алгоритм Посчитать QV для всех вершин сетки Найти все нужные пары вершин Для каждой нужной пары (v1,v2) вычислить
оптимальную вершину для слияния и её ошибку (v) Разместить все пары в очереди с приоритетами (в
соответствии с (v)) Пока не выполняется условие останова
Склеить ребро (v1,v2) с наименьшей ошибкой в v Обновить очередь
ПримерDolphin (Flipper)
Original - 12,337 faces
2,000 faces300 faces (142 vertices)
Тоже пример Упрощение сеток
12,000 2,000 300
Плюсы иминусы Ошибка ограничена Можно упрощать топологию Получаются сетки высокого качества Довольно эффективный
Проблемы с границами Добавляет вершины, которых не было в оригинальной
сетке
?Вопросы Вся информация по спецкурсу + презентации +
текущие баллы выкладываются на http://aitricks.com/ru/research/course