Я внедряю систему отложенного затенения, которая использует вычислительный шейдер (в DirectX 11) для отбраковки источников света в плитках, поэтому я могу получать тысячи источников света со стабильной частотой кадров. Проблема возникает, когда мне нужно определить, блокируется ли источник света сценой. геометрия. Я имею в виду, что мои точечные источники света проходят через стены и мосты. У меня есть карта теней на точке обзора основного света (солнца), но для создания карты теней для каждой точки света на сцене потребуется генерировать тысячу кубических карт, и это Как это обычно решается? В таких играх, как Dead Space 3 и Battlefield 3, много света, но они не пропускают твердые предметы.
Одним прямым решением было бы использование подходов окклюзии в пространстве экрана. Там вы пытаетесь оценить окклюзию на основе выборки окрестности. Один подход, который я знаю, это SSDO который непосредственно нацелен на создание теней в пространстве экрана. Вероятно, у вас будет много артефактов в сложных сценах. Преимущество в том, что SSDO также добавляет некоторые глобальные эффекты освещения.
Я думаю, что большинство игр / движков пытаются преодолеть такие проблемы путем предварительной обработки.
Статическое освещение: если ваш источник света не двигается (огни в зданиях …), вычислите карты освещения или некоторые дополнительные атрибуты вершин, содержащие свет.
Настройте свет: просто отрегулируйте расстояние падения, интенсивность или местоположение, пока не будет заметного кровотечения.
Некоторые собственные идеи: В зависимости от вашего представления о свете (сфера / диск?) Вы можете рассчитать обрезанную форму для источников света. Пиксели за стеной не будут лежать внутри нового светового объема и не будут освещены таким образом. Если вы не можете сформировать произвольный объем света, вы можете добавить одну или две плоскости на стены, определяющие свет. Эти плоскости могут быть неопределенными для большинства источников света и могут быть переданы в графический процессор только для источника света около стены. Затем можно проверить пиксель, на какой стороне он находится во время процесса освещения для соответствующего источника света.
Других решений пока нет …