HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Страницы (32): « Первая ... « 9 10 11 12 [13] 14 15 16 17 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Crystallize
Житель форума

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

Рейтинг



Цитата:
Дядя Миша писал:
Ну оно там не вполне квадратичное. В халфе, как мы помним был этот знаменитный множитель на 10.

Да вполне. Множитель не учитывает ни расстояние ни угол, то есть к затуханию отношения не имеет. Он просто позволяет мапперу вбить меньшие числа и всё равно получить нормальный лайт.

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

Старое сообщение 23-08-2024 08:33
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13497
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
но при этом может рисовать сколько угодно динамических источников света.


Вот кстати некоторые интелы увы не могут только часть рисуют.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 23-08-2024 13:10
- За что?
Crystallize
Житель форума

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

Рейтинг



Цитата:
Unit писал:
Как удаётся совмещать основную работу/вид деятельности и работу над движком, это же уйму времени отнимает, или основная деятельность позволяет параллельно работать на движком

Мне скорее интересно как хватает сил после кодинга еще и какие то статьи на форум писать, да еще и интересные

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

Старое сообщение 25-08-2024 09:21
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33010
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Crystallize писал:
Мне скорее интересно как хватает сил после кодинга еще и какие то статьи на форум писать, да еще и интересные

Так я давно уже ничего не пишу

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 25-08-2024 12:17
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33010
Нанёс повреждений: 392 ед.

Рейтинг



Ну чтож товарищи. Механизм дельта-компрессии для передачи объекто по сети успешно написан, таким образом сетевой статус Ксаша восстановлен.
Сеть, повторюсь, ждала своего часа с сентября 19-го года, ну и вот.

В новом ксаше больше нет никаких фиксированных структур для передачи данных, типа entity_state_t. Вместо этого - raw-массив фиксированной длины, на данный момент он составляет 256 байт на объект, но его можно без проблем увеличить, это ничего не затронет и не сломает. Достаточно отредактировать одну константу. Массив может быть заполнен произвольными переменными, по выбору пользователя. И эти переменные будут переданы на клиент. Так же появилась возможность передать произвольный набор глобальных переменных. На данный момент я использовал это для передачи переменных, которые в халфе входили в структуру movevars_t. Теперь это больше не движковая, жестко ограниченная структура, а произвольная. Так же появились квары-прокси, к которым можно линковать глобальные переменные. В принципе идея прокси-кваров достаточно старая, они были уже в КрайЭнджине, но почему-то ни до халфы ни до кваки так и не добрались.
Менеджмент передачи переменных на клиент, равно как и вообще доступ движка к переменным осуществляется через свойства (properties). Это гибкий и мощный инструмент языка HeadShot. По своим возможностям свойства наиболее близки к таковым в Delphi, но превосходят и их по гибкости. Вы можете определять что разрешить на чтение, что на запись и как это осуществить - через прокси-функцию или через прямой доступ к памяти. Первый вариант даёт гибкость, второй скорость. Там же, в объявлении свойства определяется и сетевая настройка дельты - кол-во бит, с которым переменная будет передана на клиент. Для переменных с плавающей точкой мантисса и экспонента задаётся двумя наборами бит.
Вы так же можете помечать дельтой целый класс, а не атомарную переменную, в этом случае дельта-калькулятор самостоятельно деконструирует его на базовые типы. Но если класс содержит данные разных типов или вы просто не знаете какие параметры лучше использовать, вы можете оставить это на усмотрение системы.

С учётом иерархии объектов на сервере формируются уникальные дельта-таблицы. Наподобие тех, что в халфе были объявлены в delta.lst, вот только здесь они создаются автоматически и строчки в них сортировать не нужно. Так же эти таблицы отсылаются на клиент, поэтому при приёме переменных вам не надо указывать кол-во бит, с которым переменная должна быть считана - клиентская часть уже знает об этом.

Из недоделанного остался ещё предиктинг, NetAPI и запись\воспроизведение демок, но для сингла это пока что не особо нужно.

А я таким образом могу наконец перейти к самой важной задаче, которая, собственно и делает ксаш - ксашем. К портированию игрового кода Ксаш-мода. По итогам портирования в каком-то смысле я вернусь к исходной точке - т.е. к функционалу Xash3D + XashXT, только без архитектурных ограничений, без множества лимитов и с массой возможностей, которые на старом ксаше были попросту нереализуемы.
Когда ксаш-мод будет успешно портирован на Shot, будет наконец-то достигнута первая точка совместимости.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 27-08-2024 19:33
-
Crystallize
Житель форума

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

Рейтинг



Не думал сделать звук через какой-нибудь OpenAL чтобы он хотя бы сквозь стены не проникал?

