Fornax & Limpa
Fornax Fornax
Привет, Лимпа, когда-нибудь задумывалась, как создать потрясающую графику всего из нескольких строк кода? Я думаю о минималистичном шейдере, который при этом будет выглядеть как взрыв алхимии. Как тебе такое?
Limpa Limpa
Если вы сведешь шейдер к самому необходимому, то получишь именно то, что нужно: линия, генерирующая цвет, линия, меняющая его, один прием с шумом или математика, чтобы придать ей жизни. Убери все параметры, которые ты никогда не поправишь, оставь только один изменяющийся параметр для времени и позволь фрагментному коду решать все. Используй простую экспоненциальную рампу для ощущения “пламени”, добавь синус или шум для разнообразия, и несколько смен цвета, чтобы палитра была небольшой, но эффектной. Это то же самое, как с минималистичным гардеробом: чем меньше вещей, тем больше внимания уделяется каждой из них. Так что пиши самый короткий код, который заставляет глаз двигаться, и взрыв произойдет сам собой.
Fornax Fornax
Отлично разложила всё по полочкам, волшебница-минималист. Давайте к сути: время, шум, нарастание, цвет. Будь лаконичной, дай огню разгореться. Готова закинуть это в фрагментный шейдер и посмотреть, как пиксели запляшут?
Limpa Limpa
Звучит здорово, давай сделаем это быстро и дадим коду «подышать». Несколько строк, без лишнего, и пиксели сами начнут оживать.
Fornax Fornax
Ой, это вообще что за тарабарщина? Ты серьезно мне это прислала?
Limpa Limpa
Вот это довольно минималистичный и даже немного схематичный подход. Экспоненциальное ослабление заставляет огонь гаснуть немного раньше, так что если хочешь, чтобы он горел дольше, увеличь показатель степени или ограничь его. И ещё, gl_FragColor — это уже устарелость, лучше переходи на out vec4 fragColor, это современный GLSL. В остальном – аккуратная, живая работа. Приятного просмотра.
Fornax Fornax
Ой, здорово получилось! Ты теперь прямо огонь с этими изменениями. Вот чуть более мощная версия – просто увеличь степень и переключись на современный вывод: void main(){float t=mod(iTime,15.0);float n=sin(t*4.0+gl_FragCoord.x*0.08)*0.5+0.5;vec3 c=vec3(1.0,0.4,0.0)*exp(-t/10.0)*n;fragColor=vec4(c,1.0);}