Что такое компиляция

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Компиляция — это процесс конвертации карты из формата .vmf в формат .bsp, который уже распознается самой игрой. Но зачем нужно компилировать карту? Движок Source использует такие технологии как BSP (Binary space partitioning) для построения геометрии и Radiosity для реалистичного освещения. Компиляторы нужны чтобы создать bsp дерево и заранее просчитать освещение. Вот словесный алгоритм основных операций:

  • Читается .vmf файл.
  • Выполняется копилятор BSP, создается .bsp файл.
  • Выполняется VIS, в готовый .bsp файл записывается новая информация (visdata).
  • Выполняется компилятор RAD, который добавляет информацию об освещении в .bsp файл.
  • Готовый .bsp файл копируется в директорию мода maps/.
  • Запускается игра с параметрами для запуска карты.

Рассмотрим, для чего предназначены компиляторы vbsp.exe, vvis.exe, vrad.exe:

BSP. Основная его задача состоит из конвертирования "сырой" геометрии VMF в понятный движку формат Binary Space Partition.

Что делает VBSP:

  • Конвертирует браши в полигоны
  • Генерирует visleaves
  • Генерирует detail props
  • Обрабатывает большинство внутренних энтитей и превращает их в часть мира
  • Присваивает каждой отражающей поверхности ($envmap) ближайший cubemap
  • Запекает в карту entity block (блок с данными об энтитях)

Полученный в результате VBSP-компиляции .bsp файл может быть загружен в игре, но в нем будет отсутствовать информация о контроле видимости (низкая производительность) и освещении.

VIS. Этот инструмент анализирует готовый .bsp файл и записывает в него информацию о видимости. VVIS проверяет каждый лист на предмет его обнаружения из другого листа. Операция проводится со всеми листьями.

Что делает VVIS:

  • Тестирует видимость между листьями
  • Устанавливает максимальную дистанцию видимости (опция)

RAD анализирует готовый .bsp файл и "запекает" в него информацию об освещении. Заранее просчитанное Radiosity освещение избавляет движок от необходимости просчитывать свет в режиме реального времени.

Что делает VRAD:

  • Генерирует lightmap'ы (карты освещения)
  • Генерирует ambient samples (отраженный от поверхности свет)
  • Генерирует для каждого prop_static и detail prop объекта или вертекса освещение

VRAD как правило самый медленный из этих трех компиляторов из-за очень большого числа расчетов, которые он должен выполнить.