Высокопроизводительные методы геометрического...

Post on 03-Jan-2016

51 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Лекция 2 . Упрощение сеток. Высокопроизводительные методы геометрического моделирования. Михаил Бессмельцев к.ф.-м.н . Ольга Нечаева. Simplification Упрощение. 300. 12,000. 2,000. error. Зачем упрощать сетки?. Уменьшать количество информации для передачи и хранения сеток - PowerPoint PPT Presentation

TRANSCRIPT

Высокопроизводительные методы геометрического моделирования

Михаил Бессмельцев. .- . . кф мн Ольга Нечаева

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

top related