Привет.
Вот на какие вещи я трачу своё время.
Half-Life 2 (и все игры на сорсе) всегда смущал меня своей картинкой, откровенно странным освещением в котором как будто периодически возникают провалы. Какие-то объекты или даже просто стенки могут быть недосвечены. Какой-нибудь парапет или поребрик перерезает картинку черной линией. Либо резкие переходы света, когда освещённая грань соседствует с неосвещённой, они смотрят друг на друга но не обмениваются светом, как будто находятся в разных мирах. Как говорит автор Xash3D, картинка распадается на части. За примером далеко ходить не надо:
Это может быть хоть трижды физично но для меня это выглядит странно, это не то что я вижу в реальной жизни.
При чём это не особенность конкретно старого движка как можно подумать: то же самое можно заметить даже в Black Mesa.
Современные игроки я думаю даже не знают что может быть иначе, но я например навидался не только модов на первую часть но и суперсглаженной китайской освещалки VHLT от китайца vluzacn, которая отслеживала формы объектов в 3D и сглаживала несглаживаемое, например ножку стола:
По-хорошему конечно надо было послать эту игру к черту с самого начала, она мне всё равно не нравится, но из-за авторитета и формальной принадлежности к любимой серии я взялся скажем так выкапывать её истинную красоту из-под слоя технических проблем и проблем с артом, которые никому не мешают но мешают конкретно мне, решил дать ей шанс. В какой-то степени мне это даже удалось.
Для экспериментов я взял Half-Life 2: Update 2015 года от Филипа Виктора, потому что там было возможно детальное освещение моделей, что в теории должно было дать мне более гладкую картинку.
Я пытался попеременно что-то делать с текстурами(пакетной обработкой, пытаясь сделать их более кукольными как в 1 части) но там универсального решения которое бы понравилось мне я не нашел, а сидеть обрабатывать каждую отдельно для текстурпака я и не собирался. Как-то менять сами карты я тоже не хотел. Но с освещением мне удалось чего-то добиться.
Первый релайт я делал ещё в ковид. Идея была в том чтобы составить библиотеку моделек всех лампочек и прочих осветительных приборов и излучать свет только от тех источников которые находятся около своей модельки лампы а не висят в воздухе. Идея в целом не такая плохая но она не учитывала насколько хаченной была расстановка лампочек в этой игре.
И ещё я не понял сначала что Вальва направляет внимание игрока через последовательность чередующихся холодных и тёплых лампочек, и поломал их все :)
В этот же раз я поступил несколько умнее:
Всё внимание на те части лестницы которые оказались в тени. Мне нравится эта игра светотени. Я посмотрел как изменился алгоритм расчета непрямого освещения в хл2 по сравнению с хл1 и поменял его обратно.
Яркость конечно изменилась но зато картинка стала производить впечатление. Я конечно думал о том что меня засрут не по одной так по другой причине, например за то что я исказил оригинальное видение. На самом деле у меня был вариант с яркостью этих люминесцентных ламп более близкий к оригинальной яркости но он выглядел абсолютно неинтересно, как каша, не спасала даже атмосфера от более ровного освещения.
Ласпы эти кстати у меня собираются из нескольких небольших лампочек каждая из которых пропорционально притушена. Вот такая вот практика кодинга.
Также я стал считать положение виртуального солнца не там где указано в карте, а там где реально рисуется спрайтик солнца. Это избавило от многих странностей в освещении.
Почему стало так темно? На самом деле история интересная. Я попытался реализовать освещение от неба более сложное чем просто освещение от солнца плюс освещение от небосвода. Потому что как вы видите на самом деле солнце ещё и прячется в светящемся слое облаков, и вы наверное знаете что в реальной жизни освещение от них весьма атмосферное. Меня конечно не хватило на то чтобы перетаскивать настоящий алгоритм из q3map2 который использует для освещения непосредственно саму картинку неба, поэтому я придумал некий колхоз: просто в коде задал для нескольких первых небес несколько областей, каждая из которых светит своим светом. Сначала это была сотня солнц, потом я приспособил штатный инструмент света от неточечного солнца.
Но тем самым я фактически добавил на карты света которого там быть не должно. Чтобы тени не были слишком жидкими, я притушил солнце так чтобы итоговая яркость совпадала с оригинальной. Получилось, правда, ещё дальше от того что было, но мне понравилось: стало похоже на Сталкер. Да и поносно-оранжевое оригинальное освещение от вроде как осеннего солнца мне с самого начала казалось странным, а теперь к нему совсем не хочется возвращаться.
Ещё один предмет моей гордости - костры. Тоже делались в ковид или даже раньше. Они объёмные, набираются из множества лампочек чтобы создать объемный свет, и для них теперь задается лайтстиль чтобы мерцали. А так как костры бывают расположены кучей за которую отвечает в оригинале одна лампочка, то заранее ищем их все и распределяем по кучкам по близости друг к другу а потом так же по близости ищем их родную лампочку и равномерно крошим на каждый по чуть-чуть чтобы соблюсти яркость. Вот такая вот практика кодинга :)
Пока сделал таким образом только карты из первой трети игры, если кого-то заинтересует то могу сделать и дальше. На моддб вон шаблон моего мода скрыли и пока не торопятся возвращать.
Скриншоты для сравнения. Обожаю переключаться между сравнительными скриншотами но готовить их очень скучно.