Документация пользователя движка idTech3 модификации Берсеркера (C)




Скачать 285.87 Kb.
Дата 25.09.2016
Размер 285.87 Kb.
Документация пользователя движка idTech3
модификации Берсеркера (
C):
Berserker@Quake3 и Berserker@RTCW-SP
Общий обзор

Berserker@Quake3 (Bers@Q3) и Berserker@RTCW-SP (BersSP) являются сильно доработанными модификациями соответствующих игр: Quake III Arena (Q3) и RTCW. Две основных цели проекта:

1. Доработка рендерной части до уровня современных графических технологий.

2. Чистка движка от ошибок, удаление поддержки неактуальных видеокарт.


Обзор рендерной части

Рендерер может работать в трёх режимах:

1. Quake3 classic renderer

2. Fake per-pixel lighting

3. True per-pixel lighting

Рендерер во всех трёх режимах работает в режиме OpenGL 3+, через шейдеры GLSL. Для особых случаев, рендерер может быть запущен на более старой версии OpenGL. Исходя из этого следует, что вычищен весь устаревший и "неодобренный" (deprecated) функционал, работа с геометрией строится на основе Vertex Buffer Objects (VBO).

Старый рендерер Q3 базируется на конвейерной обработке геометрии: перед отрисовкой batch (пакета треугольников с одинаковым материалом), все геометрические данные (координаты вершин (XYZ), цвет вершин, текстурные координаты (в т.ч. координаты light maps), нормали и т.п.) копировались в один большой массив (tess). В ходе копирования производился процессинг геометрии: деформации вершин, вычисление новых текстурных координат, цвета и пр. Только после этого производилась передача в видеокарту всего этого массива и отрисовка. Это был большой шаг по сравнению с рендерером idTech2, но движок продолжал оставаться сильно зависимым от скорости CPU и RAM. Вычислительная мощь видеокарты оставалась не востребована.

В проекте вся геометрия мира, а также геометрия моделей (статичных и анимирированных), была переведена на хранение на сторону видеокарты (фактически, в быструю видеопамять). Почти весь процессинг реализован через GLSL шейдеры (исключение - функция noise для нормалей, пример использования: флаги в CTF). В итоге, львиная доля обработки легла на плечи видеокарты, разгрузив центральный процессор (CPU). Соответственно, это дало возможность CPU быстрее поставлять данные для рендеринга, повысить FPS. Тут надо оговориться, что прирост FPS сильнее заметен на картах с тяжелой геометрией: tvy-bench, chartres, zih_gaj и пр. Вот для примера сравнение FPS старого Q3, Bers@Q3 без и с VBO на карте tvy-bench (видео GF 9600 GT):





Оригинал картинки тут: http://s39.radikal.ru/i085/1106/f6/ef34d13e44f1.jpg

Итак, работа с Q3-шейдерами (scripts) была перенесена целиком на сторону видеокарты, GLSL-шейдеры соответственно стали отражать весь этот функционал, что потребовало большого количества инструкций и юниформов. Это превысило возможности видеокарт семейства GF 6*** и 7***. Минимально необходима видеокарта класса GF 8***. Также, крайне рекомендуется


2-ядерный CPU, а лучше с 4 ядрами. Хотя сам программный код в основном однопоточный, возросшая нагрузка на видеосистему требует больше процессорного времени для видеодрайвера.

Попиксельные режимы работы рендерера основаны на методике Light pre-pass Deferred Shading, соответственно очень рекомендуется видеокарта с хорошим fillrate: широкая шина и/или быстрая видеопамять. Например будет неплоха система 256-bit DDR3 или 128-bit DDR5. Идеальна видеокарта с 256-bit DDR5 или лучше.


Обзор реализации классического рендерера

Данный режим визуально почти не отличается от изображения, генерируемого старым Q3. Нет динамического освещения (например, вспышек от взрывов и свет от летящих ракет); обусловлено это тем, что работа с такими источниками света реализована по-другому, и не совместима со старым кодом. Также сведены к единому два метода закраски: IDENTITY_LIGHTING и IDENTITY. Преимущество перед старым рендерером idTech3 только в стабильном и гарантированно высоком FPS.




Обзор реализации рендерера "фальшивой попикселки"

Режим "фальшивой" попикселки может стать разумным компромиссом между скоростью и качеством картинки для слабых видеокарт. Поддерживается весь набор графических технологий, реализованных в "истинной" попикселке. Для статичного освещения применены старые light maps. Динамические источники света поддерживаются в полном объёме.






Обзор реализации попиксельного рендерера

Режим попикселки подразумевает "честную" работу со всеми источниками света. Реализовано: освещение и затенение, bump-mapping, specular-mapping, parallax-mapping, distortion, FXAA , DoF и пр.




Рассмотрим реализованные графические технологии:

Real-time lighting and shadow mapping:



Parallax mapping:



При r_parallax 1 включается классический linear step parallax map, качество не сильно высокое.

При r_parallax 2 работает cone step map (CSM).

Утилиту для генерации карты высот можно скачать отсюда: HeightProc.rar

Linear step mapping использует ту же текстуру, что и для CSM.
Specular-mapping:


Detailed bump-mapping:

Сглаживание краёв FXAA:




Depth of Field (DoF):


Bloom:


Distortion:


Описание расширенной системы материалов

