Еще одно из наггравлений развития может заключаться в проверке прозрачности ггиксела, если луч, выпущенный к источнику света, натолкнулся на грань. Это позволяет строить корректные тени для полупрозрачных (возможно, цветных) граней.
Обратите внимание, что если для источника света задать отрицательное значение цвета, например (-0.5, -0.5, -0.5), то мы получим источник "темноты" {йагк^Ш), который "освещает темнотой" все вокруг.
ПИШЕМ РЕНДЕРЕР УРОВНЕЙ QUAKE II
В этой главе мы рассмотрим весьма распространенный подход, основанный на использовании комбинации BSP-деревьев и множеств потенци-альновидимых граней-(PVS). Практически все игры серии Quake, а также многие другие, успешно используют этот подход. Мы рассмотрим его на примере игры Quake //.
В основе этого подхода лежит разбиение всей сцены на набор выпуклых многогранников при помощи листового BSP-дерева. При этом через каждую грань сцены проводится разбивающая плоскость. Листьями дерева будут выпуклые многогранники, ограниченные набором плоскостей. Часть из этих плоскостей проходит через грани сцены (или их части), ограничивающие этот многогранник, остальные - через порталы, связывающие этот многогранник с другими многогранниками (подробнее см. гл. 2).
Таким образом, вся сцена автоматически разбивается на выпуклые многогранники и соединяющие их порталы. Однако для типичных сцен получается очень большое число порталов (их число оказывается сравнимым с общим количеством граней в сцене), что делает применение классического метода порталов нецелесообразным из-за очень больших расходов на обработку каждого из получившихся порталов.
Вместо этого используется другой подход - на основе полученных порталов для каждого листа дерева (выпуклого многогранника) определяется, какие другие листья этого дерева могут быть видны через порталы. При этом рассматриваются все, что можно увидеть из данного листа, т. е. если существует цепочка порталов, через которую из данного листа (для какого-то определенного положения и ориентации наблюдателя) можно увидеть другой лист, то этот лист считается потенциально видимым. Построение подобных множеств видимости {Potentially Visible Set, PVS) является очень трудоемкой операцией, но она выполняется всего один раз на этапе подготовки уровня разработчиком, после чего построенные множества видимости хранятся вместе со сценой.