Разбираясь в правильном ответе TomTsagk, я подумал, что это может помочь немного подробнее рассказать о том, почему игры работают так.
Свет в играх на самом деле не «путешествует» от источника, на поверхность, на камеру, и на этом пути он будет преградить путь.
Чтобы выяснить, насколько ярко нарисовать каждый пиксель поверхности на основе заданного света, мы используем (или приближаемо) математическую формулу, которая использует направление поверхности и направление от этой точки на поверхности к источнику света. Вот и все, только направление, из которого он сияет - мы обычно не направляем луч, чтобы проверить, действительно ли свет достигает этого пикселя, потому что делать это для каждого пикселя на экране и проверять луч по всей детальной геометрии сцены обычно все еще слишком дорого для игр в реальном времени.
Так что по умолчанию никакие игровые огни не отбрасывают тени. Направление к источнику света остается неизменным, даже если на пути есть заклинатель теней, поэтому математика дает нам то же значение яркости.
Если мы хотим смоделировать тени, мы должны сделать это отдельно. Одним из распространенных способов является то, что называется Shadow Map. В этой версии, прежде чем мы затеняем нашу сцену, мы сначала визуализируем сцену с точки зрения каждого источника света, как если бы этот источник света был камерой, сохраняя глубину каждого пикселя, который он видит, в текстуру вне экрана.
Затем, когда мы затеняем сцену, мы можем сравнить математическое расстояние этого пикселя от источника света с глубиной, которую мы записали в соответствующем пикселе на карте теней. Если глубина карты теней меньше, то это означает, что между светом находится другая поверхность, и вместо этого мы рисуем этот пиксель в тени.
Существует множество классных приемов, которые делают эти тени на карте более привлекательными, с меньшим количеством артефактов / псевдонимов, но пока я их затушевываю. Достаточно сказать, что они, как правило, тоже не свободны.
Потому что это требует рендеринга (вплоть до) всей сцены снова с точки зрения каждого источника света - до шести раз, если это точечный источник света, который светит во всех направлениях {север, юг, восток, запад, вверх, вниз}, и нам нужно -поставлять карту теней в любое время, когда что-то движется, это может стать очень дорогим.
Поэтому игры часто фокусируют свой бюджет на рендеринг на самых важных источниках света в сцене - таких как направленный солнечный свет - чтобы они имели хорошо выглядящие тени. Маленькие, недолговечные, незначительные огни, такие как вспышка взрыва, часто простительны, если они немного просачиваются через окклюдеры. Зачастую это более приемлемо для игроков, чем заминка в частоте кадров из-за внезапного увеличения стоимости рендеринга из-за всех дополнительных рендеринга и вычислений карты теней. Особенно, если это занятая сцена действия, где текучесть важнее, чем совершенство пикселей.