Статьи
Недокументированные особенности игры Half-Life
Dzug@ru
2003 г. (с небольшими дополнениями от 2012-2018)
Мало кто знает, что движок
Халвы, построенный на базе Квейка 2 при переработке
получил ряд недокументированных возможностей.
Поскольку компьютеры в 1998 году в плане графических
изысков не представляли из себя ничего приличного,
все эти "секретные навороты" были пущены
под стол. В результате мы до сих пор играем в
Халфу без динамических теней (а ведь были на изображениях из демы Half-Life),
объёмного освещения, тумана, дождя, других погодных эффектов и внутреннеигровой
физики уровня 3 Дума (обработка кинетики некоторых персонажей начата в недокументированных объектах
monster_cine_barney, monster_cine3_barney, monster_cine_panther, monster_cine_scientist,
monster_cine2_scientist, monster_cine3_scientist, monster_cine2_hvyweapons, monster_cine2_slave).
Несколько иллюстраций из альфы и беты Half-Life:
Работает техника Теневых объёмов или техника "Shadow volume"
Тени
Проще всего с тенями.
Прежде всего с помощью редактора PaKScape открываем из архива \Half-Life\valve\pak0.pak файл
HL.cfg и добавляем строчку DynamicLight_Enabled 1 . Сохраняем .cfg в папку \Half-Life\valve\.
Открываем файл HL.fgd — тот, что использует ваш Hammer
(свежие редакторы здесь), и
добавляем в самый конец стро́ки типа
@PointClass base(Targetname, RenderFxChoices,
Angles) size(-16 -16 -16, 16 16 16) = dynamic_light
: "Dynamic Light Effect"
[
LightName(target_source) : "Name of Light"
framestart(integer) : "Starting Frame"
: 0
spawnflags(flags) =
[
1 : "Start On" : 0
32: "Toggle" : 0
]
]
Теперь запускаем редактор, добавляем тот самый
dynamic_light. Теперь самое простое — поле Lightname
— имя источника света, который и будет отбрасывать
динамические тени. Для начала можно установить флаг "Start On". Приготовьтесь, техника эта не
оптимизирована и может серьёзно тормозить.
Дополнение от Buzer и ObaGlaza: сам динамический свет можно сделать проще — белый динамический свет включается
при задании недокументированного параметра effects = 4 или effects = 8 в точечной или брашевой энтите.
Например, он будет двигаться вместе с центром координат движущегося невидимого func_train с параметром effects = 4.
Вот испытания движущегося динамического освещения на карте Presidium.bsp нашего мода H-L Red Alert
— эффект программно не изменён, он такой же, как и в обычном Half-Life:
effects = 4
Видно, что возникает сразу несколько светильников вокруг брашевого короба, в котором катается невидимый func_train.
Должно быть светильников 6-7 или 14-15, и они расположены крестообразно вокруг центра брашевого поезда. И действительно движок теперь стал слегка подтормаживать, пока находишся рядом.
В самом Half-Life Вы тоже наверняка вспомните карту с запуском ракеты, когда вокруг обдавало ярким белым светом.
На иллюстрации испытания можно отметить ещё пару вещей, что всё-таки не заметно теней, и что эти светильники освещают окружение ромбовидно.
И наконец, пусть не смущает, что в верхнем левом углу движок оранжевым пишет предупреждения — это относится не к световому эффекту, а к сценариям у персонажей за кадром.
Не хотелось переделывать сцену ещё раз или вырезать тот текст вручную.
Освещение со спрайтом пламени из ракеты effects = 64
Объёмное освещение
Начало то же самое. Пишем в ваш файл .fgd:
@PointClass base(Targetname, RenderFxChoices,
Angles) size(-16 -16 -16, 16 16 16) = volume_light
: "Volume Light Effect"
[
LightName(target_source) : "Name of Light"
TargetName(target_name) : "Name of Target"
conesize(integer) : "Size of cone" :
30
Fx_amount(integer) : "Opaque" : 255
Render_mode(fRender_mode) : "Render Mode"
spawnflags(flags) =
[
1 : "Start On" : 0
32 : "Not Solid" : 0
64: "Toggle" : 0
]
]
Использование не намного сложнее. Lightname — источник
света. В данном случае можно использовать info_target.
Targetname — точка, куда будет проецироваться
объёмный луч света.
Conesize — угол расхождения лучей.
Туман
Первым делом, создайте в редакторе
Wally или TSynth
красивую чёрно-белую
мутную текстуру, имитирующую клубистую поверхность
тумана. Главное условие — её имя должно начинаться
с "~" или "-". Создаём Solid
— блок func_illusionary
и затекстуриваем его этой текстурой. В поле
content устанавливаем вместо solid значение fog (?).
Объёмный туман готов. Но это ещё не всё. Нужно
настроить параметры тумана на карте. Для этого
используются map_environment и game_environment.
Вас должны интересовать следующие поля:
- falloff (затухание),
- Fx_color (цвет тумана),
- Fx_amount (прозрачность тумана),
- fog_density (его плотность)
Физика
Пожалуй, единственный момент,
когда применялся динамический просчёт столкновений
— это в игре Blue shift — момент с двумя катящимися катушками
с кабелем на платформе:
Реализовать подобную физику достаточно сложно,
но всё-таки можно. Перво-наперво расставьте на
карте достаточно info_target — лучше в углах сетки
и присвойте им какое-нибудь одинаковое имя. Затем
расставьте на полу ровной плоскостью 10-12 info_node
с теми же именами. Теперь поставьте какую-нибудь
полку и на ней коробки (сделайте их энтитями func_pushable), в поле
target которых следует указать имя узлов. Следующий
шаг — FGD файл, куда следует дописать уже
@PointClass base(Targetname, RenderFxChoices,
Angles) size(-16 -16 -16, 16 16 16) = dynamic
: "Dynamic physic controller"
[
spawnflags(flags) =
[
1 : "Enabled" : 0
]
]
Добавляем на карту этот самый dynamic и устанавливаем
флажок.
Теперь, запустив игру, вы сможете увидеть, как
коробки от удара взлетают и смешно отскакивают
друг от друга и от пола. Скринка прилагается.
Осадки
Самое простое. Ставим env_beam и 2 info_target
— сверху (с неба) и снизу (на уровне земли). Указываем
их как обычный луч, но в поле "sprite name" пишем
либо env_clRain или env_clSnow или env_clCloud
(то же, что и туман, но по всей карте). Полный
список можно взять на http://www.Valve_ERC.com
[между прочим, более красивый вариант можно сделать с помощью HL SDK из статьи "Программирование дождя и снега" — прим. ОбаГлаза].
Линзовые эффекты>
Нет, тут речь пойдёт не о преломлении, а о бликах на стекле, как это бывает на линзах объектива видеокамеры. В старом PhotoShop'е многие на свои картинки не раз накладывали подобный эффект.
Статья ещё не закончена
(to be continued)
Комментировать статью:
Александр Пасяда · 22 марта 2014
Я интересовался недокументированными возможностями Half-Life 1. В статье пишут, будто бы в архиве \valve\pak0.pak был файл HL.cfg, но в Half-Life версии 1.1.1.0 уже такого нет.
Пожалуйста, если у кого есть бета или ранняя версия 1.0.0.0, проверьте наличие HL.cfg и напишите, что там за текст!
Максим Краско · 22 марта 2014
Beam должен был идти от тестовой камеры, а потом туман после провала эксперимента.
Макс Рокосовский · 23 марта 2014
1. Были Stencil Shadows - Расплющенные тени от моделек.
2. Динамичные свет, как от фонарика (SP/MP) в параметрах FGD: effects = 4 или effects = 8. Так от них начинаются двигаться тени.
3. Туман был в HL, но реализован не конца на OpenGL режиме.
4. Физика в HL1, не было все это маппинг.
5. Линзовые эффекты были в бетках, только полностью реализованы в Decay.
Владимир Сирик · 23 марта 2014
Линзовые эффекты ?
Мыло 90ых ?
Хотелось бы скриншот и из беты и с Декея)
|