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

Нормали в GS

Страницы: 1 2 3 4 5 6 Следующая »
#0
22:28, 8 фев. 2020

Всем привет!

Подскажите пожалуйста, как коррекно нормали в GS посчитать?

Делаю так:

+ Показать

но во фрагментный шейдер не приходит цвет, а нормали вообще непонятно в каком пространстве.
На какую бы матрицу не умножал - получается ерунда. При движении камеры уплывает свет.

#1
22:42, 8 фев. 2020

А position в каком пространстве? Есть мнение, что его надо умножить на обратную матрицу проекции.

#2
22:58, 8 фев. 2020

Dimich
> А position в каком пространстве?
Судя по тому что без изменений передается в фрагментный, то в скринспейсе))

#3
23:21, 8 фев. 2020

eDmk
> Делаю так:
Вот тут:

  vec3 a = (gl_in[1].gl_Position - gl_in[0].gl_Position).xyz;
  vec3 b = (gl_in[2].gl_Position - gl_in[0].gl_Position).xyz;
Ты пытаешься получить.... непонятно что. Вычитаешь однородные координаты друг из друга, а потом просто выбрасываешь w на мороз? Это никакого смысла не имеет.

в gl_Position передавай не то, что получается от умножения coord*MVP, а то, что получается от умножения coord*MV например. И тогда в твоих a и b векторах будут именно вектора во ViewSpace, а не фиг пойми что.

В геометрическом тебе придется само собой делать так:

  gl_Position = gl_in[0].viewCoord * ProjectionMatrix;
  EmitVertex();

  gl_Position = gl_in[1].viewCoord * ProjectionMatrix;
  EmitVertex();

  gl_Position = gl_in[2].viewCoord * ProjectionMatrix;
  EmitVertex();

#4
1:22, 9 фев. 2020

MrShoor
> Ты пытаешься получить.... непонятно что. Вычитаешь однородные координаты друг
> из друга, а потом просто выбрасываешь w на мороз? Это никакого смысла не имеет.
Это данные из буфера вершин. В моем случае SSBO.
В нем лежат точки в мировых координатах. Как в буфер закинули, так и лежат.
Это геометрический шейдер ДО вертексного, а не ПОСЛЕ фрагментного ;)

На самом деле

gl_in[i].gl_Position
вообще ни на что умножать не надо.
Они в вертексный приходят без изменений.

У меня цвет исчезает куда-то, а нормали на что надо умножить - непонятно.
Тут видос небольшой:

#5
4:36, 9 фев. 2020

eDmk
> Это геометрический шейдер ДО вертексного, а не ПОСЛЕ фрагментного ;)
Геометрический шейдер если что - он после вертексного. Но да, до фрагментного.

> На самом деле
> gl_in[i].gl_Position
> вообще ни на что умножать не надо.
> Они в вертексный приходят без изменений.
Всмысле не надо? Где ты на матрицу проекции умножаешь их?

#6
(Правка: 5:46) 5:46, 9 фев. 2020

eDmk
Написать во фрагментном шейдере «return normal * 0.5 - 0.5» и посмотреть что туда вообще приходит - это слишком продвинутая отладка, ага?

#7
9:14, 9 фев. 2020

Delfigamer
> Написать во фрагментном шейдере «return normal * 0.5 - 0.5» и посмотреть что
> туда вообще приходит - это слишком продвинутая отладка, ага?

ну кто-то отладчиком пользуется для нормалей :)

#8
10:47, 9 фев. 2020

eDmk
> но во фрагментный шейдер не приходит цвет, а нормали вообще непонятно в каком
> пространстве.
> На какую бы матрицу не умножал - получается ерунда. При движении камеры
> уплывает свет.

обычная проблема не знаю в каком пространстве ... поможите

#9
11:59, 9 фев. 2020

Нормали по одному треугольнику будут смотреться плохо, надо использовать gl_triangles_adjacency, тогда будет соседние вершины и по ним уже сглаженные нормали считать

#10
12:05, 9 фев. 2020
Я буду самый гениальный, и посоветую сделать нормаль атрибутом вершины.
#11
12:17, 9 фев. 2020

vindast
зачем автору GS?

#12
12:26, 9 фев. 2020

Когда нормали на ЦПУ считаю - все норм. Просто хочется из-за трансформаций объекта сделать активную нормаль, чтобы не заморачиваться с их обновлением с ЦПУ-ГЛ.

#13
12:42, 9 фев. 2020

eDmk
> Просто хочется из-за трансформаций объекта сделать активную нормаль

нормали бывают активные и пассивные - а я думал это про другое :)

#14
12:45, 9 фев. 2020

Проблема в том, что видюха умирать начинает от их просчета «на лету».
Если из буфера читать, то ~3700 fps, а с просчетом в GS падает до ~1700 fps.
Че то не фонтан желаний. Откатился на буфер.

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