13.8. Quake
Продолжением линии Wolfensetin3d - DOOM является игра Quake, основными отличительными особенностями которой является полная трехмерность, 6 степеней свободы, великолепно сделанное освещение (освещенность плавно изменяется, около факелов светлее, в углах темнее, т. е. освещенность непрерывно распределена вдоль поверхностей).
Еще одной отличительной особенностью Quake является использование вместо спрайтов трехмерных объектов (Alias models).
Ряд идей, использованных в Quake, очень напоминает то, что было в игре DOOM, но вместе с тем появились и принципиально новые подходы.
Рассмотрим в общих чертах работу графического ядра Quake.
Все разделено на две группы:
статический (неподвижный) мир;
все остальное (движущиеся объекты, включая игроков, противников, двери, платформы, оружие, боеприпасы и т. д.).
Статический мир построен из большого (до 10 Кбайт) количества текстурируе-мых граней с произвольным количеством источников света. На основе данного набора граней строится единое BSP-дерево, разбивающее все пространство на набор выпуклых многогранников, являющихся листьями этого дерева (полная аналогия с разбиением плоского мира в игре DOOM на набор выпуклых SubSector, только здесь все происходит в пространстве). Построенное дерево можно легко обходить в любом порядке. При этом для каждого листа дерева задаются ограничивающий его параллелепипед и набор поверхностей (под поверхностью - surface - понимается текстурированная грань с наложенной на нее освещенностью).
Принципиально новым является использование PVS - для каждого листа дерева на этапе препроцессирования строится список всех тех листьев, которые могут быть видны из данного листа.
13. Элементы виртуальной реальности Таким образом, обходя дерево в порядке iront-to-back, мы сперва попадаем в лист, содержащий наблюдателя внутри себя, получаем список всех видимых листьев и сортируем их при помощи BSP-дерева.
Структура PVS не только сильно ускоряет рендеринг, но и выполняет еще функции структуры BLOCKMAP в игре DOOM, определяя объекты, которые могут видеть игрока и которые может видеть игрок.