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

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 115
Возраст: 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

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

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

Рейтинг



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

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

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

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

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

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

Рейтинг



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

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

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

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

Рейтинг



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


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

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

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

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

Добавлено вчера в 13:10:

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

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

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

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

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

Рейтинг



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

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

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

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

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

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

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

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

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

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

Рейтинг



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


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

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

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

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

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

Рейтинг



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

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

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

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

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

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

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

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

Рейтинг



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

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

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


Добавлено сегодня в 07:24:

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

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

Добавлено сегодня в 07:28:

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

Отредактировано Ku2zoff сегодня в 00:20

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

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

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

Рейтинг



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

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

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

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

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

Рейтинг



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

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

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


Добавлено сегодня в 16:10:

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

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

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

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

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

Старое сообщение сегодня 09:10
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 16:02. Новая тема    Ответить
  Предыдущая тема   Следующая тема
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