HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Проекционный динамический фонарик в GoldSrc
без кастомного рендерера
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Проекционный динамический фонарик в GoldSrc

В общем, решил я похвастаться своей недавней наработкой. Долгое время был уверен, что если я хочу нормальный свет от фонарика, то надо либо движок менять, либо писать с нуля свой рендерер. Но в итоге за несколько дней попыток "по-приколу посмотреть че из этого выйдет" с помощью некоторых костылей и предыдущих наработок мне удалось сделать то, что в итоге получилось.

Кратко о том, как это работает. Все рисуется в DrawNormalTriangles и DrawTransparentTriangles. Так как стены уже отрисованы, вместо того, чтобы освещать стену, я рисую на этой стене декаль с текстурой альбедо самой этой стены по маске спроецированной текстуры фонарика, ну и дитейл текстуру для полноты картины. Нужно перебирать все видимые сурфейсы, отсекать те, которые точно не должны быть освещены, делать клиппинг по краям стены, к полученным вертексам применить трансформации в зависимости от ненулевых angles и origin энтити, а потом все это рисовать в аддитивном режиме. Линейное затухание света сделать с помощью черного туманчика. Достаточно функционала opengl 1.3, понадобится мультитекстурирование и GL_ENV_COMBINE. Но проще сделать через шейдер, будет производительнее, гибкая настройка, и туманчик не тужен.

Плюсы данного способа:
1. Вы получите красивый фонарик как фпараное. Правда без теней. Тоже как фпараное.

Минусы:
1. Полигоны света рисуются вторым проходом после рендеринга геометрии, поэтому на высокополигональных картах может сильнее просаживаться фпс при включении фонаря. На стандартных картах ХЛ и подобных все летает. На моих только в паре мест наблюдается небольшая просадка, но там в целом надо карту оптимизировать.

2. Чтобы красиво освещать модельки, придется все-таки написать кастомный рендерер студиомоделей. Но если лень с этим разбираться (как мне), можно все так же освещать модель по ее оригину.

3. Рандомно-тайлящиеся текстуры. Так как surf->texture->name - это всегда имя текстуры, которой вы окрасили стену в редакторе (как правило, это первая "-0texname"), а таблица рандомных чисел для тайлинга генерируется движком при запуске игры, то узнать, какая именно текстура сейчас рисуется на стене, мы не можем, и нам придется рисовать первую. Это не выглядит вырвиглазно и даже не всегда заметно. А если вы не используете такие текстуры, то это вовсе не проблема. С анимированными текстурами такой проблемы нет, там все легко считается.

На последнем скриншоте телефон на столе и стул - модельки. Если интересно посмотреть, как это выглядит в динамике, могу записать видео.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225173

Старое сообщение 22-07-2026 20:49
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35219
Нанёс повреждений: 515 ед.
Возраст: 40

Рейтинг



Награды
 
[1 награда]


А декали как освещаются?

Сообщить модератору | IP: Записан
Сообщение: 225174

Старое сообщение 23-07-2026 03:01
-
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Цитата:
XaeroX писал:
А декали как освещаются?

Забыл их упомянуть. У меня в моде кастомные декали, и их поведение с фонарем согласовано. А вот стандартные декали будут просвечиваться. Тут придется либо переписывать рендеринг декалей, либо искать способ рисовать уже нарисованные на поверхности декали. Вроде у структуры msurface_t есть указатель на декали.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225175

Старое сообщение 23-07-2026 06:55
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6972
Возраст: 35

Рейтинг



Sigurth очень здорово. Такой фичи не хватало очень многим модам хл на протяжении всех лет существования голдсорса. Во многих из них хоть глаз выколи, ничего не видно.
Как я понял, всё равно приходится линковать либу, и делать вызовы Opengl32.dll из клиентки? Это же нереализуемо средствами движкового API?

Сообщить модератору | IP: Записан
Сообщение: 225176

Старое сообщение 23-07-2026 16:16
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35219
Нанёс повреждений: 515 ед.
Возраст: 40

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
Как я понял, всё равно приходится линковать либу

Ну можно и динамически подгружать, эта либа ж всегда есть в системе.
Но в софтварном режиме работать не будет, конечно.

