Размытие кубической карты

Любые идеи, как это сделать? Теперь у меня есть динамически сгенерированная кубическая карта, которую я использую в качестве текстуры отражения на торе.

Размытие каждой стороны по отдельности не поможет, верно? Из-за пикселей рядом с границей, которые не будут размыты соседями.

Может быть, мне сделать еще один FBO, связать его, «развернуть» кубическую карту на экране, применить базовый шейдер размытия, а затем разделить эту размытую текстуру на 6 сторон? Не уверен, как сделать "отдельную" часть.


person spacevillain    schedule 04.12.2010    source источник


Ответы (1)


Размыть кубическую карту? Это довольно сложно.

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

Если приближения достаточно, сделайте следующее.

  1. Создайте пустую кубическую карту назначения.
  2. Для каждой грани F вашего куба визуализируйте грань F и соседние пиксели с других 4 граней следующим образом:

     ___________
    |\         /|
    | \       / |
    |  \-----/  |
    |  |     |  |
    |  |  F  |  |
    |  |     |  |
    |  /-----\  |
    | /       \ |
    |/_________\|
    

    Количество соседних пикселей зависит от радиуса размытия.

  3. Примените свой любимый алгоритм размытия.
  4. Скопируйте F в целевую кубическую карту.
  5. Повторите 2-4 для каждого лица.
person Yakov Galka    schedule 04.12.2010
comment
Ничего себе... понимаю, что это может быть нужно для сферически корректного результата, но разве это отличимо от простого размытия по Гауссу на карте плоского куба с особым случаем вычисления соседних пикселей на швах? - person Kos; 04.12.2010
comment
@Kos: второе предложение не сферически правильное, оно будет выглядеть более размытым в середине лиц. Также это самый простой способ обработки соседних пикселей на швах. - person Yakov Galka; 04.12.2010
comment
Я понимаю, что это неправильно, мой вопрос в том, что это заметно неверно. Например, модель зеркального освещения Фонга-Блинна неверна, но выглядит хорошо. - person Kos; 04.12.2010
comment
Вы можете использовать адаптивное ядро ​​размытия, которое становится больше к углам. Или, что еще лучше, сделать ядро ​​размытия проекцией диска гауссовского распределения обрабатываемого в данный момент пикселя на грани кубической карты. - person datenwolf; 04.12.2010
comment
@datenwolf Почему бы не добавить это в ответ? - person Felix K.; 08.09.2014
comment
@FelixK.: Потому что мои личные стандарты требуют, чтобы тогда была реализация. И в зависимости от размера кубической карты подход, основанный на БПФ, может быть еще более эффективным (существуют реализации CUDA и OpenCL для БПФ, которые можно было бы использовать). - person datenwolf; 08.09.2014