ПрограммированиеПодсказкиГрафикаГрафика

Решение проблемы разрывов при визуализации ландшафтов с LOD - уровнями

Автор:

Простейший способ избежать разрывов ландшафта на границе различных уровней детализации.

Примечание: данный метод можно использовать «для начала», а решать проблему все-таки более правильными методами (доп. треугольники, и т.д.)

Суть сей тривиальной проблемы демонстрируют следующие два изображения.

Крэки на ландшафте (Texture) | Решение проблемы разрывов при визуализации ландшафтов с LOD - уровнями   
Крэки на ландшафте (wireframe) | Решение проблемы разрывов при визуализации ландшафтов с LOD - уровнями

Как видно, на участке с более высокой детализацией тот же фрагмент представлен уже не одним треугольником, а парой — отсюда разрывы в ландшафте или как их еще называют «крэки».

Традиционно для «склеивания» ландшафта предлагают стягивать вершины или производить какие-либо еще дополнительные действия.

Мое решение состоит в усреденении Z-координаты граничных вершин (A1+A2)/2.

Крэки  на ландшафте (метод усредения) | Решение проблемы разрывов при визуализации ландшафтов с LOD - уровнями

Плюсы:
  - не нарушается строение патчей,
  - нет необходимости что-либо переписывать в коде отрисовки/формирования ландшафта.

Минусы:
  - небольшое количество вырожденных вершин,
  - из-за ошибки усреднения на вещественных операциях (A1+A2)/2 иногда появляются пиксельные артефакты — 'мушки', впрочем, проблема эта решается за счет использования вещественных чисел большей точночти или дискретного представления Z-координаты (в целых числах).

#LOD, #terrain

12 октября 2009

Комментарии [139]

Страницы: 1 2 39 10 Следующая »
#1
23:16, 13 окт 2009

На чём усредняешь? на GPU или на CPU?

#2
9:23, 14 окт 2009

усреднение Z в пространстве камеры или в системе координат ландшафта?

#3
9:23, 14 окт 2009

оффтоп: ух-ты! когда ж это было-то??? уже и забыл)) все равно приятно, что приняли наконец-то)

на цпу конечно.
Один раз, при генерации/загрузке патчей

правка: в системе координат ландшафта, разумеется.

#4
9:27, 14 окт 2009

fanat
а на резком переходе сравнивал ? скажем, резкий склон ?

#5
9:29, 14 окт 2009

а в чем проблема? на скринах все отражено.

замечательно работает. ни я один так делал

#6
9:33, 14 окт 2009

Ниччего непонятно!
Что такое А1 и А2?
Как введена система координат? (т.е. в какую сторону "торчит" ось Z)

Очевидным решением проблемы представляется корректировать координаты (все, а не только Z) каждой второй вершины подробной сетки (а именно той, напротив которой нет вершины менее подробной сетки) так, чтобы 3 вершины, граничащие с единственным ребром менее подробной сетки, лежали на одной прямой.
В чем недостаток этого очевидного подхода?
Чем предложенное решение отличается от него?
И какие это дает преимущества?

#7
9:34, 14 окт 2009

а если стык 4 к 1 ?

#8
10:46, 14 окт 2009

ну видимо (A1 + A2) / 4 для первой и (A1 + A2) * 3 / 4 для второй. чего сложного то.

#9
11:20, 14 окт 2009

иллюстрация к подсказке. (откопал:-)

http://www.gamedev.ru/files/?id=46920

P.S. '0', '9' - переключение режимов текстурирование/сетка

правка: я дико извиняюсь, но там кроме фпс и положения солнца прочая инфо некорректна (я там патчи считал, что ли, не помню)
так что кнопки работают, но инфо не видно( попробую исходник перекомпилить, если надо.


Надо?

#10
11:26, 14 окт 2009

да, было бы интересно посмотреть, и еще там V - спускаться вниз, а есть кнопка вверх? или можно добавить? :) чтобы видеть сверху большую территорию.

да, есть еще артефакты - прозрачные пиксели :) иногда проскакивают.

#11
11:36, 14 окт 2009

вверх - 'F'

артефакты - да, есть. Минус первый.
Они и в морровинде есть.

Причина - недостаточная точность вещественного представления числа.

правка: сейчас перезалью ...

все свежий билд

иллюстрация к подсказке

и еще правка - добавил описание к файлу ('0','9')

#12
11:54, 14 окт 2009

fanat
> http://www.gamedev.ru/files/?id=46920
Как wireframe отключить?

#13
11:54, 14 окт 2009

X512
'0'

#14
12:08, 14 окт 2009

сверху как решето)

Страницы: 1 2 39 10 Следующая »
ПрограммированиеПодсказкиГрафикаГрафика

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