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

Anisotropic shading

#0
13:16, 6 авг. 2019

Здравствуйте. Познакомился с анизатропным способом написания шейдера. Нашёл такую формулу:
dl = T * L;
de = T * E;
S = Ls * Ms * (dl * de + (sqrt(1 - dl*dl)) * (sqrt(1-de*de))^SH;

T - касательный вектор;
L - направление света;
E - направление камеры;

Применил данную формулу

  vec3 ambient = vec3(0);
    vec3 diffuse = vec3(0);
    vec3 specular = vec3(0);
    color = texture(samp, fragmentParams.TexCoord);
    ambient = material.ambient.rgb * directionLight.ambient.rgb * material.ambient.a * directionLight.ambient.a;
  
    vec3 e = vec3(0, 0, -1);
  
    float notInShadow = CalcDirectionShadowFactor();
    if(notInShadow)
    {
      float dl = dot(e, normalize(directionLight.direction));
      float de = dot(e, normalize(-fragmentParams.WorldPosition.xyz));
      diffuse = material.diffuse.rgb * directionLight.diffuse.rgb * material.diffuse.a * directionLight.diffuse.a * max(dot(directionLight.direction, fragmentParams.Normal), 0) * notInShadow;
      specular = material.specular.rgb * directionLight.specular.rgb * material.specular.a * directionLight.specular.a * pow(dl*de + sqrt(1. - dl*dl) * sqrt(1. - de*de), 128)* notInShadow;
    }
    color.rgb = specular;

но specular ведёт себя неправильно. С Phong Shading всё работает
Может кто-нибудь подсказать, что я неправильно сделал?

fragmentParams.WorldPosition = ViewWorldMat * pos;


#1
13:21, 6 авг. 2019

Natatem00
> но specular ведёт себя неправильно. С Phong Shading всё работает
> Может кто-нибудь подсказать, что я неправильно сделал?

T правильный ?

#2
13:41, 6 авг. 2019

innuendo
> vec3 e = vec3(0, 0, -1);
Конечно. Не видишь?

#3
13:43, 6 авг. 2019

Natatem00

RENDER MONKEY

#4
14:05, 6 авг. 2019

innuendo
> RENDER MONKEY
Если ты имел ввиду показать, как выглядит specular - то никак. Просто всё тёмное
Dark Anisotropic shading | Anisotropic shading

#5
14:06, 6 авг. 2019

Natatem00
там же есть нормальный пример про анизотропик

#6
14:22, 6 авг. 2019

Natatem00
> dot(e, normalize(-fragmentParams.WorldPosition.xyz));

оё

#7
14:46, 6 авг. 2019

innuendo
> оё
Позиция умноженная на ViewWorldMat равняется направлению камеры по отношению к вершине

#8
14:51, 6 авг. 2019

Natatem00

пиши в привычных N,L,V,H,T

#9
14:54, 7 авг. 2019

ну, чем закончилось?

#10
21:11, 8 авг. 2019

Natatem00
https://www.cs.utah.edu/~shirley/papers/jgtbrdf.pdf

Фонг тоже может быть анизотропным

#11
23:50, 15 авг. 2019

Natatem00

ну?

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