Цитата:
Ku2zoff писал:
Такой фичи не хватало очень многим модам хл на протяжении всех лет существования голдсорса.

Кастомные декали есть мало где, а вот освещение декалей тут реальная проблема. Я вот не уверен, что пасс фонарика не "съедает" декали на сурфасах - они вроде рисуются сразу же после самого сурфаса в голсорсе.

Добавлено 23-07-2026 в 13:10:

Цитата:
Sigurth писал:
Чтобы красиво освещать модельки, придется все-таки написать кастомный рендерер студиомоделей

А ты уверен? Может быть можно просто настроить мультитекстурирование и проекционную текстурную матрицу (ну или вершинный шейдер) и просто сделать draw call на клиентке?

Сообщить модератору | IP: Записан
Сообщение: 225177

Старое сообщение 23-07-2026 17:10
-
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Цитата:
Ku2zoff писал:
Это же нереализуемо средствами движкового API?

Средствами движка сделать не получится. Так что да, придется подгружать opengl32.dll и работать с opengl напрямую.

Цитата:
XaeroX писал:
А ты уверен? Может быть можно просто настроить мультитекстурирование и проекционную текстурную матрицу (ну или вершинный шейдер) и просто сделать draw call на клиентке?

Я пока еще не углублялся в этот вопрос. Но попробую такой способ.

Цитата:
XaeroX писал:
освещение декалей тут реальная проблема

Вот так будут выглядеть стандартные декали. Не уверен, что буду пытаться их подружить. Но может быть мне станет интересно, и я попробую. Ну или если будет спрос на тутор или кому-нибудь помочь в мод затащить.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225178

Старое сообщение 23-07-2026 18:31
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35219
Нанёс повреждений: 515 ед.
Возраст: 40

Рейтинг



Награды
 
[1 награда]


Цитата:
Sigurth писал:
Вот так будут выглядеть стандартные декали.

Да, выглядит так что фонарик их "перезаписывает". Попробуй убрать аттенуацию вообще - тогда декали пропадут?

Сообщить модератору | IP: Записан
Сообщение: 225179

Старое сообщение 23-07-2026 19:56
-
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Цитата:
XaeroX писал:
Попробуй убрать аттенуацию вообще - тогда декали пропадут?

Да, тогда фонарик полностью перекроет декали. Они рисуются сразу с сурфейсом. В любом случае придется рисовать "освещенные" декали вручную.

Кстати, огромное спасибо за наводку насчет освещение моделей. Перед вызовом StudioDrawPoints настраиваю фонарик вторым текстурным юнитом, и включаю шейдер, где уже смешиваю мой фонарик с вертексным освещением. Уже есть результаты, осталось потестировать, но пока артефактов не наблюдаю.

На скриншоте дерево - модель с оригином в самом низу, листва с альфа каналом.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225180

Старое сообщение 23-07-2026 20:32
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6972
Возраст: 35

Рейтинг



Цитата:
XaeroX писал:
Ну можно и динамически подгружать, эта либа ж всегда есть в системе.
Но в софтварном режиме работать не будет, конечно.

Цитата:
Sigurth писал:
придется подгружать opengl32.dll и работать с opengl напрямую.

Это костыль, который может сломаться от любого непредвиденного обновления движка. Как было с паранойей, например. Там вообще весь рендерер отвалился. С тринити ситуация полегче и попроще, там расчёт видимости сломался после добавления widescreen fov. Ну и ещё кое-что по-мелочи поломалось.
Мне думается, такие наработки нужно обязательно выкладывать на гитхабе, чтобы авторы римейков/ремастеров или оригинальных модов могли их без проблем внедрить в свои релизы.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.


Добавлено 24-07-2026 в 07:24:

Цитата:
XaeroX писал:
Кастомные декали есть мало где

Мне вспоминается только лишь Ивазион, где есть такая фича. Реализованная средствами движка без каких-либо хаков, конечно. Я был нереально этим впечатлён, поэтому изучал исходники французского мода с большим энтузиазмом, чем исходники той же паранойи.

Добавлено 24-07-2026 в 07:28:

