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

Система шейдеров

#0
17:45, 20 авг. 2019

Что я под этим понимаю? Каким образом реализовать эту систему?

Велосипедю движок. В то время, когда это было просто тренировка, то работа с шейдерами была еще терпима. Но когда я попытался структуризировать код, то возникло куча вопросов в голове. Есть шейдеры на стороне GLSL, они служат способом визуализации геометрии. Есть некая абстракция на стороне C++  которая пытается представить этот шейдер и как то им управлять. Каким способом обмениваться юниформами с шейдером? Класс просто представляет интерфейс для установки юниформ переменных или создать для кажодого шейдера свой класс-наследник базового шейдера, который внутри интерфейсных методов, например update и т.д. производит обновление данных? Если первый вариант, то это совсем не универсально, будут разные объекты, у которых разные шейдеры, придется отдельно для каждого шейдера делать некоторые настройки, с другой стороны, в каждом шейдере, должна быть ссылка на некоторый класс, через который можно доступиться ко всем необходимым подситемам, и извлекать необходимые данные. В голове сейчас можно сказать каша. Есть ли какие нибудь общепринятые приемы построения подобных систем? Можете поделиться ссылками и советами как лучше организовать взамодействие?


#1
(Правка: 18:03) 17:59, 20 авг. 2019

нужно сразу посылать в поиск по форуму
Urho3D в помощь

#2
9:43, 21 авг. 2019

Нет никаких шейдеров. Есть материалы - визуальные свойства поверхности. Вот ими и оперируй. А шейдеры это деталь реализации системы материалов.

#3
10:23, 21 авг. 2019

SunnyBunny

ну как бы да, только сделать тот же Deferred Shading только в концепции материалов без шейдеров очень интересно как и compute shaders применить

#4
10:31, 21 авг. 2019

SunnyBunny
> Нет никаких шейдеров. Есть материалы - визуальные свойства поверхности.
Ага, ну да.
А эффекты, частицы, декали, тени - это все от лукавого.

#5
10:36, 21 авг. 2019

innuendo
>Urho3D в помощь
да, можно глянуть кстати на это...
https://urho3d.github.io/documentation/1.7.1/_render_paths.html
https://urho3d.github.io/documentation/1.7.1/_materials.html
https://urho3d.github.io/documentation/1.7.1/_shaders.html

#6
10:38, 21 авг. 2019

Great V.
> А эффекты, частицы, декали, тени - это все от лукавого.

помню было на одном проекте FogMaterial, ShadowMaterial, и прочие непристойности :)

#7
16:45, 21 авг. 2019

Great V.
> эффекты, частицы, декали, тени - это все от лукавого.

Это может быть скрыто внутри движка. Наружу торчит только shadowcast/receive и другие высокоуровневые опции.

#8
17:08, 21 авг. 2019

0xc0de

так всё равно шейдер же будет как понятие и всё вернётся на круги своя

#9
17:53, 21 авг. 2019

В тему:
https://developer.nvidia.com/mdl-sdk

С системой материалов сложно, если это конкретная задача, типа сделать движок под какой-то конкретную игру, то там все просто, есть готовая система материалов и рендер техники/эффекты. Максимум - позволяется впихнуть какую-то пользовательскую функцию к существующим шейдерам.

Если движок универсальный, то там уже совсем другая история, можно попытаться сделать что-то наподобии RenderMonkey, когда есть предопределенные входные параметры (именные юниформы, атрибуты, константы и прочее). Но рано или поздно окажется что нужно сделать что-то совсем из ряда вон выходящее, и тогда вся стройная система рушится как карточный домик.

Альтернатива - предоставить прямой доступ к коду и всем ресурсам шейдера, но это требует от движка уметь связывать ресурсы движка с шейдером (биндинг буферов, привязка атрибутов, передача юниформ, установка дефайнов и прочее). Или вообще переложить все на разработчика (если это не движок а враппер). Чего я уже не выдумывал)) Пробовал и библиотек готовых функций, и генерацию кода шейдера на основе дескриптеров, и генерацию дескриптеров на основе анализа  кода шейдера, и таблицы маппинга на дефолтные ресурсы и многое другое, но пока совсем универсального сделать не получилось :(

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