Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / SSAO

SSAO

Advanced: Тема повышенной сложности или важная.
Страницы: 1 2 38 9 Следующая »
ExecutorУдалёнwww20 мая 200816:26#0
Пытаюсь по этой статье сделать на ОпенГЛе ССАО... Юзаю рендерманки...
Собственно делаю вот что:

1) рендерю чайник, в текстуру "tex_color" сохраняется цвет
2) рендерю чайник, в текстуру "tex_normal" сохраняется нормаль
3) рендерю чайник, в текстуру "tex_position" сохраняется позиция
4) рендерю квад на весь экран, использую нормаль и позицию, сохраняю результат в текстуру "tex_ssao"
5) рендерю квад на весь экран, использую ссао и цвет, результат виден на экране (должен быть :))

Вообщемто вроде всё просто, но на шаге 4 просто чёрный экран (на 5 шаге темболее чёрный экран)... Что не так? Ктонить пробывал по этой статье делать?

Строчку
float3 centerNormal = Normal_tex.Sample( Linear_Sampler, newUV ).xyz;
на ГЛСЛ перевёл как
vec3 centerNormal = texture2D(tex_normal, newUV).xyz;
правильно?

З.Ы. Могу выложить рендерманковский rfx файлик...

innuendoПостоялецwww20 мая 200816:30#1
Executor


newUV небось как int  ? :)

ExecutorУдалёнwww20 мая 200816:33#2
innuendo
Нет... newUV везде флоат...
vec2 newUV = texCoord + (TexelSizeX / 2.0) + (TexelSizeY / 2.0);

int в цикле есть:

   for (int x = -5; x < 6; x++)
   {
      for (int y = -5; y < 6; y++)
      {
         vec2 MoveUV = vec2(TexelSizeX * float(x), TexelSizeY * float(y)); // Тута!!!
         vec2 sampleUV = newUV + MoveUV;
         vec3 samplePos = texture2D(tex_position, sampleUV).xyz;
         vec3 toCenter = samplePos - centerPos;
         float Distance = length(toCenter);
         toCenter = toCenter / Distance;
         float centerContrib = saturate((dot(toCenter, centerNormal) - AOMinimumCrease) * SSAO_Bias);
         float rangeAttenuation = 1.0 - saturate(Distance);
         color += centerContrib * rangeAttenuation; 
      }
   }

Это может быть причиной? Заменил цикл на флоат, ничего не изменилось...

innuendoПостоялецwww20 мая 200816:40#3
Executor


float3 centerNormal = Normal_tex.Sample( Linear_Sampler, newUV ).xyz;

это выборка из TBO в DX ?

ExecutorУдалёнwww20 мая 200816:55#4
innuendo
>float3 centerNormal = Normal_tex.Sample( Linear_Sampler, newUV ).xyz;
>это выборка из TBO в DX ?

Это в шейдере ДХ, из чего это выборка я без понятия, видимо обычная выборка с текстуры, я ДХ незнаю...

innuendoПостоялецwww20 мая 200817:05#5
Executor


похоже это выборка из TBO
тогда newUV - это int координата в линейном буффере

ExecutorУдалёнwww20 мая 200817:24#6
innuendo
>похоже это выборка из TBO
>тогда newUV - это int координата в линейном буффере

Если буффер линейный, то он как минимум тогда будет float, а не float2...

innuendoПостоялецwww20 мая 200817:36#7
Executor

>>float3 centerNormal = Normal_tex.Sample( Linear_Sampler, newUV ).xyz;

какой тип у newUV ?

скаляр или вектор?

ExecutorУдалёнwww20 мая 200817:40#8
innuendo
>какой тип у newUV ?
>скаляр или вектор?

Я же в посте 2 написал какой...
vec2 newUV = texCoord + (TexelSizeX / 2.0) + (TexelSizeY / 2.0);

vec2 == float2

innuendoПостоялецwww20 мая 200818:00#9
Executor


Извини, перепутал с Load :)

как них в DX  всё запущено :)

BreezyПостоялецwww20 мая 200818:13#10
Executor + All
Извеняюсь что вклинивюсь, просто совсем недавно пробовал сделать прилисный ССАО и у меня так ничего и не вышло. Возможно потому, что пытался вложиться во 2-е шейдеры, а может и по корявости рук.
В общем у меня вопрос такой по какому из алгоритмов лучше расчитывать затенения? Текстуру цвета, глубины и нормалей получил дано, а вот затенить это дело прилично так и ре смог :(
ExecutorУдалёнwww20 мая 200818:22#11
Breezy
Сам бы хотел знать... :) Эта статья единственное место где более менее понятно написано чо делать надо, хотя ничо и не работает... :)
BreezyПостоялецwww20 мая 200818:33#12
Executor
Я пробовал следующие варианты, возможно они мне показались кривыми изза малого числа выборок у шейдера(юзаю 2-е)

1. Српавнение глубины без нормалей, в общем вариант кривой, работает только на мелкие обекты.
2. Сравнение глубин на основе нормалей, идейно должен пахать лучше, на практике ужасен.
3. Выборка и блюр в зависимости от глубины... к сожалению не оправдал моих ожиданий...

хотелось бы услышать как кто делал, именно принцип а не кусок кода...

innuendoПостоялецwww20 мая 200818:40#13
Executor

У тебя текстуры точно RGB16F ?

ExecutorУдалёнwww20 мая 200819:53#14
innuendo
>У тебя текстуры точно RGB16F ?

фз, я тоже думал может косяк в текстурах... В рендерманки вроде выставляешь другой формат, но не уверен что он действительно меняется...

Страницы: 1 2 38 9 Следующая »

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

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

2001—2018 © GameDev.ru — Разработка игр