Добавлено 28-08-2024 в 10:56:

Ну вот этот твой пост-вполне себе мини-статья:

Добавлено 28-08-2024 в 11:35:

Цитата:
Дядя Миша писал:
Ну чтож товарищи.

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

Старое сообщение 28-08-2024 04:35
- За что?
Unit
Частый гость

Группа: Неопытный
Дата регистрации: Jun 2024
Проживает: Краснодарский край
Сообщений: 70

Рейтинг



Цитата:
Crystallize писал:
Не думал сделать звук через какой-нибудь OpenAL чтобы он хотя бы сквозь стены не проникал?

OpenAL не работает с окклюзиями, звук так же будет проникать сквозь стены. Это сложная задача, которая будет требовать просчёта физики, Valve заморочились и выкатили свой Steam audio для VR, по сути это физический движок. По тестам оно не хило так нагружает ЦП, вопрос в том стоит ли оно того.

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

Старое сообщение 28-08-2024 05:29
- За что?
Crystallize
Житель форума

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

Рейтинг



Цитата:
Unit писал:
OpenAL не работает с окклюзиями

В Quake 2 XP они смогли избавиться от слышимости сквозь стени, и ещё они OpenAL юзали. Я считал что это два факта связаны.

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

Старое сообщение 28-08-2024 05:50
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13497
Возраст: 33

Рейтинг



В BSP я думаю это с помощью порталов можно сделать Там же уже заранее предрассчитано кто кого и откуда видит.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 28-08-2024 05:52
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33010
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Crystallize писал:
Не думал сделать звук через какой-нибудь OpenAL чтобы он хотя бы сквозь стены не проникал?

И свет на OpenGL, чтобы он хотя бы сквозь стены не проникал.

Вообще переход на OpenAL в планах, да.

Цитата:
Crystallize писал:
Ну вот этот твой пост-вполне себе мини-статья:

Просто отчёт о проделанной работе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 28-08-2024 06:20
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13497
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
В новом ксаше больше нет никаких фиксированных структур для передачи данных, типа entity_state_t. Вместо этого - raw-массив фиксированной длины, на данный момент он составляет 256 байт на объект, но его можно без проблем увеличить, это ничего не затронет и не сломает. Достаточно отредактировать одну константу. Массив может быть заполнен произвольными переменными, по выбору пользователя. И эти переменные будут переданы на клиент. Так же появилась возможность передать произвольный набор глобальных переменных. На данный момент я использовал это для передачи переменных, которые в халфе входили в структуру movevars_t. Теперь это больше не движковая, жестко ограниченная структура, а произвольная. Так же появились квары-прокси, к которым можно линковать глобальные переменные. В принципе идея прокси-кваров достаточно старая, они были уже в КрайЭнджине, но почему-то ни до халфы ни до кваки так и не добрались.
Менеджмент передачи переменных на клиент, равно как и вообще доступ движка к переменным осуществляется через свойства (properties). Это гибкий и мощный инструмент языка HeadShot. По своим возможностям свойства наиболее близки к таковым в Delphi, но превосходят и их по гибкости. Вы можете определять что разрешить на чтение, что на запись и как это осуществить - через прокси-функцию или через прямой доступ к памяти. Первый вариант даёт гибкость, второй скорость. Там же, в объявлении свойства определяется и сетевая настройка дельты - кол-во бит, с которым переменная будет передана на клиент. Для переменных с плавающей точкой мантисса и экспонента задаётся двумя наборами бит.
Вы так же можете помечать дельтой целый класс, а не атомарную переменную, в этом случае дельта-калькулятор самостоятельно деконструирует его на базовые типы. Но если класс содержит данные разных типов или вы просто не знаете какие параметры лучше использовать, вы можете оставить это на усмотрение системы.


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

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 28-08-2024 в 06:58

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

Старое сообщение 28-08-2024 06:53
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33010
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
делай ещё закачку ресурсов когда подключаешься к другому серверу во время игры как в UT99

Закачка-то в старом ксаше была и здесь осталась в наследство. Пока думаю что с ней делать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 28-08-2024 07:27
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13497
Возраст: 33

Рейтинг



Там кстати Альбатрос какую то супер закачку у себя в форке сделал, очень быстро работает.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 28-08-2024 08:39
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33010
Нанёс повреждений: 392 ед.

Рейтинг



