главная профиль правила регистрация календарь народ F.A.Q поиск выход
Forum Half-Life.ru : Powered by vBulletin version 2.2.8 Forum Half-Life.ru > Ручная работа > Мастерская > Простые стенсильные тени (длл + исходник)
Страниц (2): [1] 2 »   Предыдущая Тема   Следующая Тема
Автор
Тема Создать Новую Тему    Ответить
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

Простые стенсильные тени (длл + исходник)

Не так давно во время переписки с одним человеком по поводу стенсильных теней что-то на меня накатило, и я в порыве энтузиазма набросал небольшой код. Сначала оно задумывалось чисто как пример, но потом я его ещё немного обстругал, и в принципе получилось нечто играбельное. По-крайней мере, я с этими тенями играл в хлдм

Позже захотел по мотивам написать статейку, но руки так и не дошли. Чтобы зря не пропадало, решил просто выложить как есть - кому интересно, сами разберутся

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

В архиве несколько cpp и h-файлов, которые я изменил в клиентской библиотеке, и, собственно, сама откомпилированная библиотека - для тех, кто сразу хочет посмотреть это в деле. (все изменения в коде отмечены комментарием "buz")

Естественно, требуется также наличие включенного стенсил-буфера. Самый простой способ его обеспечить - это подложить похаканную opengl32.dll в папку с игрой. Она также есть в архиве (исходники такой штуки можете взять в тулките паранойи)

Вот парочка скриншотов:



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

И последнее:
Если вы используете античиты для игры в интернете, то уберите opengl32.dll из папки халфы перед их включением! А то забанит нафиг, и хрен вы потом докажете, что это был не чит

Вложение: stencil_shadows.rar (254 Кб)
Это вложение было скачано 1397 раз.

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

Старое Сообщение 03-10-2008 13:41
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

Круто У меня было много гемора с расчетом силуэтных ребер для моделей. Если будет время - гляну, как ты сделал.

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

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

Старое Сообщение 03-10-2008 14:50
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
(_-=ZhekA=-_)
Старец

Дата Регистрации: Oct 2006
Проживает: Москва
Сообщений: 543

Рейтинг:
10 голос(ов)
[10 голос(ов)]

Я ничего не кодил, я только заменил дллку ) и хотел посмотреть на результат ) Вот что у меня из этого выхло - одна большая тень

Вложение: 324453.jpg (64 Кб)
Это вложение было скачано 1222 раз.

__________________
Area 51

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

Старое Сообщение 03-10-2008 16:28
(_-=ZhekA=-_) в офлайне Посмотреть Профайл (_-=ZhekA=-_) Кликните для отправки (_-=ZhekA=-_) Приватного Сообщения Найти все Сообщения от (_-=ZhekA=-_) Добавить (_-=ZhekA=-_) в Список Друзей Редактировать/Удалить Сообщение Цитировать (_-=ZhekA=-_)
FiEctro
• Need More Ponies

Дата Регистрации: Jan 2007
Проживает: Эквестрия
Сообщений: 2189

Рейтинг:
28 голос(ов)
[28 голос(ов)]

BUzer
Зачот блин !
Блин такой же баг как и у жеки . Тени размазываются по всему экрану . opengl32 юзаю параноевский . Видюха гыфорс 7600gs

Заменил на твой , всё запахало . А ну колись что ты там в opengl32 запрятал .

Блин они тоже не видят источники , но всеравно круто , гораздо круче обычного халфовского хака .

Отредактировано FiEctro 03-10-2008 в 18:17

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

Старое Сообщение 03-10-2008 17:59
FiEctro в офлайне Посмотреть Профайл FiEctro Кликните для отправки FiEctro Приватного Сообщения Найти все Сообщения от FiEctro Добавить FiEctro в Список Друзей Редактировать/Удалить Сообщение Цитировать FiEctro
Ku2zofff
Старожил

Дата Регистрации: Apr 2007
Проживает: Почти что хорошо
Сообщений: 457

Рейтинг:
6 голос(ов)
[6 голос(ов)]

BUzer уух ты! Тени почти как в хл2(направление одинаковое). Респект. Направление тени мона рассчитать от точки, env_shadowlight, например. Но это потом. BUzer а почему исходник Opengl32.dll не прилагается?

