Quake использовал порталы для определения видимых областей. Сначала строится граф из порталов, соединяющих листья (пространства) карты. Затем выполняется грубая оценка видимости, чтобы определить, какие листья потенциально видны через каждый портал. Далее происходит более точная проверка. Она состоит в последовательном усечении видимых объёмов через цепочки порталов, что позволяет отбросить невидимые объекты.
Усечение выполняется путем создания разделительных плоскостей между исходным и проходным порталами. Плоскости строятся на основе комбинаций вершин и граней порталов. Целевой портал усекается этими плоскостями, пока не будет доказано, что он полностью невидим или пока не останется минимальный объем. Процесс повторяется для каждого портала, а затем результаты объединяются для каждого листа, чтобы создать PVS (potentially visible set), который показывает, какие листья видны из данного листа.
Используется рекурсивный обход графа порталов, где каждая итерация сужает область видимости. Обход начинается с портала, а затем продолжается через другие порталы, которые потенциально могут быть видимы из исходного. Массив видимых листьев (mightsee) уменьшается по мере прохождения по графу порталов. Если портал или лист больше не видим, ветка рекурсии завершается.
После определения видимости, данные сохраняются в файл BSP, который используется в игре. При этом данные сжимаются для уменьшения размера файла. Вычисления видимости проводятся один раз при компиляции карты, но этот процесс требует значительного времени. Для ускорения процесса можно использовать многопроцессорность, тесты ограничивающих сфер, кэширование плоскостей и другие оптимизации.
Изображение носит иллюстративный характер
Усечение выполняется путем создания разделительных плоскостей между исходным и проходным порталами. Плоскости строятся на основе комбинаций вершин и граней порталов. Целевой портал усекается этими плоскостями, пока не будет доказано, что он полностью невидим или пока не останется минимальный объем. Процесс повторяется для каждого портала, а затем результаты объединяются для каждого листа, чтобы создать PVS (potentially visible set), который показывает, какие листья видны из данного листа.
Используется рекурсивный обход графа порталов, где каждая итерация сужает область видимости. Обход начинается с портала, а затем продолжается через другие порталы, которые потенциально могут быть видимы из исходного. Массив видимых листьев (mightsee) уменьшается по мере прохождения по графу порталов. Если портал или лист больше не видим, ветка рекурсии завершается.
После определения видимости, данные сохраняются в файл BSP, который используется в игре. При этом данные сжимаются для уменьшения размера файла. Вычисления видимости проводятся один раз при компиляции карты, но этот процесс требует значительного времени. Для ускорения процесса можно использовать многопроцессорность, тесты ограничивающих сфер, кэширование плоскостей и другие оптимизации.