Удалось примерно рассчитать производительность виртуальной машины для Corei3 3.0 GHZ. 200 тысяч инструкций на кадр х 60 кадров ~ 12 MIPS.
Это предельная нагрузочная способность при одноядерной архитектуре в которой остаётся достаточно времени, чтобы все остальным подсистемам движка хватило времени на оставшиеся задачи - дельту, пересылку по сети, интерполяцию, подготовку кадров к рендерингу и фпс при этом не просел ниже 60. Если одно ядро целиком отдать под виртуальную машину и занять его на 100%, то производительность будет около 100 MIPS. Т.е. в 10 раз выше. Порядка двух миллионов инструкций на кадр. А это уже прям сильно за глаза для любой ситуации.

Таким образом есть три пути оптимизации кода на Шоте

1. JIT. Ну тут надо разбираться с генерацией опкодов, с нативными номерами инструкций (поскольку мы будем писать не команды на ассемблере, а их x86 инструкции прямо в номерах опкодов, надо где-то будет найти табличку соответствия, где-то я её видел). У этого подхода есть сразу несколько минусов - во первых он сильно платформозависимый т.е. надо будет написать сразу несколько реализаций, во вторых неприменим в отладочной сборке (а как отлаживать, если один кадр в секунду?), в третьих сложно сказать какой именно прирост он даст. Но полагаю что неплохой, поскольку код на Шоте содержит довольно много динамических условий, которые исчезнут при генерации нативного кода.
Но как решение абсолютно всех проблем он пока что не подходит. Так что пока не планируется к реализации.

2. Мультипоточность. Сервер или даже чисто VM-кадр запускаем на отдельном ядре и получаем очень хороший прирост производительности. Поскольку сервер изолирован от клиента это будет сделать гораздо проще чем в синглплеерной архитектуре без сети. Но есть общий менеджер моделей. Тут либо запретить горячий прекэш, либо очень внимательно отревизить все проблемные места и поставить там тред-локи.
Но пока сеть не финализирована этого делать не следует. А до финализации сети нужна ещё ревизия самого модель-менеджера. Потому что правильно - я им тоже не занимался с 2019-го года. Только добавлял новые типы моделей в уже существующую архитектуру менеджера.
Как оно там всё теперь работает страшно даже представить. Плюс там есть какой-то чудовищный лаг при загрузке даже самых простейших моделей, не представляю себе чем он может быть обусловлен. Надо разбираться. Ну и заодно решить вопрос с докачкой ресурсов. Это всё взаимосвязанные задачи, хотя конечно далеко не такие масштабные, как реализация дельта-компрессии. То есть мы тут опять имеем ситуацию "одно цепляется за другое". Нет, можно конечно игнорировать этот факт, но если делать всё правильно - то только так.

3. Старый добрый приём - если что-то тормозит, вынеси его в нативный код. Здесь у меня очень большое пространство для оптимизации, ибо в данный момент на Шоте написано практически всё. И физика и даже функции трассировки (но сама коллизия конечно в ядре движка, я ещё не сошёл с ума). И судя по результатам профилировки разумеется вся эта физика и отнимает больше всего ресурсов. Что логично и ожидаемо.
В первом квейке как вы помните физику поменять было нельзя вообще.
Она была намертво встроена и пользователь не имел к ней доступа.
Я планирую использовать более гибкий вариант - специальные функции, вызов которых будет осуществлять эволюцию физического кадра. Он так же сможет обращаться к переменным самой энтити, вызывать для нее какие-то каллбэки, менять позицию и углы, это всё будет так же реализовано через доступ по свойствам, которые разрешает именно пользователь. И останется выбор - использовать быструю нативную физику или же самописную. Быстрому внедрению этого варианта мешает тот факт, что надо продумать архитектуру и концепцию абстрактных физических функций, чтобы они годились для большинства игр, например.
А для этого, в свою очередь неплохо бы сначала портировать Ксаш-мод на Shot. И потом уже примерно прикидывать варианты такого абстрактного физического движка.

Как-то так, вообщем и вкрации.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 28-08-2024 08:55
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13497
Возраст: 33

Рейтинг



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

Цитата:
Дядя Миша писал:
что надо продумать архитектуру и концепцию абстрактных физических функций, чтобы они годились для большинства игр, например.


Ну вот колайдеры, ригидбоди, трасса, пересечения, триггеры, велосити и т.д. это же общие вещи. А вот гибсы или платформы давилки всякие например это уже квейкспецифичные, их можно и на шоте сделать.

Кстати ещё такой вопрос у тебя можно легко и быстро перебросить объект в локальное пространство другого объекта? Ну вот например мы наступили на условную платформу, и теперь двигаемся уже вместе с ней т.к. мы внутри её локального пространства. И так же быстро выпрыгнуть с неё в глобальное?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 28-08-2024 в 09:24

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

Старое сообщение 28-08-2024 09:15
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 16:21. Новая тема    Ответить
Страницы (32): « Первая ... « 9 10 11 12 [13] 14 15 16 17 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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