Многообразие проявлений причинно-следственных связей в материальном мире обусловило существование нескольких моделей причинно-следственных отношений. Исторически сложилось так, что любая модель этих отношений может быть сведена к одному из двух основных типов моделей или их сочетанию.

Организация непрерывных LOD ландшафтов с использованием Адаптивных КвадроДерьев

Рис. 7. Vertex interpolation error. Когда вершина включена или выключена, меш меняяет форму. Максимальное изменение, получающееся при включении вершины показано пунктирной линией. Величина изменения есть разница между реальной высотой вершины (черная точка) и высотой ребра под ним (белая точка). Белая точка - это просто середина между 2 серыми точками. (Wolverene: Середина - так как мы рассматриваем измельчающиеся квадраты в quadtree и точка деления лежит ровно посередине).

Также есть другие влияющие факторы. К примеру, в [1] принимается во внимание направление между вершиной и точкой зрения. Идея заключается в screen space error (экранной ошибке) - интуитивно vertex error менее видима чем более вертикально данное направление. В [1] описана вся эта математика в деталях.

Но я не думаю что screen space error является хорошей метрикой по двум причинам: во-первых, он игнорирует текстурную перспективу и depth buffering errors - даже если вершина не движется на экране, т.к. она сдвигается строго пенпердикулярно к/от точки зрения, Z значение влияет на коррекцию перспективы так же как и depth-buffering. Во-вторых, точка зрения прямо вниз является как легким случаем для LOD ландшафтов, так и не типичным случаем.

На мой взгляд, нет смысла оптимизировать для нетипичного легкого случая. Случай, когда ось зрения более горизонтальна и большая часть ландшафта видима определяет наименьший framerate, и, следовательно, эффективность алгоритма.

Вместо screen-space geometric error я предлагаю делать подобный тест в трехмерном пространстве с ошибкой пропорциональной дистанции. Он включает только 3 величины: L1 норму вектора между вершиной и точкой зрения, vertex error и константный "порог детализации"(Threshold).

Vertex test:

L1 = max(abs(vertx - viewx), abs(verty - viewy), abs(vertz - viewz));

enabled = error * Threshold < L1;

На практике использование L1 нормы означает большую глубину делений вдоль диагоналей горизонтальной плоскости ландшафта. Я не смог заметить данный эффект глазом, так что я не думаю что об этом стоит беспокоиться. [4] и другие используют view-space-z вместо L1 нормы, что теоретически является даже более правильным чем истинная дистанция между вершиной и точкой зрения. Несмотря на это, L1 по-моему работает наилучшим образом и в [3] она тоже используется.

Можно использовать Threshold как регулятор подстройки скорость/качество, но он не имеет четкой геометричесой интерпретации. Грубо говоря, он означает: для данного растояния z, худшей ошибкой с которой я буду мирится будет z / Threshold. Конечно, вы можете произвести некоторые вычисления угла зрения и связать Threshold с максимальной пиксельной ошибкой, но я никогда не рассматривал его более чем значение для подстройки отношения качество/скорость.

Вот так работает включение вершин. Но что является более важным, как работает включение подквадратов во время Update()? Ответом является box test. Он задает следующий вопрос: рассматриваем выровненный по осям 3D Box, содержащий участок ландшафта (т.е. элемент quadtree), и знаем соответвующую ему максимальную vertex error всех вершин внутри. Может ли vertex enable test вернуть истину для какой-либо вершины из этого квадрата? Если да, то делим.

Прелесть этого метода в том, что делая BoxTest мы можем одним махом отсечь тысячи вершин. Это делает Update() полностью масштабируемым: стоимость его не зависит от размера всего набора данных, а лишь от размера данных, включенных в текущий LOD меш. И, как побочное явление, предпросчитанный вертикальный размер Bounding Box может использоватся для frustim culling. (примечание wolverene - координаты x и z мы уже знаем из выбора квадрата как элемента quadtree, т.е. для построения BoundBox нам надо знать лишь вертикальный его размер).

Box Test консервативен в том смысле что вершина, из-за которой Box Test вернул "Да" (т.е. необходимость деления) может находится на другой стороне bound box от ближней к точке зрения стороны bound box, и, таким образом, сама вершина может этот тест провалить. Но на деле это не влечет больших накладных расходов - несколько box test и vertex test.

Перейти на страницу: 1 2 3 4 5 6 7

Немного больше о технологиях >>>

Изо всех лошадиных сил
В 1765 году англичанин Джеймс Уатт изобрел паровую машину, положив начало длинной цепочке инноваций в двигателестроении. В 1860 году французский механик Этьен Ленуар разрабатывает первый поршневой двигатель внутреннего сгорания. В 1889 году швед Карл Густав Патрик Лаваль, соверш ...

Новый подход к методам химической очистки призабойной зоны ствола скважины при заканчивании открытым стволом
В скважинах, где традиционные методы их заканчивания непригодны по геолого-техническим и экономическим соображениям, в последние годы все больше используются современные системы заканчивания скважин открытым стволом. Проведенный авторами анализ применимости таких систем имеет н ...

Галерея

Tехнологии прошлого

Раскрытие содержания и конкретизация понятий должны опираться на ту или иную конкретную модель взаимной связи понятий. Модель, объективно отражая определенную сторону связи, имеет границы применимости, за пределами которых ее использование ведет к ложным выводам, но в границах своей применимости она должна обладать не только образностью.

Tехнологии будущего

В связи с развитием теплотехники ученые в прошлом веке пришли к простому, но удивительному закону, потрясшему человечество. Это закон (иногда его называют принцип) возрастания энтропии (хаоса) во Вселенной. technologyside@gmail.com
+7 648 434-5512