Говоря про фичу, я имел в виду нормально светящий фонарик, а не декали. Да даже в древнючей AvP2 наплечный фонарь морпеха даёт больше света, чем фонарик в голдсорсе. В первом деусе, кстати, тоже. Там можно с кастомным рендерером загрузить текстуры высокого разрешения, и фонарик не сломается. А в голдсорсе сломается, если использовать большие текстуры.

Отредактировано Ku2zoff 24-07-2026 в 00:20

Сообщить модератору | IP: Записан
Сообщение: 225181

Старое сообщение 24-07-2026 00:28
- За что?
ZGreen
Роугнесс

Дата регистрации: Sep 2007
Проживает: Красноярск
Сообщений: 465
Возраст: 38

Рейтинг



Цитата:
Ku2zoff писал:
А в голдсорсе сломается, если использовать большие текстуры.

А как он ломается? Он только маленьким становится, если скейл текстуры занижен. Это имеется в виду?

Сообщить модератору | IP: Записан
Сообщение: 225182

Старое сообщение 24-07-2026 04:06
- За что?
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Цитата:
Ku2zoff писал:
Это костыль, который может сломаться от любого непредвиденного обновления движка. Как было с паранойей, например

Ну почему же. На твои вызовы glBindTexture, glBegin/glEnd никак не повлияет то, что вальва там обновит. Если только вдруг не решит перевести хл на вулкан и не удалит опенгл рендерер) Что действительно может все сломать, так это использование всяких структур, которые вальва может внезапно дополнить и не документировать. Как было с юбилейным обновлением и их дополнением структуры msurface_t в хардварной версии, когда в sdk лежит только софтварная. Но все это спокойно фиксится и работает дальше.

Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.


Добавлено 24-07-2026 в 16:10:

Цитата:
Ku2zoff писал:
Мне думается, такие наработки нужно обязательно выкладывать на гитхабе, чтобы авторы римейков/ремастеров или оригинальных модов могли их без проблем внедрить в свои релизы.

Проблемы в любом случае будут. Например, с теми же декалями. Я думаю, что проще уж выкладывать наработку "фонарик+кастомные декали". Если уже кто-то и захочет себе нормальный свет, то почему бы не захотеть и нормальные декали. Причем никто не заставляет использовать супер HD дырочки от пуль. Можно и стандартные из decals.wad рисовать так, что никто и не догадается, что они рисуются не средствами движка.

Вот, например, стандартные декали, но рисуются вручную.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225183

Старое сообщение 24-07-2026 09:10
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4798
Возраст: 36

Рейтинг



Sigurth может можно как-то заранее рисовать декаль на альбедо-текстуре в отдельном буфере?

Сообщить модератору | IP: Записан
Сообщение: 225188

Старое сообщение 25-07-2026 08:41
- За что?
Sigurth
Житель форума

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 116
Возраст: 30

Рейтинг



Crystallize В любом случае нужно их рисовать. Это не сложно, ничего даже парсить и грузить не придется. Просто в момент отрисовки фонаря на конкретной поверхности, мы проходим по списку surf->pdecals, а в нем есть все необходимое для отрисовки. Но я уже предвижу баг. Если рисовать каждую декаль отдельно, а свет от фонаря рисуется в аддитивном режиме, то если несколько декалей будут наложены друг на друга, то мы будем ловить пересветы в местах их пересечения. Так что да, наверное можно рисовать альбедо + деталь + декали*лайтмапу в отдельный FBO. Но такие частые переключения FBO выйдут слишком затратно. Так что, единственным разумным решением на данный момент мне видится кастомный рендеринг декалей. В целом это не так сложно. Плюс появляется возможность гибкой кастомизации вроде различных режимов отображения. Правда так же придется внедрять клиентский сейв, чтобы декали сохранялись. Статичные декали, которые маппер выставляет сам, сохранять не потребуется, просто на старте карты вызывать какой-нибудь PostActivate. Короче, все равно одно за другое цепляется.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | IP: Записан
Сообщение: 225189

Старое сообщение 25-07-2026 09:48
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 01:28. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Проекционный динамический фонарик в GoldSrc
без кастомного рендерера
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024