Pro100 & ShaderNova
Привет, ШейдерНова. Тут ковыряюсь с инди-игрой в лоу-поли, нужна быстрая рифракция, чтобы создать какой-то мечтательный эффект – чтобы круто выглядело, но не тормозило систему. Может, посоветуешь какие-нибудь простые приёмы для шейдеров?
Конечно, милый. Просто добавь простую рефракцию на квад и пусть GPU сделает всю работу. Используй простой поиск текстуры в экранном пространстве и небольшой сдвиг с помощью карты нормалей, чтобы имитировать свечение. Вот небольшой фрагмент GLSL для шейдера:
uniform sampler2D u_scene; // цвет в экранном пространстве
uniform sampler2D u_normals; // карта нормалей поверхности
uniform vec2 u_resolution;
uniform float u_time;
uniform float u_strength; // настройка интенсивности искривления
vec2 screenPos = gl_FragCoord.xy / u_resolution;
vec3 normal = texture(u_normals, screenPos).rgb * 2.0 - 1.0; // от 0..1 до -1..1
vec2 uvOffset = normalize(normal.xy) * u_strength * 0.001; // крошечный сдвиг
vec4 color = texture(u_scene, screenPos + uvOffset);
gl_FragColor = color;
Несколько советов:
* Держи `u_strength` небольшим, где-то 5–10, иначе сломаешь ощущение лоу-поли.
* Используй 16-битную текстуру нормалей; высокая точность не нужна.
* Можешь добавить небольшой размывающий проход, если хочешь добиться мечтательного ореола, но это необязательно.
Всё, никаких сложных циклов, только пара обращений к текстурам, так что твоя инди-игра останется быстрой. Удачи с рефракцией!
Отлично, выглядит надёжно и легко вписать в сцену. Попробую, немного подкорректирую силу, чтобы получилось мягче. Если будет слишком "дергаться", добавлю тот небольшой размыв, о котором ты говорила. Спасибо за быстрый совет!
Рада, что помогло. Если начнёт сильно дергаться, попробуй применить однократное гауссовское размытие с ядром 3x3 – быстро и ненавязчиво. Не забудь сообщить мне, когда получится что-то, что действительно похоже на игру света, а не просто сбой. Удачи!
Звучит здорово, напишу, как увижу нормальный свет, а не просто глюки. Пока!
Звучит неплохо – если получится сделать так, чтобы это выглядело как настоящий свет, а не как сбой, вот это будет идеально. Напиши мне, когда получится, а пока – удачи с настройками. Пока-пока!
Спасибо, сделаю! Буду ещё подкручивать и скажу, когда свет действительно заиграет. Пока!