В старой терминологии idTech3, рендер-скрипты называются шейдерами. Современное название - материалы, наиболее точно определяет их сущность. Материалы могут содержать до 256 слоёв (в idTech3 всего 8). Лимит 256 взят из idTech4 и легко может быть увеличен. Незадействованные слои не занимают память, команда shaderlist отобразит объём занимаемой памяти каждым материалом. Каждый слой может содержать условие if, определяющее, рисовать или не рисовать слой в данный момент времени. Кроме того, большинство параметров материалов и слоёв являются математическими выражениями. Также поддерживаются таблицы и шаблоны (guides). Одним словом, многое было добавлено из системы материалов idTech4.

Материалы берутся из двух папок: сперва идёт поиск в materials, если не найден, то ищем в старой папке scripts. Таким образом обеспечивается совместимость со старым движком. Обновлённые материалы следует хранить в папке materials. Поддерживается до 4096 материалов.
Новые параметры материалов

Note: указанное ниже относится к обычным материалам; существуют также light-материалы, применяемые к источникам света. О них расскажем позже...

disableSunDisk запрещает рисование диска солнца на небе

deform синоним старого deformVertexes. Новые параметры и изменения:

projectionShadow игнорируется, т.к. уже не поддерживается

sprite синоним autoSprite

tube синоним autoSprite2

text "текст" или $cvarName текст явно задан, или может быть взят из указанного cvar,

например: deform text $name

(будет напечатано имя игрока)

Note: текст будет корректно вписан в прямоугольник, если в редакторе применен fit для текстуры, т.е. текстурные координаты заданы от 0 до 1.

flare (expression) создаёт эффект light flare из прямоугольника (как в idTech4). Выражение определяет длину лучей.

expand (expression) передвигает вершины вдоль вершинной нормали на расстояние, заданное выражением.

Note: любые числовые параметры deform могут быть математическими выражениями.

nomipmap синоним старого nomipmaps

noParallax запрещает параллакс-маппинг для данного материала

noSpecular запрещает specular-маппинг для данного материала

noShadows запрещает бросать тени от данного материала

noPortalCull idTech3 не отбрасывает объекты, не попадающие в прямоугольник проекции портала. Сейчас это исправлено: объекты вне проекции портала не отобра- жаются, тем самым ускоряя рисование сцены. noPortalCull запрещает данный механизм, если карта применяет mirror hack.
Новые параметры слоёв

if (expression) условное рисование слоя

diffusemap синоним старого map

вариации map2, clampmap2, animMap2, videoMap2 применяются для второй текстуры эффекта distortion.

вариации specularMap, clampSpecularMap, animSpecularMap применяются для карт отражений.

вариации bumpMap (или normalMap), clampBumpMap (или clampNormalMap), animBumpMap (или animNormalMap) применяются для карт нормалей.

вариации heightMap, clampHeightMap, animHeightMap применяются для карт высот (в формате для cone step mapping).

detailBumpMap (или detailNormalMap) карта микро-бампмапы.

Note: anim*-последовательности теперь могут содержать до 256 текстур (было 8).

Note: в качестве текстуры может быть задан: _quadratic - текстура для light flare.

alphaTest (expression) аналог alphaFunc GE(expression)

Note: смешивание alphaTest и alphaFunc не допускается!

Note: слои, помеченные detail, игнорируются.

noParallax запрещает параллакс-маппинг для данного слоя материала

lightStage помечает слой как участвующий в light interaction

Note: в большинстве случаев парсер материалов корректно помечает слои lightStage, но в редких случаях требуется вмешательство человека.

distortStage слой эффекта искажений

distortMagnitude (expression) задаёт силу искажений

noPicMip аналог шейдерного noPicMip, но для отдельного слоя

clamp, zeroClamp, alphaZeroClamp, noClamp описывают clamping текстур слоя

uncompressed запрещает сжатие текстур слоя

highQuality (или forceHighQuality) макрос, аналогичный комбинации noPicMip и uncompressed

blend синоним blendfunc, новые параметры:

none SRCBLEND_ZERO + DSTBLEND_ONE, т.е. blend отключен.

modulate синоним filter

Новые параметры rgbGen:

identityLighting синоним identity

vertexAlpha цвет RGB берется из канала Alpha

oneMinusVertexAlpha цвет RGB берется из (1.0 - Alpha)

rgb (expression) аналог rgbGen const (expression)

rgba (expression) как rgb, но действует также на Alpha-канал

red (expression) как rgb, но действует только на Red-канал

green (expression) как rgb, но действует только на Green-канал

blue (expression) как rgb, но действует только на Blue-канал

colored аналог rgbGen identity + alphaGen identity

vertexColor аналог rgbGen vertex + alphaGen vertex (если не задан явно alphaGen)

inverseVertexColor как vertexColor, но вариация (1.0 - rgba)

Новые параметры alphaGen:



vertexColor Alpha вычисляется как (R + G + B) / 3.0

oneMinusVertexColor Alpha вычисляется как 1.0 - (R + G + B) / 3.0



alpha (expression) аналог alphaGen const (expression)

color (exprRed exprGreen exprBlue exprAlpha) аналог rgbGen const (expression), но с возможностью вычислять каждый цветовой канал отдельно

texMod синоним tcMod

scroll (или translate) (exprS exprT) аналог tcMod scroll (exprS exprT)

scale (exprS exprT) аналог tcMod scale (exprS exprT)

rotate (expression) аналог tcMod rotate (expression)

Использование шаблонов материалов (guides)

Шаблоны находятся в папке \guides и являются файлами с расширением .guide

Рассмотрим пример шаблона "generic":

