400 likes | 561 Views
Лекция 2 . Упрощение сеток. Высокопроизводительные методы геометрического моделирования. Михаил Бессмельцев к.ф.-м.н . Ольга Нечаева. Simplification Упрощение. 300. 12,000. 2,000. error. Зачем упрощать сетки?. Уменьшать количество информации для передачи и хранения сеток
E N D
Лекция 2. Упрощение сеток Высокопроизводительные методыгеометрического моделирования Михаил Бессмельцев к.ф.-м.н. Ольга Нечаева
SimplificationУпрощение 300 12,000 2,000
error Зачем упрощать сетки? • Уменьшать количество информации • для передачи и хранения сеток • Ускорять рендеринг (отрисовку) • Контролировать разрешение модели
Level of Detail (LOD)Уровень Детализации • Подробная сетка для близких объектов • Грубая для далёких
13,133 ver Mn Mc1 Mc2 Mc3 10,103 ver 8903 ver 503 ver Mn Mc1 Mc2 Mc3 M0 503 ver 489 ver 13,133 ver 10,103 ver 8903 ver Progressive MeshesПрогрессивные сетки • Упрощать за один шаг • Приоритет: качество • Упрощать постепенно (Прогрессивные сетки) • Приоритет: скорость
Progressive MeshesПрогрессивные сетки • Hoppe, 1996 • Подробная сетка - это самая грубая сетка + история, как с ней такое сделали (вся последовательность операций упрощения)
Качество сеток (например, углы) Mn (12,946 faces) 1,070 faces PM (200 faces) PM (1,000 faces) 192 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 алгоритмы в общем случае не сработают • Рекурсивно разбивать дырку • Следить за качеством получаемой триангуляции • Триангуляция может не сработать • Тогда не удаляем вершину
Плюсы и минусы • Эффективный • Легко запрограммировать и использовать • Немного параметров для настройки • Неплохая аппроксимация • Работает на очень больших сетках • Выбирает из начального мн-ва вершин (не двигает) • Ошибка не ограничена • Т.к. ошибка меряется только локально
Где и как используются структуры данных для сеток? • Операция упрощения: коллапс ребра • Мера ошибки: расстояние, псевдо-глобальное • Также упрощает топологию
Мера расстояний: Квадрика • Найти точку, ближайшую к множеству плоскостей • Сумма расстояний до множества плоскостей – это квадратичная форма – а значит, у нее есть минимум
KP = Мера расстояний: Квадрика • Плоскость • Ax + By + Cz + D = 0, где A2 + B2 + C2 = 1 • p = [A, B, C, D], v = [x, y, z, 1], v pT = 0 • Выражается в виде квадратичной формы p(v) = (vpT)2 = (vpT) (p vT) = v(pTp) vT= v KP vT
Расстояние до множества плоскостей • После того, как v1и v2сливаются в v, • Qv Qv1+Qv2 • Псевдо-глобальное • Первую сетку/поверхность храним всегда
Слияние двух вершин • Цель: Пусть дано ребро e = (v1,v2), найти вершину v = (x,y,z,1) «слияния», которая минимизирует функцию (v): /x = /y = /z = 0 • Для этого нужно решить следующую СЛУ: • Если решения нет, то выбираем середину
Слияние двух вершин • Выбирать ребра из сетки • Или вершины, которые находятся близко – с заданным порогом
Алгоритм • Посчитать QVдля всех вершин сетки • Найти все нужные пары вершин • Для каждой нужной пары (v1,v2) вычислить оптимальную вершину для слияния и её ошибку(v) • Разместить все пары в очереди с приоритетами (в соответствии с (v)) • Пока не выполняется условие останова • Склеить ребро (v1,v2) с наименьшей ошибкой в v • Обновить очередь
Пример Dolphin (Flipper) Original - 12,337 faces 2,000 faces 300 faces (142 vertices)
Тоже пример • Упрощение сеток 300 12,000 2,000
Плюсы и минусы • Ошибка ограничена • Можно упрощать топологию • Получаются сетки высокого качества • Довольно эффективный • Проблемы с границами • Добавляет вершины, которых не было в оригинальной сетке
Вопросы? • Вся информация по спецкурсу + презентации + текущие баллы выкладываются на http://aitricks.com/ru/research/course