Шейдеры решают всё: Почему без GLSL ваш движок не выживет в WebGL
А вы что думали? Это так!😱
Всем привет! Как указано в заголовке, без этих маленьких программ (шейдеров) вы ничего не нарисуете в браузере! Оказалось, что в новых версиях и DirectX, и OpenGL тоже без них никуда. Я удивлён! Движки настолько скрыли от нас тонкости работы, что даже не подозреваешь, как это устроено. Да и многим этого не нужно.
Поэтому, если захотите писать свой движок/рендер, вам нужно обязательно изучать:
- Язык, на котором хотите разрабатывать движок.
- Язык GLSL для шейдеров.
И это не просто создание простых шейдеров. Через них в WebGL, например, принято отрисовывать спрайты: позиция, вращение, размер, текстура — всё это задаётся в шейдерах. Вы лишь передаёте значения, а все вычисления трансформаций происходят там же.
А теперь представьте: вы хотите применить эффект к спрайту через шейдер. Но за один раз к текстуре можно применить только одну шейдерную программу. Что делать?
- Вариант 1: Расширить базовый шейдер, чтобы помимо стандартных операций он применял и нужный эффект.
- Вариант 2: Сначала отрисовать все спрайты в текстуру, а затем применить эффект отдельной программой (здесь пригодится Framebuffer).
И всё это нужно учитывать!
Тут, конечно, снова восхищаешься большими движками — как они маскируют такую рутину от пользователя. Но зато становится понятно, почему их легко «сломать» или замедлить.
- 30 марта 2025, 10:53
Скорее, к рендеру буфера вершин (наверное, в более современных API правильнее писать про рендер пайплайна?). Шейдер не применяется к текстуре, шейдер просто читает данные из текстуры (или из нескольких сразу), если это ему потребуется (можно и без текстуры 100% пикселей для меша генерировать в шейдере). Или имеется в виду текстура не как файл картинки, а как что-то, чем в итоге покрасили меш?
Пора переходить со своего движка обратно на чужой? :)
Тут конвейер, шейдер применяется либо к текстуре (указанную через sampler, WebGLTexture), либо к буферу (framebuffer, renderbuffer).
Нет. Меня всё устраивает и всё идёт вперёд. Наоборот, узнаёшь много интересного. Конечно, даже меняется подход/логика по работе с теми же шейдерами, но всё отлично. =)
Судя по видео, ползёт вперёд! ;)
Пониманию, что картинка не впечатляет. Но за кулисами это классы: ECS, обработки ввода с действиями, менеджер шейдеров, менеджер Framebuffer, Canvas, WebGL, Tween, класс по работе с текстурными атласами, ресурсами. Теперь из всех инструментах собирается пазл для конкретной игры.
Сюда бы Боброва... Интересно, что он сказал бы по поводу шейдеров.
Если не ошибаюсь, он занимается софтрендером (без использования GPU). Это определённая ниша. А что тут скажешь? Разными, параллельными направлениями идём. Большинство придерживаются использования GPU для ускорения, пытаются вот развивать WebGPU (но ещё рано для него).
Ну вот поэтому и сказал бы.