Что такое компиляция
Компиляция — это процесс конвертации карты из формата .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 как правило самый медленный из этих трех компиляторов из-за очень большого числа расчетов, которые он должен выполнить.