Чтобы реалистично запрограммировать свет от лампы в игре, нужно понимать несколько законов физики и их упрощённые версии, используемые в компьютерной графике:
1. Закон обратных квадратов (Inverse Square Law)
Формула:
Описывает, как интенсивность света уменьшается с расстоянием. В реальном мире яркость падает пропорционально квадрату расстояния, но в играх часто применяют более плавные затухания, чтобы улучшить визуальное восприятие.
2. Отражение света (Law of Reflection)
Формула:
Угол падения света равен углу отражения. Используется для зеркальных поверхностей и расчёта бликов.
3. Рассеивание света (Diffuse Reflection - Ламбертова модель)
Формула:
Свет, падая на поверхность, рассеивается во всех направлениях. Ламбертова модель используется для матовых объектов.
4. Фоновые и рассеянные отражения (Ambient & Specular Reflection - модель Фонга или Блинна-Фонга)
Модель Фонга учитывает три компонента освещения:
1. Ambient (окружающий свет) – базовый уровень освещения сцены.
2. Diffuse (диффузное освещение) – свет, равномерно распределённый по поверхности.
3. Specular (зеркальное отражение) – блики от источника света.
5. Затенение (Shading)
Гуро-затенение (Gouraud shading) – вычисляет освещение только в вершинах и интерполирует его между пикселями.
Фонговское затенение (Phong shading) – вычисляет освещение для каждого пикселя, давая более реалистичный результат.
6. Преломление света (Snell's Law)
Формула:
Нужно для создания эффектов линз, стекла и воды.
7. Ray Tracing (трассировка лучей)
Симулирует реальный путь фотонов от источника света, учитывая отражения, преломления и тени. Используется в современных играх с RTX-графикой.
Если хочешь сделать простое освещение в игре, достаточно Ламбертового освещения и модели Фонга. Для фотореалистичного освещения можно использовать PBR (Physically Based Rendering) и трассировку лучей.