guide generic(textureName)

{

{

map textures/textureName.tga



normalmap textures/textureName_local.tga

specularmap textures/textureName_specular.tga

heightmap textures/textureName_height.tga

lightStage

}

{

map $lightmap



blendFunc filter

}

}


Материал " textures/base_walls/wall_01" тогда можно описать так:

guide textures/base_walls/wall_01 generic("base_walls/wall_01")

Поддерживается до 1024 шаблона.
Использование таблиц

Таблицы хранятся в файлах материалов. Синтаксис такой:

table имя_таблицы{ { список значений через запятую } }

- может быть:

пустой строкой промежуточные значения интерполируются, выход за пределы таблицы возвращает в таблицу

snap значения не интерполируются

clamp выход за пределы таблицы оставляет на граничных значениях

Note: snap и clamp могут быть совмещены.

Пример использования:

table base1ReactorTable { { .6, .4, 1, .1, .4, .6, .2, .9, .3, 5, .4, 1, .7, .4, .3, .2, 1 } }

lights/base1Reactor

{

{

Map lights/round.tga



red base1ReactorTable[time*2]

green base1ReactorTable[time*2]

blue base1ReactorTable[time*2]

}

}


Материалы источников света

Источники света могут содержать материалы. Файл materials\lights.shader содержит два минимально необходимых для работы материала: lights/defaultStaticLight и lights/defaultDynamicLight. Сущность "light" может иметь указание на материал, пример:

{

"classname" "light"



"origin" "-1056 -1721 202"

"color" "1.00 0.80 0.30"

"angles" "-271 101 0"

"material" "lights/defaultDynamicLight"

}

Материалы источников света имеют следующие ограничения:



- не более 4 слоёв

- без деформации вершин (т.к. бессмысленно)

- без texGen
Применение математических выражений

Операции сравнения:

&& логическая И

|| логическая ИЛИ

>= больше или равно

> больше


== равно

!= не равно

Математические операции:

+ плюс

- минус


/ деление

% остаток от деления (mod)

* умножение

Скобки:


( ) для указания приоритета вычислений

[ ] для указания элемента таблицы

Операнды:

time игровое время

table указывается имя таблицы

parm0...parm11 параметр материала, задаваемый сервером (game-код)

global0... global7 глобальный параметр мира, задаваемый сервером (game-код)
Выражения применяются:

- все параметры tcMod/texMod

- условия if

- alphaTest

- distortMagnitude

- rgbGen const / rgb / rgba / red / green / blue

- alphaGen const

- color , , , (можно без запятых)

- scroll/translate ,

- scale ,

- rotate

- deform flare

- deform bulge

- deform expand

- deform wave [waveform]

- при задании параметров группы waveform

- deform normal

- deform move

- light_center сущности "light"
Описание image functions

Image functions - мини-система, предназначенная для совмещения текстур на этапе загрузки в единую текстуру.

Add (img0 img1) Складывает две текстуры

Sub (img0 img1) Вычитает текстуры

Mul (img0 img1) Умножает текстуры

AddConst (img R G B A) Прибавляет к текстуре константу

SubConst (img R G B A) Вычитает из текстуры константу

MulConst (img R G B A) Умножает текстуру на константу

InvertRGBA / Invert (img) Инвертирует всю текстуру

InvertRGB / InvertColor (img) Инвертирует RGB текстуры

InvertAlpha / InvertA (img) Инвертирует Alpha текстуры

MakeAlpha / MakeA (img) Складывает RGB и пишет в Alpha

Luminance / Mono (img) Делает RGB текстуры монохромной

Interpolate / InterpolateRGBA (img0 img1 img2) Интерполирует всю текстуру из img0 в img1, вес берется из Alpha img2.

InterpolateColor / InterpolateRGB (img0 img1 img2) Интерполирует RGB текстуры из img0 в img1, вес берется из Alpha img2.

InterpolateA / InterpolateAlpha (img0 img1 img2) Интерполирует Alpha текстуры из img0 в img1, вес берется из Alpha img2.

RGB2Normal / Color2Normal (img N) Строит в RGB normalMap из Mono(RGB)

Height2Normal Строит в RGB normalMap из _height CSM (каналы BA карты высот CSM)

Alpha2Normal / A2Normal (img N) Строит в RGB normalMap из Alpha


Функции могут иметь вложения, их количество не ограничено ничем. Например:

map add(rgb2normals(img0 8) Mono(img1))



Note: Если обрабатываемые картинки имеют разный размер, все они подгоняются под размер первой картинки.

Note: Если загружаются normalMap, вызываются специальные ветки, поэтому карты нормалей обрабатываются корректно.
Описание редактора релайта

Основная функция редактора релайта - переосвещение карт. Для включения редактора должны выполняться следующие условия:

- работающий попиксельный рендерер (r_ppl 2)

- загружена карта

- разрешены чит-коды (запуск карты по devmap или spdevmap)

- разрешены тени (ненулевой r_shadows)

Включается редактор параметром ed_editor 1, затем запускается карта или делается рестарт рендерера (vid_restart) при запущенной карте.

Вся информация релайта хранится в файлах. Если такой файл присутствует, загрузчик карты вычленяет все сущности "light" из BSP и добавляет их из .lit-файла.


Параметры редактора

ed_editor default = 0, CVAR_LATCH При 1 включается редактор

ed_drawhud default = 1 При 1 выводит на экран информацию редактора

ed_hud_row default = 240, CVAR_ARCHIVE начальная координата Y hud-а редактора

