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

SSAO

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 38 9 Следующая »
#0
16:26, 20 мая 2008

Пытаюсь по этой статье сделать на ОпенГЛе ССАО... Юзаю рендерманки...
Собственно делаю вот что:

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 файлик...


#1
16:30, 20 мая 2008

Executor


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

#2
16:33, 20 мая 2008

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; 
      }
   }

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

#3
16:40, 20 мая 2008

Executor


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

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

#4
16:55, 20 мая 2008

innuendo
>float3 centerNormal = Normal_tex.Sample( Linear_Sampler, newUV ).xyz;
>это выборка из TBO в DX ?

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

#5
17:05, 20 мая 2008

Executor


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

#6
17:24, 20 мая 2008

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

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

#7
17:36, 20 мая 2008

Executor

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

какой тип у newUV ?

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

#8
17:40, 20 мая 2008

innuendo
>какой тип у newUV ?
>скаляр или вектор?

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

vec2 == float2

#9
18:00, 20 мая 2008

Executor


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

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

#10
18:13, 20 мая 2008

Executor + All
Извеняюсь что вклинивюсь, просто совсем недавно пробовал сделать прилисный ССАО и у меня так ничего и не вышло. Возможно потому, что пытался вложиться во 2-е шейдеры, а может и по корявости рук.
В общем у меня вопрос такой по какому из алгоритмов лучше расчитывать затенения? Текстуру цвета, глубины и нормалей получил дано, а вот затенить это дело прилично так и ре смог :(

#11
18:22, 20 мая 2008

Breezy
Сам бы хотел знать... :) Эта статья единственное место где более менее понятно написано чо делать надо, хотя ничо и не работает... :)

#12
18:33, 20 мая 2008

Executor
Я пробовал следующие варианты, возможно они мне показались кривыми изза малого числа выборок у шейдера(юзаю 2-е)

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

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

#13
18:40, 20 мая 2008

Executor

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

#14
19:53, 20 мая 2008

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

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

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

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