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

Помогите найти алгоритмы полноэкранного сглаживания (постэффект, glsl) (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#15
17:20, 15 июля 2018

vindast
> msaa x4 пихает за щеку всем этим txaa и ctaa с такой силой что они не нужны, а
> если появляется быстро двигающийся обьект...
Быстродвижущийся объект и сглаживать то особо не надо. Пользователь не успеет заметить там каких либо лесенок.


#16
19:02, 15 июля 2018

NVIDIA TXAA
Алгоритм использует альтернативный MSAA c фирменными временными фильтрами (temporal filters). Функционирует через проприетарную библиотеку.
Поддерживает DX11 и OpenGL4.1*, с SDK идут примеры. Требует карту скоростей (motion vectors), в SDK есть хелперы для ее получения.
Текущая версия 3.0 - документация, SDK

* - конкретно указанной версии нет, но в шейдерах из примера стоит версия 410

#17
8:08, 16 июля 2018

Daniil Petrov
> на максимальных настройках какое сглаживание самое качественное
SSAA скажем x64 и выше.

#18
8:15, 16 июля 2018

Daniil Petrov
> Я имею ввиду из стандартных реализаций :) а пока опытным путём выяснил:
А это практически из стандартных реализаций. Просто рендерь в текстуру 16К*16К, а потом ужимай до нужного тебе размера подходящий mip

#19
18:24, 17 июля 2018

MrShoor
> > 1) luma непонятная константа
> https://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
Спасибо за ликбез.
Почти разобрался с алгоритмом.

#20
21:30, 17 июля 2018

С частью кода предложенного IBets разобрался.

  //Координаты отсчитываются относительно центрального пикселя
    vec3 rgbM  = textureLod(tex, uv.xy                          , 0.0).xyz; //Центральный (текущий) пиксель
    vec3 rgbNW = textureLod(tex, uv.zw                          , 0.0).xyz; //Вниз влево 
    vec3 rgbNE = textureLod(tex, uv.zw + vec2(1,0) * rcpFrame.xy, 0.0).xyz; //Вниз вправо
    vec3 rgbSW = textureLod(tex, uv.zw + vec2(0,1) * rcpFrame.xy, 0.0).xyz; //Вверх влево
    vec3 rgbSE = textureLod(tex, uv.zw + vec2(1,1) * rcpFrame.xy, 0.0).xyz; //Вверх вправо


    vec3 luma = vec3(0.299, 0.587, 0.114); //Grayscale константа
  //Переводим всю выборку пикселей в grayscale (по сути взвешиваем выборку пикселей в grayscale)
    float lumaNW = dot(rgbNW, luma); 
    float lumaNE = dot(rgbNE, luma);
    float lumaSW = dot(rgbSW, luma);
    float lumaSE = dot(rgbSE, luma);
    float lumaM  = dot(rgbM,  luma);

  //Ищем минимальный вес пикселя из выборки
    float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));

  //Ищем максимальный вес пикселя из выборки 
    float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));

А вот дальше не понятно. Почему Dir задается таким выражением?

vec2 dir;
    dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
    dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));

И огромная куча магических чисел в скобках. Почему 1/3 и 2 /3 и тд. Объясните кто-нибудь.

vec3 rgbA = (1.0/2.0) * 
    (
        textureLod(tex, uv.xy + dir * (1.0/3.0 - 0.5), 0.0).xyz +
        textureLod(tex, uv.xy + dir * (2.0/3.0 - 0.5), 0.0).xyz
    );

    vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
        textureLod(tex, uv.xy + dir * (0.0/3.0 - 0.5), 0.0).xyz +
        textureLod(tex, uv.xy + dir * (3.0/3.0 - 0.5), 0.0).xyz);

#21
22:13, 17 июля 2018

vindast

((lumaNW + lumaNE) - (lumaSW + lumaSE)); //количество света вверху минус количество света внизу
((lumaNW + lumaSW) - (lumaNE + lumaSE)); //количество света слева минус количество света справа

> Почему 1/3 и 2 /3 и тд. Объясните кто-нибудь.
4 выборки вдоль направления dir на расстояние span. Все расстояние делится на 4 равных части. Если ты произведешь действия в скобках, то увидишь, что константы в скобках прерващаются в -0.5, -0.16(6), 0.16(6), 0.5. Нанеси эти числа на числовую прямую, и увидишь, что они идут с равномерным интервалом.

#22
1:09, 18 июля 2018

Объясните это выражение, пожалуйста.

float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
Не ясно почему там идет сложение.
#23
1:14, 18 июля 2018

vindast
> Объясните это выражение, пожалуйста.
Это я не могу объяснить по коду шейдера. Нужно читать пейпер, чтобы понять, откуда там такая функция взялась.

#24
1:18, 18 июля 2018

IBets
> // FXAA code from:
> http://www.geeks3d.com/20110405/fxaa-fast-approximate-anti-aliasing-demo-glsl-opengl-test-radeon-geforce/3/
По ссылке к сожалению только демка, код и сравнения, а по алгоритму самому ничего нет.
Придется копошить оригинал.

#25
15:01, 18 июля 2018

ЕМНИП это фхаа версии 2. Причем результат получается от применения очень поганый. 3,11 же есть, он вполне сравним с мсаа 4 по качеству на максимальных настройках.

#26
2:41, 19 июля 2018

Нашел оригинальную доку, буду ее курить пока.

#27
3:30, 19 июля 2018

Код FXAA версии 3.11.

#28
11:41, 19 июля 2018

Asaq, самое первое сообщение темы. + выцепить код из кучи ifdef задачка, учитывая что там 1000 строк.

#29
12:37, 19 июля 2018

vindast
> выцепить код из кучи ifdef задачка, учитывая что там 1000 строк.
у меня есть урезанная версия использующая только glsl и максимальные настройки сглаживания.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумГрафика

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

Тема закрыта.