ed_hud_column default = 0, CVAR_ARCHIVE начальная координата X hud-а редактора

Note: экранные координаты приведены к виртуальному экрану разрешением 640 x 480 точек.

ed_lightReserve default = 100, CVAR_ARCHIVE Резервирует слоты для вновь создаваемых источников света.

ed_occluderReserve default = 50, CVAR_ARCHIVE Резервирует слоты для вновь создаваемых occluders.
Команды редактора

Работа с источниками света:



createlight создать источник света в текущем положении игрока. Параметры источника по умолчанию: radius 300, цвет белый, свет шаровидный, и т.п.

colorlight R G B задать цвет источнику света, значения от 0 до 1.

deletelight удалить текущий источник света.

deletealllights удалить все источники света (в RTCW сохранятся "dlights").

selectnearestlight сделать текущим ближайший источник света.

nextlight сделать текущим следующий источник света.

prevlight сделать текущим предыдущий источник света.

originlight X Y Z переместить источник в координату XYZ. Если XYZ не заданы, то переместит в текущее положение игрока.

radiuslight R или X Y Z задать радиус источника света. Три параметра (XYZ) позволяют задать радиусы вдоль трёх осей координат.

unselectlight отключиться от текущего источника света.

copylight копировать текущий источник света в буфер обмена.

pastelight создать источник света и скопировать ему свойства сохранённого источника.

paste2cameralight создать источник света и скопировать ему свойства сохранённого источника, координата источника будет равна текущей координате игрока.

cutlight вырезать текущий источник в буфер обмена.

centerlight X Y Z задать смещение центра относительно координат источника света. Если X Y Z не заданы, то центр обнуляется. Центр источника позволяет выносить свет за пределы карты, например за окно. X Y Z могут быть выражениями.

moveoriginlight_x N передвинуть источник вдоль оси X на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

moveoriginlight_y N передвинуть источник вдоль оси Y на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

moveoriginlight_z N передвинуть источник вдоль оси Z на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

addradiuslight_x N изменить радиус источника вдоль оси X на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

addradiuslight_y N изменить радиус источника вдоль оси Y на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

addradiuslight_z N изменить радиус источника вдоль оси Z на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

addradiuslight N изменить радиус источника на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

nospecularlight запретить источнику света бросать блики (specular mapping).

specularlight разрешить источнику света бросать блики (specular mapping).

noshadowlight запретить источнику света бросать любые тени.

shadowlight разрешить источнику света бросать любые тени.

nomodelsshadowlight запретить источнику света бросать тени от моделей.

modelsshadowlight разрешить источнику света бросать тени от моделей.

dynamiclight перевести источник света в разряд динамических. Это нужно, если координаты центра источника света есть функции, т.е. требуется постоянный пересчёт параметров света.

staticlight сделать источник света статичным.

omnilight сделать источник света сферическим.

projlight сделать источник света прожектором.

directlight направить текущий прожектор на игрока.

anglelight A N где A может быть "A", "B" или "C" (выбор изменяемого угла)

N - значение. Если N указан со знаком (+/-), то N есть число изменения угла.



angleslight A B C A B C - значения, задаваемые для трёх углов ориентации света.

A - тангаж. Положительное число - наклон вниз,

B - рыскание. Положительное число - поворот влево.

C - крен. Положительное число - крен направо.



materiallight задать материал источнику.

sunlight сделать источник света солнцем. Солнце может быть только одно на карте.

sunIntensitylight N задать интенсивность свечения солнца.

selectSun сделать текущим солнце.

createSun создать солнце.

drawSunDisk разрешить рисование солнечного диска на небе. Повторное выполнение команды запрещает рисование диска. Полезно для запрета рисовать солнечный диск на лунном небе.

cullBackFaces разрешить рисование задних сторон плоскостей в теневую карту. По умолчанию разрешено для солнца.

movecenterlight_x N переместить центр источника вдоль оси X на величину N. Если N не задан, то двигаем на 1. Центр д.б. константой. Полезно для коррекции положения dlight.

movecenterlight_y N переместить центр источника вдоль оси Y на величину N. Если N не задан, то двигаем на 1. Центр д.б. константой. Полезно для коррекции положения dlight.

movecenterlight_z N переместить центр источника вдоль оси Z на величину N. Если N не задан, то двигаем на 1. Центр д.б. константой. Полезно для коррекции положения dlight.

Работа с параметрами worldspawn:



ambientcolor R G B задаёт цвет рассеянного (ambient) освещения.

ambientlevel N задаёт интенсивность рассеянного (ambient) освещения.

Работа с occluders:



Note: occluder - объект, не отображаемый на карте, но рисуемый в теневую карту солнца. Применяется для борьбы с так называемым "light bleeding".

createoccluder создать occluder в текущем положении игрока.

deleteoccluder удалить текущий occluder.

deletealloccluders удалить все occluders.

originoccludermin Меньшие координаты параллелепипеда объёма occluder приравнять текущему положению игрока.

originoccludermax Большие координаты параллелепипеда объёма occluder приравнять текущему положению игрока.

selectnearestoccluder сделать ближайший occluder текущим.

unselectoccluder отключиться от текущего occluder.

moveoccluder_x N передвинуть occluder вдоль оси X на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

moveoccluder_y N передвинуть occluder вдоль оси Y на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

moveoccluder_z N передвинуть occluder вдоль оси Z на расстояние N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

