Как реализуется свет в играх?
В ютубе полно роликов о том как создать свет в unity, но мне хотелось бы разобраться как его сделать в sfml, то есть на низком уровне, возможно ли вообще сделать динамическое освещение в sfml c++ и на подобных фреймворках или же для этого нужно спуститься до OpenGL?
Речь идет о 2D игре
Ответы (1 шт):
Я решил немного расширить свой комментарий, чтобы он тянул на ответ и оформить ответ к данному вопросу, т.к. тема не очень освещена в рунете. К сожалению ваш вопрос слишком объёмный и на него крайне сложно ответить в рамках SO. Но я могу вам дать список того, с чего стоит начать рассмотрение данной темы:
- Для начала стоит разобраться с теоретическими азами, что такое свет, какой свет бывает и тд. Начать можно вот с этой статьи на хабре (вам нужны первые три раздела).
- Вам необходимо разобраться с тем, каким функциям подвержен свет (отражение, преломление, рассеивание итд). Емнип это есть в статье выше.
Освещение в компьютерной графике симулирует взаимодействие света и объектов. Рассчёт освещения - симулирует всеразличные законы физики, связанные с освещением, и распространение света в пространстве. Освещение зависит от перспективы камеры (т.е. наблюдателя), материала объекта и окружающей среды (воздух, туман, вода итд).
Для аппроксимации используют нормали к поверхности объекта. В качестве выходной функии любой модели вы получаете интенсивность света (это вектор, направленный от точки прямо в камеру).
На рисунке ниже:
L - источник света
P - точка на поверхности
N - Нормаль
R - отражённый вектор
I - Интенсивность света

Для окружающего освещения вам потребуется формула
I = I_a * K_a Где I_a - интенсивность окружения, константа, вектор формата (I_aR, I_aG, I_aB) K_a - Коэффициент отражения объекта, находится в диапазоне от 0 до 1
Обязательно рассмотрите Закон Ламберта, это необходимо для вычисления диффузного отражения для направления света и нормали
И рассмотрите зеркальное отражение.
В итоге у нас получается форумла из 3х компонент для интенсивности света (если я правильно помню, это и есть модель по Понгу):

- После этого разберите такое понятие как затухание света и самые популярные модели освещения: по Понгу (Phong) и Блинну-Понгу (Blinn-Phong). Обязательно рассмотрите Halfway-Vektor для зеркального отражения света, тоже потребуется для второй модели. По поводу второй модели - вот хороший источник и пример на Web-Gl.
UPD и совсем забыл упомянуть про самую примитивную реализацию света: накладываем поверх всей картинки тёмный фильтр, который выключаем лишь в районе источников света (а там уже делаем один из трёх источников света, которые нам подходят. Про источники света - в первой ссылке).