Слишком "ленивые" источники света
Разрабатываю собственный игровой движок #ForceTech на базе ресурсов игр #Thief и #SystemShock2 . Подробнее информация о проекте изложена в статье-FAQ.
На пути к релизу удалось исправить ещё один баг: некорректную отрисовку тени перемещающегося объекта (на видео). У меня в движке динамические тени строятся от всех источников, поэтому пришлось сильно оптимизировать этот момент, видимо, немного перестарался :).
Вкратце, суть заключается в том, что точечные источники света состоят из шести "камер", которые "считывают" информацию о расстоянии до объектов, каждая - в своём направлении, и формируют буферы глубины. Это очень дорогостоящая операция, поэтому, в целях оптимизации, при перемещении объекта в радиусе свечения источника, обновляются буферы только тех камер, которые действительно "видят" этот объект.
Ошибка заключалась в том, что при выходе объекта за пределы видимости одной из камер, остальным камерам источника не посылался сигнал "обновить свои данные". Ради этого пришлось поменять иерархию отправки сигналов: теперь камеры ждут их не от объектов, а он ячеек (групп объектов), на которые разбит весь уровень.
Подписывайтесь, чтобы не пропускать новости проекта!