resizeoccluder_x N изменить размеры occluder вдоль оси X на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

resizeoccluder_y N изменить размеры occluder вдоль оси Y на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

resizeoccluder_z N изменить размеры occluder вдоль оси Z на значение N. N может быть отрицательным. Если N не задан, то считается что он равен +1.

resizeoccluder N изменить размеры occluder на значение N. N может быть отрицательным.

Если N не задан, то считается что он равен +1.

Линкование источников света к моделям:

Есть два способа прицепить источник света к моделям (brush- и alias-моделям):

Способ 1, в Радианте:

1. создаём brush-модель, например func_rotating.

2. даём ей имя, например targetname rotor.

3. создаём источник, даём ему нужный цвет и пр. характеристики. Например, для прожектора можно задать его направление, метод стандартный: через сцепку light.target и info_null.targetname (или target_position.targetname).

4. задаём источнику имя владельца, для примера: owner rotor.

5. перемещаем источник в место у модели, откуда он будет светить.

Способ 2, в редакторе релайта:

1. выбираем ближайшую модель командой selectnearestmodel. Модель отображается в своей первоначальной позиции (если удобнее видеть модель в другом месте, то командой placemodel можно переместить её в текущее положение игрока). Модель может быть выбрана и по её имени: selectmodel . Brush-модели имеют имена вида: *N. Имя *0 зарезервировано под статичную модель мира. Командой unselectmodel можно отключиться от текущей модели.

2. делаем текущим источник света, который хотим зацепить к модели.

3. выполняем команду linklight. Команда unlinklight отменяет сцепку.

Именование источников света:

targetnamelight задаёт имя источнику света. Можно присвоить одно имя группе источников. Пустая строка "" удаляет имя.

Подробнее об именованных источниках читайте ниже, в главе "Управление источниками света".

Сохранение релайта:

savelit сохраняет релайт на диск в папку maps. Если fileName не задано, то сохраняет в файл с именем карты и расширением lit.
Скриншот, пример работы в редакторе релайта:


Управление источниками света из игры

Источник света может управляться с сервера (game-код). Делается это так:

Создаётся источник света, даётся ему имя (targetname). Цвет задаём в light_color. Именно так, а не через color или _color!!!

Параметр wait определяет время в секундах, период повторного срабатывания.

Источник "зажигается" через target, например target_relay. Устанавливаем биты spawnflags таргета:

bit 8 (256): 0 - set

1 - toggle

bit 9 (512): 0 - volume

1 - color