З.Ы. Удовольствия много доставило.
З.З.Ы. Интересно, в общем(про исходники).
З.З.З.Ы. Сбылась мечта идиота(Это я про себя).

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

Старое Сообщение 03-10-2008 18:45
Ku2zofff в офлайне Посмотреть Профайл Ku2zofff Кликните для отправки Ku2zofff Приватного Сообщения Найти все Сообщения от Ku2zofff Добавить Ku2zofff в Список Друзей Редактировать/Удалить Сообщение Цитировать Ku2zofff
FiEctro
• Need More Ponies

Дата Регистрации: Jan 2007
Проживает: Эквестрия
Сообщений: 2189

Рейтинг:
28 голос(ов)
[28 голос(ов)]

Ku2zofff
>> З.З.З.Ы. Сбылась мечта идиота(Это я про себя).

И про меня . Я долго на эту тему нашим кодерам мозг парил . А бузер взял да зделал .

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

Старое Сообщение 03-10-2008 18:47
FiEctro в офлайне Посмотреть Профайл FiEctro Кликните для отправки FiEctro Приватного Сообщения Найти все Сообщения от FiEctro Добавить FiEctro в Список Друзей Редактировать/Удалить Сообщение Цитировать FiEctro
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

Похоже, что паранойская опенгл просто не чистит стенсил буфер, хоть и включает его

Исходник опенгл32 в аттаче - он всегда в glClear чистит также и стенсил.

XaeroX
Вобщем идея такая - на этапе препроцесса для модели все её стрипы и фаны преобразуются в отдельные треугольники, а также считается информация о рёбрах (для каждого ребра известны две точки и два соседних треугольника).
Рисование идёт в два этапа - сначала бежим по треугольникам, и делаем пометки, какой треугольник смотрит на свет, а какой - нет. Затем бежим по рёбрам, и те рёбра, которые находятся на границе силуэта (когда один из треугольников обращён к свету), добавляем в теневой объём.

Вложение: opengl32.rar (63 Кб)
Это вложение было скачано 612 раз.

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

Старое Сообщение 04-10-2008 03:12
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
FiEctro
• Need More Ponies

Дата Регистрации: Jan 2007
Проживает: Эквестрия
Сообщений: 2189

Рейтинг:
28 голос(ов)
[28 голос(ов)]

BUzer
А где там направление искать ? Допустим я хочу чтобы тени отбрасывались чисто вниз как в hlfx:s или хл2 .

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

Старое Сообщение 04-10-2008 07:53
FiEctro в офлайне Посмотреть Профайл FiEctro Кликните для отправки FiEctro Приватного Сообщения Найти все Сообщения от FiEctro Добавить FiEctro в Список Друзей Редактировать/Удалить Сообщение Цитировать FiEctro
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

BUzer да, я уже посмотрел код Неплохо (если не считать мерзкий STL)

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

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

Старое Сообщение 04-10-2008 09:10
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

FiEctro
Погляди функцию GetShadowVector. По умолчанию она берёт направление солнышка. Если солнышка нет, то фиксированный вектор.

Кстати, там в функции DrawShadowsForEnt в начале есть проверка на дистанцию, но я её почему-то закомментировал - видать, тестил че-то Вобщем это самая рульная оптимизация для этих теней
Для мультиплеера точно лучше включить.

Да, и ещё - для компиляции нужен модифицированный com_model.h из папки common. Полезная штука, если надо сильно влезать в движковые структурки. На всякий случай выложу (хотя он есть в тех-же сорцах паранойи).

Добавлено 04-10-2008 в 20:28:

XaeroX
STL может где-то и мерзкий, зато там есть map, что сэкономило мне кучу времени

Вложение: com_model.rar (4 Кб)
Это вложение было скачано 489 раз.

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

Старое Сообщение 04-10-2008 09:16
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

BUzer ну мне не влом и самому этот map написать

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

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

Старое Сообщение 04-10-2008 10:20
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
Ku2zofff
Старожил

Дата Регистрации: Apr 2007
Проживает: Почти что хорошо
Сообщений: 457

Рейтинг:
6 голос(ов)
[6 голос(ов)]

Ну вот, для тех, кто использует параноевский opengl32.dll Opengl32.cpp строка 162.

До:

Code:

