Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Скорость геометрических шейдеров

Скорость геометрических шейдеров

Страницы: 1 2 Следующая »
MikeNewПостоялецwww15 июня 20188:13#0
Присматриваюсь к геометрическим шейдерам, и, судя по тому что я прочитал, со скоростью у них дела обстоят печально.
Я пока с помощью них только нормали рисовал и уровень падения FPS мне крайне не понравился.
Собственно, вопрос, как вы считаете для каких задач они применимы (назаменимы) если оптимизация и FPS стоят на первом месте? Или в таком случае от них лучше вообще отказаться?
innuendoПостоялецwww15 июня 20188:29#1
MikeNew

скачай всякие UE/CE и посмотри код шейдеров

MikeNewПостоялецwww15 июня 20188:35#2
innuendo
> MikeNew
>
> скачай всякие UE/CE и посмотри код шейдеров
У меня просто возникло подозрение, что дело не в коде, а в самом механизме их работы.
SuslikМодераторwww15 июня 20188:40#3
MikeNew
> для каких задач они применимы (назаменимы)
если производительность упирается в пропускную способность шины при передаче вертексов, когда вертексы можно сгенерить процедурно. для тесселяции. для некоторых экзотических случаев вроде конвертации полигонов в point cloud на лету. для рендеринга огромного количества мелких билбордов. в остальном случаев не так-то много.

Правка: 15 июня 2018 8:41

innuendoПостоялецwww15 июня 20189:02#4
Suslik
> в остальном случаев не так-то много.

рендер в фейсы и слоя за 1 проход?

AsaqПользовательwww15 июня 201810:06#5
MikeNew Пожалуйста приведи исходный код геометрического шейдера которым ты рисовал нормали. Какое ~ количество таких нормалей в сцене ?
MikeNewПостоялецwww15 июня 201810:43#6
Asaq
> MikeNew Пожалуйста приведи исходный код геометрического шейдера которым ты
> рисовал нормали. Какое ~ количество таких нормалей в сцене ?
#version 450

#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable


layout (triangles) in;
layout (line_strip, max_vertices = 6) out;

layout (binding = 0) uniform UboView 
{
  mat4 proj;
  mat4 view;
  mat4 model;
} uboView;

layout (location = 0) in vec3 inNormal[];
layout (location = 0) out vec3 outColor;

void main() {

  float normalLength = 0.40;
  for(int i=0; i<gl_in.length(); i++)
  {
    vec3 pos = gl_in[i].gl_Position.xyz;
    vec3 normal = inNormal[i].xyz;

                gl_Position = uboView.proj * uboView.view * uboView.model * vec4(pos, 1.0);

    outColor = vec3(1.0, 0.0, 0.0);
    EmitVertex();

                gl_Position = uboView.proj * uboView.view * uboView.model * vec4(pos  + normal * normalLength, 1.0);
    outColor = vec3(1.0, 1.0, 0.0);
    EmitVertex();

    EndPrimitive();
  }
   
}

Количество нормалей - по-разному, от нескольких сотен до нескольких тысяч.

Меня в первую очередь интересует применение геометрического шейдера для куллинга средствами GPU (отбрасывание лишних вершин), тут на сайте была статья за 17-ый год, где рекомендовалось это делать именно для быстродействия.
А как посмотрел на скорость его работы - что-то засомневался.

Правка: 15 июня 2018 10:47

MikeNewПостоялецwww15 июня 201810:46#7
Suslik
> для тесселяции
???
Вот здесь не совсем понял зачем, если есть шейдеры тесселяции, которые, в отличие от геометрических шейдеров, очень порадовали скоростью работы.
Или имеются в виду какие-то особенные случаи?

Правка: 15 июня 2018 10:46

foxesПостоялецwww15 июня 201813:26#8
MikeNew
> for(int i=0; i<gl_in.length(); i++)
Мне всегда казалось что геометрический шейдер считает 1 элемент на поток, а не все примитивы геометрии в одном потоке. Это количество вершин примитива? Оно по идее фиксировано.

Правка: 15 июня 2018 13:27

EugeneУчастникwww15 июня 201813:53#9
innuendo
> рендер в фейсы и слоя за 1 проход?
Мне всегда казалось это сасай.
Ну то есть, если можно отсечь 3/4 геометрий на ЦПУ, нафига наваливать это все на геометрические шейдеры?
Неужели переключение рендертаргетов настолько дорогое?
innuendoПостоялецwww15 июня 201813:59#10
Eugene
> Ну то есть, если можно отсечь 3/4 геометрий на ЦПУ, нафига наваливать это все
> на геометрические шейдеры?

там же полигоны раскидываются по rt


>Неужели переключение рендертаргетов настолько дорогое

число дипов же больше

Правка: 15 июня 2018 14:00

EugeneУчастникwww15 июня 201814:07#11
innuendo
> там же полигоны раскидываются по rt
Ааа, точно. Мы же в любом случае рисуем одинаковое число объектов.

Тогда вопрос в том, действительно ли меньшее число вызовов компенсирует затраты на по-полигональный куллинг.

innuendoПостоялецwww15 июня 201814:13#12
сейчас пример закачаю

http://my-files.ru/sy8kp5

там в шейдере USE_GS_CULL 1

сравни с и без

Правка: 15 июня 2018 14:19

nonamezeroxПостоялецwww15 июня 201814:14#13
Изображение

А дипы уже давно "драйверочек порешает"

MrShoorУчастникwww15 июня 201818:57#14
MikeNew
Глянул твой шейдер с нормалями. Не понятно зачем там вообще герметрический шейдер, если все это можно сделать в вершинном.

Правка: 15 июня 2018 18:57

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

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

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