Note: bit 10 (1024): internal using for toggle (don't use!)

Вписываем в строку light_parms таргета (по сути, это поле message):

для set volume: "V"

для toggle volume: "V0 V1"

для set color: "R G B"

для toggle color: "R0 G0 B0 R1 G1 B1"



Note: для вариаций volume вписываем значение V относительно начального цвета. Например, если light.light_color = 0.1 0.1 0.1, и хотим увеличить цвет до 1.0 1.0 1.0, то V пишем равным 10.
В скриптовой системе RTCW также добавлены следующие команды:

setlightcolor

setlightvolume

togglelightcolor

togglelightvolume

где targetname имя источника света.


Управление материалами из игры

Материал может управляться с сервера (game-код). Делается это так:

Создаётся таргет target_material,

в поле count пишем целое число от 0 до 11 (номер параметра),

в поле random пишем число, которое хотим вписать в указанный параметр,

в поле target пишем имя материала, параметр которого будем менять.


Управление глобальными параметрами из игры

Глобальные параметры (global0...global7) могут меняться сервером (game-код). Делаем так:

Создаётся таргет target_global,

в поле count пишем целое число от 0 до 7 (номер параметра),

в поле random пишем число, которое хотим вписать в указанный параметр.
Note: В RTCW скрипты должны зажигать таргеты: target_material и target_global.
Описание сущности "light"

"classname" "light" источник света.

"origin" или "light_origin" X Y Z координаты источника света.

" center" или "light_center" X Y Z смещение центра источника света, может быть мат.выражением.

"_color" или "color" или "light_color" R G B цвет источника света, числа от 0 до 1.

"light_radius" X Y Z радиусы вдоль осей системы координат.

"light" или "_light " R радиус источника света.

"far" или "light_far" или "end" или "light_end" R дальность света прожектора.

"target" targetName имя сущности target_position или info_null, куда будет ориентирован прожектор.

"targetname" targetName имя источника света, для управления им сервером.

"owner" targetName имя модели, к которой прицеплен источник света.

"link" targetName имя модели, к которой прицеплен источник света.

"angles" или "light_angles" A B C углы ориентации прожектора.

"map" или "material" или "texture" materialName имя материала для источника света.

"noCullBackFaces" N при "0" задние стороны плоскостей будут отбрасываться при рисовании
в теневую карту.

"noSpecular" N при "0" включён specular-mapping.

"noShadows" N при не-"0" запрещены любые тени.

"noModelsShadows" N при не-"0" запрещены тени только от моделей.

"dynamic" N при не-"0" источник динамический.

"parallel" или "directional" "1" делает источник света солнцем.

"sun_far" или "sun_end" N дальность действия лучей солнца.

Note: свет солнца не затухает с расстоянием.

"intensity" или "sun_intensity" N сила света солнца.

"direction" или "sun_direction" X Y Z вектор направления солнечного света.

"disableSunDisk" "1" запрещает рисовать солнечный диск на небе.



Новые и измененные параметры (cvars)

r_ppl "2" CVAR_ARCHIVE|CVAR_LATCH|CVAR_USERINFO Выбор рендерера:

0 - обычный, 1 - fake PPL, 2 - true PPL.

r_mode "-2" CVAR_ARCHIVE|CVAR_LATCH При -2 разрешение окна совпадает с разрешением рабочего стола.

r_cullPortals "1" отбрасывает потенциально невидимые объекты за порталом,

не попадающие в проекцию портала.

r_sunFade "7" CVAR_CHEAT скорость затухания солнечных бликов.

r_showoccluders "0" CVAR_CHEAT при 1 показывает occluders.

r_showlights "0" CVAR_CHEAT при 1 показывает lights.

r_showmodel "" CVAR_CHEAT рисует tris указанной модели.

r_showtris "0" CVAR_CHEAT если указать имя материала, то отобразит tris всех плоскостей
с таким материалом.

при 1 будет рисовать tris без теста глубины, при 2 нарисует


tris с тестом глубины.

Tris разных типов объектов будут иметь разные цвета.

Яркие тона говорят, что объект в VBO. Блеклые тона - объект
не в VBO, рисуется старым способом.

r_ignore_md3 "0" CVAR_CHEAT при 1 не будет рисовать MD3/MDC-плоскости.

К моделям в VBO это не относится.

r_ignore_mds "0" CVAR_CHEAT (только RTCW) при 1 не будет рисовать MDS-плоскости.

К моделям в VBO это не относится.

r_ignore_Triangles "0" CVAR_CHEAT при 1 не будет рисовать TriangleSoup-плоскости,

например террайны и статуи.

r_ignore_Curves "0" CVAR_CHEAT при 1 не будет рисовать плоскости кривых Безье.

r_ignore_Faces "0" CVAR_CHEAT при 1 не будет рисовать обычные плоскости стен,
полов и потолков.

r_ignore_VboSurfaces "0" CVAR_CHEAT при 1 не будет рисовать VBO-плоскости.

r_speeds "0" CVAR_CHEAT при 4 печатает информацию об освещении и тенях.

r_printPrograms "0" при 1 печатает тексты загружаемых шейдерных программ GLSL.

r_printMaterials "0" CVAR_LATCH|CVAR_CHEAT печатает на плоскостях имена их материалов.

r_noPrintMaterials "0" при 1 запрещает печать имён материалов на плоскостях


(без перезапуска рендерера).

r_printScale_s "1" CVAR_LATCH|CVAR_CHEAT масштаб имени материала по текстурной оси S,


допускается отрицательное число для инвентирования.

r_printScale_t "1" CVAR_LATCH|CVAR_CHEAT масштаб имени материала по текстурной оси T,


допускается отрицательное число для инвентирования.

r_noSpecular "0" при 1 запрещает specular-mapping везде.

r_glCompatibleContext "0" CVAR_LATCH|CVAR_ARCHIVE При 1 запускает OpenGL

в контексте совместимости.

r_glCoreProfile "1" CVAR_LATCH при 0 работает на старом OpenGL профиле.

r_glMajorVersion "3" CVAR_LATCH позволяет указать версию GL (главное число),


на которой запускать игру.

r_glMinorVersion "2" CVAR_LATCH позволяет указать версию GL (второе число),

на которой запускать игру.

r_dof "0" CVAR_ARCHIVE При 1 включает пост-эффект DoF.

r_dofFocus "0" CVAR_ARCHIVE При 0 работает автофокус, при значениях меньше 0 работает

ветка шейдера, показывающая степень размытия DoF, полезно

для отладки. При значениях больше 1, работает как постоянное фокусное расстояние, равное этому значению.

r_dofBias "0.004" CVAR_ARCHIVE Определяет скорость изменения размытия от "центральной

точки". При автофокусе bias тоже автоматически вычисляется. Вычисленное значение не может превысить r_dofBias.

r_dofFade "4" CVAR_ARCHIVE Скорость изменения фокусного расстояния. БОльшее число

означает бОльшую скорость. Нужно для плавного изменения

автофокуса.

r_dofProbeSize "16" CVAR_ARCHIVE Размер грани квадрата в центральной зоне экрана. Например для 16, квадрат 16 на 16, читаем 256 значений глубины. Берётся ближайшая глубина.

(работает для значений от 1 до 64). Нужно для того, чтобы автофокус не "скакал" при перемещении взгляда по веткам деревьев, или решетке.

r_sunShadowMapSize "0" CVAR_ARCHIVE | CVAR_LATCH При 0 автоматический выбор размера теневой карты. Допускаются числа от 512 до 4096, выбрано будет ближайшее значение к степени 2.

r_sunShadowMapSizeLod "0" CVAR_ARCHIVE | CVAR_LATCH Если выбран автовыбор размера теневой карты, параметр корректирует выбор, от 0 до 3.

r_bloom "1" CVAR_ARCHIVE При 1 включает post-process bloom.

r_bloomThreshold ".7" CVAR_ARCHIVE Порог обрезания яркости для bloom.

r_bloomIntensity "2.5" CVAR_ARCHIVE Интенсивность bloom.

r_specular_modifier "1" CVAR_ARCHIVE Множитель яркости specular.

r_diffuse_modifier "1.5" CVAR_ARCHIVE Множитель яркости диффуза.

r_glslFloatPrecision "2" CVAR_ARCHIVE|CVAR_LATCH Точность вычислений с плавающей точкой в GLSL шейдерах. 0 - низкая, 1 - средняя,

2 - высокая. Актуально для мобильных видеокарт.

r_glslIntPrecision "1" CVAR_ARCHIVE|CVAR_LATCH Точность целочисленных вычислений в GLSL шейдерах. 0 - низкая, 1 - средняя,

2 - высокая. Актуально для мобильных видеокарт.

r_jpegOptimize "1" CVAR_ARCHIVE Включает оптимизацию jpeg при снятии скриншотов.

r_jpegQuality "95" CVAR_ARCHIVE Качество jpeg при снятии скриншотов.

r_parallax "2" CVAR_ARCHIVE|CVAR_LATCH При 0 отключает параллакс, 1 - linear step parallax,

2 - cone step parallax.

r_numSteps "5" CVAR_ARCHIVE|CVAR_LATCH Количество шагов для linear step parallax.

r_heightScale "0.05" CVAR_ARCHIVE|CVAR_LATCH Масштаб карты высот для linear step parallax.

r_height2local "1" CVAR_ARCHIVE|CVAR_LATCH Автогенерация карт нормалей из карт высот

r_noLODmodel "1" CVAR_ARCHIVE|CVAR_LATCH Отключает LoD моделей MD3/MDC, тем самым экономя VBO-память.

r_vertexFakeLight "0" CVAR_ARCHIVE При 1 включает вершинное освещение

в fake ppl renderer (r_ppl 1).

r_fxaa "1" CVAR_ARCHIVE При 1 включает сглаживание FXAA.

r_flareSize "1" CVAR_ARCHIVE Множитель длины лучей deform flare.

r_ext_texture_edge_clamp "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает работу GL_EXT_texture_edge_clamp

r_ext_framebuffer_blit "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает работу GL_EXT_framebuffer_blit

r_arb_occlusion_query "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает работу GL_ARB_occlusion_query

r_ext_compressed_textures "0" CVAR_ARCHIVE|CVAR_LATCH Разрешает сжимать текстуры.

r_ext_compressed_normalmaps "0" CVAR_ARCHIVE|CVAR_LATCH Разрешает сжимать карты нормалей.

Варианты сжатий:

0 без сжатия

1 GL_S3TC

2 GL_COMPRESSED_S3TC_DXT1_EXT

3 GL_COMPRESSED_S3TC_DXT3_EXT

4 GL_COMPRESSED_S3TC_DXT5_EXT

5 GL_COMPRESSED_ARB

r_anisotropic "2" Степерь анизотропной фильтрации.

r_distort "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает distortion эффект.

r_detailNormalMap "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает микробампмап.

r_drawSun "1" CVAR_ARCHIVE Рисует солнечный диск на небе.

r_deformTangents "1" CVAR_ARCHIVE|CVAR_LATCH При расчете деформаций вершин пересчитывать тангент-векторы.

r_specular_default "0" CVAR_ARCHIVE Величина бликов для материалов без карт specular.

r_sunLightScale "3" CVAR_ARCHIVE Множитель интенсивности солнечного света.

r_lightScale "2" CVAR_ARCHIVE Множитель интенсивности обычного света.

r_ambientScale "0.2" CVAR_ARCHIVE Множитель интенсивности рассеянного света.

r_lightMapBrightness "0.8" CVAR_ARCHIVE Множитель яркости lightMaps

для fake PPL renderer (r_ppl 1).

r_swapInterval "0" CVAR_ARCHIVE При 2 включается адаптивный

vsync (WGL_EXT_swap_control_tear).

r_ignoreGLErrors "1" CVAR_ARCHIVE При 0 - вылетает на GL ошибках, 1 - печатает предупреждение, 2 - полное игнорирование ошибок.

r_defaultMaterial "" CVAR_ARCHIVE|CVAR_LATCH Если указать имя текстуры, то вместо клеточной default-текстуры будет рисовать эту текстуру.

r_staticLight "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает static-lights.

r_dynamicLight "1" CVAR_ARCHIVE Разрешает dynamic-lights.

r_shadows "1" CVAR_ARCHIVE|CVAR_LATCH Разрешает тени.

r_playershadow "0" CVAR_ARCHIVE Разрешает тени от игрока.

r_gamma "1" CVAR_ARCHIVE Гамма.

r_brightness "1" CVAR_ARCHIVE Яркость.

r_contrast "1" CVAR_ARCHIVE Контраст.

r_saturation "1" CVAR_ARCHIVE Насыщение.

Note: в попиксельных рендерерах (r_ppl > 0) гамма контроль полный. В старом рендерере задействована только гамма.

clientId "Berserker@Quake3" (Q3) или "Berserker@Wolfenstein" (RTCW) CVAR_USERINFO | CVAR_ROM - идентификатор клиента. Если clientId неверный, то новые команды не будут посылаться сервером клиенту.

cl_aviAutoRecord "0" при 1 автоматически начинается запись видео при воспроизведении дёмки.

cl_aviFrameRate "25" CVAR_ARCHIVE FPS сжимаемого видео.

cl_aviJpegOptimize "1" CVAR_ARCHIVE Оптимизировать jpeg в сжимаемом видео.

cl_aviJpegQuality "90" CVAR_ARCHIVE Качество jpeg сжимаемого видео.

cl_aviWidth "0" CVAR_ARCHIVE Ширина сжимаемого видео. При 0 равно ширине экрана.

cl_aviHeight "0" CVAR_ARCHIVE Высота сжимаемого видео. При 0 равно высоте экрана.

cl_aviBackgroundCompressor "1" CVAR_ARCHIVE При 1 запускает компрессор AVI отдельным параллельным потоком.

cl_pauseMinimizedDemo "1" CVAR_ARCHIVE При 1 воспроизведение демо будет приостановлено при потере фокуса. Исключение: запись в AVI не ставит на паузу.

cl_anykeystopsdemo "0" CVAR_ARCHIVE При 1 будет останавливать воспроизведение демо при нажатии любой клавиши (старое поведение).

cl_mapAutoDownload "1" CVAR_ARCHIVE При 1, если сервер не выделенный и если карта не найдена, запускает процесс автоматического скачивания.

cl_avidemo "0" Параметр FpS грабления шотов. Сохраняет в:

screenshots\\shot######.tga (до 1 млн шотов).

При записи новой демо, удаляет шоты и обнуляет счётчик.

Служебные цвары: mme_demoFileName - имя

mme_demoFileNumber - счётчик шотов.

Note: Запись avi (команда video) имеет приоритет перед cl_avidemo.

dl_verbose "0" При 1 выводит в консоль подробную информацию о ходе скачивания.

dl_source "http://ws.q3df.org/maps/downloads/%m" CVAR_ARCHIVE Web-сайт, откуда скачивать отсутствующие карты.

dl_showprogress "1" CVAR_ARCHIVE При 0 - do not show, 1 - show console progress,

2 - show progress in one line.

dl_showmotd "1" CVAR_ARCHIVE Show server message.

dl_usebasedir "0" CVAR_ARCHIVE При 1 скачивать в basefolder (baseq3 или main).

iodfe_hud_snap_draw "0" CVAR_ARCHIVE При 1 включает iodfe-hud.

iodfe_hud_snap_rgba1 ".02 .1 .02 .4" CVAR_ARCHIVE

iodfe_hud_snap_rgba2 ".05 .05 .05 .1" CVAR_ARCHIVE

iodfe_hud_snap_y "248" CVAR_ARCHIVE

iodfe_hud_snap_h "8" CVAR_ARCHIVE

iodfe_hud_snap_auto "1" CVAR_ARCHIVE

iodfe_hud_snap_def "45" CVAR_ARCHIVE

iodfe_hud_snap_speed "70" CVAR_ARCHIVE

iodfe_hud_pitch "" CVAR_ARCHIVE

iodfe_hud_pitch_thickness "2" CVAR_ARCHIVE

iodfe_hud_pitch_x "320" CVAR_ARCHIVE

iodfe_hud_pitch_width "10" CVAR_ARCHIVE

iodfe_hud_pitch_rgba ".8 .8 .8 .8" CVAR_ARCHIVE

com_maxfps_minimized "20" CVAR_ARCHIVE Задаёт ограничение FPS если потерян фокус. При "-1" равен com_maxfps.

com_sleep "0" При 1 экономит процессорное время и энергию батарей.

com_defaultProfile CVAR_ROM Имя профиля с персональными настройками: \profiles\

com_profile "" CVAR_ROM Позволяет заменять имя профиля.

vm_useBaseDLL "0"(Q3) "1"(RTCW) CVAR_ARCHIVE при 1 будет искать DLL в basefolder (baseq3 или main), если не смогли загрузить ни DLL ни QVM.

cg_connectionInterruptedMessage "1" CVAR_ARCHIVE при 0 запретит печать сообщения "Connection Interrupted" и иконку потери связи.

in_mouse "1" При 2 (Q3) или 1 (RTCW) включается raw mouse ветка.

s_muteWhenUnfocused "1", CVAR_ARCHIVE|CVAR_LATCH При 0 - при потере фокуса звук не пропадает.

sys_minimizeWhenUnfocused "1" CVAR_ARCHIVE При 0 не сворачивает окно игры.

sys_lockApplication "1" CVAR_ARCHIVE При 0 разрешены ALT-TAB и прочие комбинации, позволяющие переключиться на другое окно.


Новые команды

cpuspeed Измеряет скорость CPU в MHz.

curl_version Показывает версию библиотеки CURL.

download Запускает скачивание карты. Синтаксис:

download blocking download ( hold ESC to abort )

download & background download

download - abort current background download

download show help or background download progress

pausedemo поставить демо на паузу / убрать с паузы.

stopvideo отключает запись в AVI.

video включает запись в AVI воспроизводимой дёмки.

windowMode Управление окном. Синтаксис:

windowMode restart

windowMode minimized

windowMode windowed

windowMode fullscreen

windowMode swapFullscreen

windowMode swapMinimized


Прочее

Продвинутое автозавершение команд и параметров в консоли: поддерживаются длинные строки команд, разделенные символом ";". Работает автозавершение имён карт и дёмок, также выводится их список.

Четыре вида выдвижение консоли:

Control ~ выдвижение консоли на пару строк, третьей строкой идёт командная строка.

Shift ~ выдвижение консоли на 25% от высоты экрана.

~ стандартное выдвижение консоли на 50% от высоты экрана.

Alt ~ выдвижение консоли на полную высоту экрана.

Автоматическое переключение клавиатуры на английскую раскладку на старте программы. Пользователи с национальной раскладкой по умолчанию, имели проблемы с печатью в консоли.



Поддержка звука 44100 Hz, параметр s_khz теперь поддерживает значение 44.

Используются свои bers_qagamex86.dll, bers_cgamex86.dll и bers_uix86.dll. При их отсутствии может работать на старых DLL/QVM.


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница