Войти
ПрограммированиеФорумГрафика

Плавный переход между текстурами террейена

#0
19:11, 17 мая 2009

  Добрый день! Пишу движок с ландшафтом, с динамической подгрузкой текстур и карт высот (ака Google Earth), т.е. ландшафт хранится как несколько сотен текстурок 512х512, которые стримятся с диска в кэш по мере надобности. Почти всё самое сложное позади. Теперь перехожу к косметическим вещам.

  Первый вопрос - как сделать плавный переход цвета (и бампа) на стыке двух текстур. Поскольку использую режим GL_CLAMP_TO_EDGE, в результате цвета крайних текселей экстраполируются к границе текстуры (см. скрин). А надо бы чтобы происходила интерполяция цвета между примыкающими друг к другу крайними текселями соседних текстур. Как можно по-халявнее это реализовать? Вижу два варианта:
  - хранить текстуры не 512х512, а 514х514, т.е. чтобы по периметру текстуры были пиксели из соседних текстур. А при рендере подправить текстурные координаты. Но тогда всё равно будут артефакты на стыке двух кусков ландшафта с разной детализацией (в разных местах планеты может быть разная детализация).
  - интерполировать тексели границы в шейдере, но тогда в него придётся передвать много текстур, да и левые проверки делать.

scr00022 | Плавный переход между текстурами террейена

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

Третий вопрос - как сделать плавное переключение LOD-ов ландшафта. А то при полёте видно как вдали колбасит горы - переключаются уровни детализации. Делать интерполяцию высоты в шейдере не получится - рельеф строится на CPU при загрузке и хранится в статичном VBO.


#1
19:13, 17 мая 2009

Это у тебя проблемма с нормалями. Когда ты их вычисляешь/сглаживаешь - надо учитывать соседнюю карту

#2
20:05, 17 мая 2009

Sergio666
Нет, нормали вычисляются правильно. Вот скрин с планеты без бампа:
scr00023 | Плавный переход между текстурами террейена

ПрограммированиеФорумГрафика

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