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

Не кидайте помидорами, о шейдерах

#0
20:06, 6 мар 2014

Я понимаю что такое шейдеры(Я имею ввиду GLSL), браво их использую в программах, но только примеры. Есть врапперы для их использования мною написанные, читаю Борескова, читаю OpenGL Redbook 8th, но не могу понять, как черт возьми ими пользоваться, как писать свои шейдеры. Говорят даже мододелы очень легко и непренуждённо пишут шейдеры любых сложностей и размеров. Я знаю синтаксис, но не понимаю. Есть что то вроде Hello, world! для GLSL?

#1
20:36, 6 мар 2014

Nawy
> как писать свои шейдеры
Чтобы не пустословить.... Что ты хочешь сделать с помощью шейдеров?

#2
20:42, 6 мар 2014

Nawy
> Я понимаю
Nawy
> но не понимаю

Прям раздвоение личности какое-то

> Есть что то вроде Hello, world! для GLSL?

Конечно, есть. Нужно только шрифт подобрать с правильным кернингом :)

#3
21:07, 6 мар 2014

-Eugene-
Блики, обводки, блюры, что нибудь с частицами, умножать делить складывать внутри шейдера кватернионы и матрицы(Что насчёт эффективности такого подхода?) ну и т.д.

#4
21:14, 6 мар 2014

Nawy
> умножать делить складывать внутри шейдера кватернионы и матрицы
Зачем?

> Блики, обводки, блюры, что нибудь с частицами
Гугли каждый конкретный эффект, найдешь объяснение реализации. Или придумывай свое. Такое же программирование, как и любое другое.

#5
22:06, 6 мар 2014

Nawy
Проблема в том что ты не можешь понять, как конкретно работает код шейдеров?
Или ты не можешь придумать именно реализацию какого-то конкретного эффекта?

Nawy
> Я знаю синтаксис, но не понимаю.
Так то всё просто, есть vertex shader и fragment shader,
первый выполняется для каждой вершины фигуры, которую ты ресуешь,
второй для каждого пикселя заливки данной фигуры.


В fragment шейдере, ты возвращаешь конечный цвет пикселя,
Хочешь блур - берёшь цвет соседних пикселей текстуры, находишь среднее, возвращаешь.
Хочешь обводку - проверяй, если один из соседних пикселей текстуры не прозрачный - возвращай цвет обводки.
Хочешь яркое пятно - передавай в шейдер координаты пятна, в шейдере считаешь принадлежит ли конкретный пиксель данному пятну, если да - возвращай более яркий цвет.

#6
21:41, 9 мар 2014

> читаю Борескова
> Борескова
> OpenGL

#7
9:12, 10 мар 2014

Nawy, может быть, просто проблемы с пониманием ПРНЦИПОВ работы шейдеров?

А состоят эти принципы, если очень кратко (и рассматривая только ps/vs) в том, что:

- VS обрабатывает данные для каждой вершины рисуемого "меша". В качестве входящих данных в него поступают (как правило) данные из вертекса и разные "доп. настройки" вроде матрицы камеры и прочего. VS берёт эти данные и обрабатывает их. Обработка в данном случае есть ни что иное как чистая математика и логка, которую ты сам задаёшь в виде этого самого вертексного шейдера

- потом данные, вышедшие из VS собираются (считай что видюхой аппаратно) в "примитивы", которые будут рисоваться на экране. как правило это треугольники. видюха просто определяет (ну для простоты понимания примем что) в набор пикселей (тоже условно), из которых этот примитив состоит на экране. для каждого пиксела видюха интерполирует данные, вышедшие из VS. Например, если из VS вышло два вертекса с TexCoord0 = (0,0) и TexCoord0 = (1, .5) , то пиксел, находящийся точно между этими двумя вертексами получит значение TexCoord0 = (.5, .25)

- для каждого такого пиксела выполняется задfнный тобой PS, задача которого взять "выходные"(и уже проинтерполированные видюхой) данные твоего VS (так же можно взять "доп. настройки" вроде матрицы камеры и прочего) и по ним, опять же, на основе чистой логики и математики, т.е. твоего пиксельного шейдера, определить (т.е. вычислить) цвет каждого пиксела.

Для примера, хелло-вролдный VS это тот, который берёт входящие данные и просто передаёт их дальше (в пиксельный шедер). А хелло-вролдный пиксельный шейдер, например, может просто возвращать какой-то заданный тобой цвет. В итоге будешь получать на экране одноцветные прицитивы - например, треугольники.

#8
9:49, 10 мар 2014

Nawy
> как писать свои шейдеры

Тупо читать литературу в общем то, векторная алгебра, пайплан, модели освещения.
Имхо, полезно чтобы сперва сложилась целостная картинка как работал старый - fixed pipeline, после этого соответствующие шейдеры пишутся легко.
Другое дело что с шейдерами творят уже давно такие штуки которые действительно просто так без поллитры не придумаешь, но это уже дело чтения GPU Gems и т.п.

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

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