void sys_glClear 
(GLbitfield mask)
{
    
// buz: clear also stencil buffer
/*    int hasStencil;
    glGetIntegerv(GL_STENCIL_BITS, &hasStencil);
    if (hasStencil)
    {
        mask |= GL_STENCIL_BUFFER_BIT;
        glClearStencil(0);
    //    glStencilMask(0); // dont write stencil by default
    }*/

    
(*orig_glClear)(mask); 
}


После:
Code:

void sys_glClear 
(GLbitfield mask)
{
    
// buz: clear also stencil buffer
    
int hasStencil;
    
glGetIntegerv(GL_STENCIL_BITS, &hasStencil);
    if (
hasStencil)
    {
        
mask |= GL_STENCIL_BUFFER_BIT;
        
glClearStencil(0);
    
//    glStencilMask(0); // dont write stencil by default
    
}

    (*
orig_glClear)(mask); 
}



И у меня вопрос, наверное глупый, но всё же. Куда запихнуть отрисовку теней (что находится в DrawNormalTriangles) чтобы они рисовались поверх мира в параноевском рендере, т.е. чтобы их было видно, когда gl_renderer = 1?

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

Старое Сообщение 05-10-2008 05:11
Ku2zofff в офлайне Посмотреть Профайл Ku2zofff Кликните для отправки Ku2zofff Приватного Сообщения Найти все Сообщения от Ku2zofff Добавить Ku2zofff в Список Друзей Редактировать/Удалить Сообщение Цитировать Ku2zofff
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

Туда-же, в конец DrawNormalTriangles.
Однако, там может возникнуть проблема с отрисовкой world'а для теней, т.к. приведённый код полагается на данные от халфовского рендера. Хотя может и не возникнуть. Не знаю

Также неплохо было-бы объеденить это с рендером моделей паранойи - хотя-бы чтобы два раза не расчитывать трансформированные вершины.

И ещё желательно не подключать статически opengl32.lib, а переписать огл-вызовы так, как это было принято в паранойе - через glmanager.

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

Старое Сообщение 05-10-2008 06:07
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
POMKA
Великий немой (DEVOICED)
Девойс

Дата Регистрации: Oct 2006
Проживает: д. Усть-Каменка Грибов: 7
Сообщений: 91

Рейтинг:
4 голос(ов)
[4 голос(ов)]

quote:
Автор оригинала Ku2zofff
Направление тени мона рассчитать от точки, env_shadowlight, например. Но это потом.
Если интересно, то могу показать алгоритм, как я считал.

__________________
регулярно посещаю "Полигон" (маппинг под CS): http://poligon.cs2.ru/forum

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

Старое Сообщение 07-10-2008 17:03
POMKA в офлайне Посмотреть Профайл POMKA Кликните для отправки POMKA Приватного Сообщения Найти все Сообщения от POMKA Добавить POMKA в Список Друзей Редактировать/Удалить Сообщение Цитировать POMKA
Ku2zofff
Старожил

Дата Регистрации: Apr 2007
Проживает: Почти что хорошо
Сообщений: 457

Рейтинг:
6 голос(ов)
[6 голос(ов)]

Короче, тени в паранойе упорно не хотят рисоваться. Когда рендерер отключен всё норм. К тому же они очень сильно сжирают фпс, когда в кадре несколько высокополигональных моделей(штук 5). Наверное, я откажусь от использования этих теней.

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

Старое Сообщение 11-10-2008 03:20
Ku2zofff в офлайне Посмотреть Профайл Ku2zofff Кликните для отправки Ku2zofff Приватного Сообщения Найти все Сообщения от Ku2zofff Добавить Ku2zofff в Список Друзей Редактировать/Удалить Сообщение Цитировать Ku2zofff

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

Прикрепить Файл:
Максимальный Размер: 524288 байт

Допустимое расширение Файлов: gif jpg png txt zip jpeg rmf bsp rar
Время GMT. Текущее Время 08:08. Создать Новую Тему    Ответить
Страниц (2): [1] 2 »   Предыдущая Тема   Следующая Тема
Версия для Печати | Отправить страницу по Email | Подписаться на эту Тему

Перейти на:
Оценить эту Тему:

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



Copyright ©1999-2021 Half-Life.ru
Все права защищены Законодательством РФ.
Перепечатка материалов (в любом виде) с данного сайта
без письменного разрешения авторов запрещена.
HL DM Style for vBulletin © by: anno
Тех. площадка: Join-Stock Company "BIG Telecom"