Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Процессор постэффектов (5 стр)

Процессор постэффектов (5 стр)

Поделиться

Страницы: 1 2 3 4 5

sanПостоялецwww17 окт. 201723:02#60
Я не понял, это что было, какой нафиг "процессор"? Чувак открыл для себя пиксельный шейдер?

Что до шума, то эта тема изрыта вдоль и поперек. От перлин-нойса (куча реализаций на шейдерах) до белого шума типа rand.
Вот формула, получается белый шум:
float nrand( vec2 coord )
{
  return fract(sin(dot(coord.xy, vec2(12.9898, 78.233)))* 43758.5453);
}
А вообще поищи в https://www.shadertoy.com по слову "noise", найдешь на любой вкус.
Только никогда не называй примитивный шейдер "процессором постэффектов", скромнее надо быть....

Iron ManПостоялецwww21 окт. 20172:59#61
san
А где ты видел сравнивание примитивного шейдера с процессором постэффектов???
Шейдер - это только начало, дальше будет развиваться, добавляться ещё проходы и шейдеры будут составляться только из нужных эффектов.
А формулу я эту видел тыщу раз, но она бесполезна без рандомных входных данных, так как с одними и теми же числами выдаёт чистый фон, а если туда запихать текстурные координаты, то градиент!
P.S. Хотя твоя функция на удивление первая, которая действительно выдаёт шум :))) но статичный. Нужно что, каждый кадр загонять в шейдер случайные числа и передавать ей в качестве параметров?

Правка: 21 окт. 2017 7:18

Iron ManПостоялецwww21 окт. 20177:55#62
san
Вопрос решён, большое спасибо! Для новичков выложу решение:
При запуске программы выполняю функцию:
srand((unsigned)time(NULL));
Каждый кадр через юниформ закидываю случайное число:
(float)Randomize(0.0f, 1.0f));
Сама функция Randomize (назвал её в честь спектрумовской функции):
double Randomize(double range_min, double range_max)
{
  return (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min;
}
И собственно в шейдере умножаю:
float nrand(vec2 coord)
{
  return fract(sin(dot(coord.xy, vec2(12.9898, 78.233))) * 43758.5453 * seedBlackWhiteNoise);
}
А закидывая через юниформы три случайных числа и три раза используя nrand с каждым, я получил цветной шум, что уже ближе к зёрнам на киноплёнке :)

Правка: 21 окт. 2017 9:16

Страницы: 1 2 3 4 5

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

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