HLFX.Ru Forum
Показать все 479 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- XashNT: блог разработчика (https://hlfx.ru/forum/showthread.php?threadid=6097)


Отправлено Дядя Миша 04-08-2024 в 11:16:

XashNT: блог разработчика

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

Что было создано:
1. Разработан универсальный абстрактный контейнер для хранения игровых ресурсов.
2. Разработан, внедрён и успешно используется формат CSM для хранения статичных мешей.
3. Создан формат хранения уровней для XashNT, к нему написаны компилятор из исходных ресурсов, лайтмаппер и построитель навигации для AI.
4. Создан формат для хранения скелетной анимации, компилятор в этот формат написан, но ещё будет дорабатываться.
5. Создан формат для хренения вертексной анимации, компилятор предстоит написать.
6. Создан формат для хранения спрайтов, компилятор предстоит написать.
7. Создан формат шрифтов, поддерживается как генерация на лету, так и ручная сборка.
8. Создана оригинальная система материалов с широкими возможностями.
9. Разработан скриптовой язык HeadShot.
10. Создан плагин для JackHammer для работы с XashNT
11. Созданы конверторы ресурсов из Quake, Quake II, Half-Life, XashXT, Paranoia 2:Savior, Stalker, Metro. Они ещё потребуют доработки.
12. Написан новый абстрактный рендерер на базе вышеупомянутой системы материалов.
13. Написан плагин для работы с абстрактными контейнерами для Total Commander.
14. На XashNT портирован первый Quake, идёт перенос Meanwhile In Russia

Здесь, конечно, перечислено далеко не всё, только самое основное, что может представлять интерес для людей, далёких от технических подробностей.

Что ещё предстоит сделать из намеченного:
1. Новый сетевой движок с возможностью передавать на клиент какие угодно переменные. В ГолдСорсе и старом Ксаше, как вы помните это было жестко определено захардкоденной структурой entity_state_t.
2. Новый OpenGL рендерер, соответствующий стандартам OpenGL 3.3,
его ещё называют Modern OpenGL. Это позволить улучшить совместимость со встроенными видеокартами Intel и должно дать дополнительный прирост производительности. Минимальные системные требования таким образом возрастают до GeForce 8xxx, но я думаю это не проблема. У большинства встроенное видео от Intel и вот оно в полной мере поддерживает OpenGL 3.3, т.к. все эти карточки в составе процессоров iCore были выпущены уже после 2010-го года.
3. Портирование XashXT (мод для Xash3D) на XashNT. Естественно на язык HeadShot.
4. <будет объявлено дополнительно>
5. Портирование Visual Component Library (VCL) из среды Delphi на HeadShot.
6. Создание недостающих частей окружения: плагин для Noesis, Модельвьювер.
7. Разработка нативного редактора с оконным интерфейсом на базе VCL, портированного на HeadShot.

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-08-2024 в 11:30:

Дядя Миша
Это здорово! Великолепно что движок развивается

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


Отправлено ZGreen 04-08-2024 в 11:50:

Прошлая тема переполнилась?


Отправлено Aynekko 04-08-2024 в 12:13:

Отписываюсь чтобы глядеть.
В продолжение прошлой:

Цитата:
FiEctro писал:
Может ли маппер работавший с голдсорцом внезапно пересесть на сорс? Вроде и там и там хамер.

Может, отличий практически нет.

__________________
Мой мод на Xash


Отправлено Дядя Миша 04-08-2024 в 12:55:

Цитата:
ZGreen писал:
Прошлая тема переполнилась?

Типа тово

Добавлено 04-08-2024 в 15:49:

Цитата:
Открой любой проект на Юнити, оно везде одинаковое. И да, навмеш агент это констрейнт. Вот сам навмеш увы вшит в движок и ничего с ним не поделать, это я смело могу заявить как один из недостатков Юнити. Благо есть кастомные. О чём я и говорю что за простоту всегда приходится платить гибкостью.

Ты как-то странно используешь слово констрейнт. В моём представлении это шарнир такой с определённым кол-вом степеней свободы. Где навмеш, а где шарнир?

Цитата:
Так и тут. Ну ничего тебе не мешает обернуть констрейнт в инстанс и спавнить его как обычные халфовские энтитии.

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

Я мыслю вот какими категориями:
1. Есть сцена, обычно она принадлежит нулевому объекту worldspawn.
2. Есть все остальные объекты, которые взаимодействуют друг с другом на этой сцене.
3. Сцена обеспечивает статичную геометрию, запечённое освещение, нав-меш или аи-сетку, а так же коллизию.
4. Объекты коллидят со сценой и друг с другом.
5. У объектов может быть модель, одна, но любая, а может и не быть.
6. Возможности объекта зависят от наличия модели. Очевидно если нет модели, то проиграть анимацию не получится.
7. Движок взаимодействует с объектами - считает для них коллизию, посылает по сети, сохраняет и восстанавливает их состояния, рисует на экране.
Ну и на базе всего этого делается игра.

А тебя послушать, так в Юнити сплошь какие-то констрейнты, обвёрнутые в инстансы и кости для них можно настраивать прямо из редактора.
Я видел очень много игр на голдсорсе, но никаких констрейнтов в каждой энтите, да ещё и обвернутой в инстанс там и близко не было. А игры были.
А теперь ты мне говоришь, что на этих констрейнтах можно всю кваку сделать. Ты уж пожалуйста своими словами изложи как это у вас устроено, чтобы я понял.

Добавлено 04-08-2024 в 15:55:

Цитата:
Все объекты в Юнити абстрактные, и констрейнты абстрактные. И для игровых объектов, и для ИИ, и для интерфейса, и для всего остального. Объект это просто точка с именем, а констрейнт задаёт ему свойства. Твои скрипты тоже можно как констрейнт использовать.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено nemyax 04-08-2024 в 13:37:

Цитата:
Дядя Миша писал:
Ты как-то странно используешь слово констрейнт.

У нас во блендерах и тому подобном констрейнт это алгоритмическая сущность, как-либо ограничивающая трансформации.


Отправлено Crystallize 04-08-2024 в 14:21:

Цитата:
Дядя Миша писал:
Ты как-то странно используешь слово констрейнт.

Как-то раз видел что модельку без анимации называют кламп, тоже нелогично


Отправлено FiEctro 04-08-2024 в 18:49:

Цитата:
Дядя Миша писал:
Ты как-то странно используешь слово констрейнт. В моём представлении это шарнир такой с определённым кол-вом степеней свободы. Где навмеш, а где шарнир?


Как я говорил объект это пустышка с именем. А класс который задаёт ему свойства это констрейнт, например - трансформ, колайдер, аниматор, ригидбоди, шарнир, навмеш агент (не путать с самим навмешем, агент просто говорит искать путь объекту в его пространстве), пользовательский скрипт и т.д.

Цитата:
Дядя Миша писал:
Ну вот тоже абсолютно непонятная для меня терминология. Каким образом констрейнт, обвёрнутый в инстанс может стать обычной халфовской энтитью? Что это за чертовщина такая.


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

Вот например Доктор Тресси сделал брашевой салют из множества энтитей, а ты сказал что так не годится, и просто сделал 1 энтитию env_bsalut которая спавнит все эти энтитии уже настроенные во время игры.

Цитата:
Дядя Миша писал:
1. Есть сцена, обычно она принадлежит нулевому объекту worldspawn.
2. Есть все остальные объекты, которые взаимодействуют друг с другом на этой сцене.
3. Сцена обеспечивает статичную геометрию, запечённое освещение, нав-меш или аи-сетку, а так же коллизию.
4. Объекты коллидят со сценой и друг с другом.
5. У объектов может быть модель, одна, но любая, а может и не быть.
6. Возможности объекта зависят от наличия модели. Очевидно если нет модели, то проиграть анимацию не получится.
7. Движок взаимодействует с объектами - считает для них коллизию, посылает по сети, сохраняет и восстанавливает их состояния, рисует на экране.
Ну и на базе всего этого делается игра.


1. Со сценой в целом всё верно. Только активных сцен может быть несколько в пространстве, включая DontDestroyOnLoad (из названия думаю понятно).

2. Не просто объекты, а иерархия, ну как та панелька в кварке. Кроме объектов в иерархии может быть префаб, хотя это тоже объект.

3. Нет, сцена это просто контейнер с объектами, ничего она про геометрию не знает. В Юнити статичная геометрия это просто обычная модель с флагом static которой ты можешь отдельно от всего уровня перезапечь лайтмапу. Ну либо сразу всем. Тоже самое с запеканием навмеша.

4. В Юнити есть свойство (констрейнт) для объекта - коллайдер, есть бокс коллайдер (ббокс), есть капсула из третьей кваки, есть сфера, есть терраин коллайдер, есть мешколайдер как в сорсе (в т.ч. его можно конвертировать в конвекс), так же их можно переключить в режим триггера. Всё взаимодействие с физикой происходит через него.

Если ты повесишь ещё ригидбоди на тот же объект, он автоматом его подцепит и уже будет сталкиваться с другими объектами со всеми законами физики.

5. В Юнити так же, но моделей у объекта может быть несколько, как и колайдеров например один физический - второй для триггера у двери. Так же модель может быть процедурной (например маршевые кубы, БСП, блобы или ещй какой то изначально не поодерживаемый формат геометрии), потипу TriApi из халфы. Это тоже отдельный констрейнт Меш рендер, а файл модели Меш Фильтер.

6. Логично в целом, но Юнити без разницы, там один объект может управлять другим.

7. Юнити так же, вот представь у тебя есть серверная стойка. Это объект, тебе надо поставить в эту стойку сервера с нужными свойствами, это констрейнты или в терминологии юнити - компоненты, классы. Констрейнты это больше из 3д пакетов, но смысл у них тот же самый, я просто использую этот термин поскольку ты уже понимаешь его смысл.

Здесь про компоненты: https://unity3d.fandom.com/ru/wiki/...82%D0%BE%D0%B2.
может так будет понятнее, чем я объясняю.

Цитата:
Дядя Миша писал:
А тебя послушать, так в Юнити сплошь какие-то констрейнты, обвёрнутые в инстансы и кости для них можно настраивать прямо из редактора.
Я видел очень много игр на голдсорсе, но никаких констрейнтов в каждой энтите, да ещё и обвернутой в инстанс там и близко не было. А игры были.
А теперь ты мне говоришь, что на этих констрейнтах можно всю кваку сделать. Ты уж пожалуйста своими словами изложи как это у вас устроено, чтобы я понял.


Понимаю я наверное запутал тебя, я не говорил что всю кваку сделать, нет ты перепутал всё. Я говорю что многие простые вещи можно собрать на I/O системе (к примеру теже двери), на ней к слову в Юнити почти весь UI строится. Ты просто отлавливаешь событие в одном компоненте и передаёшь событие другому.

Вот к примеру как я делал звуки у дверей:
https://alxgk.ru/uploader/img/68cba2eced41d1c3856fe0a64ae6af08.png

В поле Name пишем имя эвента которое отлавливаем.

Добавлено 04-08-2024 в 21:49:

Дядя Миша
Посмотри личку, я ещё тебе прислал.

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


Отправлено Chyvachok 04-08-2024 в 18:57:

Скрытый текст покажись


Отправлено a1batross 04-08-2024 в 19:47:

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

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 04-08-2024 в 21:39:

Цитата:
FiEctro писал:
Как я говорил объект это пустышка с именем

Но в халфе оно не так. Да и в новом Ксаше тоже. У объекта может не быть никакого имени, имя ему по большому счёту нужно только для корректной десериализации.
Цитата:
FiEctro писал:
А класс который задаёт ему свойства это констрейнт, например - трансформ, колайдер, аниматор, ригидбоди, шарнир, навмеш агент

Очень странный механизм, очень. Я использоую наследование, ну как и в халфе, собственно, хотя там оно было добавлено скорее от балды, а у меня несёт реальную функциональность.
Т.е. вот есть класс CBaseEntity - на его основе можно создавать совсем простые объекты. Есть класс CBaseAnimating - на его основе уже создаются анимированные модели. Есть класс CbaseToggle - тут у нас двери и лифты.
Прикол в том, что побольшому счёту (а особенно в новом Ксаше) это дикая условность. Все эти классы добавлены просто для удобства и ничего не мешает создать класс вообще без наследника и получить в нём ровно тот же самый функционал, что и в унаследованных классах. То есть здесь нет каких-либо ограничений. Можно вообще нагородить сколько угодно изолированных классов, которые ни от чего не наследуются - это будет так же корректно работать как и существующая система. В Юнити, насколько я знаю подобный трюк провернуть нельзя - там все объекты обязаны наследоваться от какого-то базового, который корнями уходит в движок.

Цитата:
FiEctro писал:
Монстр это сложная штука которая состоит из кучи объектов и спавнит другие объекты

Да нет же. Монстр это один объект. Унаследованный от CBaseMonster.

Цитата:
FiEctro писал:
Вот например Доктор Тресси сделал брашевой салют из множества энтитей, а ты сказал что так не годится, и просто сделал 1 энтитию env_bsalut которая спавнит все эти энтитии уже настроенные во время игры.

Да, но мой салют не был брашевым...

Цитата:
FiEctro писал:
Только активных сцен может быть несколько в пространстве

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

Цитата:
FiEctro писал:
Не просто объекты, а иерархия, ну как та панелька в кварке. Кроме объектов в иерархии может быть префаб, хотя это тоже объект.

Я долго думал над иерархической природой сцены, но так ни к чему и не пришёл. Тут ещё сказывается мой опыт в разработке языка программирования. Подобное упражнение очень сильно прочищает мозги и те вещи, которые всегда казались очевидными - перестают таковыми быть, открываются новые горизонты. Вот и в случае с иерархичностью сцены. Нет четкого критиерия, по которому должна осуществляется эта иерархичность. Родительский трансформ? Но этого явно недостаточно чтобы заявить об иерархии. Объекты бывают связаны между собой разными неявными способами и далеко не всегда можно определить какой у какого в подчинении. К примеру модель оружия приаттачена к модели NPC физически, но она же отправляем ему эвенты с анимаций своей модели оружия. Т.е. в каком-то смысле выступает источником команд, хотя с точки зрения физики - это явно подчинённый предмет.

Цитата:
FiEctro писал:
В Юнити статичная геометрия это просто обычная модель с флагом static которой ты можешь отдельно от всего уровня перезапечь лайтмапу. Ну либо сразу всем. Тоже самое с запеканием навмеша.

Минимум компиляции да, я помню.

Цитата:
FiEctro писал:
В Юнити есть свойство (констрейнт) для объекта - коллайдер, есть бокс коллайдер (ббокс), есть капсула из третьей кваки, есть сфера, есть терраин коллайдер, есть мешколайдер как в сорсе (в т.ч. его можно конвертировать в конвекс), так же их можно переключить в режим триггера. Всё взаимодействие с физикой происходит через него.

Свойство - это проперти, а не констрейнт. Констрейнт в переводе на русский это ограничение, ограничитель. А что касается физики, то я выбрал такой подход, где разработчику вообще не надо думать ни про какие коллайдеры. Единственный выбор который приходится делать - это аппроксимация NPC. По хитбоксам или просто коробкой\капсулой там.
А статичная геометрия всегда имеет точную коллизию. Ну и в дальнейшем надо будет сделать коллизию для анимированных моделей с обратной связью. Это когда анимированная дверь может реально давить игрока и отъезжать назад. Что-то такое.

Цитата:
FiEctro писал:
В Юнити так же, но моделей у объекта может быть несколько, как и колайдеров например один физический - второй для триггера у двери.

Я мог бы это сделать, но по моему убеждению это нарушает тиеричность и путает. Когда у простейшего объекта появляются дополнительные свойства. И это всегда приводит к проблемам менеджмента. Т.к. мы даже не знаем толком сколько моделей у объекта и за что они отвечают, если получаем доступ в него со стороны.

Цитата:
FiEctro писал:
Логично в целом, но Юнити без разницы, там один объект может управлять другим.

Разумеется. Взять те же scripted_sequence из халфы. Своих моделей у этой энтити не было, но они управляли монстрами.

Цитата:
FiEctro писал:
это констрейнты или в терминологии юнити - компоненты, классы

Это вот щас чо было? Это не официальный термин Юнити, ты сам его придумал использовать в таком качестве?

Цитата:
FiEctro писал:
Вот к примеру как я делал звуки у дверей:

Нет, ты путаешь. Это анимационные события. Причём тут система ввода-вывода? Впрочем, в халфе такое тоже было. Когда Гордон после поездки в вагончике заходит в холл, его встречает Барни на крутящемся стуле. Так вот верчение этого стула как раз и рулится из эвента анимации. Там таргентейм жестко закомпилен прямо в модель барни.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Snecy 04-08-2024 в 23:51:

Хочу уточнить насчет Unity.
Классы движка можно наследовать, можно создавать классы без наследования от классов движка, ну как это делается в C#.

Если говорить про IDE, то обычное дело когда есть огромные ветки из иерархий вложенных объектов. У каждого объекта может быть множество компонентов, это специальные классы движка, которые добавляют функционал объектам. Есть куча готовых компонентов, можно свои написать. Все это может быть по разному взаимосвязано.

Работа с IDE примерно такая: сделал пустышку, навесил нужные компоненты. Обычно логику игровых механик выделяют в "чистые" С# классы, но можно прям и в компонентах писать.

Да стоит упомянуть, что у пустышки захадкожен компонент "Трансформ" отвечающий за положение в иерархии и координаты на сцене.

__________________
Моё имя Snecy, но все меня зовут бухать


Отправлено (_-=ZhekA=-_) 05-08-2024 в 05:59:

Дядя Миша
Ты все всегда, так красиво описываешь и рассказываешь - читать конечно интересно )
Но, ты бы выкладывал, какие-нибудь обычные демки для тех, кто просто хочет посмотреть, тупо побегать и не более того ) Ну еще баги там поискать, если они есть )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 05-08-2024 в 06:17:

Цитата:
(_-=ZhekA=-_) писал:
Но, ты бы выкладывал, какие-нибудь обычные демки для тех, кто просто хочет посмотреть, тупо побегать и не более того ) Ну еще баги там поискать, если они есть )

Обязательно побегаете, когда я перестану там всё изменять, чтобы не ломать совместимость с каждым обновлением. Конечно такого, чтобы вот прямо каждый день что-то менялось уже нет, но всё равно ещё случается.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 05-08-2024 в 06:27:

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

Для тех, что хочет просто побегать это не имеет значения в плане совместимости )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 05-08-2024 в 10:20:

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


Ну ID наверное всеравно какой то есть? В Юнити ты кстати можешь ещё объекты перемещать в слои и давать им теги, например чтобы они по разному взаимодействали с физикой, рейкастом или триггерами.

Цитата:
Дядя Миша писал:
Очень странный механизм, очень. Я использоую наследование, ну как и в халфе, собственно, хотя там оно было добавлено скорее от балды, а у меня несёт реальную функциональность.
Т.е. вот есть класс CBaseEntity - на его основе можно создавать совсем простые объекты. Есть класс CBaseAnimating - на его основе уже создаются анимированные модели. Есть класс CbaseToggle - тут у нас двери и лифты.
Прикол в том, что побольшому счёту (а особенно в новом Ксаше) это дикая условность. Все эти классы добавлены просто для удобства и ничего не мешает создать класс вообще без наследника и получить в нём ровно тот же самый функционал, что и в унаследованных классах. То есть здесь нет каких-либо ограничений. Можно вообще нагородить сколько угодно изолированных классов, которые ни от чего не наследуются - это будет так же корректно работать как и существующая система. В Юнити, насколько я знаю подобный трюк провернуть нельзя - там все объекты обязаны наследоваться от какого-то базового, который корнями уходит в движок.


Ну вот это и есть компоненты да, т.е. класс например который проигрывает звук это компонент, а класс который проигрывает звук и двигает дверь это уже пользователь. Ты можешь эти компоненты использвовать как энтитии, только тебе не надо городить гирлянду из объектов, т.к. ты можешь повесить их все на 1 объект, удобно.

Цитата:
Дядя Миша писал:
Да нет же. Монстр это один объект. Унаследованный от CBaseMonster.


Не правда. Это композиция. Что такое CBaseMonster? Он проигрывает звуки? Да. Он реагирует на физику? Да. Он включает ИИ? Да. Какой же это объект? Это гиперкласс который или дублирует или включает в себя композицию других объектов.

Цитата:
Дядя Миша писал:
Да, но мой салют не был брашевым...


Ну я просто объяснил как работает инстанс префаба.

Цитата:
Дядя Миша писал:
Я такое не делал. В принципе это не противоречит архитектуре движка, но я пока не представляю где и зачем мне это понадобится. А пока я этого не представляю, лучше и не пытаться это делать. Вполне вероятно, что это костыль самого Юнити, призванный компенсировать какие-то недостатки. Ну например отсутствие бесшовного чейнджлевела.


Это нужно больше для асинхронной загрузки уровней, у тебя я так понимаю такое не планируется?

Цитата:
Дядя Миша писал:
Я долго думал над иерархической природой сцены, но так ни к чему и не пришёл. Тут ещё сказывается мой опыт в разработке языка программирования. Подобное упражнение очень сильно прочищает мозги и те вещи, которые всегда казались очевидными - перестают таковыми быть, открываются новые горизонты. Вот и в случае с иерархичностью сцены. Нет четкого критиерия, по которому должна осуществляется эта иерархичность. Родительский трансформ? Но этого явно недостаточно чтобы заявить об иерархии. Объекты бывают связаны между собой разными неявными способами и далеко не всегда можно определить какой у какого в подчинении. К примеру модель оружия приаттачена к модели NPC физически, но она же отправляем ему эвенты с анимаций своей модели оружия. Т.е. в каком-то смысле выступает источником команд, хотя с точки зрения физики - это явно подчинённый предмет.


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

Цитата:
Дядя Миша писал:
А что касается физики, то я выбрал такой подход, где разработчику вообще не надо думать ни про какие коллайдеры. Единственный выбор который приходится делать - это аппроксимация NPC. По хитбоксам или просто коробкой\капсулой там.
А статичная геометрия всегда имеет точную коллизию. Ну и в дальнейшем надо будет сделать коллизию для анимированных моделей с обратной связью. Это когда анимированная дверь может реально давить игрока и отъезжать назад. Что-то такое.


Ну опять же, у тебя куча сущностей которые дублируют друг друга. Колайдер для статики, колайдер для динамичных моделей, колайдер для анимированых моделей. Зачем городить огород и потом думать как обеспечить им взаимодействие друг с другом когда есть просто самый элементарный колайдер который годится вообще для всего? И ты его можешь повесить на любую систему какую не придумаешь? Просто сделать ему режим генерации колайдера.

Насчёт точной колизии тоже поаккуратнее, что если у тебя уровень будет иметь десятки миллионов полигонов? Что будет с этой коллизией?

Цитата:
Дядя Миша писал:
Я мог бы это сделать, но по моему убеждению это нарушает тиеричность и путает. Когда у простейшего объекта появляются дополнительные свойства. И это всегда приводит к проблемам менеджмента. Т.к. мы даже не знаем толком сколько моделей у объекта и за что они отвечают, если получаем доступ в него со стороны.


А что такое тиеричность? Ты думаешь у одного объекта может быть только один коллайдер? Вспомни сколько хитбоксов и триггеров у игрока и монстров. Опять всё это хардкодить? И плодить дублирующие системы? Вместо того чтобы просто накинуть их в редакторе на нужные кости.

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


Я пытался оперировать твоим языком, ты начал с констрейнтов я продолжил и похоже мы запутались окончательно. Ладно ты про свойство правильно написал, про констрейнт тоже в целом. Давай их пока в сторону. В Юнити на объекты ты вешаешь именно компоненты, вот так они и называются и никак иначе. Компонент с точки зрения движка это просто класс из которых ты складываешь композицию объекта.

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


Компоненты, про остальные названия забудь. Я просто пытался в твой язык, получилось плохо.

Цитата:
Дядя Миша писал:
Нет, ты путаешь. Это анимационные события. Причём тут система ввода-вывода? Впрочем, в халфе такое тоже было. Когда Гордон после поездки в вагончике заходит в холл, его встречает Барни на крутящемся стуле. Так вот верчение этого стула как раз и рулится из эвента анимации. Там таргентейм жестко закомпилен прямо в модель барни.


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

Добавлено 05-08-2024 в 13:20:

По поводу кстати языка, рекомендую подсмотреть такие фичи:

Процедурная анимация интефейса:
https://www.youtube.com/watch?v=ZfvxdEASPIE

Работа с асинхронными функциями:
https://www.youtube.com/watch?v=jVFXnDd40CE
https://www.youtube.com/watch?v=7eDJbRWyj2A
https://www.youtube.com/watch?v=Rju9x_P0nKM

Реактивное программирование (работа с потоками)
https://youtu.be/1mqHUQIO3rM

Работа с адресуемыми ресурсами
https://youtu.be/LBOAMYHU2mg

Этот набор используется Юнити программистами сейчас повсеместно. Хотелось чтобы такие или подобные фишки шота уже поддерживал из коробки.

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


Отправлено Дядя Миша 05-08-2024 в 10:43:

Цитата:
FiEctro писал:
Ну вот это и есть компоненты да, т.е. класс например который проигрывает звук это компонент, а класс который проигрывает звук и двигает дверь это уже пользователь.

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

Цитата:
FiEctro писал:
Что такое CBaseMonster? Он проигрывает звуки? Да. Он реагирует на физику? Да. Он включает ИИ? Да. Какой же это объект? Это гиперкласс который или дублирует или включает в себя композицию других объектов.

У тебя ложное представление об объектах. Объект это просто кусок памяти с переменными, которые надо хранить. Вот и всё. Проигрывание звуков, поиск пути, коллизию он получает, обращаясь к движковым функциям.

Цитата:
FiEctro писал:
Это нужно больше для асинхронной загрузки уровней, у тебя я так понимаю такое не планируется?

Архитектура не препятствует, может и введу когда-нибудь.

Цитата:
FiEctro писал:
Ну опять же, у тебя куча сущностей которые дублируют друг друга. Колайдер для статики, колайдер для динамичных моделей, колайдер для анимированых моделей. Зачем городить огород и потом думать как обеспечить им взаимодействие друг с другом когда есть просто самый элементарный колайдер который годится вообще для всего? И ты его можешь повесить на любую систему какую не придумаешь? Просто сделать ему режим генерации колайдера.

Это диалог немого с глухим ей-богу. Вам долгие годы втирали что гланды надо удалять через жопу и ты теперь не можешь понять что бывает иначе. Потому что все кругом удаляют через жопу и написаны тысячи исследований на эту тему.

Цитата:
FiEctro писал:
Насчёт точной колизии тоже поаккуратнее, что если у тебя уровень будет иметь десятки миллионов полигонов? Что будет с этой коллизией?

Да что ей будет-то? Десятки миллионов я не тестировал, но 5-6 миллионов вполне. Прекрасно коллидит, не тормозит. Впрочем можно вручную грузить упрощённую копию коллизии, сделанную так же вручную.

Цитата:
FiEctro писал:
Но всётаки общее определение у них есть - объекты иерархии имеют глобальное и локальные пространства

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

Цитата:
FiEctro писал:
Ты думаешь у одного объекта может быть только один коллайдер? Вспомни сколько хитбоксов и триггеров у игрока и монстров

Это смотря что считать коллайдером. Технически все хитбоксы - это один коллайдер, принадлежащий одной модели.

Цитата:
FiEctro писал:
Я пытался оперировать твоим языком, ты начал с констрейнтов я продолжил

Я начал? Но где?

Цитата:
FiEctro писал:
Я просто пытался в твой язык, получилось плохо.

Цитату пожалуйста.

Цитата:
FiEctro писал:
По поводу кстати языка, рекомендую подсмотреть такие фичи:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 05-08-2024 в 13:43:

Цитата:
Дядя Миша писал:
Нет, это ложное определение, хотя на первый взгляд и кажется истинным. Вам просто навязали на ровном ненужную сущность, ну пример как 186 гендеров. Вот простой пример - если мы удалим родительскую энтить, что должно произойти с дочерними? Они должны удалиться тоже? Они должны отвалиться и включить собственную физику? Они должны зависнуть в определённой точке пространства? Только не надо мне говорить "как сделаешь так и будет" это было бы справедливо для конструкций, созданных самим юзером. Но здесь навязанная абстракция.
Значит она должна как-то решать и подобные ситуации.


Не могу ответить тебе со 100% точностью на этот вопрос. Но обычно при удалении родителя его дочерние объекты просто выходят на иерархию выше. Если у этих объектов нет компонентов физики то да, они просто зависнут в воздухе. Если есть, то будут вести себя по физике точно так же как и вели бы себя при активном родителе. Так сделано во многих движках и 3д пакетах.

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

Цитата:
Дядя Миша писал:
Цитату пожалуйста.


Последняя страница предыдущей темы. Впрочем не важно, просто запомни что есть объекты и компоненты, вот и всё. В Блендере к слову констрейнты навершиваются точно так же как компоненты в Юнити.

Цитата:
Дядя Миша писал:
Шарп изначально убогий язык, в который постоянно вводили недостающее. Не вижу особого смысла это смотреть, тем более на лагающем ютубе.
Но напомню что всё вышеперечисленное - не самоцель, оно скорее всего нужно для компенсации каких-то родовых травм языка или самого Юнити.
А маркетологами естественно преподносится как невероятный прорыв.
Ну что-то типа "эй, мы наконец-то починили старое дерьмо при помощи другого дерьма и это круто".


Я знаю что ты любишь красочно описывать недостатки того чего никогда в жизни не пробовал. Но на вопрос так и не ответил, какие аналоги есть у тебя?

Про обход лагов ютуба - гугл в помощь. Ну или на крайний случай тема про ютуб на этом форуме, там всё описано.

Цитата:
Дядя Миша писал:
У тебя ложное представление об объектах. Объект это просто кусок памяти с переменными, которые надо хранить. Вот и всё. Проигрывание звуков, поиск пути, коллизию он получает, обращаясь к движковым функциям.


Так то оно так, просто у тебя к этому доступ осуществляется только кодом. В Юнити же кодом и со сцены через UI редактора.

Цитата:
Дядя Миша писал:
Нет, у меня вообще не так. Все классы создаёт пользователь. Проигрывание звука - это функция из интерфейса. А движение двери - это пользовательская физика. Я понял о чём ты, но я не стал так делать, потому что крайне негибкая система, хотя на первый взгляд кажется удобной и логичной.


Почему не гибкая? Если ты хочешь сделать свою версию компонента ты просто можешь наследоваться от неё.

Добавлено 05-08-2024 в 16:43:

Цитата:
Дядя Миша писал:
Шарп изначально убогий язык, в который постоянно вводили недостающее. Не вижу особого смысла это смотреть, тем более на лагающем ютубе.
Но напомню что всё вышеперечисленное - не самоцель, оно скорее всего нужно для компенсации каких-то родовых травм языка или самого Юнити.
А маркетологами естественно преподносится как невероятный прорыв.


Ну тогда признай что и C++ убогий язык, т.к. Шарпы это по сути тот же C++ , когда майкрософт пытался упростить разработку с языком в котором нифига нет.

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


Отправлено nemyax 05-08-2024 в 15:15:

Цитата:
FiEctro писал:
Шарпы это по сути тот же C++

Нет, шарпы это "джава есть у нас дома".


Отправлено FiEctro 05-08-2024 в 15:32:

nemyax
Ну все эти языки по сути сиподобные. Всеравно с ними работать куда удобнее и проще чем с обычными крестами.

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


Отправлено Дядя Миша 05-08-2024 в 16:04:

Цитата:
FiEctro писал:
Про обход лагов ютуба - гугл в помощь

Для икспи это всё неактуально.

Цитата:
FiEctro писал:
Но на вопрос так и не ответил, какие аналоги есть у тебя?

Проблемы надо решать по мере их поступления.

Цитата:
FiEctro писал:
Так то оно так, просто у тебя к этому доступ осуществляется только кодом. В Юнити же кодом и со сцены через UI редактора.

Странная претензия. Ну нет у меня ещё редактора. Не из чего осуществлять доступ.

Цитата:
FiEctro писал:
Ну тогда признай что и C++ убогий язык, т.к. Шарпы это по сути тот же C++ , когда майкрософт пытался упростить разработку с языком в котором нифига нет.

Так ты не умеешь в С++, с чего ты взял что он убогий? Есть вещи для которых он весьма неудобен, это да. Но Шарп это "Наш ответ Яве".

Цитата:
FiEctro писал:
Всеравно с ними работать куда удобнее и проще чем с обычными крестами.

Сомневаюсь. Мне к Шарпу даже прикасаться страшно. Как это так - нет глобальных переменных. И объектов на стеке помоему там тоже нет, ну как и в Яве.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 05-08-2024 в 16:43:

Цитата:
Дядя Миша писал:
Для икспи это всё неактуально.

Так ты что, на икспи ещё? о_О

Цитата:
Дядя Миша писал:
Сомневаюсь. Мне к Шарпу даже прикасаться страшно. Как это так - нет глобальных переменных. И объектов на стеке помоему там тоже нет, ну как и в Яве.

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


Отправлено nemyax 05-08-2024 в 16:45:

Если читал давно, то макось была на Objective-C. А если не очень, то на свифту. На шарпе она нипочём никогда не могла быть.


Отправлено FiEctro 05-08-2024 в 17:00:

Цитата:
Дядя Миша писал:
Для икспи это всё неактуально.


Ты говорил что у тебя есть десятка.

Цитата:
Дядя Миша писал:
Так ты не умеешь в С++, с чего ты взял что он убогий? Есть вещи для которых он весьма неудобен, это да. Но Шарп это "Наш ответ Яве".


Я не говорил что C++ убогий, я говорил что шарп сиподобный, и если он тебе кажется убогим получается что для тебя все сиподобные языки убогие.

С C++ я имею опыт, и понаступал с ним на кучу граблей которых нету по дефолту в шарпе.

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


Отправлено Crystallize 05-08-2024 в 17:55:

Цитата:
nemyax писал:
Если читал давно, то макось была на Objective-C

Да, видимо так.


Отправлено Дядя Миша 05-08-2024 в 20:55:

Цитата:
Crystallize писал:
Так ты что, на икспи ещё? о_О

Ну да, а шо?

Цитата:
Crystallize писал:
а в Шарпе обращение к отсутствующему объекту не считается ошибкой и вылета не происходит.

Вылет это сигнал для отладки. Чтобы ты разобрался что у тебя не так. Но люди почему-то решили что выброс исключения ввели нарочно, чтобы все мучались. Ну отключи экзепшены при компиляции - кто запрещает?
Потом не удивляйся той чертовщине, что будет происходить с приложением.
Кстати в голдсорсе hl.dll исторически шёл с отключёнными исключениями.

Цитата:
FiEctro писал:
Ты говорил что у тебя есть десятка.

Давно снёс.

Цитата:
FiEctro писал:
Я не говорил что C++ убогий, я говорил что шарп сиподобный, и если он тебе кажется убогим получается что для тебя все сиподобные языки убогие.

Я выше пояснил свою мысль.

Цитата:
FiEctro писал:
С C++ я имею опыт, и понаступал с ним на кучу граблей

Это хорошо. Перечисли их пожалуйста, чтобы я был уверен, что ты не наступишь на них в Шоте.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 05-08-2024 в 22:33:

Цитата:
Дядя Миша писал:
Это хорошо. Перечисли их пожалуйста, чтобы я был уверен, что ты не наступишь на них в Шоте.


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

С другой стороны в С++ можно почти всё обернуть как в шарпах в классы и методы, вот только как правило многое в шарпах обернуто уже по дефолту, а в крестах надо писать самому или подключать левые библиотеки.

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


Отправлено nemyax 05-08-2024 в 22:37:

FiEctro
А язык картошка это как?


Отправлено FiEctro 05-08-2024 в 22:39:

Цитата:
nemyax писал:
А язык картошка это как?


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

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


Отправлено Дядя Миша 06-08-2024 в 06:22:

Цитата:
FiEctro писал:
Много стрингов разных типов совместимых и не очень

Да, это я исправил в первую очередь.

Цитата:
FiEctro писал:
указатели - удобно, но для игровой логики почти бесполезно

Указатели позволяют ссылаться на зависимые объекты. Только там по смыслу нужны безопасные указатели.

Цитата:
FiEctro писал:
мне сказали что переменные надо объявлять в определенном порядке а то будет утечка

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

Цитата:
FiEctro писал:
MFC как одна большая ошибка (сложилось впечатление что даже майкрософт не знает до конца как оно работает)

MFC на крестах это боль конечно. Его бы на Шот перенести и будет совсем другой расклад.

Цитата:
FiEctro писал:
ну и ещё было куча всяких мелочей, все не упомнишь

Ну ладно, я понял, что твоём знакомство с языком было крайне поверхностным и настрой был изначально негативным. Т.е. тебя предварительно напугали.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 08:03:

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


Да поверхностным. Ну тоесть написать что то простое или что то подправить. Я наверное просто не знаю нужных библиотек, например по началу Vector3 и нужные операции с ним я писал на крестах с нуля, потом узнал что есть библиотека где он уже есть. Может быть где то и листы и словари есть.

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

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


Отправлено Crystallize 06-08-2024 в 09:41:

Цитата:
Дядя Миша писал:
MFC на крестах это боль конечно. Его бы на Шот перенести и будет совсем другой расклад.

Можно будет писать general purpose приложения с интерфейсом?


Отправлено Дядя Миша 06-08-2024 в 10:05:

Цитата:
FiEctro писал:
Но для игровой логики мне кажется он избыточен.

Всё зависит от сколько игровой логики ты хочешь написать на языке.
У меня изначально были очень широкие планы в этом отношении, т.е. язык должен был описывать всё, что можно описать в халфовских дллках.
Ни один из существующих скриптовых языков для этого не годился.
Поэтому пришлось создать HeadShot. Если в дальнейшем по каким-то причинам я урежу объем кода, реализованного на нём, это не потребует от меня никакого вмешательства в язык. А вот если бы мне захотелось большего, а язык был бы к этому не готов, получилась бы ерунда как в Юнити.
Во всех этих скриптовых языках беда с АТД. Они их не поддерживают.
Точнее поддерживают, но в виде встроенных нативных объектов.
Это значит, что если у тебя в классе вектора или кватерниона нет каких-то операций, то сделать ничего с этим невозможно. Может эти нативные классы можно как-то расширять, я не уверен, но всё равно тут нет целостности. В Шоте корректная работа с АТД, можно создавать свои.
Конечно я могу реализовать тот же vec3 целиком нативно, если посчитаю что так будет намного быстрее. Но главное что есть свобода выбора.

Цитата:
Crystallize писал:
Можно будет писать general purpose приложения с интерфейсом?

Да, Шот очень хорошо подойдет для создания окошек, это одно из его назначений.

Добавлено 06-08-2024 в 13:01:

Цитата:
FiEctro писал:
мощный инструмент, особенно когда нужно тонко работать с памятью

Про тонкую работу с памятью у большинства неверное представление.
Начнём с того, что ни у Си ни у С++ нет никаких встроенных средств для управления памятью. Только ручное. Однако в С++ есть конструкторы и деструкторы, которые как раз и помогают об этом не задумываться до поры до времени. Но если в чистом Си ситуацию исправить невозможно, каждый раз приходится всё делать вручную, то в крестах можно написать очень удобные аллокаторы на шаблонах, простые и эффективные в реализации.
Тут ещё важно понимать, что у пользователя есть только один-единственный способ выделить память - это функция malloc. И абсолютно все аллокаторы имеют её в своей основе. А внутренняя реализация malloc зависит от винды.
И если до XP SP2 он был очень медленный и норовил фрагментировать память, то с выходом второго сервис-пака ситуация полностью изменилась и теперь городить свои кастомные аллокаторы никакого смысла не имеет - внутренняя реализация операционки справится всяко лучше.
Но их всё равно городили по инерции, года до 2017-го наверное.

Добавлено 06-08-2024 в 13:05:

А про Шот скажу так. Это С++ с человеческим лицом. С одной стороны он позволяет работать с памятью в таком же объеме, как и С++, с другой - позволяет вообще особо не заботиться о памяти, всё от задач зависит.
Поэтому когда вы пишете игровой код на Шоте - это не сильно отличается от написания кода на Шарпе. В плане безопасности.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 10:13:

Цитата:
Дядя Миша писал:
А вот если бы мне захотелось большего, а язык был бы к этому не готов, получилась бы ерунда как в Юнити.
Во всех этих скриптовых языках беда с АТД. Они их не поддерживают.
Точнее поддерживают, но в виде встроенных нативных объектов.
Это значит, что если у тебя в классе вектора или кватерниона нет каких-то операций, то сделать ничего с этим невозможно. Может эти нативные классы можно как-то расширять, я не уверен, но всё равно тут нет целостности.


А что такое АТД? В Юнити можно наследоваться от движковых классов, делать всякие перегрузки т.д.

Цитата:
Дядя Миша писал:
Поэтому когда вы пишете игровой код на Шоте - это не сильно отличается от написания кода на Шарпе. В плане безопасности.


Вот это клёво.

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


Отправлено Unit 06-08-2024 в 10:38:

Цитата:
Дядя Миша писал:
его ещё называют Modern OpenGL


Лет 14 назад называли. Сейчас всё потихоньку идёт к deprecated. Может быть есть смысл посмотреть в сторону Vulkan?
Почти 8 лет над OpenGL никто не работает, очевидно на технологию положили болт сами Khronos, чего тогда ожидать от поставщиков драйверов. Плюсом всякие модные фишки типа RTX, можно пощупать, народ поиграется.


Отправлено Дядя Миша 06-08-2024 в 12:19:

Цитата:
FiEctro писал:
А что такое АТД?

Абстрактный Тип Данных. Вот как раз всякие vec3, mat4 и прочая тому подобная пердь. С которыми хочется работать так же просто, как интами и флоатами, т.е. писать выражения, а не вызовы функции, типа Matrix4x4_Concat( a, b, c ); А вместо этого писать c = a * b;

Цитата:
FiEctro писал:
В Юнити можно наследоваться от движковых классов, делать всякие перегрузки т.д.

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

Цитата:
Unit писал:
Может быть есть смысл посмотреть в сторону Vulkan?

Вулкан как раз на этих интелах-встройках работать и не будет.

Цитата:
Unit писал:
Почти 8 лет над OpenGL никто не работает, очевидно на технологию положили болт сами Khronos

Это распространённое, хотя и ошибочное мнение. Такой пример приведу - WinAPI не менялся с 90-х годов, там куча легаси и очень стрёмных решений. Но при этом никто не говорит что он устарел. Потому что это точка совместимости, на которой всё держится, десятки или даже сотни тысяч приложений под Windows, написанных в разное время тем не менее способны запуститься даже на Win11. Но сам интерфейс ужасен, да.
Для меня тот факт, что OpenGL перестали трогать - это наоборот весьма позитивный сигнал, что там больше ничего не сломают, что он полностью стабилен и его наконец-то можно смело использовать. Всё что постоянно обновляют использовать нельзя, это значит что оно нестабильное. Но почему-то все считают наоборот. Ещё пример приведу: вот строители строят дом. Никто же не живёт в доме, пока возводятся стены? Наоборот, как только строители закончат и уедут в другое место - заезжают жильцы. И никто не говорит "ох, строители не обновляли наш дом уже восемь лет, он устарел, нам срочно надо другой дом". Так почему же такой ажиотаж с софтом? Нет ответа.

Теперь что касается Вулкана. Здесь уместно вспомнить старый анекдот - чтобы ни делал Хронос, у него всегда получается OpenGL. Технически у Вулкана есть ровно одно преимущество над OpenGL - он умеет работать с потоками. Собственно на этом и всё. Остальные преимущества таковыми не являются. Увеличенная скорость работы, которую нам обещали на Вулкане - это просто отключённые слои валидации, отладки. Без этих слоёв действительно скорость работы вырастает, но и любая ошибка приводит к BSOD. Люди устали постоянно перезагружать компьютер при разработке, поэтому начиная с какой-то, кажется 1.2 версии, слои валидации по умолчанию включили обратно. Никаких особенных возможностей, по сравнению с OpenGL, вулкан не даёт. В OpenGL 4.6 была очередь рендер-команд, из которой по сути и вырос вулкан - вот она потенциально способна давать прирост, но я не тестировал, так что ничего не скажу. Второй момент - абстрактный язык хранения шейдеров.
Для меня это ничего особо не даёт в моменте, у меня тут своя система.
Но в теории наверно можно написать собственный компилятор шейдеров и оптимизировать его. Третье - между версиями нет совместимости.
То что было написано под Вулкан 1.1 с довольно высокой вероятностью вызовет синьку при запуске под Вулкан 1.3. Зачем мне этот головняк нужен? Я ещё не забыл глюки OpenGL-драйверов в 2014-м году, когда отлаживал Параною. При том что, повторюсь, у большинства целевой аудитории ноутбуки в них процессорное видео от интел, которое не поддерживает вулкан, т.к. большая часть этих процов была выпущена до 2015-го года. У людей не сказать чтобы прямо сильно свежий парк железа. И дискретные видеокарты тоже далеко не у всех. А Юнити на этих интелловских карточках прекрасно себя чувствует, между прочим.

Теперь что касается лучей. RTX - это сплошной обман потребителя. Лучи реализованы в железе. Что это значит? Это значит что их использование не должно влиять на фпс. Тем не менее оно влияет и влияет очень сильно.
Тогда спрашивается за что платили? За три модные буквы? Те же Эпики не стали связываться с RTX, а реализовали собственную технологию Lumen.
Я планирую сделать нечто подобное. Опыт программного рейтрейсинга у меня уже есть, в той же параное 2 есть экспериментальные рейтрейсинговые тени. В принципе при наличии хороших ускоряющих структур можно получать весьма достойные результаты даже на дохлом железе. Так что нет, RTX меня не интерисует. И без меня достаточно людей, которые им занимаются.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 12:46:

AMD так и не допилили свои OpenGL драйвера под винду, вроде только под линукс. А на винде там у них какая то лютая эмуляция идёт. Зато с Директом и Вулканом везде по идее всё впорядке.

Цитата:
Дядя Миша писал:
Тогда спрашивается за что платили? За три модные буквы? Те же Эпики не стали связываться с RTX, а реализовали собственную технологию Lumen.
Я планирую сделать нечто подобное


RTX это не только радиосити, это ещё и мягкие тени, и касутики, и стёкла, и волюм лайты, и объёмные партикли. Если делать всё через растеризацию то не факт что быстрее будет. Люмен тоже крайне всрато работает, он скорее для замены лайтмапы чем динамики.

Добавлено 06-08-2024 в 15:46:

Цитата:
Дядя Миша писал:
Я планирую сделать нечто подобное. Опыт программного рейтрейсинга у меня уже есть, в той же параное 2 есть экспериментальные рейтрейсинговые тени. В принципе при наличии хороших ускоряющих структур можно получать весьма достойные результаты даже на дохлом железе. Так что нет, RTX меня не интерисует. И без меня достаточно людей, которые им занимаются.


С рейтрейсером в целом всё понятно. На вторую кваку уже была готовая реализация которая работала как RTX только на любой видеокарте. Проблема больше в качественном деноизере, у RTX видеокарт он очень крутой и шустрый, ничего для реалтайма я больше не видел. Хотя не, вру, у Директа 12 (DXR) вроде ещё что то было. Он тоже поддерживает аппаратный рейтрейсинг и при этом не требует RTX видеокарт.

Как вообще работают топовые деноизеры я не знаю.

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


Отправлено Дядя Миша 06-08-2024 в 14:19:

Цитата:
FiEctro писал:
А на винде там у них какая то лютая эмуляция идёт

GL_POLYGON_OFFSET на каких-то моделях валился в эмуляцию, да.

Цитата:
FiEctro писал:
RTX это не только радиосити, это ещё и мягкие тени, и касутики, и стёкла, и волюм лайты, и объёмные партикли. Если делать всё через растеризацию то не факт что быстрее будет

Так ты уже делал? Сравнивал? Всё что ты перечислил не требует RTX. А полноценный рейтрейсер на его основе всё равно сделать невозможно.
И не только потому что железка не потянет. А как минимум потому что в играх полно фуллбрайт объектов, как ты их собрался реализовывать?
Т.е. это будет объект, который не излучает свет и не принимает его.
Рейтрейсер не умеет такое рендерить. Внезапно!

Цитата:
FiEctro писал:
Как вообще работают топовые деноизеры я не знаю.

Вот ещё и денойзер этот. Я совсем забыл про него. В текущем виде реализация неюзабельна.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 14:27:

Цитата:
Дядя Миша писал:
А как минимум потому что в играх полно фуллбрайт объектов, как ты их собрался реализовывать?
Т.е. это будет объект, который не излучает свет и не принимает его.
Рейтрейсер не умеет такое рендерить. Внезапно!


Умеет. Но почему не излучает? Фуллбрайт это эмишен же, ещё с начала 90х в 3д максе эта фишка была.
Да блин светящиеся текстуры в hlrad что по твоему?

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

И как то не верится мне что из луча мы просто не можем передавать только цвет текстуры, да ну бред какой то.

Цитата:
Дядя Миша писал:

Так ты уже делал? Сравнивал? Всё что ты перечислил не требует RTX. А полноценный рейтрейсер на его основе всё равно сделать невозможно


Ну в Quake2 RTX поиграй, и в Portal RTX. Если я такое накручу растеризацией в Юнити или Анриле думаю да будет тяжелее.

Цитата:
Дядя Миша писал:
Вот ещё и денойзер этот. Я совсем забыл про него. В текущем виде реализация неюзабельна.


Не совсем понял про какой из деноизеров ты говоришь, и про какую "неюзабельную" реализацию. Но в целом мы с тобой правильно угадали, они берут информацию с картинки с низким разрешением и как то строят вектора для размытия шума на её основе + я так понял накапливают лучи с предыдущих кадров (хотя это не совсем деноизер, а скорее обычное свойство рейтрейсера), но тем не менее все эти данные используют для сглаживания шума. Я только начал эту тему изучать, так что большего пока не знаю. Может здесь напишет кто то про деноизеры более подробно, как знать.

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


Отправлено Дядя Миша 06-08-2024 в 16:33:

Цитата:
FiEctro писал:
Но почему не излучает? Фуллбрайт это эмишен же

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

Цитата:
FiEctro писал:
Не совсем понял про какой из деноизеров ты говоришь, и про какую "неюзабельную" реализацию.

Да про любой тащем-то. Мне в принципе не нравится этот подход со случайным выпусканием лучей. Особенно на открытом пространстве, где 70% уйдут на нагрев GPU. Если бы оно хотя бы не тормозило, ещё можно было бы закрыть на это глаза. Но оно тормозит, греется и стоит невменяемых денег.

Добавлено 06-08-2024 в 19:33:

А! И на XP ещё не работает к тому же.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 17:21:

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


Как ты вообще это себе представляешь? В лучшем случае он будет чёрным, но точно так же он будет черным и на растеризации. Мне кажется ты что то путаешь. Да и повторюсь ничего не мешает отрисовать в отдельном проходе, Блендер так и делает несмотря на все твои "невозможно".

Цитата:
Дядя Миша писал:
Да про любой тащем-то. Мне в принципе не нравится этот подход со случайным выпусканием лучей. Особенно на открытом пространстве, где 70% уйдут на нагрев GPU.


Опять же, на растеризацию уйдёт не меньше. Отрисуй столько же отражений да ещё и размытых как на рейтрейсинге на какой нибудь спонзе. У тебя и 5 фпс не наберётся.

Цитата:
Дядя Миша писал:
А! И на XP ещё не работает к тому же.


Ну в Паранойе же работало.

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


Отправлено Дядя Миша 06-08-2024 в 17:28:

Цитата:
FiEctro писал:
Опять же, на растеризацию уйдёт не меньше

Ну вот откуда, откуда ты берёшь подобные заявления?

Цитата:
FiEctro писал:
Ну в Паранойе же работало.

А там что был RTX?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 06-08-2024 в 17:29:

Цитата:
Дядя Миша писал:
Ну вот откуда, откуда ты берёшь подобные заявления?


Я пересмотрел кучу демок и несколько движков. В том же Анриле или Юнити можно и так и так накрутить графику и сравнить (хоть там и не RTX). Честные отражения на растеризации вообще не сделать в большом количестве. Воксели тебе тоже не нравятся.

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


Отправлено Дядя Миша 06-08-2024 в 21:15:

Цитата:
FiEctro писал:
Честные отражения на растеризации вообще не сделать в большом количестве

Да они если честно и не нужны в большом кол-ве. RTX свернул в сторону отражений, когда выяснилось что для рассчёта радиосити он не годится.
Точнее годится, но только для идеально отражащющих поверхностей, типа зеркал. Потому что от матовой поверхности отразится не один луч, а минимум 16, а лучше 192. Никакой RTX этого не вытянет в ближайшие лет 10 так точно. Разве что чудо случится и вот эти поляритонные транзисторы окажутся не фейком, а вполне рабочей технологией. Тогда у нас будут процы на один пета-герц и вот они вытянут абсолютно всё )

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 06-08-2024 в 22:01:

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


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


Отправлено FiEctro 06-08-2024 в 22:41:

Цитата:
Дядя Миша писал:
Да они если честно и не нужны в большом кол-ве. RTX свернул в сторону отражений, когда выяснилось что для рассчёта радиосити он не годится.
Точнее годится, но только для идеально отражащющих поверхностей, типа зеркал. Потому что от матовой поверхности отразится не один луч, а минимум 16, а лучше 192. Никакой RTX этого не вытянет в ближайшие лет 10 так точно. Разве что чудо случится и вот эти поляритонные транзисторы окажутся не фейком, а вполне рабочей технологией. Тогда у нас будут процы на один пета-герц и вот они вытянут абсолютно всё )


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

Нвидия вон 20 лямов поликов прокачивала через рейтрейсер с кучей отражений и источников света в реалтайме.

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


Отправлено Дядя Миша 06-08-2024 в 22:50:

Цитата:
Chyvachok писал:
Ну или не вытянут по причине забитого болта на оптимизацию.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 07-08-2024 в 03:11:

Цитата:
Дядя Миша писал:

Вулкан как раз на этих интелах-встройках работать и не будет.

А зачем вообще брать во внимание железо, не предназначенное для игр, разрабатывая современный игровой движок, или тащить список поддерживаемых видеокарт/платформ которым больше 15 лет. Я понимаю, не у всех есть бюджет, но сегодня можно взять какую-нибудь 1060 с рук за 5000 руб.

Если с OpenGL все так хорошо, почему его выпиливают из всех современных продуктов(Google, Apple, Valve).

Честнее будет так: Vulkan сложный, пока нет времени с ним возиться, но он перспективнее для игрового движка, чем OpenGL.
Возможно придется пройти через 5 стадий принятия Vulkan

Цитата:
Chyvachok писал:
большинство игр это какое-то топтание на месте, и по графике и по геймплею


Это пресыщение индустрией, сейчас картинка в ААА - моё почтение. Некоторым уже все не торт, таким если реальную видеосъёмку показать, сказав, что это трейлер новой GTA например, можно выслушать: текстуры мыло, освещение отстой, физика какая-то не реалистичная.


Отправлено Дядя Миша 07-08-2024 в 05:53:

Цитата:
Unit писал:
А зачем вообще брать во внимание железо, не предназначенное для игр, разрабатывая современный игровой движок, или тащить список поддерживаемых видеокарт/платформ которым больше 15 лет.

Затем что движок делается для пользователей, а не для железа.

Цитата:
Unit писал:
Если с OpenGL все так хорошо, почему его выпиливают из всех современных продуктов(Google, Apple, Valve).

Это их личное дело. Почему я должен на них оглядываться?

Цитата:
Unit писал:
Честнее будет так:

Ты сюда пришёл додумывать за меня? Надо полагать, у тебя тоже есть движок и он на Вулкане?

Цитата:
Unit писал:
перспективнее для игрового движка, чем OpenGL

Пока между версиями там крэшы и синька, пользоваться этим невозможно.
Пусть устаканится. Я признаться думал, что версия 1.2 будет финальной. Но нет, они выпустили 1.3. К тому же там появились расширения. Это меня добило окончательно. Зачем нужны расширения, если есть прямой доступ к железу? Опять те же грабли, что и с OpenGL.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 07-08-2024 в 06:56:

Цитата:
Дядя Миша писал:
Это их личное дело. Почему я должен на них оглядываться?


Очень просто, они задают тенденции в IT, а так же входят в состав Khronos. Получается Вы используете технологии, которые при "Их" участии создаются или признаются устаревшими, это не говорит о том, что их нужно беспрекословно слушать, но "оглядываться" стоит.

Цитата:
Дядя Миша писал:
Ты сюда пришёл додумывать за меня? Надо полагать, у тебя тоже есть движок и он на Вулкане?


Пока готового решения нет, я переписываю рендер с OpenGL на Vulkan, по этому понимаю - сложно, ручная работа с памятью GPU, синхронизации CPU/GPU, огромный по объему код, в OpenGL с этим не нужно было заморачиваться, через некоторое время становится более менее понятно, находишь схожие вещи с OpenGL. По итогу можно будет иметь 2 API для рендера, что бы покрыть максимально аудиторию, если это требуется.

Цитата:
Дядя Миша писал:
Пока между версиями там крэшы и синька, пользоваться этим невозможно.


Вполне можно, год точно играю в игры с Vulkan, пока не было крашей, как то же смогли сделать.


Отправлено FiEctro 07-08-2024 в 08:04:

А нет как с директом готового транслятора гл в вулкан?

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


Отправлено Дядя Миша 07-08-2024 в 09:08:

Цитата:
Unit писал:
Очень просто, они задают тенденции в IT, а так же входят в состав Khronos

Инструменты берутся под задачу. А не с оглядкой на заданные тенденции.
На тенденции оглядываются, когда никакой чёткой задачи нет и непонятно что делать.

Цитата:
Unit писал:
Пока готового решения нет, я переписываю рендер с OpenGL на Vulkan, по этому понимаю - сложно, ручная работа с памятью GPU, синхронизации CPU/GPU, огромный по объему код, в OpenGL с этим не нужно было заморачиваться, через некоторое время становится более менее понятно, находишь схожие вещи с OpenGL. По итогу можно будет иметь 2 API для рендера, что бы покрыть максимально аудиторию, если это требуется.

Ну то есть работа на туманные перспективы, по большому счёту. А время будет потрачено. Я для себя это вижу следующим образом:
максимально отлаженный 32-х битный движок для OpenGL. И его следующая версия - уже 64 бита и под Вулкан, т.е. под новые решения. Но при этом сохраняется совместимость ресурсов. Вполне вероятно что этим портированием уже будет заниматься кто-то другой, т.к. у меня иные задачи.

Вообще попытка иметь у себя в софте максимально свежие технологии - это иррациональный страх отстать от прогресса и оказаться не в тренде.
Тренды надо задавать, а не догонять.

Добавлено 07-08-2024 в 12:08:

Цитата:
FiEctro писал:
А нет как с директом готового транслятора гл в вулкан?

Да может и есть. Надо у Вальвы посмотреть, они чем-то таким занимались.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 07-08-2024 в 09:35:

Цитата:
Дядя Миша писал:
отлаженный 32-х битный движок для OpenGL.


Который нигде не запустить кроме винды Хотя не спорю, 32 битная винда есть ещё на куче допотопных ноутов.

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


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

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


Отправлено ZGreen 07-08-2024 в 10:23:

Что это за виндовые машины, на которых не запускаются 32битные экзешники?


Отправлено FiEctro 07-08-2024 в 14:17:

Цитата:
ZGreen писал:
Что это за виндовые машины, на которых не запускаются 32битные экзешники?


А где я писал что они конкретно виндовые?

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


Отправлено ZGreen 07-08-2024 в 14:28:

Мы тут говорим в контексте Ксаша, который написан под винду. Какая разница какие приложения помимо него нельзя запустить на какой-то произвольной архитектуре?


Отправлено FiEctro 07-08-2024 в 14:38:

ZGreen
Ты опять начинаешь вкладывать в мои слова какой то левый смысл, либо читаешь по диагонали. Я написал что ноутбуков на 32битной винде сейчас много. В цитате ниже речь шла о трендах, а тренды щас отказываться от старой архитектуры (теже маки, на гите ещё что писали про линуксы), и где гарантии что эти трендам не последует майкрософт? Забыл как они выпилили возможность нативно запускать досовские приложения из винды?

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


Отправлено Дядя Миша 07-08-2024 в 14:41:

На десткопных Макинтошах нашей ЦА практически нет. А айфоны помоему Вулкан не поддерживают. Или поддерживают, но тоже через враппер какой-то. Странно. Неужели им в Эппл там никто не объяснил, что надо быть в тренде и делать как говорят Гугл и Хронос.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 07-08-2024 в 14:46:

Цитата:
Дядя Миша писал:
А айфоны помоему Вулкан не поддерживают. Или поддерживают, но тоже через враппер какой-то. Странно. Неужели им в Эппл там никто не объяснил, что надо быть в тренде и делать как говорят Гугл и Хронос.



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

Цитата:
Дядя Миша писал:
На десткопных Макинтошах нашей ЦА практически нет.


Это ты как выяснил? Голдсорс на маках - сдох. Альтернативы Ксашу сейчас там нет.
https://www.macsourceports.com/game/halflife

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


Отправлено Unit 07-08-2024 в 15:49:

Цитата:
Дядя Миша писал:
На десткопных Макинтошах нашей ЦА практически нет.


Сегодня нет, завтра окажется что есть, в данной парадигме ЦА сама должна решить, есть она или нет, вне зависимости от мнения разработчика, ведь движок делается для пользователей, а не для железа..

Цитата:
Дядя Миша писал:
Странно. Неужели им в Эппл там никто не объяснил, что надо быть в тренде и делать как говорят Гугл и Хронос.


Они как раз в тренде с их многопоточным Metal API, тот же Vulkan, только без фатального недостатка, как например язык Headshot. К слову Vulkan умеет в Metal, а OpenGL к сожалению нет, он уже отмечен как устаревший, не знаю точно, доступен он сейчас или нет на яблоках.


Отправлено Дядя Миша 07-08-2024 в 17:10:

Цитата:
Unit писал:
Сегодня нет, завтра окажется что есть

Ну вот когда окажется, тогда есть смысл об этом подумать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено a1batross 07-08-2024 в 18:01:

Цитата:
FiEctro писал:
А нет как с директом готового транслятора гл в вулкан?


Есть. zink в Mesa.

Насколько я знаю, некоторые производители железа ориентируются на него, типа чтобы не писать драйвер, а провраппить GL в Vulkan. Но я даже не уверен насколько он юзабелен.

Добавлено 07-08-2024 в 21:01:

Цитата:
FiEctro писал:
Цитата:
Дядя Миша писал:
На десткопных Макинтошах нашей ЦА практически нет.


Это ты как выяснил? Голдсорс на маках - сдох. Альтернативы Ксашу сейчас там нет.
https://www.macsourceports.com/game/halflife


Это и я могу подтвердить. Судя по форку, маководов почти нет. Сомневаюсь что мак версия настолько хорошо работает, чтобы не писать багрепорты. Это в сравнении с виндой и линуксом, конечно.

К тому же, ушло несколько лет на то, чтобы нашелся кто-то, кто захотел бы заняться macOS портом. И то, я попросил человека хотя бы CI настроить, а он пропал.

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 07-08-2024 в 18:11:

Ну а с линуксом проще. На данный момент XashNT вполне хорошо работает под Wine, проблем с производительностью нет.
Таким образом остается только задача порта под Андроид, но сперва надо дописать ядро.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 07-08-2024 в 18:23:

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


Ты же вроде публиковал что поддержка макоси завершена из-за отсутствия нужных разработчиков или что то в таком духе? Та что я скинул выше работает не плохо, баги есть конечно, но ваш форк я так понимаю но новых макосях вообще не завести? Или вы совместно с этим челом делаете?

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


Отправлено a1batross 08-08-2024 в 00:57:

FiEctro я, наверное, не совсем правильно объяснил когда-то.

Нормально поддерживать macOS не имея Mac невозможно. Это факт. Ни строчки кода связанного с нашим собственным портом на macOS удалено не было. Это факт номер 2.

Мне лично неинтересно работать с macOS. Я бы приобрёл железку, но для иных целей, либо ковырять Asahi, либо что-то древнее времён PowerPC

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

Да, эти чуваки сделали сборку, запаковали всё в бандл, но решили не отправлять изменения нам. Скорее всего причина этому банальная нехватка времени, так как судя по их гитхабу они занимаются ещё стопицот других игр. Мне больше не нравится тот факт, что багрепорты тоже слать никто не стал. Ни им, ни нам. Отсюда я и делаю вывод, что маководов просто возможно не существует в природе. Или им не интересны игры 25-летней давности.

__________________
Xash3D FWGS форк


Отправлено (_-=ZhekA=-_) 08-08-2024 в 05:47:

Дядя Миша
А что будет по графике? RTX? DLSS?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 08-08-2024 в 07:45:

a1batross
Пиши мне в дискорд, я могу тестировать. Есть МакбукПро 2015года, в целом новые операционки на него пока ещё ставятся. Едиственное это всё интел, на М2 пока не накопил

Цитата:
a1batross писал:
Всё что я ожидал и ожидаю от маководов, что кто-то из них уделит своё собственное время и силы и хотя бы время от времени будет проверять работоспособность и как-то способствовать исправлению ошибок. Увы, никто за это не взялся.

Да, эти чуваки сделали сборку, запаковали всё в бандл, но решили не отправлять изменения нам. Скорее всего причина этому банальная нехватка времени, так как судя по их гитхабу они занимаются ещё стопицот других игр. Мне больше не нравится тот факт, что багрепорты тоже слать никто не стал. Ни им, ни нам. Отсюда я и делаю вывод, что маководов просто возможно не существует в природе. Или им не интересны игры 25-летней давности.


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

https://www.youtube.com/watch?v=a_aorn-fFuA
Вот тут судя по просмотрам примерно 3.8тыс чел накатили форк, не знаю много это или мало?

Цитата:
(_-=ZhekA=-_) писал:
А что будет по графике? RTX? DLSS?



Спрайтовые монстры из первого дуума и вертексная анимация

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


Отправлено Дядя Миша 08-08-2024 в 08:32:

Абстрактные сетевые механизмы успешно созданы. Больше нет этой лютой привязки к entity_state_t. Теперь с сервера на клиент (а значит и в систему материалов) можно передавать какие угодно поля.
Однако встаёт немаловажный вопрос. Хранить переданные поля предполагается так же - в клиентской энтите, чтобы пользователь мог иметь к ним доступ. Это может оказаться полезным. Но тогда их придётся прописывать вручную. Т.е. выполнять эту работу два раза - на клиенте и на сервере. Нельзя сказать, чтобы прописывать надо было много кода - одна строчка на сервере и одна на клиенте. Но сейчас вон какие программисты избалованные - слово void написать ленятся. Так что в качестве рабочего варианта приму такой, что ответные части на клиенте прописывать надо.
Ну а там посмотрим.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-08-2024 в 11:29:

Цитата:
Дядя Миша писал:
Однако встаёт немаловажный вопрос. Хранить переданные поля предполагается так же - в клиентской энтите, чтобы пользователь мог иметь к ним доступ.


Для такого ДонтДестрой сцена в Юнити и нужна. Чтобы там были объекты которые не зависят от того что происходит в игре. Например тот же UI для меню и hud можно было бы там хранить, а не верстать всё это в коде. При этом можно например через него объекты со сцены на сцену таскать, к примеру если ты захочешь сделать инвентарь как в сталкере, при этом все эти объекты сохранят свои свойства на момент когда их подобрали (например теже трупы у которых есть свой инвентарь).

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


Отправлено Дядя Миша 08-08-2024 в 12:12:

Цитата:
FiEctro писал:
Для такого ДонтДестрой сцена в Юнити и нужна

Ты совершенно не понял о чём речь. Вот абсолютно. И пишешь о чём-то своём.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-08-2024 в 12:35:

Как я понял что ты просто захардкодил некий абстрактный объект для хранения сетевых переменных на клиенте?

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


Отправлено Дядя Миша 08-08-2024 в 13:09:

Цитата:
FiEctro писал:
Как я понял что ты просто захардкодил некий абстрактный объект для хранения сетевых переменных на клиенте?

Нет, неверно. У сети есть два состояния - прошлый кадр и текущий кадр.
Между ними осуществляется интерполяция, за время когда клиент принял новый кадр и ждёт следующего. Переменные прошлого и текущего кадра хранятся в абстрактных rаw-массивах, доступ к ним осуществляется по дельта-таблице, которые присылает сервер. Таким образом у нас есть данные чтобы корректно интерполировать значения. И тут встаёт вопрос - а куда записать результат этой интерполяции? Результат будет применён при рендеринге, очевидно. Я могу завести в структуре энтити ещё один точно такой же абстрактный raw-буффер и сохранять результаты туда.
С этим проблем нет. Но тогда в клиентской программе пользователь не сможет иметь к ним доступ, а это было бы полезно, например для создания каких-то чисто клиентских эффектов.
Таким образом пользователь в клиентской программе на Шоте должен самостоятельно объявить эти переменные, а движок их подхватит и запишет туда интерполированные результаты для каждого кадра. Это всё хорошо и вопросов не вызывает. Вопросы вызвает только что делать, если пользователь полинился и не объявил какие-то переменные.
С точки зрения движка ничего страшного не случится. А пользователь может долго гадать, почему у него ничего не обновляется.
Здесь нужен какой-то простой и понятный подход к обработке этой ситуации. И мнение пользователя, чего он бы ожидал в таком случае.
Вот и спрашиваю.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-08-2024 в 13:45:

Дядя Миша
А как у тебя вообще интерполяция работает? Ну вот допустим у нас на клиенте какой то объект красиво перемещается интерполяцией с точки А в точку Б, что нам нужно чтобы воспроизвести тоже самое на клиенте? Я думал что там просто передавать булеву нужно клиенту, а он сам уже своими силам интерполирует. Ведь он знает уже куда движется. Т.е. ты пересылаешь значение 2х кадров, но в в каком виде? И потом говоришь движку это интерполироливать? Хотелось бы глянуть на то как это выглядит в скрипте.

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


Отправлено Unit 08-08-2024 в 13:48:

Цитата:
Дядя Миша писал:
Таким образом пользователь в клиентской программе на Шоте должен самостоятельно объявить эти переменные

что делать, если пользователь полЕнился и не объявил какие-то переменные.

пользователь может долго гадать, почему у него ничего не обновляется

А что должно обновляться? Поля внутри сущности скрипта? Если он их не объявил, зачем он будет ждать их обновления. Как то не очень понятно про что речь.


Отправлено Дядя Миша 08-08-2024 в 16:38:

Цитата:
FiEctro писал:
Ну вот допустим у нас на клиенте какой то объект красиво перемещается интерполяцией с точки А в точку Б, что нам нужно чтобы воспроизвести тоже самое на клиенте?

Цитата:
FiEctro писал:
допустим у нас на клиенте

Цитата:
FiEctro писал:
воспроизвести тоже самое на клиенте

Переформулируй, я не понял.

Цитата:
Unit писал:
Если он их не объявил, зачем он будет ждать их обновления

Эти же переменные используются дважды. Схема такая:

1. читаем переменные с сервера
2. интерполируем от старого кадра к новому, пока ждём нового апдейта от сервера и рисуем кадры
3. рендерер берёт интерполированные значения и подаёт их в юниформы
4. интерполированные значения хранятся в пользовательской сущности.
5. если пользователь их не объявил, то и на рендеринг ничего не попадёт.
6. в самой виртуальной машине к ним можно и не обращаться, это просто такое место хранения. Т.е. с ними в основном движок взаимодействует, но хранятся они в user-space на случай если пользователь захочет их прочитать. Вот о чём речь. Теперь представим, что пользователь полИнился и не прописал. Как на это должен реагировать движок?
Ваши варианты.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-08-2024 в 16:54:

Цитата:
Дядя Миша писал:
Переформулируй, я не понял.


Опечатка, имелось ввиду на сервере, из контекста в целом можно понять:
...у нас на сервере какой то объект красиво перемещается интерполяцией с точки А в точку Б, что нам нужно чтобы воспроизвести тоже самое на клиенте?

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


Отправлено Crystallize 08-08-2024 в 16:56:

Цитата:
Дядя Миша писал:
Теперь представим, что пользователь полИнился и не прописал. Как на это должен реагировать движок?
Ваши варианты.

Спамить в консоль

Цитата:
FiEctro писал:
Спрайтовые монстры из первого дуума и вертексная анимация

У него римейк дума до сих пор в планах

Цитата:
Дядя Миша писал:
Инструменты берутся под задачу. А не с оглядкой на заданные тенденции.

Важно смотреть в будующее немного чтобы н еоказаться у разбитого корыта как я делал ютуб ролик 5 лет и юмор безнадежно устарел

Цитата:
Дядя Миша писал:
На десткопных Макинтошах нашей ЦА практически нет. А айфоны помоему Вулкан не поддерживают.

Самосбывающееся пророчество какое-то
А на айфонах вроде был PowerVR? Или то уже история?


Отправлено Unit 08-08-2024 в 16:58:

Думаю стоит пробрасывать на рендер по умолчанию. А если это не нужно для конкретного поля(в целях оптимизации и т.д.), дать пользователю возможность установить флаг discard field или что-то типа этого.


Отправлено Дядя Миша 08-08-2024 в 18:50:

Цитата:
FiEctro писал:
у нас на сервере какой то объект красиво перемещается интерполяцией с точки А в точку Б, что нам нужно чтобы воспроизвести тоже самое на клиенте?

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

Цитата:
Crystallize писал:
Спамить в консоль

Можно и так.

Цитата:
Unit писал:
Думаю стоит пробрасывать на рендер по умолчанию

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

Цитата:
Crystallize писал:
как я делал ютуб ролик 5 лет и юмор безнадежно устарел

Для ютуб ролика это действительно много-вато.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-08-2024 в 19:08:

Цитата:
Дядя Миша писал:
В моей архитектуре сервер ничего не интерполирует, а клиент интерполирует практически всё. Ну собсно, как и в движках Кармака.
Т.е. про интерполяцию думать вообще не надо - она применится автоматически. Это самый удобный и разумный вариант.
На сервере что-то интерполировать нет смысла в рамках сетевой архитектуры. Наоборот - это очень неудобно, когда приходится что-то интерполировать на сервере, в силу его природы. У меня вот сейчас в коде на Шоте хватает таких хаков, обусловленных тем, что сети долгое время не было. Наконец-то их можно будет удалить.


Так покажи пример кода как это делать на сервере и клиенте у тебя.

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


Отправлено Дядя Миша 08-08-2024 в 19:19:

Цитата:
FiEctro писал:
Так покажи пример кода как это делать на сервере и клиенте у тебя.

Никак не делать. Оно не нужно. Движок сам всё проинтерполирует.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 09-08-2024 в 15:44:

Дядя Миша
Так а что и где прописывать тогда?

Цитата:
Дядя Миша писал:
4. интерполированные значения хранятся в пользовательской сущности.
5. если пользователь их не объявил, то и на рендеринг ничего не попадёт.


Вот про это подробнее расскажи.

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


Отправлено Дядя Миша 09-08-2024 в 16:26:

Цитата:
FiEctro писал:
Так а что и где прописывать тогда?

Создаёшь на сервере энтить, у нее, понятное дело есть позиция.
C++ Source Code:
1
class Entity
2
{
3
  vec3 position;
4
  auto "entity.position" : 8.12f { load = position; }
5
};

Это у нас энтить с одним-единственным параметром. Она сможет быть передана на клиент, но рисоваться не будет, т.к. у нее нет модели.
О параметрах, которые нужны движку для корректного взаимодействия с объектами, я расскажу как-нибудь попозже, чтобы не перегружать ненужной информацией текущее объяснение. Нам важно знать, что даже такой простейший объект может быть передан на клиент.
Теперь нам надо создать объект на клиенте. В отличие от сервера, мы не можем создавать тут произвольные объекты - ведь нам надо чтобы клиентские точно совпадали с серверными. Впрочем, мы можем держать у себя упрощённые объекты, которые содержат минимум информации - ведь клиенту не нужно столько подробностей, сколько серверу. Нам не нужно вести учёт патронов для оружия, не нужно знать про текущий путь для ИИ. Есть клиентская функция, которая вызывается всякий раз, когда сервер создаёт новый объект. В нее передаётся тип этого объекта.
Если вместо типа объекта передана пустая строка, значит движок в клиентской программе такой тип попросту не нашёл. И мы можем создать любую универсальную энтить. Впрочем мы можем её создать в любом случае, игнорируя действительный тип. Рендереру всё равно в этом плане, это задел для будущего предиктинга. Поэтому мы будем создавать просто абстрактную одинаковую клиентскую энтить для каждой серверной. Например так:
C++ Source Code:
1
class ClientEntity
2
{
3
  vec3 position;
4
  auto "entity.position" { load = position; save = position; }
5
};

В чём здесь отличие? Ну во первых исчез параметр передачи по сети. т.к. он эти параметры приходят с сервера и клиент про них узнаёт автоматически. Задавать его здесь не нужно. Так же поменялся модификатор с load на save. Смысл в том, что на сервере движок не модифицирует поля объекта, он только их читает. Ну а здесь, поскольку мы прислали обновление позиции с сервера, нам надо их записать в наш член класса. Поэтому разрешаем доступ на запись. Но как вы видите, на клиенте в объект можно не только писать, но и читать. Зачем это нужно?
А этим будет пользоваться во первых рендерер, во вторых предиктинг, когда я его сделаю.
Ну и наконец вопрос, а где же, собственно интерполяция?
При подготовке очередного кадра для рендеринга учитывается время, прошедшее с момента старого обновления кадра, до момента нового обновления (сами обновления фиксированные со скоростью тиканья сервера, ну скажем 60 кадров в секунду). И вычисляется фактор интерполяции от 0 до 1. Он будет записываться в клиентские поля entity.position перед рендерингом каждого нового кадра. А рендер может выдавать гораздо больше чем 60 фпс, допустим около тысячи.
И позиция объекта будет меняться плавно всё время пока клиент ожидает нового обновления с сервера. Если сервер тикает 60 кадров в секунду, а рендер за это время успевает отрендерить 1000 кадров, то позиция будет плавно меняться в течение 16 кадров - до следующего обновления.
А на сервере мы меняем позицию с фиксированным шагом - 60 раз в секунду. Но сервер может тикать и реже, 10 раз в секунду, 20 раз в секунду. А на клиенте всё равно всё останется плавным и сглаженным.
Без какого-либо вмешательства пользователя.
Но разумеется будут кое-какие механизмы для отключения интерполяции, они и в халфе были. Самый простой пример - телепортация объекта.
Понятно, что здесь интерполяция только навредит и она не нужна.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 09-08-2024 в 18:19:

Что-то сложная механика получается на деле, нужно будет сильно углубляться.
+ Так понял, свой C-подобный язык с уникальными для него конструкциями, отсутствием комьюнити и примеров, сильно уменьшит порог вхождения.
Для меня например(субъективно), такая конструкция вообще неоднозначна:

C++ Source Code:
auto "entity.position" : 8.12f { load = position; }


Отправлено Crystallize 09-08-2024 в 18:56:

Дядя Миша Может пусть моддер протисывает энтитю в какой-нибудь раздел shared, откуда автоматически создастся код для клиента и сервера? Ну раз это тривиальный процесс?


Отправлено Дядя Миша 09-08-2024 в 19:52:

Цитата:
Unit писал:
Что-то сложная механика получается на деле, нужно будет сильно углубляться.

Это пример того, что реально прописывается при декларации.
В SDK такое никто писать не будет. Там объявления таких переменных обёрнуты в макросы и выглядят примерно так:

C++ Source Code:
1
DECLARE_ENGINE_PROP_KEYFIELD( uint, renderflags );
2
DECLARE_ENGINE_PROP_KEYFIELD( int, groupinfo );
3
DECLARE_ENGINE_PROP( HMODEL, modelindex );	// index of visible model of this object
4
DECLARE_ENGINE( xform, transform );		// transformation matrix of object
5
DECLARE_ENGINE( float, alpha );

А за этой строчкой уже скрывается полный набор необходимых объявлений.
Взаимосвязь с движком так или иначе должна содержать исчерпывающую информацию.

Цитата:
Unit писал:
Так понял, свой C-подобный язык с уникальными для него конструкциями, отсутствием комьюнити и примеров, сильно уменьшит порог вхождения.

Не С-подобный. С++ подобный. Совместимость с С++ процентов 80%, по крайней мере я довольно много кода на С++ просто копирую в проект на Шоте и он сразу начинает работать. "Уникальные конструкции" - это свойства. Как в Делфи. Есть и много других интересных и полезных вещей, встроенная рефлексия например. Свитчи по строкам. Динамический вызов функций, virtual_new. Да много чего есть. Никто не заставляет это использовать, можно ограничиться функционалом С++.

Насчёт отсутствия коммунити и примеров не понял. Может быть расскажешь о своём проекте? Я так понимаю у тебя и с коммунити и с примерами всё в порядке?

Цитата:
Unit писал:
Для меня например(субъективно), такая конструкция вообще неоднозначна:

Да, я ошибся. Одно равно там лишнее. Поправил в исходном посте.

Цитата:
Crystallize писал:
Может пусть моддер протисывает энтитю в какой-нибудь раздел shared, откуда автоматически создастся код для клиента и сервера? Ну раз это тривиальный процесс?

Ну в дальнейшем скорее всего так оно и будет. Я только начал заниматься сетью, она ждала своего часа почти пять лет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 09-08-2024 в 20:49:

Цитата:
Дядя Миша писал:
Насчёт отсутствия коммунити и примеров не понял.


Это про новый язык, который уже на 20% не C++. Сам по себе C++ плохое решение для скриптинга, его никто учить не будет, что-бы пользоваться движком, в Unreal например пришли к blueprint'ам, а тут даже не C++, что-то своё, не стандартизированное.

Почитал описание, в планах покрыть довольно большую аудиторию.
Если эта аудитория мидлы сишники, конечно, их покроет.
Eсли же прицел на обычных работяг, вряд-ли их заинтересует пункт: Язык HeadShot.

Это не хейт, уважение за проделанную
Геймдев немного изменился со времён Кармака, он сейчас казуален, люди тыкают пару кнопок, перетаскивают готовые ассеты и выплевывают это в плеймаркет, работа над кодом это Ctrl+C Ctrl+V. Мысль такая, что этот подход не покроет большую аудиторию, только супер нишевую.


Отправлено FiEctro 09-08-2024 в 22:08:

Цитата:
Unit писал:
Это про новый язык, который уже на 20% не C++. Сам по себе C++ плохое решение для скриптинга, его никто учить не будет, что-бы пользоваться движком, в Unreal например пришли к blueprint'ам, а тут даже не C++, что-то своё, не стандартизированное.


Забавно то что сами анрильщики жалуются на эти блюпринты.

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


Отправлено Дядя Миша 10-08-2024 в 07:00:

Цитата:
Unit писал:
Это про новый язык, который уже на 20% не C++.

Он на 100% С++. И 20% новых возможностей.

Цитата:
Unit писал:
Сам по себе C++ плохое решение для скриптинга, его никто учить не будет, что-бы пользоваться движком

Сам по себе язык роли не играет, вот абсолютно. Люди учатся новому не по принципу "а вот он сложный, это я не смогу выучить". Люди учатся по реальным примерам, по подобию. И здесь мы можем рассмотреть ситуацию.
Когда к Унреалу или Краю идёт чудовищная игровая С++ библиотека на несколько мегабайт, где игровой код переплетён с низкоровневыми вызовами. Разобраться в этом сложно абсолютно всем, независимо от того, знают они С++ или нет. Я пытался понять, что и как там устроено в том же Крае - мозги плавятся. Причём в их движке я сразу соориентировался, ну как и в любом другом движке, тащем-то. Потому что движки все устроены одинаково, там идёт стандартный набор подсистем и пять-шесть решений их организации. А вот через какую задницу прикручено взаимодействие игрового кода с бакэндом - тут каждый извращается как может, учитывая что кресты для подобных решений вообще не заточены, это их реальное слабое место. Отсюда и родился миф, что С++ плохое решение для скриптинга, его сложно освоить новичкам. Да там в принципе жопа!
У меня тоже абсолютно не возникло никакого желания с этим ковыряться.
Но не потому что там С++, а именно в силу вышеописанных причин.

Скриптовой же язык все низкоуровневые действия оставляет за кадром.
Ты просто создаешь игровой объект через new и тебе без разницы, как он свяжется с движком, передасться по сети и прочее. Примеры реального игрового кода - есть, они оформлены в наборы игровых библиотек.
На данный момент кодостиль там ближе к той же Халфе, но это не принципиально. Главный плюс крестов в том, что он позволяет обернуть все операции в АТД, после чего будет выглядеть как типично скриптовой язык. Но в реальном С++ этому постоянно мешает низкоуровневость, которая выглядывает то там, то здесь. В Шоте этому ничего не мешает.

Основная проблема С\С++ это работа со строками. Люди очень быстро учатся работать с целыми числами и числами с плавающей точкой.

C++ Source Code:
c = a + b;

Со строками же начинается чертовщина. А почему там нужен массив? А какого размера брать массив? А почему в const char* можно записать статически объявленную строку, а любую другую произвольную - нельзя, а почему strncpy надо указывать при копировании на один символ меньше, а как правильно конвертировать из std::string в любой другой тип строки.
А почему нельзя написать
C++ Source Code:
с = "foo" + "bar";

То есть основные проблемы вот с этим. В Шоте тоже нет этих проблем, там нативный тип строки.

Цитата:
Unit писал:
Геймдев немного изменился со времён Кармака, он сейчас казуален, люди тыкают пару кнопок, перетаскивают готовые ассеты и выплевывают это в плеймаркет

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

Так что там насчёт твоего движка? Покажешь\расскажешь?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 10-08-2024 в 08:57:

Ещё здорово бы было если бы был простой доступ к движковым классам и их методам. Без развёртывания кучи композиций и объявления в разных частях своего кода. Ну как в шарпах: объект.класс.значение
Типа GameObject.Transform.LocalScale.y += scaleY;

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

Добавлено 10-08-2024 в 11:57:

Цитата:
Дядя Миша писал:
с = "foo" + "bar";


Сделай ещё поддержку атрибутов текста
Debug.Log("<color=red>Error: </color>AssetBundle not found");

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


Отправлено Crystallize 10-08-2024 в 09:22:

Цитата:
FiEctro писал:
Сделай ещё поддержку атрибутов текста
Debug.Log("<color=red>Error: </color>AssetBundle not found");

Ох уж эти проклятые треугольные скобки. У тебя не было ощущения что старый добрый BBcode с квадратными скобками намного читабельнее?


Отправлено nemyax 10-08-2024 в 10:55:

Да уж, не по-жсоновски как-то =)


Отправлено Дядя Миша 10-08-2024 в 11:54:

Цитата:
FiEctro писал:
Ещё здорово бы было если бы был простой доступ к движковым классам и их методам. Без развёртывания кучи композиций и объявления в разных частях своего кода. Ну как в шарпах: объект.класс.значение

Это тоже есть, лишь с той разницей, что эти объекты созданы в самом Шоте, т.е. их всегда можно посмотреть и чего-нибудь добавить в базовый класс.
А из движка торчат обычные функции, которые и заворачиваются в эти классы.

Цитата:
FiEctro писал:
Debug.Log("<color=red>Error: </color>AssetBundle not found");

Это тоже есть, но в более простом варианте ^<number>
где ^ означает начало атрибута, а за ним следует число от нуля до семи.
0 - черный цвет, 1 - красный, итогдалие. На практике набора из пяти-шести цветов хватает всегда. Это же просто отладочные сообщения.

Добавлено 10-08-2024 в 14:54:

Собственно схема цветовых префиксов досталась в наследство от Xash3D, а туда она попала из Quake3. Ни разу у меня не было случая, чтобы представленных семи цветов не хватило. К тому же, благодаря ограниченному набору я могу с лёгкостью воспроизвести эти же цвета в системной консоли, где изначально действует ограничение примерно такого же плана. Там по сути три бита RGB и один бит интенсивности.

Цитата:
Crystallize писал:
Ох уж эти проклятые треугольные скобки

Треугольные - это для шаблонов.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 10-08-2024 в 18:28:

Цитата:
Дядя Миша писал:
Треугольные - это для шаблонов.

Ну эта сишная профдеформация тоже так себе, обычный моддер эти треугольные скобки видел максимум в HTML и вообще не ассоциирует треугольность с обращением к некоему множеству объектов. У него эта ассоциативная связка скорее пустует ну или занята двойным процентом который он в мемах в 00 видел: %%USERNAME%%. Мне лично хочется в таких случаях писать квадратные скобки просто потому что они визуально легче читаются и выглядят более солидно чем круглые или треугольные.


Отправлено FiEctro 10-08-2024 в 18:33:

Crystallize
Квадратные больше с массивами ассоциируются. А это атрибуты. Там может быть не только цвет. Но и размер текста, и тип (моноширинный например), и курсив, жирный, зачеркнутый и т.д. и т.п.

Цитата:
Дядя Миша писал:
Собственно схема цветовых префиксов досталась в наследство от Xash3D, а туда она попала из Quake3. Ни разу у меня не было случая, чтобы представленных семи цветов не хватило. К тому же, благодаря ограниченному набору я могу с лёгкостью воспроизвести эти же цвета в системной консоли, где изначально действует ограничение примерно такого же плана. Там по сути три бита RGB и один бит интенсивности.


Добавь ещё HEX код для игрового текста. Вот этих "хватит всем" никогда не хватает. Ладно для консоли ещё понимаю, но в игре ограничивать этим - бред.

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


Отправлено Crystallize 10-08-2024 в 18:58:

Цитата:
FiEctro писал:
Квадратные больше с массивами ассоциируются.

Это у тех кто за кодингом провёл больше времени чем печатая посты на форумах 00х. У меня пока не так. Да и я думаю что синтаксис вывода в консоль можно сделать каким-то особенным, с ним чаще сталкиваешься.


Отправлено Дядя Миша 10-08-2024 в 19:43:

Цитата:
FiEctro писал:
Ладно для консоли ещё понимаю, но в игре ограничивать этим - бред.

Так это и есть только для консоли. С чего ты взял что оно в игре ограничено? В игре ты можешь рисовать худ или меню с любым цветом.
Речь о том, как бы отправить цветное сообщение в консоль. И вот этих семи цветов за последние 16 лет мне всегда хватало для этой задачи.
Даже больше скажу - активно я юзал только три цвета, красный, желтый и зелёный.

Добавлено 10-08-2024 в 22:43:

FiEctro вообще у тебя какой-то перманентный страх, что я всячески ограничиваю пользователя в будущем движке, я не понимаю откуда это у тебя берётся. Такое ощущение что в Юнити ничего нельзя и ты боишься, что в Ксаше оно так же будет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 10-08-2024 в 20:40:

Цитата:
Дядя Миша писал:
FiEctro вообще у тебя какой-то перманентный страх, что я всячески ограничиваю пользователя в будущем движке, я не понимаю откуда это у тебя берётся. Такое ощущение что в Юнити ничего нельзя и ты боишься, что в Ксаше оно так же будет.


Я по твоему совету ковырял кваку. Я ковырял ХЛСДК. Ковырял твой новый СДК. И ты говоришь что ориентируешься на эти проекты. Вот оттуда этот страх.

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

Я считаю что когда пользователь первый раз включает движок он должен видеть что то очень простое, типа паинта, и уже когда в нём сможет потыкаться, тогда уже начинать его изучать более углублённо и серьёзно.
А когда тебе первым делом дают кучу утилит с командами которые непонятно как и куда вводить. То 99% народу сразу отсеится. И это я не про то чтобы про Ксаш, а вообще, навидался я такого.

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


Отправлено Дядя Миша 10-08-2024 в 20:49:

Цитата:
FiEctro писал:
И ты говоришь что ориентируешься на эти проекты

Дух старой школы я хочу сохранить, да.

Цитата:
FiEctro писал:
Я тебя понимаю что ты привык уже чисто на блокнотике и крестах всё делать

Ты опять забываешь что мой модельвьювер был самым удобным и таковым оставался долгое время, и даже сейчас СолоКиллер не смог освоить все его фишки. Это тебе просто как пример моей работы с интерфейсом.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 11-08-2024 в 07:29:

Можно сказать что XashNT будет чем-то средним между первым Квейком (именно первым!) и Юнити. Но навряд ли вы вот так сходу поймете, что именно он унаследовал. Речь идёт скорее о передании общей атмосферы, нежели о прямом заимствовании.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 11-08-2024 в 08:51:

Цитата:
FiEctro писал:
А когда тебе первым делом дают кучу утилит с командами которые непонятно как и куда вводить.

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


Отправлено FiEctro 11-08-2024 в 09:49:

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

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


Отправлено a1batross 11-08-2024 в 11:17:

Цитата:
Дядя Миша писал:
К тому же, благодаря ограниченному набору я могу с лёгкостью воспроизвести эти же цвета в системной консоли, где изначально действует ограничение примерно такого же плана. Там по сути три бита RGB и один бит интенсивности.


А этот набор из Quake 3 в свою очередь попал из ANSI последовательностей терминалов. В Windows то наверное можно сделать напрямую SetConsoleTextColor какой-нибудь, а вот в юниксах и в Windows 10 и выше их можно преобразовать табличкой:

code:
static void Sys_WriteEscapeSequenceForColorcode( int fd, int c ) { static const char *q3ToAnsi[ 8 ] = { "\033[1;30m", // COLOR_BLACK "\033[1;31m", // COLOR_RED "\033[1;32m", // COLOR_GREEN "\033[1;33m", // COLOR_YELLOW "\033[1;34m", // COLOR_BLUE "\033[1;36m", // COLOR_CYAN "\033[1;35m", // COLOR_MAGENTA "\033[0m", // COLOR_WHITE }; const char *esc = q3ToAnsi[c]; if( c == 7 ) write( fd, esc, 4 ); else write( fd, esc, 7 ); }

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 12-08-2024 в 07:25:

На официальном телеграм-канале по XashNT я предложим участникам поделиться своим опытом взаимодействия с другими движками и изложить его в комментариях. Опыт при этом важен любой, как негативный, так и позитивный. Получил вот такой подробный комментарий и мне захотелось его прокомментировать отдельно, но формат ТГ для этого не слишком подходит, поэтому сделаю здесь:

Цитата:

Антон, [11.08.24 18:14]
[В ответ на XashNT Chat]
Расскажу про свой опыт взаимодействия с игровыми движками. Я буду выделять основные плюсы и минусы. Обращу внимание, что всё ниже перечисленное - это мое субъективное мнение и оно отражает лишь то, что я подмечал при работе с тем или иным движком.

1. Unity

Плюсы:

* Предварительный просмотр. Очень удобно, то что можно сразу посмотреть как будет выглядеть и работать та или иная сцена не выходя из редактора.
* Относительно быстрое прототипирование.
* Множество туториалов и видеоуроков.
* Понятный интерфейс

Минусы:

* Приходится практически все писать с нуля. Конечно в Ассет Сторе есть всякие шаблоны и модули, но нюанс в том, что они написаны обычно под конкретную версию Unity. Если версии редактора и какого либо ассета различаются — то фиг установишь.

* Visual Studio в качестве редактора кода. Раньше в со старыми версиями Unity в комплекте был редактор MonoDevelop. Легкий, удобный, сразу настроенный. А в новых версиях увы — будь добр установи внешний редактор, который еще не факт, что правильно интегрируется с движком

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

* Работа с GUI - это какой-то треш. Добавляешь Canvas какой нибудь, а он появляется в 3D сцене в виде огромного квадрата, который растянут на всю сцену. Нужно переключается на 2D режим, чтобы хоть как то с этим работать.

* Графика. Приходится попотеть, чтобы Unity выдавал красивую и целостную картинку.

2. Unreal Engine

Плюсы:

* Работает «из коробки». Множество функций уже предварительно настроены, что экономит время при создании проектов.
* Красивая графика. Дорого бохато и всё такое.

Минусы:

* Требователен к ресурсам ПК
* Занимает много места на жестком диске. Если вес Unity обычно не превышает 5 ГБ, то Unreal занимает 40-70 ГБ.
* Блюпринты. Кто-то может возразить — так это же хорошо. Визуальное программирование самое то для новичков. Так то да, блюпринты хороши на начальных этапах разработки (для прототипирования например), но по мере масштабирования проекта он может запросто превратится в лапшу из кучи нодов, где хрен потом разберёшься. Лично мне писать код привычнее.
* Процесс сборки и компиляции проекта может занимать много времени.
* Как по мне, у движка немного перегруженный интерфейс.

3. GoldSrc/Xash3D/Source

Плюсы:

* Хорошая оптимизация. Игры на этих движках не требовательны к ресурсам ПК, а значит с производительностью не будет проблем.
* Симпатичная графика. Она имеет свой шарм.

Минусы:

Антон, [11.08.24 18:14]
[В ответ на XashNT Chat]
* Размерность игрового мира. При создании карт меня всегда смущали внутриигровые юниты. Например, хочется воссоздать место из реальной жизни, а тут возникает проблема - как не промахнуться с размерностью, чтобы какой-то объект правильно вписался в игровой мир. Конечно, существуют всякие шпаргалки по размерам дверных проёмов, высоты лесниц и т.д, но блин..это такая запара конечно. Мне очень не хватало возможности сделать карту в Блендере каком нибудь просто в метрах обычных и потом импортировать её в движок и не беспокоится о том, что где-то я налажал с размерами.
* Кодинг. Он тут сложный. Дело даже не в самом языке С++, а в..ммм я даже не знаю как правильно сказать, в архитектуре игрового кода наверное. Конечно, существуют множество туторов по созданию оружия, монстров, и т. д, Обычно они сводятся к следующему: На клиенте в каком то файле пишем то то, на сервере в другом файле то то, не забываем про прекеш и т. д. и т. д. Когда делаешь строго по туториалу, вроде бы все понятно, но как только начинаешь кодить что-то отличное от стандартных монстров или оружия - тут то и возникают вопросы. Как это всё работает? Почему писать надо именно так? Разделение на клиент и сервер просто путает и возникает каша в голове. Некоторые вещи вообще намертво «приколочены» к движку, если по какой-то причине они не нужны и хочется их убрать, а нельзя — иначе есть риск поломать что-то важное.
* Скриптинг. Скрипты в виде квадратиков в редакторе карт сбивают с толку и запутывает. Тут как в случае с с Блюпринтами в UE — получается визуальная лапша, в которой потом трудно ориентироваться.
* Отсутствие возможности запустить сцену прямо в редакторе. Обязательно нужно сначала скомпилировать карту, зайти в игру и только потом тестировать карту. Неудобно.
* Нет единой экосистемы — куча разных редакторов, которые приходится ставить отдельно самостоятельно.
* Сложность в освоении. Туториалов и видеоуроков не так много.


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

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

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

По поводу размерности игрового мира в юнитах. Переделывать движок на сантиметры или метры навряд ли будет оптимальным решением.
Лучше всего на мой взгляд вычистить из конвейера все константы, которые так или иначе завязаны на реальных привязках к юниту. Тем более что их не особенно много. Тот же OpenGL оперирует абстрактными единицами, ему всё равно что у вас - юнити ли метры. Значит надо, чтобы и движку тоже было всё равно.

Цитата:

Когда делаешь строго по туториалу, вроде бы все понятно, но как только начинаешь кодить что-то отличное от стандартных монстров или оружия - тут то и возникают вопросы. Как это всё работает? Почему писать надо именно так? Разделение на клиент и сервер просто путает и возникает каша в голове. Некоторые вещи вообще намертво «приколочены» к движку, если по какой-то причине они не нужны и хочется их убрать, а нельзя — иначе есть риск поломать что-то важное.

Надеюсь, что в NT мне удалось избавиться от большинства перечисленных недостатков. Хотя разделение на клиент и сервер всё равно остается, да и кэшировать ресурсы тоже надо.
Но благодаря виртуальной машине, сломать что-либо полностью удалив старый код будет довольно-таки проблематично.
Но опять же - хотите гибкости, которая возможно не понадобится вам в текущем проекте - значит у вас будет присутствовать код на Шоте, который вам совсем не нужен и заглядывать в него необязательно, но без него невозможна правильная работа движка. Зато впоследствии, когда вам захочется там что-нибудь изменить, вы сможете это сделать безо всяких проблем.

Добавлено 12-08-2024 в 10:21:

Собственно, подводя итоги, можно отметить что набор для разработки в игровых движках, существует только в двух состояниях.
Первое состояние - это когда движок исторически делался для какой-то конкретной игры, поэтому там присутствует набор объектов под эту игру.
Даже если впоследствии его попытались расширить и абстрагировать.
Таков например Унреал, КрайЭнджин, Сорс. Кодобаза там большая, она на С++, как это всё работает понять очень сложно, что можно удалять, а что нельзя - тем более. К тому же ни в одной из документаций вы никогда не найдет никакой информации по этому поводу. Предполагается, что ни у кого просто не возникнет желания полностью удалить весь старый игровой код и написать полностью свой. Хотя на практике зачастую именно это и требуется.
Второе состояние - это когда в движке вообще нет никакого игрового кода, а всё что есть - это примеры разной степени похабности. Например знаменитый игровой контроллер игрока реализующий интересный эффект физики "мешок с гавном на пенсии", ну да я про него уже упоминал.
Таков например Юнити. И всё равно, многие считают, что лучше создавать кодобазу с нуля, пусть плохонькую, зато свою, чем разбираться в чужой.

Как я вижу выход из этой ситуации? XashNT, точнее его скриптовая часть, устроен таким образом что не навязывает единственно правильный способ организиации игровых объектов. Этих способов может быть несколько и все они будут законными. Например под разные типы игр. Разумеется к этому должны прилагаться сэмплы, на базе которых можно начинать делать свою будущую игру в определённом жанре.
То есть сэмпл для 2д бродилки, сэмпл для тетриса-змейки, сэмпл для 3д шутера, сэмпл для стратегии. Пока что такого плана.
То есть разработчик берёт сэмпл за основу и начинает добавлять туда уже собственный код. Я пока что не учитываю какую роль во всём этом будет занимать визуальное программирование, но не считаю, что оно должно доминировать. Просто исходя из тех соображений, что те, кто в своё время сделали ставку на визуальное программирование, проделали длинный путь, наступили на все возможные грабли и мне совершенно не хочется бежать вслед за ними. К тому же, как мы уже успели убедиться - это далеко не панацея. Должны быть и другие способы.

Добавлено 12-08-2024 в 10:25:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 12-08-2024 в 08:06:

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


Тут я с тобой согласен, конечно многое зависит от всратости редактора, но в плане нового ксаша хотелось чтобы был свой встроенный редактор.

Цитата:
Дядя Миша писал:
По поводу визуального программирования мнения разделились, какого-то единого нет. Одни справедливо указывают не невозможность ориентации в этой лапше по мере разрастания кода, другие говорят, что это всё можно скрывать внутри макроблоков, но видно что решение половинчатое.
Тут нужен какой-то другой подход. Какой именно я пока ещё не решил.


Я считаю что на данном этапе, ноды не нужны. У них ещё не достаточно сформировалась общая концепция, и если посмотреть на реализацию в популярных программах - там дикий запад. У 3д макса свои ноды, у блендера свои, у Анрила свои, у Юнити свои. Т.е. какого то общего стандарта нет.

Чтобы не было спагети нод нужно просто строго типизировать что с чем взаимодейтвует, объекты только с объектами, компоненты только с компонентами, группы только с группами, методы только с методами, и никак иначе. Нужно искуственно ограничивать такое, иначе получим лапшу из всего чего только можно.

Цитата:
Дядя Миша писал:
По поводу размерности игрового мира в юнитах. Переделывать движок на сантиметры или метры навряд ли будет оптимальным решением.
Лучше всего на мой взгляд вычистить из конвейера все константы, которые так или иначе завязаны на реальных привязках к юниту. Тем более что их не особенно много. Тот же OpenGL оперирует абстрактными единицами, ему всё равно что у вас - юнити ли метры. Значит надо, чтобы и движку тоже было всё равно.


Можно оставить и юниты, но в самом движке должны быть методы и инструменты для конвертации в другие единицы. Это вопрос автоматизации твоего редактора и библиотек для скриптинга.

Цитата:
Дядя Миша писал:
Надеюсь, что в NT мне удалось избавиться от большинства перечисленных недостатков. Хотя разделение на клиент и сервер всё равно остается, да и кэшировать ресурсы тоже надо.
Но благодаря виртуальной машине, сломать что-либо полностью удалив старый код будет довольно-таки проблематично.
Но опять же - хотите гибкости, которая возможно не понадобится вам в текущем проекте - значит у вас будет присутствовать код на Шоте, который вам совсем не нужен и заглядывать в него необязательно, но без него невозможна правильная работа движка. Зато впоследствии, когда вам захочется там что-нибудь изменить, вы сможете это сделать безо всяких проблем.


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

Цитата:
Дядя Миша писал:
Даже если впоследствии его попытались расширить и абстрагировать.
Таков например Унреал, КрайЭнджин, Сорс. Кодобаза там большая, она на С++, как это всё работает понять очень сложно, что можно удалять, а что нельзя - тем более. К тому же ни в одной из документаций вы никогда не найдет никакой информации по этому поводу. Предполагается, что ни у кого просто не возникнет желания полностью удалить весь старый игровой код и написать полностью свой. Хотя на практике зачастую именно это и требуется.


Ну да, ты привязан к чужой архитектуре, и никуда не денешься.

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


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

Цитата:
Дядя Миша писал:
Как я вижу выход из этой ситуации? XashNT, точнее его скриптовая часть, устроен таким образом что не навязывает единственно правильный способ организиации игровых объектов. Этих способов может быть несколько и все они будут законными. Например под разные типы игр. Разумеется к этому должны прилагаться сэмплы, на базе которых можно начинать делать свою будущую игру в определённом жанре.

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


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

Я не просто так показывал тебе S&Box это вот именно та халфа - песочница с закосом под Юнити. О которой ты говорил.

Это вот как работа с памятью в С++, и работа с памятью в той же Джаве или Шарпах.

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


Отправлено (_-=ZhekA=-_) 12-08-2024 в 10:40:

Опять нафлудили 7 страниц, я за вами читать не успеваю тонны текста (((

Цитата:
Дядя Миша писал:
2. Unreal Engine

Плюсы:

в анриле тоже есть предварительный просмотр в редакторе или в отдельном окне. Так же полно уроков, как на русском, там и на английском.
Цитата:
Дядя Миша писал:
* Занимает много места на жестком диске. Если вес Unity обычно не превышает 5 ГБ, то Unreal занимает 40-70 ГБ.

Если в лаунчере отключить не нужные компоненты, то будет весить 20-30 гб, но в целом это тоже конечно много, но лично меня это не напрягает.
Цитата:
Дядя Миша писал:
* Блюпринты. Кто-то может возразить — так это же хорошо. Визуальное программирование самое то для новичков. Так то да, блюпринты хороши на начальных этапах разработки (для прототипирования например), но по мере масштабирования проекта он может запросто превратится в лапшу из кучи нодов, где хрен потом разберёшься. Лично мне писать код привычнее.

Нет там НИКАКОЙ лапши и подобной хрени, так говорят те, кто вообще не знает\не понимает, как с принтами нужно работать, как создавать функции, макросы, глобальные функции и прочее. У меня целая прога написана полностью на принтах и несколько плагинов и все работает прекрасно, чистый и понятный код с комментариями. + Никто не запрещает юзать и С++ и принты одновременно. Встроенного редактора С++ конечно нет, но можно юзать любой. По поводу "лапши" в принтах, то могу привести тонны примеров, что там с этим все ок.
Цитата:
Дядя Миша писал:
* Процесс сборки и компиляции проекта может занимать много времени.

Это только первый раз, когда собираются все шейдеры проекта и движка. У меня проект собирается обычно 4-6 мин.
Цитата:
Дядя Миша писал:
* Как по мне, у движка немного перегруженный интерфейс.

Это вкусовщина, со-временем привыкаешь, зато все нужные инструменты в одном редакторе и не нужно ломать голову, чтобы, что-то там искать, качать и ставить. Ты 3д макс открой и посмотри, какой там простой и понятный интерфейс, его как придумали лет 30 назад, так он почти не менялся и никто не жалуется )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Crystallize 12-08-2024 в 10:43:

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

Обрати внимание на https://tinyc.games/ там код редактируется в блокноте и за один клик компилится приложенным консольным компилятором.


Отправлено FiEctro 12-08-2024 в 11:09:

Цитата:
Crystallize писал:
Обрати внимание на https://tinyc.games/ там код редактируется в блокноте и за один клик компилится приложенным консольным компилятором.


А отлаживать как?

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


Отправлено Дядя Миша 12-08-2024 в 11:48:

Цитата:
FiEctro писал:
Можно оставить и юниты, но в самом движке должны быть методы и инструменты для конвертации в другие единицы

В исходных форматах надо просто будет указывать единицу измерения.
В CSM к слову есть такое поле, я предусмотрел.

Цитата:
FiEctro писал:
Ну вот в Юнити удобно то что когда ты создаёшь скрипт ты не лазишь в чужой код, у тебя есть пустой лист в своём неймспейсе

в Шарпе НЕТ глобальных объектов, вот какая штука. Там каждый класс - типа изолирован от соседей. В теории это очень удобно и инкапсуляционно.
А на практике, гм...

Цитата:
FiEctro писал:
С одной стороны это круто, с другой должна быть какая то стандартизация. Поскольку когда нет стандартизации - получаем линукс, где все системы дублируют друг друга, не всегда это всё совместимо и что то регулярно отваливается

Ядро в любом случае навяжет модель поведения. А игровой код может быть любым.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 12-08-2024 в 12:09:

Цитата:
Дядя Миша писал:
в Шарпе НЕТ глобальных объектов, вот какая штука. Там каждый класс - типа изолирован от соседей. В теории это очень удобно и инкапсуляционно.
А на практике, гм...


Поподробнее, интересно вообще послушать какие моменты тебя в шарпах смущают. Только давай по делу, а не "говно", "убийца жавы" и прочие оценочные суждения..

Я почему и хотел тебе рассказать про ZInject и реактивное программирование, там как раз про это. Но ты просто отмахнулся сказав что тебе это не интересно.
https://habr.com/ru/articles/781016/
https://habr.com/ru/articles/342660/
https://habr.com/ru/companies/otus/articles/531306/
https://habr.com/ru/articles/496460/

Я не призываю делать 1 в 1. Просто хочу чтобы ты ознакомился. Может быть у тебя такие вещи можно будет сделать намного интуитивнее и удобнее.

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


Отправлено Дядя Миша 12-08-2024 в 12:29:

Вся эта информация по большому счёту бесполезна и только время ворует.
Там может крупица какая-то, 0.01% от общего объема имеет смысл, но пока её найдешь так вспотеешь.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 12-08-2024 в 13:20:

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

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


Отправлено Дядя Миша 12-08-2024 в 14:54:

Цитата:
FiEctro писал:
Зря, там много полезных фишек, которые бы ты мог сделать прямо на уровне языка.

Так я потом и сделаю. Но сейчас оно мне зачем? Я занят передчей данных с сервера на клиент. А ты мне предлагаешь всё бросить и почитать про реактивное программирование. Смысл голову забивать. Ясное же дело, что это нельзя на пол-шишечки по вчерам штудировать. Это надо полностью погружаться, ставить собственные опыты, тестировать. Так что нет.

Добавлено 12-08-2024 в 17:48:

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

Добавлено 12-08-2024 в 17:54:

Цитата:
(_-=ZhekA=-_) писал:
Если в лаунчере отключить не нужные компоненты, то будет весить 20-30 гб, но в целом это тоже конечно много, но лично меня это не напрягает.

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

Цитата:
(_-=ZhekA=-_) писал:
Нет там НИКАКОЙ лапши и подобной хрени, так говорят те, кто вообще не знает\не понимает, как с принтами нужно работать, как создавать функции, макросы, глобальные функции и прочее.

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

Цитата:
(_-=ZhekA=-_) писал:
Ты 3д макс открой и посмотри, какой там простой и понятный интерфейс, его как придумали лет 30 назад, так он почти не менялся и никто не жалуется )

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 13-08-2024 в 08:01:

Цитата:
Crystallize писал:
А на айфонах вроде был PowerVR? Или то уже история?

Уже история, у них свои процы и свои видеоядра, на харки того-же A14 Bionic глянь.

Добавлено 13-08-2024 в 12:01:

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

Да чё за бредятина, ненавижу форумы за такое вот.


Отправлено a1batross 13-08-2024 в 08:16:

Цитата:
APAMk2 писал:
Уже история, у них свои процы и свои видеоядра, на харки того-же A14 Bionic глянь.


Судя по сообщениям аниме-девочек которые отреверсили и переписали драйвер, он архитектурно имеет свои корни в PowerVR. Возможно, если раньше они лицензировали видеоядро, то позже выкупили разработку и уже на её основе делают что-то своё.

__________________
Xash3D FWGS форк


Отправлено FiEctro 13-08-2024 в 09:27:

Цитата:
(_-=ZhekA=-_) писал:
Ты 3д макс открой и посмотри, какой там простой и понятный интерфейс, его как придумали лет 30 назад, так он почти не менялся и никто не жалуется )


Такой же бардак как в блендере 2.79b. В новых версиях кстати интерфейс меняли, теперь при старте показывается по умолчанию иерархия объектов, раньше где то она запрятана была. Ты бы ещё зебру вспомнил, её вообще человек с другой планеты видимо писал.
https://i.ytimg.com/vi/D7LaYg5-pB0/maxresdefault.jpg

Цитата:
Дядя Миша писал:
Мысль поясню. Если мне что-то предлагают почитать, а потом на основе прочитанного что-то сделать, а я в этот момент занят другими делами, я никогда не стану это читать. Более того - сперва я попытаюсь решить задачи своим способом. Потому что либо оптимальный способ мне известен, либо его вообще не существует и надо придумать. И только если мне это не удалось, тогда я уже полезу читать на какие грабли натыкались до меня.
Т.е. я чётко знаю когда и где от меня потребуется велосипед.


Мысль понял, но обычно исследования проводят перед разработкой, а не после

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


Отправлено nemyax 13-08-2024 в 10:37:

Цитата:
FiEctro писал:
обычно исследования проводят перед разработкой, а не после

Когда что-то своё изобретаешь, исследования входят в разработку.


Отправлено Дядя Миша 13-08-2024 в 11:34:

Цитата:
APAMk2 писал:
Да чё за бредятина, ненавижу форумы за такое вот.

Там нет ничего важного или интересного. Я это нарочно сделал, чёбы народ писал активнее.

Цитата:
FiEctro писал:
исследования проводят перед разработкой, а не после

Это когда ты в предлагаемой теме вообще дуб-дубом.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 14-08-2024 в 07:39:

Какая то лабуда, в телеграме под твоим постом перестали обновляться комментарии в мобильном приложении. А с компа всё ок. Какое же это кривое говно этот телеграм.

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


Отправлено (_-=ZhekA=-_) 14-08-2024 в 11:06:

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

Да, меня все чаще и чаще посещают мысли начать изучать С++, так как в анриле именно С++, не ведь не спроста блюпринты это тот же С++ только визуальный и немного упрощенный, насколько я понял )
Цитата:
FiEctro писал:
Такой же бардак

Да, нет там бардака, все привычно и на своих местах )
Цитата:
Дядя Миша писал:
Ты бы ещё зебру вспомнил, её вообще человек с другой планеты видимо писал.

А чего мне вспоминать-то? ) Я в максе и анриле работаю каждый день на работе и уже давно привык к ним )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 14-08-2024 в 11:47:

Цитата:
(_-=ZhekA=-_) писал:
А чего мне вспоминать-то? ) Я в максе и анриле работаю каждый день на работе и уже давно привык к ним )


Кто то на работе может байты вручную считает, что нам теперь всем их считать?
В целом я против Макса и Анрила ничего не имею против, но интерфейс 3д Макса сложно назвать интуитивным. Всётаки там таже банальная логика в построении модификаторов должна соблюдаться. И переключение управления там тоже весьма в нестандартном месте находится

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


Отправлено Дядя Миша 14-08-2024 в 12:16:

(_-=ZhekA=-_) аккуратнее с цитированием. Я ничего не писал про зебру.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 14-08-2024 в 13:05:

Цитата:
Дядя Миша писал:
(_-=ZhekA=-_) аккуратнее с цитированием. Я ничего не писал про зебру.

Сорян, я даже хз, как так получилось (

Добавлено 14-08-2024 в 16:05:

Цитата:
FiEctro писал:
Кто то на работе может байты вручную считает, что нам теперь всем их считать?

А я ничего и не навязываю )
Цитата:
FiEctro писал:
но интерфейс 3д Макса сложно назвать интуитивным.

Это была моя ирония... ) Интерфейс в максе жопа, но я к тому, что со-временем привыкаешь и норм )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 14-08-2024 в 13:37:

Цитата:
(_-=ZhekA=-_) писал:
Сорян, я даже хз, как так получилось (

Это фишка форума - если выделяешь цитату в одном посте, а жмёшь кнопку "цитировать" от другого - вот оно так и получается.

__________________
My Projects: download page

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

Цитата:

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


Отправлено dem789 16-08-2024 в 08:38:

Не много оффтоп, про движки.

Для понимания - недопрограмер, чуток знания Delphi, C# в связке с Unity, Python написание плагина для Noesis. Всё в рамках хобби в свободное время.

Вот хочу я сделать пару простеньких аркад, да перенести старый отечественный FPS шутер на новый движок. И собственно встал выбор, а на чём всё это можно сделать. Собственно последние два месяца как раз на ютубе смотрю мнения по движкам.

Unreal - красивая картинка, много ассетов, много обучающий курсов. Но! Блюпринты это черт ногу сломит. Он очень медленный, для коммерческой разработки думаю не критично, а вот инди и любители - плюются. С++ вызывает ужас.
Поиграл на днях во Vladik brutal - печальное зрелище, лучше бы разраб. делал на движке HL2, тем более по его словам, там пришлось много допиливать UE.

Про Unity все и так в курсе, обучалок много, но графика и физика...

Godot - пока самый интересный, графика +-, курсы вроде есть, шустрый. Но как открываешь редактор, тут же хочется закрыть. Зато python подобный язык прям притягивает.

HL2 - мало видео на ютубе, и понимание, что максимум это мод для HL на пару карт.

Unigine и Falco - наблюдаю и ржу, у Unigine вроде и графика норм, и видео уроки клепают (правда не для новичков, а я хз с каким прицелом), и всего этого нет у Falco, но при этом у Falco в том же VKplay куча игр в продаже, правда говно-игр, но всё же, а кроме пары игр существующих в природе у Unigine так и нету игр.
"А сколько игр сделано на твоём движке?"


Цитата:
FiEctro писал:
Я считаю что когда пользователь первый раз включает движок он должен видеть что то очень простое, типа паинта, и уже когда в нём сможет потыкаться, тогда уже начинать его изучать более углублённо и серьёзно.
А когда тебе первым делом дают кучу утилит с командами которые непонятно как и куда вводить. То 99% народу сразу отсеится. И это я не про то чтобы про Ксаш, а вообще, навидался я такого.

Согласен и не согласен. Сам бы я забил, но есть Сталкер - неудобно, непонятно - но сколько модов, сколько людей в нём ковыряются! Очень похожа история на HL2. Хотя казалось бы, что народ должен отсеиваться.

С++ - отпугивает большинство.
Блюпринты привлекают, но спустя время это проблема спагетти.
Pyrhon скрипты - упрощают вход для новичков.
Отсутствие нормального и понятного с ходу редактора, как и время открытия и компиляции - влияет на выбор у инди.
Графика - UE, unity режет глаз. HL2 и сталкер - приятней.
Но думаю самое главное это видео курсы, как работает движок, как физика и прочее. Я делал тест - как просто и быстро я сделаю самый простой арканойд, тогда победил unity.

Очень надеюсь, что Xash подойдет хотя бы частично под мои запросы)

P.S.
"Этот текст скрытый. Вы должны набрать не менее 100 сообщений на Форуме, чтобы его увидеть."


Отправлено FiEctro 16-08-2024 в 09:51:

Цитата:
dem789 писал:
Pyrhon скрипты - упрощают вход для новичков.


Всегда удивляли люди которые говорят что Питон для новичков. По мне он ещё более заковыристый чем C++. Хотя конечно не такой низкоуровневый. Единственный его плюс большой выбор библиотек с хорошим функционалом, но в контексте игрового движка они все бесполезны.

Цитата:
dem789 писал:
Про Unity все и так в курсе, обучалок много, но графика и физика...


По поводу графики смотри HDRP (хотя не понятно зачем для простеньких аркад и старенького шутера тебе графика?), и что не так с физикой? Она ничем не хуже чем в Анриле и Годоте.

Цитата:
dem789 писал:
Сам бы я забил, но есть Сталкер - неудобно, непонятно - но сколько модов, сколько людей в нём ковыряются! Очень похожа история на HL2. Хотя казалось бы, что народ должен отсеиваться.


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

Цитата:
dem789 писал:
видео уроки клепают (правда не для новичков, а я хз с каким прицелом),


Ну потому что Унигине не для инди. Это коммерческий софт для крупных коммерческих компаний. С нами мелкими сошками они не очень хотят возиться.

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


Отправлено dem789 16-08-2024 в 10:26:

Цитата:
FiEctro писал:
Всегда удивляли люди которые говорят что Питон для новичков. По мне он ещё более заковыристый чем C++. Хотя конечно не такой низкоуровневый. Единственный его плюс большой выбор библиотек с хорошим функционалом, но в контексте игрового движка они все бесполезны.

Так это личный опыт, когда пробуешь писать на том и на этом, и пробуя питон сам себе говоришь - "как это просто и удобно!" думаю это что-то да значит. Опять же сколько в стране тупо вакансий под C++, C# и Python?
hh говорит C++ 4 148, C# 3 414, Python 13 711.

Цитата:
FiEctro писал:
По поводу графики смотри HDRP (хотя не понятно зачем для простеньких аркад и старенького шутера тебе графика?), и что не так с физикой? Она ничем не хуже чем в Анриле и Годоте.

В том то и дело, надо в HDRP сидеть ковыряться - нет ни времени, ни желания. Я же даже не инди, так ерундой страдаю когда время есть.

Цитата:
FiEctro писал:
Давай признаем что именно своих игр со своим контентом на этих движках не так и много. А большинство модов строятся на контенте чужой игры.

Да, но тут скорее про привлекательность для людей, и их количество. Когда казалось бы, зачем если есть Unreal? Red panda перенес сталкер на Unreal, а люди всё равно сидят и клепают моды и SDK правят. И в этих модах они часто сделали больше, чем во многих инди играх.

Цитата:
FiEctro писал:
Ну потому что Унигине не для инди. Это коммерческий софт для крупных коммерческих компаний. С нами мелкими сошками они не очень хотят возиться.

Да, согласен - вот только они же сами его пытаются продвигать чуть ли не как замену Unity. Получается смотрите какой офигенный движок, но он только для профи и говорить это не профи? Никак не улавливаю смысл их PR.


Думаю важно кто, с какого языка начинал и какой опыт у человека. Опять же - у меня взгляд со стороны ламера, который все эти языки знает ровно до ООП, а дальше темный страшный лес.
Смысл именно в начале. Какая разница какой язык - если новый пользак бросает движок, потому что сложно, не понятно и не получается нифига?
С++, C#, скрипты, блюпринты - все это либо просто и понятно, либо рано или поздно взрывает мозг. Если движок для профи, которые скорей выберут Unreal, то смысл создавать новый? Или движок для "народа" который будет делать моды и писать простое своё, то может важно не переусложнять? Где взять профи которые будут пользовать Xash? Насколько легко будет собрать команду хотя бы из 5 человек? Я смогу один просто перенести старый шутер на новые рельсы(при условии, что я вытащил все ассеты из него) или мне сначала надо пару лет вкатывать в C++ ?

Можно много рассуждать, но я то смотрю на всё это как покупатель, который готов заплатить за движок, за курсы, за ассеты - если опять же меня всё устроит.

P.S.
Ещё раз напоминаю, что это всё мнение нуба, которое можно не брать в расчет)


Отправлено Дядя Миша 16-08-2024 в 11:46:

Цитата:
dem789 писал:
и всего этого нет у Falco, но при этом у Falco в том же VKplay куча игр в продаже

Можно про Falco поподробнее? Для меня Falco это к сожалению погибший в автокотострофе немецкий исполнитель хита Jeanny.

Цитата:
dem789 писал:
С++ - отпугивает большинство.

У меня собственное мнение на этот счёт. Отпугивает не столько сам С++, сколько его мерзкие особенности. В частности работа со строками. Да и STL, которым пронизаны последние версии языка меня и самого пугает, чоужтам.

Цитата:
dem789 писал:
Очень надеюсь, что Xash подойдет хотя бы частично под мои запросы)

Будем надеяться.

Цитата:
FiEctro писал:
Всегда удивляли люди которые говорят что Питон для новичков. По мне он ещё более заковыристый чем C++.

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

Цитата:
FiEctro писал:
По поводу графики смотри HDRP

Так этож рендер из Таркова вроде?

__________________
My Projects: download page

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

Цитата:

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


Отправлено dem789 16-08-2024 в 11:51:

Falco engine - не до Unity, C# - если не ошибаюсь, делается соло разрабом, тем удивительней, что на нём хоть кто-то что-то делает.

https://falco3d.com

https://www.youtube.com/watch?v=ABrzhl2F3yg

https://vkplay.ru/play/?is_sellable...ch=%20Invention

https://vkplay.ru/play/?is_sellable...h&search=medved

остальные совсем трэш школьника


Отправлено Дядя Миша 16-08-2024 в 12:12:

Цитата:
Free cross-platform 3D game engine with C# scripting, Bullet physics and OpenAL audio

Ну в принципе, ничего нового.

Цитата:
dem789 писал:
Falco engine - не до Unity, C# - если не ошибаюсь, делается соло разрабом

Кажется его автора обвиняли в технофашизме, но я толком не понял за что и что это вообще такое - технофашизм.

Добавлено 16-08-2024 в 15:12:

Оффтопик про сложность освоения С++ и Python вынес в отдельную тему:

https://hlfx.ru/forum/showthread.php?s=&threadid=6099

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 16-08-2024 в 12:27:

Цитата:
Дядя Миша писал:
но я толком не понял за что и что это вообще такое - технофашизм.


Мне недавно Гос Услуги прислали смску с кодом 1488.

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


Отправлено dem789 16-08-2024 в 12:31:

Цитата:
Дядя Миша

"Этот текст скрытый. Вы должны набрать не менее 100 сообщений на Форуме, чтобы его увидеть."


Отправлено (_-=ZhekA=-_) 16-08-2024 в 12:57:

Цитата:
dem789 писал:
Но! Блюпринты это черт ногу сломит. Он очень медленный

Принты это тот же С++ только визуальный. По скорости, да, он на виртуальной машине и в пятом УЕ убрали нативизацию принтов, надеюсь, что вернут ее обратно... Но это не означает, что принты медленные, если все делать грамотно, то все работает без проблем и быстро и НЕ БУДЕТ НИКАКОЙ "ЛАПШЫ", а если руки из жопы, то и С++ не поможет...

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 16-08-2024 в 16:02:

Цитата:
dem789 писал:
"Этот текст скрытый. Вы должны набрать не менее 100 сообщений на Форуме, чтобы его увидеть."

Там ничего интересного. Просто поверь на слово. Это сделано с единственной целью, чтобы народ оставлял сообщения.

Добавлено 16-08-2024 в 16:49:

Цитата:
(_-=ZhekA=-_) писал:
По скорости, да, он на виртуальной машине и в пятом УЕ убрали нативизацию принтов, надеюсь, что вернут ее обратно...

Насколько я помню, в четвёртом UE нативизация блупринтов была каким-то образом прибита гвоздями к 17-й студии. Видимо убрали как раз для того, чтобы избавиться от этой зависимости.

Добавлено 16-08-2024 в 19:02:

Итак товарищи, сегодня значимый день. Клиентская часть движка и репликация данных успешно написаны, подключены и опробованы в деле.
Теперь самая жуткая вещь - интерполяция. Допущение на допущении и допущением погоняет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 17-08-2024 в 08:56:

Цитата:
Дядя Миша писал:
Насколько я помню, в четвёртом UE нативизация блупринтов была каким-то образом прибита гвоздями к 17-й студии. Видимо убрали как раз для того, чтобы избавиться от этой зависимости.

Вот конкретно за это не могу сказать, так детально я не разбирался, как это там устроено

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 18-08-2024 в 07:06:

Общая интерполяция успешно задействована и работает. Осталось самое сложное - интерполяция монстров. Потому что монстры играют анимацию со своим fps, который не совпадает с тем, как часто сервер посылает пакеты.
В первой и второй кваке это несоответствие было решено в лоб. Все анимации были на 10 фпс (и быстрее нельзя) и сервер тоже отправлял пакеты 10 раз в секунду. Вот оно так и получилось, автоматически.
Но уже в ку3 так легко отделаться не получилось.
Тут нужны промежуточные стейты для хранения текущих значений анимации, а так же время переключения кадра для локального значения интерполяционного фактора.

Добавлено 18-08-2024 в 10:04:

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

Добавлено 18-08-2024 в 10:06:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 18-08-2024 в 09:09:

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


Отправлено Дядя Миша 18-08-2024 в 10:00:

Unit Я тебе там вопрос задал:

Цитата:
Дядя Миша писал:
Так что там насчёт твоего движка? Покажешь\расскажешь?


Если хочешь чтобы я тебе отвечал, всё же не игнорируй мои вопросы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 18-08-2024 в 10:36:

Дядя Миша
Ничего он не расскажет, он гуманитарий.

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


Отправлено Unit 18-08-2024 в 11:02:

Цитата:
Дядя Миша писал:
Я тебе там вопрос задал

Я в этом потоке текста честно даже не заметил.

А что собственно показывать, скриншот из IDE? Пожалуйста На данном этапе я ковыряю Vulkan, думаю отказаться от OpenGL полностью, почти весь рендер приходится переделывать, параллельно изучая Vulkan.
В Vulkan оказался другой подход к юниформам, памяти и т.д.
То что я говногодил примерно год недостаточно абстрактно для Vulkan.

Сейчас готово:
Свой формат/загрузка сцен, текстур, моделей, материалов, UI(подобие QML).
UI на Skia(GPU)
Звук
Физика на Bullet
Скрипты на Angle(думаю перейти на Lua)
Несколько тулз для конвертации ресурсов.
Android/Windows ввод, окна, различные нативные штуковины, Linux на 70% примерно, IOS и MAC в планах.

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


Цитата:
FiEctro писал:
Ничего он не расскажет, он гуманитарий.

Вы как всегда правы.


Отправлено (_-=ZhekA=-_) 18-08-2024 в 11:24:

Цитата:
Unit писал:
Если у Вас есть интерес, допилю рендер, выложу демку.

Интересно, а что это вообще за проект такой? )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Unit 18-08-2024 в 11:31:

(_-=ZhekA=-_) Да глобально ничего так-го, есть интерес сделать для мобилок и пк мини-движок, что-бы уровни маппить можно было в "Хамерской" концепции, затем, если не перегорит, выпустить небольшую игру, сейчас использую Hammer для Source 2, написал конверт из VMAP.


Отправлено SNMetamorph 18-08-2024 в 11:57:

Цитата:
Unit писал:
Android/Windows ввод, окна, различные нативные штуковины, Linux на 70% примерно, IOS и MAC в планах.

Почему именно всё нативно, а не просто взять SDL?

__________________
Мой сайт
Xash3D Modding Discord


Отправлено Unit 18-08-2024 в 12:09:

Цитата:
SNMetamorph писал:
Почему именно всё нативно, а не просто взять SDL?

С основной работой кроссплатформа связана, я почти весь код уже писал ранее, в такой ситуации SDL избыточен, если не охота разбираться в платформах, то да SDL хороший выбор.


Отправлено Дядя Миша 18-08-2024 в 12:49:

Цитата:
Unit писал:
А что собственно показывать, скриншот из IDE? Пожалуйста

Благодарю. Всё что я хотел узнать, я узнал из этого скриншота.

Цитата:
Unit писал:
Если у Вас есть интерес, допилю рендер, выложу демку.

Заценим конечно

Цитата:
Unit писал:
А как происходит фильтрация списка объектов, тех которые нужны конкретному клиенту, например чисто визуальных объектов, которые не взаимодействуют с другими объектами, и их не нужно каждый тик обновлять, если объект сейчас не в кадре?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 18-08-2024 в 12:58:

Цитата:
Дядя Миша писал:
Никак не происходит. Все объекты обновляются на сервере всегда.
Ибо без ярко выраженных допущений невозможно определить какие именно объекты нужны конкретному клиенту. А допущения определяются жанром игры. Для FPS что-то подобное в общем случае определить невозможно в принципе. Единственное что пожалуй можно допустить - это выключать AI у монстров, которых игрок не видит. Или если быть точным - ни один игрок не видит.
Впрочем там в любом случае масса всяких условий чтобы совершать как можно меньше работы, но функция обновления вызывается всегда.


Я вот подумываю разбить на категории объекты: обязательные и не обязательные для pertick апдейта, вторые будут обновляться, например если находятся в радиусе дальности прорисовки камеры, даже если они не в кадре, например если резко повернуть камеру. Но вытекает проблема, если резко телепортировать камеру, а данные с сервера еще не пришли по новым координатам камеры, тогда blink эффект возникнет, пока не решил этот вопрос.


Отправлено Дядя Миша 18-08-2024 в 18:42:

Цитата:
Unit писал:
Но вытекает проблема, если резко телепортировать камеру, а данные с сервера еще не пришли по новым координатам камеры

Так телепортация-то на сервере.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 18-08-2024 в 19:51:

Цитата:
Unit писал:
что-бы уровни маппить можно было в "Хамерской" концепции

Опять, что-то хл1 подобное...

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Crystallize 20-08-2024 в 07:29:

@Acerola__t
there's also this fun bug where Unity just randomly stops recompiling your compute shaders, and it gives no indication of this, other than making you think you're insane; so if you make a change to your shader, and it doesn't do anything, it's the bug and you need to restart unity


Отправлено Дядя Миша 20-08-2024 в 19:24:

Сеть была успешно поломана в августе 2019-го года. Пять лет. Пять лет эта ситуация ждала своего часа. Одно цеплялось за другое, без третьего не имело смысл реализовывать четвертое, без которого было бы невозможно пятое, а без пятого реализация сети была попросту невозможна.
Ну я условно. Сперва собственный язык, потом организация игровых библиотек, успешное тестирование прототипа реальной игры (в качестве прототипа выступил первый Quake), перенос Quake2, подключение AI-навигации, поддержки монстров с вершинной анимацией и вот наконец-то очередь дошла и до сети. И эта задача практически выполнена.

Я не стал там изобретать ничего нового, остановился на классической клиент-серверной архитектуре в духе Quake World. Ну или GoldSource, кому как больше нравится. У подобной реализации было несколько слабых мест.
Во первых невозможность передать на клиент новые параметры - только те, что заранее прописаны в entity_state_t. И сам entity_state_t тоже менять нельзя - сломается сетевой протокол. Очень неудобная конструкция.
Второй момент - невозможность передачи на клиент никаких глобальных переменных. В Half-Life была структура movevars_t, но пользовательских переменных там не было. Приходилось городить какие-то отдельные пользовательские сообщения, проверки на время их передачи.
Третий момент - нельзя было передавать на клиент строки. Только числа.
Четвертое - вещественные числа отсылались на клиент в фиксированном виде, надо было подбирать множитель. Легко догадаться в каком исковерканном виде они туда приходили.
Пятое - невозможность нормальной работы с клиентскими энтитями.
Исторически это началось ещё в первого квейка, где пользовательский доступ к клиентским энтитям не предполагался вовсе, в халфе вывели какие-то непонятные каллбэки, вся роль которых сводилась к тому, чтобы скопировать какие-то переменные из одного стейта в другой. Что именно там происходило понять было практически невозможно. Зато все клиентские эффекты так и оставались захардкодены в движке.

XashNT предполагает иной подход. Он позволяет создавать клиентские энтити на основе таких же классов, как и на сервере. При желании можно передать практически все параметры и замутить предиктинг всех объектов, но я пока что так далеко не заглядываю. На данный момент имплементация объектов нужна, чтобы навешивать на них всякие визуальные эффекты - партиклы, динамический свет, лучи.
И будет новая концепция временных энтить. Параллельного массива с этими объектами в новом ксаше больше не будет, а все энтити такого рода будут полностью контролироваться с сервера. Тут как раз и пригодится возможность не наследовать объекты от базового, с целью оптимизации траффика. Впрочем, думаю, уже скоро сами всё увидите и пощупаете.

Добавлено 20-08-2024 в 22:24:

Кстати, по лимитам скажу. Поскольку оно на сетевой протокол подзавязано.
Можно отвязать в дальнейшем, но пока что смысла не вижу.

8192 энтити на сервере. Мог бы поставить меньше, но тогда не заведётся ad_sepulcher из Arcane Dimensions, а я планирую его тоже использовать в качестве стресс-теста. Увеличивать этот лимит едва ли возможно - виртуальная машина без JIT не вытянет.

4096 уникальных моделей
8192 уникальных звука
65535 уникальных строк, которые могут быть переданы на клиент.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 20-08-2024 в 19:56:

Дядя Миша
Покажи пример как со стороны пользователя код таких энтитей выглядит.

Цитата:
Дядя Миша писал:
Кстати, по лимитам скажу. Поскольку оно на сетевой протокол подзавязано.


Сделай какой нибудь режим который лимиты в варнинги превращает. Просто как то принудительно ограничивать это кринж какой то. Вдруг кому то понадобится на 10% больше?

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


Отправлено Дядя Миша 20-08-2024 в 20:08:

В настоящий момент код ещё пишется и концепция только рождается.
Фундамент создан, теперь пользовательское окружение пишу и примеры.

Добавлено 20-08-2024 в 23:08:

Цитата:
FiEctro писал:
Просто как то принудительно ограничивать это кринж какой то. Вдруг кому то понадобится на 10% больше?

Не понадобится. Там фпс раньше в ноль упадёт.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 20-08-2024 в 21:11:

Цитата:
Дядя Миша писал:
Не понадобится. Там фпс раньше в ноль упадёт.


Не очень понял, как это взаимосвязано? Неужели производительность виртуалки настолько плохая?

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


Отправлено Дядя Миша 21-08-2024 в 06:52:

Цитата:
FiEctro писал:
Неужели производительность виртуалки настолько плохая?

Угу

Впрочем, тут виновата даже не только и столько виртуалка, а тот факт, что сейчас на ней написано вообще всё - и физика и трассировка объектов.
То, что в других движках виртуальной машине никогда в жизни бы не доверили. Т.е. может сама по себе у нее производительность и неплохая, но я её слишком нагрузил. У меня же нет встроенных объектов, все эти vec3, mat4 написаны на самом шоте. И кстати динамические массивы тоже на Шоте написаны, тогда как во всех других языках они намертво встроены в бакэнд.
Но с другой стороны, если бы я этого не сделал - как бы я узнал предельную нагрузочную способность?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 21-08-2024 в 08:41:

Цитата:
Дядя Миша писал:
У меня же нет встроенных объектов, все эти vec3, mat4 написаны на самом шоте. И кстати динамические массивы тоже на Шоте написаны, тогда как во всех других языках они намертво встроены в бакэнд.


В Юнити кроме массивов вроде оно так же. Но таких сильных просадок вроде как нет. Можно создавать десятки тысяч объектов, если у них не будет сетки и сотен материалов то фпс не должно сильно просаживать (но это без сети, с сетью я не знаю, может и ещё хуже будет).
А что вообще в твоей виртуалке является бутылочным горлышком?

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


Отправлено Crystallize 21-08-2024 в 08:54:

Дядя Миша Возьми для стресс-теста мою карту с перомиткой и 3000 энтитей


Отправлено Дядя Миша 21-08-2024 в 12:28:

Цитата:
FiEctro писал:
А что вообще в твоей виртуалке является бутылочным горлышком?

Нету явного горла, в том-то и дело.
А что касается Юнити - так я без понятия, что там имеется в виду под десятками тысяч объектов. Десять тысяч монстров можно создать? И они не будут тормозить?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 21-08-2024 в 13:48:

Цитата:
Дядя Миша писал:
Десять тысяч монстров можно создать? И они не будут тормозить?


Думаю будут, но если у них довольно не сложный меш и мало костей, а так же поддерживается GPU Instancing в шейдере, то будет конечно мало фпс, но не 1 Ещё от железа конечно зависит. И сколько из этих объектов в кадре.

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


Отправлено Дядя Миша 21-08-2024 в 14:35:

Сомнительно, но ок.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 21-08-2024 в 16:55:

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

Если лимиты можно убрать или сделать еще больше, то делай сразу по максимуму, всегда найдется какой-нибудь Доктор Тресси и поломает твой двиг к херам (
И еще хотел спросить, а этот твой скриптовой язык HeadShot он работает только на виртуальной машине, я правильно понял?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 21-08-2024 в 19:11:

Цитата:
(_-=ZhekA=-_) писал:
Если лимиты можно убрать или сделать еще больше, то делай сразу по максимуму, всегда найдется какой-нибудь Доктор Тресси и поломает твой двиг к херам (

Если в дальнейшем будут проведены определённые оптимизации, то отодвину. Пока что смысла не вижу.

Цитата:
(_-=ZhekA=-_) писал:
И еще хотел спросить, а этот твой скриптовой язык HeadShot он работает только на виртуальной машине, я правильно понял?

Правильно. Скриптовой язык всегда работает в виртуальной среде, потому он собственно и скриптовым называется.

Добавлено 21-08-2024 в 22:11:

Из забавного: автор Годот написал статью о том, почему в Годоте никогда не будет ECS и в частности упомянул, что для типичной игры обычно используется в среднем 100 (СТО) энтить на уровне. Такие дела.

__________________
My Projects: download page

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

Цитата:

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


Отправлено nemyax 21-08-2024 в 19:14:

Цитата:
Дядя Миша писал:
для типичной игры обычно используется в среднем 100 (СТО) энтить на уровне

По опыту квейков и халфов подтвердишь его слова?


Отправлено (_-=ZhekA=-_) 21-08-2024 в 19:26:

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

Ясно. ) То есть по сути HeadShot это те же блюпринты только оформлены не визуально?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 21-08-2024 в 20:17:

Цитата:
nemyax писал:
По опыту квейков и халфов подтвердишь его слова?

В первом квейке видимо планировали уложиться в 256 объектов. Но по факту еле влезли в 600. В халфе их уже было 900, в ку3 и д3 - 1024, в сорсе 2048.

Добавлено 21-08-2024 в 23:17:

Цитата:
(_-=ZhekA=-_) писал:
То есть по сути HeadShot это те же блюпринты только оформлены не визуально?

HeadShot ближе всего к С++, с некоторыми нотками Delphi.
Если не знать, его легко перепутать с С++.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 22-08-2024 в 08:47:

Цитата:
Дядя Миша писал:
В первом квейке видимо планировали уложиться в 256 объектов. Но по факту еле влезли в 600. В халфе их уже было 900, в ку3 и д3 - 1024, в сорсе 2048.


Кому эта квака сегодня нужна? Сейчас даже в мобильных играх объектов в десятки раз больше. Сколько объектов в Сталкере? Или например в локации уровня GTA VC ? И то это игры не первой и даже второй свежести.

Цитата:
Дядя Миша писал:
Из забавного: автор Годот написал статью о том, почему в Годоте никогда не будет ECS и в частности упомянул, что для типичной игры обычно используется в среднем 100 (СТО) энтить на уровне. Такие дела.


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

Добавлено 22-08-2024 в 10:21:

Цитата:
Дядя Миша писал:
Сомнительно, но ок.



Мы как то ради интереса забивали мешрендер треугольниками. Лямов до 20 фпс был ещё более менее живым, потом уже слайдшоу и забитая видеопамять.

Добавлено 22-08-2024 в 11:47:

Цитата:
Дядя Миша писал:
HeadShot ближе всего к С++, с некоторыми нотками Delphi.
Если не знать, его легко перепутать с С++.


Всем кому показывал пример, говорили что это АнгелСкрипт

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


Отправлено Unit 22-08-2024 в 08:55:

Цитата:
FiEctro писал:
Всем кому показывал пример, говорили что это АнгелСкрипт


Если Вам показать AngelScript Вы скажите что это C++


Отправлено Дядя Миша 22-08-2024 в 10:27:

Цитата:
FiEctro писал:
Кому эта квака сегодня нужна?

Всем нужна. Не зря же ремастеры делают.

Цитата:
FiEctro писал:
Сейчас даже в мобильных играх объектов в десятки раз больше

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

Цитата:
FiEctro писал:
Сколько объектов в Сталкере? Или например в локации уровня GTA VC ?

Так я спрашивал - мне так толком никто и не ответил. Но там естественно сделаны допущения - аномалии это один изолированный класс, айтемы - другой, монстры - третий. Если так делать, то конечно можно много чего соптимизировать.
Цитата:
FiEctro писал:
Ты автора Годота особо не цитируй

Я же написал "из забавного". Не по глазам?

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

С этого момента пожалуйста поподробнее. Про Годот я знаю только то, что он вылупился из 2D движка.

Цитата:
FiEctro писал:
Мы как то ради интереса забивали мешрендер треугольниками

Не путай полигоны с сущностями. В ксаше тоже можно засадить поляну травой до горизонта и это израсходует ноль энтить.

Цитата:
FiEctro писал:
Всем кому показывал пример, говорили что это АнгелСкрипт

Ну значит то, что им показывал не несло Шото-специфичных вещей, которые невозможны больше нигде. Тот же dynamic_call или virtual_new.

Добавлено 22-08-2024 в 13:27:

Цитата:
Unit писал:
Если Вам показать AngelScript Вы скажите что это C++

Но на АнгелСкрипт нельзя впрямую портировать C++ код, а на Shot можно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 22-08-2024 в 10:51:

Цитата:
Дядя Миша писал:
Так я спрашивал - мне так толком никто и не ответил.

Если интересно касаемо GTA VC, там используют пулы объектов, поделены на разные типы. Рокстарвская аналогия entity'ям в то время это 450 на пул, для машин и зданий свои пулы, около 64 машин на пул и ~5000 зданий и прочей статики. Для консолей лимиты уменьшались.


Отправлено FiEctro 22-08-2024 в 11:28:

Цитата:
Unit писал:
Если Вам показать AngelScript Вы скажите что это C++


Пожалуйста, давай уже без этой клоунады.

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


Регдоллы теже, целая куча связаных между собой костей, колайдеров и ригидбодей. Ну и много их уместится с лимитом 100 объектов?

Цитата:
Дядя Миша писал:
Так я спрашивал - мне так толком никто и не ответил. Но там естественно сделаны допущения - аномалии это один изолированный класс, айтемы - другой, монстры - третий. Если так делать, то конечно можно много чего соптимизировать.


Так может сделать тоже какую то возможность разбивать объекты по категориям/слоям?

Цитата:
Дядя Миша писал:
С этого момента пожалуйста поподробнее. Про Годот я знаю только то, что он вылупился из 2D движка.


https://www.reddit.com/r/godot/comm...cture_in_godot/

Я сам только знаю что мне говорили. Впрочем, ECS фреймворки на Годот всё же есть
https://github.com/GodotECS/godex

Но к слову на ютубе находил сравнение производительности Юнити и Годота, и Юнити всё же был быстрее, несмотря на все красивые статьи о том что так красивее и оптимизированее вроде этой:
https://godotengine.org/article/why...ed-game-engine/

Думаю лучше спросить здесь кого то кто работает непосредственно с этим движком. Они больше в курсе того срача с ECS.

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


Отправлено Дядя Миша 22-08-2024 в 12:33:

Цитата:
Unit писал:
Если интересно касаемо GTA VC, там используют пулы объектов, поделены на разные типы

Так вот мне очень не хочется специализировать объекты. Потому что сразу пойдет заточка под конкретный сценарий.

Цитата:
FiEctro писал:
Так может сделать тоже какую то возможность разбивать объекты по категориям/слоям?

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

Добавлено 22-08-2024 в 15:33:

В утешение могу вам сказать, что даже несмотря на тот факт, что у меня физика полностью реализована на Шоте, в самой высоконагруженной сцене из первого Quake (интермиссия после победы над Чтоном, когда спавнятся куски шамблеров с кровищей в большом кол-ве), на Ксаше эта сцена по фпс проседает намного меньше чем во всех известных мне форках первого Квейка. На моей GTX650 там идёт проседание порядка до 180 фпс, на ксаше - до 500. Но всё равно это ненадёжный критерий, т.к. производительность падает экспоненциально, а не линейно.
Но у меня есть ещё в запасе одна интересная идея, которая на первый взгляд не имеет минусов, сплошные плюсы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 22-08-2024 в 12:37:

Цитата:
Дядя Миша писал:
В утешение могу вам сказать, что даже несмотря на тот факт, что у меня физика полностью реализована на Шоте, в самой высоконагруженной сцене из первого Quake (интермиссия после победы над Чтоном, когда спавнятся куски шамблеров с кровищей в большом кол-ве), на Ксаше эта сцена по фпс проседает намного меньше чем во всех известных мне форках первого Квейка. На моей GTX650 там идёт проседание порядка до 180 фпс, на ксаше - до 500. Но всё равно это ненадёжный критерий, т.к. производительность падает экспоненциально, а не линейно.


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

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


Не очень понял, у тебя рендер пайплайн как устроен?

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


Отправлено Дядя Миша 22-08-2024 в 12:59:

Цитата:
FiEctro писал:
А рейкасты, бокс касты, сфер касты, пересечения и т.д. тоже на шоте?

Сам обсчёт столкновений на С++, но перебор объектов и физика - на Шоте.
Мне всегда хотелось это реализовать на скриптовом языке, чего больше никто не делает в здравом уме. Ежели это запихать обратно в движок, то будет +1000 буст к производительности. Но так не интересно.

Цитата:
FiEctro писал:
Не очень понял, у тебя рендер пайплайн как устроен?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 22-08-2024 в 13:12:

Дядя Миша
А что используете G-Buffer или прямой рендеринг?


Отправлено Дядя Миша 22-08-2024 в 19:43:

Цитата:
Unit писал:
А что используете G-Buffer или прямой рендеринг?

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

ЗЫ. у нас тут за годы общения сформировался стиль обращения на "ты", так что не стесняйся.

Добавлено 22-08-2024 в 22:43:

За г-буффер, если интересно, могу подробнее рассказать.
Идея отложки базируется на двух очень стрёмных допущениях:

1. все динамические источники света имеют линейное затухание
2. по возможности это должны быть источники, которые не перекрывают друг друга и занимают как можно меньшую площадь на экране.

Если взять любую демку deferred мы с большой долей вероятности увидим там сотни маленьких лампочек и всё это не тормозит даже. Неплохо. Осталось только применить к реальной игровой ситуации. Мало того, что я себе слабо представляю ситуацию в которой понадобится такая куча маленьких источников, так ещё не будем забывать про тени, которые гарантированно убьют весь перф ещё до начала рендеринга основного кадра. То есть отложка это про кучу маленьких источников света без теней. У меня движок исторически близок к играм, так или иначе имеющим связь с ИД Течем. В частности той же Халфы. А в халфе у нас что? Квадратичное затухание света. Это значит любой из источников гарантированно светит через весь уровень. Если рендерить эти источники так, как предлагается в классическом пейпере - т.е. проецировать окружность лайта на плоскость экрана, у нас получается такой чудовищный овердроу, что форвард отдыхает просто.
Поэтому лайты с квадратичным затуханием придётся выбросить сразу.
Но это неспортивно. Я рассудил иначе - большинство лайтов всё равно статично и своего места не покидает. Значит мы можем прямо в компиляторе рассчитать визлайт-матрицу (название моё), пробросить биты видимости лайтов в G-буффер и для каждого экранного пикселя выполнить цикл освещения теми или иными лайтами. Сами лайты записаны во флоат-текстуру, а в G-буффере в одном из слоёв хранятся их номера.
Как я быстро убедился - даже на довольно тёмных картах из P2 Savior мне зачастую не хватало восьми лайтов на пиксель. Т.е. это два RGBA-слоя с индексами лайтов. И отсюда же вытекает ограничение на 255 источников света всего. Конечно в дальнейшем можно было бы использовать 16-битные текстуры, но мне для моих исследований хватило и восьмибитных, благо на картах паранои кол-ва лампочек на уровне редко когда превышает сотню (а вот на один сурфейс иногда может светить до десятка).
Подобный подход полностью решил проблему с овердро, фпс стал приемлимым. Второй момент, который меня интерисовал - можно ли как-нибудь обойтись без карт теней. Разумеется я мог бы их сделать тоже, но так неинтересно. К тому же в первой кваке был BSP, у которого все поверхности лежали на ноде - готовая ускоряющая структура для рейтрейсера. Я просто сдампил эти ноды и лифы в очередную флоат-текстуру и написал простенький нерекурсивный рейтрейсер. Видеокарты не поддерживают рекурсию. Впрочем у меня всё равно были некоторые проблемы с глубиной стека, но технология прекрасно заработала.
Получилась отложка с рейтрейсинговыми тенями. Результат можно посмотреть в последней версии P2 Savior, поставив консольную переменную gl_deferred в 1.
А теперь самое интересное. Пока я всем этим занимался, я фактически прокидывал номера лайтов из препасса в г-буффер. И тут я спросил себя, а какого чёрта? Зачем мне г-буффер, если я могу посчитать освещение прямо в этом препассе и тут же сохранить финальный цвет в экранный буффер. Именно этот подход я и применил в XashNT. Он всегда рендерит в один проход, но при этом может рисовать сколько угодно динамических источников света. Это не forward+, это чисто моя придумка. Впрочем я полагаю что не я один до этого додумался, просто больше мне это нигде не попадалось.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 22-08-2024 в 22:11:

Дядя Миша интересный подход. Я пока курю в G-buffer по гайдам из GitHub (ничего раньше такого не приходилось делать) посмотрю что из этого выйдет.

Вопрос не по теме может, но мне интересно) Как удаётся совмещать основную работу/вид деятельности и работу над движком, это же уйму времени отнимает, или основная деятельность позволяет параллельно работать на движком. У меня несколько часов в день выделяется, за выходные вообще забываю на чем остановился, стараюсь отдыхать от монитора. А тут захожу, читаю, сегодня скриптовая часть готова, через день сеть допилина.


Отправлено Дядя Миша 23-08-2024 в 05:51:

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

В прошлой теме уже задавали этот вопрос. У меня сервисный центр по ремонту бытовой техники, пока работы нет - пилю движок.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 23-08-2024 в 06:40:

Цитата:
Unit писал:
Вопрос не по теме может, но мне интересно) Как удаётся совмещать основную работу/вид деятельности и работу над движком, это же уйму времени отнимает, или основная деятельность позволяет параллельно работать на движком. У меня несколько часов в день выделяется, за выходные вообще забываю на чем остановился, стараюсь отдыхать от монитора. А тут захожу, читаю, сегодня скриптовая часть готова, через день сеть допилина.


Надо ещё умудриться не выгореть от этого

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


Патчтрейсер в ку2 довольно шустро работает, к нему бы деноизер какой нибудь и готовый RTX с красивым освещением и отражениями

https://developer.download.nvidia.c...-in-quake-2.pdf

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


Отправлено Дядя Миша 23-08-2024 в 06:46:

Цитата:
Unit писал:
сегодня скриптовая часть готова, через день сеть допилина.

Язык Shot я писал весь 2022-й год. Сетью уже почти месяц занимаюсь.

Добавлено 23-08-2024 в 09:46:

Про разработку Shot вот такая тема осталась: https://hlfx.ru/forum/showthread.php?s=&threadid=5815

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 23-08-2024 в 06:59:

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

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

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

Падажжи. Квадратичное по определению затухает быстрее линейного. Быстрее затухает только какое-нибудь кубичное. Как ты делаешь вывод что квадратичное светит через весь уровень?

Цитата:
Дядя Миша писал:
Видеокарты не поддерживают рекурсию.

А почему


Отправлено Дядя Миша 23-08-2024 в 07:10:

Цитата:
Crystallize писал:
Квадратичное по определению затухает быстрее линейного

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

C++ Source Code:
intensity = photons * photons * 10;


Цитата:
Crystallize писал:
А почему

Стек очень маленький. А может сама архитектура не рассчитана.
Но CUDA по идее должна поддерживать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 23-08-2024 в 08:33:

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

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


Отправлено FiEctro 23-08-2024 в 13:10:

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


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

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


Отправлено Crystallize 25-08-2024 в 09:21:

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

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


Отправлено Дядя Миша 25-08-2024 в 12:17:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 27-08-2024 в 19:33:

Ну чтож товарищи. Механизм дельта-компрессии для передачи объекто по сети успешно написан, таким образом сетевой статус Ксаша восстановлен.
Сеть, повторюсь, ждала своего часа с сентября 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'


Отправлено Crystallize 28-08-2024 в 04:35:

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

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

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

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

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


Отправлено Unit 28-08-2024 в 05:29:

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

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


Отправлено Crystallize 28-08-2024 в 05:50:

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

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


Отправлено FiEctro 28-08-2024 в 05:52:

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

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


Отправлено Дядя Миша 28-08-2024 в 06:20:

Цитата:
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'


Отправлено FiEctro 28-08-2024 в 06:53:

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


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

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


Отправлено Дядя Миша 28-08-2024 в 07:27:

Цитата:
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'


Отправлено FiEctro 28-08-2024 в 08:39:

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

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


Отправлено Дядя Миша 28-08-2024 в 08:55:

Удалось примерно рассчитать производительность виртуальной машины для 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'


Отправлено FiEctro 28-08-2024 в 09:15:

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

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


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

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

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


Отправлено Unit 28-08-2024 в 09:43:

Есть смысл выкатить интерпретатор языка отдельным проектом.
Базовый ввод/вывод подтянуть из stdio. Уже на этой стадии народ пробовал бы различные конструкции и искал баги.


Отправлено ZGreen 28-08-2024 в 09:44:

Цитата:
FiEctro писал:
И подключать её как отдельный ассет средствами шоты.

Кто-нибудь может перевести это?


Отправлено Дядя Миша 28-08-2024 в 10:10:

Цитата:
FiEctro писал:
Мне кажется ядро физики лучше вынести в отдельную нативную либу как это делает физикс или ньютон.

У меня совершенно иной подход. От физики очень часто требуют специфических вещей, а не точной симуляции физических законов.
В том же PhysX например нет каллбэка на блокировку кинематиком твёрдого тела об геометрию уровня. Хотя в играх это довольно часто встречающаяся ситуация - заблокировать дверь ящиком чтобы она не смогла закрыться.
Так вот нативных методов это сделать в физиксе - нет. Равно как и вообще что-либо сделать при блокировке кинематка. Собсно, почему я и не связываюсь со сторонней физикой - она реализует абсолютно не то, что нужно в играх. Всё что угодно, кроме того что надо. Надувных коров, например. Вы много в играх видели надувных коров?

Цитата:
FiEctro писал:
Кстати ещё такой вопрос у тебя можно легко и быстро перебросить объект в локальное пространство другого объекта?

Зависит от реализации игрового кода на Шоте. Для кваки я такого не делал, а в коде ксаш-мода это есть изкаробки.

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

Цитата:
Unit писал:
Есть смысл выкатить интерпретатор языка отдельным проектом.

Да, я его обязательно выложу на gamedev.ru в своё время. У меня там ещё пара недоработок с шаблонами и ссылками.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-08-2024 в 11:27:

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


Так специфичные вещи это уже более высокий уровень абстракции чем ядро.

Цитата:
Дядя Миша писал:
В том же PhysX например нет каллбэка на блокировку кинематиком твёрдого тела об геометрию уровня. Хотя в играх это довольно часто встречающаяся ситуация - заблокировать дверь ящиком чтобы она не смогла закрыться.


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

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


Я использовал в Юнити софтбоди, правда весьма костыльно.

Цитата:
Дядя Миша писал:
Зависит от реализации игрового кода на Шоте. Для кваки я такого не делал, а в коде ксаш-мода это есть изкаробки.


Ну тоесть можно сказать что нет, я понял.

Цитата:
ZGreen писал:
Кто-нибудь может перевести это?


Фреймворк, библиотека, средставами виртуальной машины подключаем к движку и пользуем.

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


Отправлено Crystallize 28-08-2024 в 13:05:

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

А ютуб через нее можно смотреть?


Отправлено Дядя Миша 28-08-2024 в 13:25:

Цитата:
FiEctro писал:
Так специфичные вещи это уже более высокий уровень абстракции чем ядро.

Совершенно верно.

Цитата:
FiEctro писал:
Ты же сам мне говорил что это голая аналитическая геометрия

Ты не путай коллижен-детектор с солвером. Детектор-то действительно везде одинаковый, его задача найти столкновение\пересечение.
А солвер зачастую должен решать какие-то игроспецифичные задачи, а не заниматься точной физической симуляцией. Поэтому мне очень импонирует подход Кармака с его моветипами. Везде немного своя физика. Потому что все объекты очень разные и управляются по разному. А в случае использования Физикса, нам надо наоборот душить его стандартный солвер и далеко не всегда для этого есть корректные способы.

Цитата:
FiEctro писал:
Ну тоесть можно сказать что нет, я понял.

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

Добавлено 28-08-2024 в 16:25:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-08-2024 в 13:40:

Цитата:
Дядя Миша писал:
А солвер зачастую должен решать какие-то игроспецифичные задачи, а не заниматься точной физической симуляцией. Поэтому мне очень импонирует подход Кармака с его моветипами. Везде немного своя физика. Потому что все объекты очень разные и управляются по разному. А в случае использования Физикса, нам надо наоборот душить его стандартный солвер и далеко не всегда для этого есть корректные способы.


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

Цитата:
Дядя Миша писал:
Вы же поймите, в FPS есть как минимум один нелинейный элемент - сам игрок. Который не подчиняется никаким законам физики, прыгает выше головы, может менять направление движения прямо в воздухе, приседать прямо там же и практически мгновенно останавливаться. И он вам таки сломает всю симуляцию, причём многие этим даже намеренно занимаются.
А если игрока будет давить дверью, он не будет совать туда свой нос почём зря.


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

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

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


Отправлено Unit 28-08-2024 в 14:19:

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


Отправлено Дядя Миша 28-08-2024 в 15:12:

Цитата:
FiEctro писал:
Но "подход Кармака" я так понял это двигать объекты избегая вообще какую либо физику

Ты решил отобрать лавры у Кристаллайза?

Цитата:
FiEctro писал:
А вот если просто в тупую менять координаты, то да начинаются приколы

А кто предлагает менять координаты втупую? Ну разве что для телепортации.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 28-08-2024 в 15:25:

Цитата:
Дядя Миша писал:
А кто предлагает менять координаты втупую? Ну разве что для телепортации.

Я так делаю потому что не смог пофиксить необнуленную гравитацию типа той которая двигает мертвых монстров.
Да и вообще проще каждый кадр снапать объект куда надо чем разбираться как кейсы без гравитации переключаются на кейсы с гравитацией, периодически наблюдать как игрок улетает в небо из-за твоих косяков (всё как в продуктах у больших дядек кстати!), и думать, "вот у меня щас игрок ползет вниз притягиваясь к точке снапа на рельсу или это просто гравитация"?


Отправлено Дядя Миша 28-08-2024 в 19:33:

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

Монстров двигала не гравитация, а вектор их же собственного прыжка.
А гравитацию обнулять бесполезно - она же каждый кадр заново добавляется.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 29-08-2024 в 09:40:

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


В Юнити для таких случаев есть галочка IsKinematic которая отключает гравитацию у конкретного ригидбоди как раз для таких случаев. Есть ещё метод SetGravity которым тоже можно установить гравитацию персонально для каждого объекта. Методы для Get/Set Velocity, методы AddForce с разной линейностью как раз чтобы делать "нелинейного игрока". Вот чего реально не хватет так это метода который бы определял давление на объект в конкретном месте, приходится строить матрицу из триггеров вокруг игрока чтобы игрок понимал где препятствия и что на него давит.

Цитата:
Unit писал:
Кстати соглашусь про нелинейность игрока. Когда пытаются делать физически-корректное управление получается отстой, особенно с прыжками, физически-корректно сохранить вектор на протяжении всего прыжка, затем приземлиться в n точке. Но тогда в воздухе нельзя стрейфиться или прерывать движение, такое управление всегда раздражает, чувствуется "вязким" и не отзывчивым.


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

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


Отправлено Дядя Миша 29-08-2024 в 10:02:

Цитата:
FiEctro писал:
Вот чего реально не хватет так это метода который бы определял давление на объект в конкретном месте

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 29-08-2024 в 11:00:

Цитата:
FiEctro писал:
В Юнити для таких случаев есть галочка IsKinematic которая отключает гравитацию у конкретного ригидбоди как раз для таких случаев. Есть ещё метод SetGravity которым тоже можно установить гравитацию персонально для каждого объекта

Да мне динамически же надо переключать

Цитата:
FiEctro писал:
На деле мы просто имеем дело с плохо настроенным контроллером, если подобрать параметры то таких приколов не будет. Просто мало кто то с этим заморачивается.

Ты не победишь иной принцип просто "настройкой параметров", ну если конечно не выкрутишь их в нули и бесконечности.

Цитата:
FiEctro писал:
Я пришёл к тому что колайдер игрока вообще должен парить немного над землёй чтобы он не спотыкался за каждый вертекс как в кваках и голд сорсе.

Так и в ГС первые 16 юнитов от пола перешагиваются по умолчанию.


Отправлено FiEctro 29-08-2024 в 11:10:

Цитата:
Crystallize писал:
Да мне динамически же надо переключать


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

Цитата:
Дядя Миша писал:
Так я тебе ровно про то же самое и говорил, когда описывал случай двери, уперевшейся в ящик. А ты сказал что такое никому не нужно, и тут же сам пожаловался что тебе этого не хватает.


Ты не понял, я говорил что это разные уровни абстракции. Что освновное ядро можно убрать в нативную библиотеку, а такие вещи уже и на самой шоте реализовать. Впрочем это лишь один из вариантов. Вон в гаррис моде на виртуалке вообще физику жидкостей сделали.
https://www.youtube.com/watch?v=cFmBL-yD8HI


Цитата:
Crystallize писал:
Ты не победишь иной принцип просто "настройкой параметров", ну если конечно не выкрутишь их в нули и бесконечности.


До конца конечно нет, но множество проблем "мешка с говном" можно решить.

Цитата:
Crystallize писал:
Так и в ГС первые 16 юнитов от пола перешагиваются по умолчанию.


Я имел ввиду что он постоянно подвешен, а не перешагивает. Вообще трущийся колайдер о пол это крайне плохая идея.

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


Отправлено Дядя Миша 29-08-2024 в 13:27:

Цитата:
Crystallize писал:
Так и в ГС первые 16 юнитов от пола перешагиваются по умолчанию.

Да какое там умолчание. Точно такие же проверки на ступеньку. Это не само-собой получается.

Цитата:
FiEctro писал:
Что освновное ядро можно убрать в нативную библиотеку

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено ZGreen 29-08-2024 в 16:23:

Цитата:
FiEctro писал:
Вон в гаррис моде на виртуалке вообще физику жидкостей сделали.

На какой еще виртуалке?

Создается впечатление, что вместо нашего форумчанина Фиектро какой-то робот с нативной библиотекой вместо ассета подключился и сидит, сообщения пишет. Я к тому, что решительно смысл сообщений в контексте движка Дяди Миши от меня ускользает.


Отправлено FiEctro 29-08-2024 в 20:44:

Цитата:
Because the rendering is done in LUA (instead of C++), rendering water will likely be laggy. If someone with experience with source shaders could help, that would be awesome.


Цитата:
ZGreen писал:
Создается впечатление, что вместо нашего форумчанина Фиектро какой-то робот с нативной библиотекой вместо ассета подключился и сидит, сообщения пишет. Я к тому, что решительно смысл сообщений в контексте движка Дяди Миши от меня ускользает.


Наверное как говорил наш Unit, у тебя гуманитарный склад ума. Вот и не понятно ничего. Другой бы переспросил, а тебе всё какие то роботы мерещатся.

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


Отправлено Crystallize 30-08-2024 в 07:12:

Цитата:
Дядя Миша писал:
Моё знакомство с Питоном началось и закончилось, когда я в Кварке пытался отредактировать какой-то плагин, по аналогии добавил в одну из функций новую строчку, запустил Кварк и он упал с ошибкой в этой самой строке. Я удивился, ещё раз всё перепроверил. Весь мой опыт говорил, что это не может не работать. Да, вероятно оно бы упало в рантайме, но с точки зрения синтаксиса этот код обязан был скомпилиться. Я тогда ещё ничего не знал про идиотское требование форматирования пробелами.

Сейчас появился Bython, это Питон с фигурными скобками вместо форматирования пробелами.


Отправлено FiEctro 30-08-2024 в 08:36:

Цитата:
Crystallize писал:
Сейчас появился Bython, это Питон с фигурными скобками вместо форматирования пробелами.


Неужели ни одна IDE не поддерживает автоформатирования для Питона? Не, ну это уже сюр какой то.

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


Отправлено Дядя Миша 01-09-2024 в 12:16:

Ну чтож, приступил к портированию ксаш-мода на Шот. Надеюсь сообщения в телеге все читали.
Поясню ситуацию, как делался XashNT (практически секрет успеха)

1. Берём Xash3D + XashXT(ксашмод)
2. Сливаем сорцы вместе
3. Долго-долго всё переписываем
4. В какой-то момент (лето 2023-го), отваливаются игровые библиотеки на С++ и переезжают на Shot. Ровно тогда же папка с ксашмодом перестала обновляться, т.к. я был занят другими проектами - квейк, демка уровней сталкера, камрады, ну итд.
5. И вот теперь я начинаю приводить её в чувство и смотрю что изменилось в движке за год и что надо переделать, а что сохранило актуальность.

Уже запустил меню и клиентку. Теперь надо хотя бы тестово скомпилить уровни.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 01-09-2024 в 12:29:

Цитата:
Дядя Миша писал:
Написано новое меню в Won-стиле


Что это значит? Won-стиль, пытался гуглить - мне видывало только корейские сериалы.


Отправлено (_-=ZhekA=-_) 01-09-2024 в 12:59:

Цитата:
Unit писал:
Что это значит? Won-стиль, пытался гуглить - мне видывало только корейские сериалы.

Это классическое меню )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 01-09-2024 в 15:05:

Цитата:
Unit писал:
Что это значит?

WON сокращение от World Opponent Network. Когда Half-Life издавала Sierra, то так называлась их сеть для игры по интернету. Потом, когда Sierra благополучно разорилась, а Valve создала Steam, она сделала частичный бэкпорт меню из Hl2 обратно в HL. Т.е. всё осталось прежним, кроме меню и сети для игры. Так и стали их различать. Won-Халфа и Steam-Халфа.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 01-09-2024 в 16:34:

А с камрадами то что там?


Отправлено FiEctro 01-09-2024 в 17:03:

Надеюсь потом будут внешние файлы вёрстки для UI, а не захардкоженное меню.

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


Отправлено Дядя Миша 01-09-2024 в 20:26:

Цитата:
Crystallize писал:
А с камрадами то что там?

Отложил пока. Они скорее как внутренний полигон для обкатки игровых механик.

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

1. Рендер моды. Эта штука плотно завязана на immediate режим отрисовки, фактически кроме Half-Life ничего подобного нигде не было. Да и там оно работало довольно выборочно. То есть нзначить прозрачность или любой другой эффект конечно же можно, а вот переключать прозрачное\непрозрачное уже нельзя. Так что тут пока всё туманно.

2. Проекционная текстура у фонаря. Динамический свет в XashNT устроен довольно хитрым образом - свет считается в момент рендеринга моделей.
Ему не надо никаких отдельных проходов. Это быстро и удобно, но к сожалению накладывает вот такое ограничение. Тут возможны два варианта - либо сохранять проекционную текстуру в атлас, либо использовать bindless текстуры. Больше склоняюсь к первому варианту конечно - так совместимость выше.

3. Динамические 3д скайбоксы. Есть предрассчитанный компилятором скайбокс, но он как правило один. Пока ещё не решил, надо ли с этим что-то делать и если да, то что.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 01-09-2024 в 21:13:

Цитата:
Дядя Миша писал:
1. Рендер моды.


А нельзя просто шейдер задавать?

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


Отправлено Дядя Миша 02-09-2024 в 08:23:

Цитата:
FiEctro писал:
А нельзя просто шейдер задавать?

Шейдер нельзя, материал с шейдером можно. Таким образом например можно сделать Glow Shell, правда это будет отдельный объект.
Но это не то.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 02-09-2024 в 08:56:

Не знаю, я в рендермодах смысла вообще не вижу. Оно актуально было когда материалов вообще не было. Можно сделать переключатель для блендинга вот эти GL_ONE, GL_ZERO и т.д. хоть это тоже не то, но оно иногда бывает полезно.
Чтобы сделать прямо рендермоды как задумывалось видать надо как то смешивать материалы меша с материалами рендермода, в 2 прохода наверное. Я хз.

Цитата:
Дядя Миша писал:
Проекционная текстура у фонаря. Динамический свет в XashNT устроен довольно хитрым образом - свет считается в момент рендеринга моделей.
Ему не надо никаких отдельных проходов. Это быстро и удобно, но к сожалению накладывает вот такое ограничение. Тут возможны два варианта - либо сохранять проекционную текстуру в атлас, либо использовать bindless текстуры. Больше склоняюсь к первому варианту конечно - так совместимость выше.


Вот тут кстати я не понял. Фонарик как в параное2 и хл2? Или как в первой халфе? Что такое bindless текстуры?

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


Отправлено Дядя Миша 02-09-2024 в 09:29:

Цитата:
FiEctro писал:
Не знаю, я в рендермодах смысла вообще не вижу.

Так-то да, для совместимости. Просто в той же халфе взяли за одну одну и ту же текстуру использовать и на прозрачных окнах и в качестве мировых.
Я для этого дела даже ввёл Translucent Hack. Но если скажем это будет использовано на энтитях, одна и та же текстура будет прозрачной и солидной - я уже ничего не смогу с этим сделать. Саму прозрачность-то регулировать несложно. А как маску глубины динамически отключать?

Цитата:
FiEctro писал:
Фонарик как в параное2 и хл2? Или как в первой халфе?

Речь о проекционной текстуре. Сам фонарик без проблем делается, сложность в текстуре этой.

Цитата:
FiEctro писал:
Что такое bindless текстуры?

Ну задай в гугле. Текстуры, которые не надо биндить при рендеринге.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 02-09-2024 в 09:38:

Цитата:
Дядя Миша писал:
А как маску глубины динамически отключать?


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

Добавлено 02-09-2024 в 12:38:

Цитата:
Дядя Миша писал:
Речь о проекционной текстуре. Сам фонарик без проблем делается, сложность в текстуре этой.


Сохранять проекцию в атлас в целом можно, но наверное этот атлас лучше строить отдельно от текстурного атласа, а то его наверное будет жмыхать как фонарик в хл?

В юнити HDRP (DX11) кстати с этими спотами какой то прикол что их можно спавнить сотнями без особой потери производительности (и это вроде как не отложка), фпс роняют разве что тени и то не сильно. Я щас буду пробовать собирать сцены без запекания лайтмап используя только SSGI и поинтлайты без теней примерно как это делали во второй кваке со статикой для имитации GI. Не потому что это круто и так надо делать, нет, мне просто интересно как оно поведёт себя с большим количеством источников.

https://assetstorev1-prd-cdn.unity3d.com/package-screenshot/7cd7e553-4979-4d4a-99ee-8cdadb3055a5_scaled.jpg
https://assetstorev1-prd-cdn.unity3d.com/package-screenshot/f449fc12-850d-4262-95d3-25cfa1d65f87_scaled.jpg

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


Отправлено Дядя Миша 02-09-2024 в 10:05:

Цитата:
FiEctro писал:
Сохранять проекцию в атлас в целом можно, но наверное этот атлас лучше строить отдельно от текстурного атласа

Что значит - отдельно от текстурного?

Цитата:
FiEctro писал:
В юнити HDRP (DX11) кстати с этими спотами какой то прикол что их можно спавнить сотнями без особой потери производительности

Да и в ксаше оно так же.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 02-09-2024 в 17:22:

Дядя Миша что думаешь про мешлеты?
https://github.com/Senbyo/meshletmaker

Цитата:
Дядя Миша писал:
Что значит - отдельно от текстурного?


Если речь идёт о UV то это отдельная UV для освещения как у лайтмап.

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


Отправлено Дядя Миша 02-09-2024 в 20:14:

Цитата:
FiEctro писал:
Если речь идёт о UV то это отдельная UV для освещения как у лайтмап.

Боюсь ты вообще не понимаешь как работает освещение.

Про мешлеты пока ничего не думаю. Очередная панацея от всего. Сперва были геометрические шейдеры, но нам сказали они ужасно тормозные, юзайте тесселляцию. Теперь нам про тесселяцию говорят тоже самое и предлагают юзать меш-шейдеры. А что они придумают завтра?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 03-09-2024 в 07:54:

Две разные спонзы. Оригинальная от Крайтек и портированная FiEctro.



Попробуйте догадаться где какая

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 03-09-2024 в 08:24:

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

http://alxgk.ru/uploader/img/3f18ea...48668f6f044.jpg

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


Отправлено Дядя Миша 03-09-2024 в 12:13:

Наверное надо будет включить autovlight.

Цитата:
FiEctro писал:
а так же какие странные черные треугольники на арках

Развертка съехала. Это какие-то приколы Кварка.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-09-2024 в 06:30:

Дядя Миша
Ещё такой реквест на будущее, сделай пожалуйста внешние конфиги для цветового профиля. И какой профиль используется сейчас? sRGB?.
https://en.wikipedia.org/wiki/Acade...Encoding_System
https://acescolorspace.com/

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


Отправлено Дядя Миша 04-09-2024 в 11:10:

Цитата:
FiEctro писал:
сделай пожалуйста внешние конфиги для цветового профиля

движок не трогает гамму, есть только опционалка для лайтмаппера.
Т.е. всё сами в шейдерах настроите как надо.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-09-2024 в 11:36:

Тоесть разом поменять профиль и нацепить луты не получится?

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


Отправлено Дядя Миша 04-09-2024 в 11:55:

FiEctro как сделаешь, так и будет

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 05-09-2024 в 08:13:



Синхронное редактирование мешей.

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


Отправлено Unit 05-09-2024 в 11:37:

FiEctro Передавать в рилтайме данные мешей и текстур через HTTP closed, конечно сомнительное решение. Есть подозрение, что на тяжелых сценах эта шутка будет захлёбываться.

C++ Source Code:
1
void Server::serveText(HTTPServerResponse& response, const char* text, int stat)
2
{
3
  size_t size = std::strlen(text);
4
 
5
  response.setStatus((HTTPResponse::HTTPStatus)stat);
6
  response.setContentType("text/plain");
7
  response.setContentLength(size);
8
  response.set(SERVER_SESSION_ID, std::to_string(m_server_session_id));
9
 
10
  auto& os = response.send();
11
  os.write(text, size);
12
  os.flush();
13
}


Отправлено FiEctro 05-09-2024 в 12:04:

Unit
От тяжелых сцен и блендер будет захлёбываться

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


Отправлено Дядя Миша 07-09-2024 в 07:46:

Окончательно стандартизовал лимиты, снапнул вертексы к сетке 0.1 юнита.
Но только для брашей. Для моделей сетка 0.01 юнита.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ZGreen 07-09-2024 в 09:27:

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


Отправлено Дядя Миша 07-09-2024 в 10:25:

Под карты хл другой бсп-конфиг нужен, очевидно.
Я бы дал, но с той старой бетой он уже несовместим.

Добавлено 07-09-2024 в 13:25:

Впрочем вот нашёл какой-то древний. Но гарантировать ничего не могу.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 07-09-2024 в 14:44:

Портирование ксаш-мода будет происходить в два этапа. Первый вариант - полный функционал, но без монстров, а второй уже с монстрами.
Там и без монстров возни хватит, физика, порталы, зеркала. Да мало ли.

Добавлено 07-09-2024 в 17:44:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 07-09-2024 в 14:46:

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

__________________
Мой мод на Xash


Отправлено (_-=ZhekA=-_) 07-09-2024 в 16:06:

Цитата:
Дядя Миша писал:
Ну кстати, возможно что и итемы-пушки тоже не сразу добавлю. Т.к. надо делать такую универсальную абстрактную систему на скриптах.

Ты как-то же делал какую-то веапон систему - ее же можно перенести на хедшот?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено ZGreen 07-09-2024 в 18:28:

Цитата:
Дядя Миша писал:
Под карты хл другой бсп-конфиг нужен, очевидно.
Я бы дал, но с той старой бетой он уже несовместим.

Добавлено 07-09-2024 в 13:25:

Впрочем вот нашёл какой-то древний. Но гарантировать ничего не могу.

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

Добавлено 08-09-2024 в 01:28:

Обратил внимание, что названия материалов не должны содержать {, что в халфовских текстурах, понятное дело, попадается. Компилятор на этом затыкается сразу -- Warning: material 'halflife/': failed to load texture
Fatal Error: missing '(' at line 12319, found [ instead

А там, например:
"halflife/{rail1"
{
}


Отправлено Дядя Миша 07-09-2024 в 19:11:

Цитата:
Aynekko писал:
Ты если будешь делать какие-то фиксы касаемо ксашмода, хотелось бы чтобы и оригинальный ксаш-мод обновился. Вроде были же планы его обновить.

Да там бесполезно. Чуть копни и приходишь к выводу, что проще переписать вообще всё. Ну так я собственно это и сделал, создав XashNT. И по Xash3D аналогичные мысли - ну не получится там ничего улучшить малой кровью.
Единственное, насчёт чего ещё остались планы - это компиляторы уровней.
Возможно выпущу новую версию P2ST. Потому что в компиляторах вообще никто ничего не понимает, а движок и ксаш-мод силами коммунити худо-бедно улучшаются и без меня.

Цитата:
(_-=ZhekA=-_) писал:
Ты как-то же делал какую-то веапон систему - ее же можно перенести на хедшот?

Да, есть такая в P2. Но она только огнестрел поддерживает. Её и буду переносить и расширять.

Цитата:
ZGreen писал:
Ну он и не работает как есть. С тем, что в СДК в примере квейка мне удалось скомпилировать уровень -- это легко, но в кваке нету светотекстур, поэтому существующие исходники сингловых уровней слишком муторно адаптировать.

Мигратор ресурсов создаёт и прописывает все материалы автоматически. Но да, минимальный сет для работы с халфой я не выкладывал.

Цитата:
ZGreen писал:
Обратил внимание, что названия материалов не должны содержать {, что в халфовских текстурах, понятное дело, попадается

Пиши название материала в кавычках и проблема решена.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-09-2024 в 07:35:

Цитата:
Дядя Миша писал:
Да там бесполезно. Чуть копни и приходишь к выводу, что проще переписать вообще всё.


Тогда зачем его переносить?

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


Отправлено Дядя Миша 08-09-2024 в 08:04:

Цитата:
FiEctro писал:
Тогда зачем его переносить?

Ксаш-мод хорош сам по себе как концепция. А неустранимые баги обусловлены архитектурой старого движка. После переноса они исчезнут автомагически.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 08-09-2024 в 13:31:

Цитата:
Дядя Миша писал:
Единственное, насчёт чего ещё остались планы - это компиляторы уровней.
Возможно выпущу новую версию P2ST. Потому что в компиляторах вообще никто ничего не понимает, а движок и ксаш-мод силами коммунити худо-бедно улучшаются и без меня.

Это действительно так, а какие конкретно планы по компиляторам? Или пока никакой конкретики неизвестно?

__________________
Мой сайт
Xash3D Modding Discord


Отправлено Дядя Миша 08-09-2024 в 13:43:

Ну во первых - по той же стандартизации эпсилонов. Чтобы ничего не гуляло и не виляло. Хотя там проблем и меньше чем в тех же ZHLT, но кое-что ещё осталось. Так же у меня тут поднакопилась масса улучшений именно на самом низовом, фундаментальном уровне, куда точно никто не полезет. Новые функции для polylib.c к примеру. Можно сделать генерацию клипа для встраиваемымх моделей. Для XashNT эти наработки так и не пригодились, а тут будут в самый раз. Поддержка CSM, наконец. И рад можно по памяти оптимизировать. Не всмысле, что я его буду писать, не заглядывая в свои наработки, а в смысле потребления памяти.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 08-09-2024 в 13:58:

Цитата:
Дядя Миша писал:
Ну во первых - по той же стандартизации эпсилонов. Чтобы ничего не гуляло и не виляло. Хотя там проблем и меньше чем в тех же ZHLT, но кое-что ещё осталось. Так же у меня тут поднакопилась масса улучшений именно на самом низовом, фундаментальном уровне, куда точно никто не полезет. Новые функции для polylib.c к примеру. Можно сделать генерацию клипа для встраиваемымх моделей. Для XashNT эти наработки так и не пригодились, а тут будут в самый раз. Поддержка CSM, наконец. И рад можно по памяти оптимизировать. Не всмысле, что я его буду писать, не заглядывая в свои наработки, а в смысле потребления памяти.

Ну, что еще могу сказать, отлично.

__________________
Мой сайт
Xash3D Modding Discord


Отправлено Crystallize 08-09-2024 в 15:46:

В ксашмоде хочется веревки как у ксерокса в 0.5. Нет планов что конкретно с ними делать, но все равно хочется.

Цитата:
Дядя Миша писал:
Так же у меня тут поднакопилась масса улучшений именно на самом низовом, фундаментальном уровне, куда точно никто не полезет.

Этсамое. А реально ли сделать для BSP29 утилиту которая, без перекомпиляции, фиксит в клипнодах невидимый порожек который возникает на стыке наклонного и ровного пола?


Отправлено FiEctro 10-09-2024 в 13:10:

Цитата:
Crystallize писал:
В ксашмоде хочется веревки как у ксерокса в 0.5. Нет планов что конкретно с ними делать, но все равно хочется.


Там же вроде были верёвки? По ним ещё лазить можно было.

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


Отправлено Crystallize 10-09-2024 в 13:52:

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


Отправлено Дядя Миша 10-09-2024 в 14:18:

Цитата:
FiEctro писал:
Там же вроде были верёвки? По ним ещё лазить можно было.


Цитата:
Crystallize писал:
Этсамое. А реально ли сделать для BSP29 утилиту которая, без перекомпиляции, фиксит в клипнодах невидимый порожек который возникает на стыке наклонного и ровного пола?

Не знаю, попробуй.

По текущим задачам: портирование идёт гладко, быстро, что и неудивительно - язык в полной мере отвечает поставленным задачам.
Но как вы понимаете не всё так просто - мне предстоит написать физический движок, точнее дописать его. Коллижен-дектор с матлибой у меня представлены, а вот солвера твёрдых тел ещё нету.
Так же надо добавить в рендер зеркала-порталы-тени, он изначально рассчитывался на всё это. Но в любом случае время.
Первоочередная задача конечно же физика. А в физике - парент-система, трансформы. Вторая задача - бесшовный чейнджлевел. Он готов, но ещё не протестирован.

Добавлено 10-09-2024 в 17:18:

Цитата:
Crystallize писал:
А у ксерокса были силовые кабели, по ним нельзя(?) было лазить, но они извивались, пускали искры, и от выстрелов рвались и отключали оборудование.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 10-09-2024 в 15:02:

Дядя Миша сделаешь клиентский сейв как у Кутузова?


Отправлено Дядя Миша 10-09-2024 в 15:25:

Цитата:
Crystallize писал:
сделаешь клиентский сейв как у Кутузова?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 11-09-2024 в 06:38:

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


Добавь так же джоинты и всякие вигл кости
https://docs.unity3d.com/Manual/Joints.html

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


Отправлено Дядя Миша 11-09-2024 в 06:57:

FiEctro это такой движок, он как бы растворён в игровом коде, поэтому туда можно ещё долго добавлять всякое.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 13-09-2024 в 17:00:

Проблема халфовских рендермодов и аналогичных динамических переключений GL-стейтов успешно разрешена!
Ввёл в систему материалов условные стейты, которые вешаются на пользовательскую переменную. Ну например на тот же рендермод.
Таким образом для разных типов моделей можно создавать разные рендермоды, встроенными средствами самой системы материалов можно игнорировать рендермоды если нам это не нужно (например как это было сделано моделей с флажками на мешах Transparent или Solid), т.е. полный контроль над ситуацией. Видя такое дело - удалил из движка Translucent Hack, который запрещал делать полигоны уровня прозрачными. Больше эта штука не понадобится, теперь всё полностью в ведении пользователя.

Добавлено 13-09-2024 в 20:00:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 13-09-2024 в 17:01:

Цитата:
Дядя Миша писал:
Видя такое дело - удалил из движка Translucent Hack, который запрещал делать полигоны уровня прозрачными.


А что в этом такого? Сорс вроде это позволял.

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


Отправлено Crystallize 13-09-2024 в 17:18:

Дядя Миша Sky brushes not allowed in entity!


Отправлено Дядя Миша 13-09-2024 в 20:24:

Цитата:
FiEctro писал:

А что в этом такого? Сорс вроде это позволял.

Ксаш тоже позволяет без проблем. Это отголосок старой концепции, когда я вознамерился проэмулировать рендермоды, жестко прописав режимы отображения в самих материалах. Тогда я рассуждал следующим образом: какие-нибудь стекла наверняка используют текстуру, типа glass. Так я ей просто пропишу режим полупрозрачности, да и всё. Уже буквально на первой такой ропытке я получил по лбу. Выяснилось что полупрозрачный барьер, за которым находится скафандр Гордона... использует текстуру стола, на котором стоит микроволновка. Тогда-то, в попытках спасти эту концепцию и родился translucent hack. Но очень быстро выяснилось, что абсолютно никакой системы в использовании текстур в качестве прозрачных и непрозрачных - нет. Там встречались любые комбинации. Тогда я плюнул и отложил решение этой проблемы до лучших времен. Ну и вот. Новая концепция полностью сняла все проблемы, убрала ограничения, добавила новые возможности принципиально ничего не затронув в уже написанных материалах. Наоборот появилась возможность их дополнительно упорядочить.

Добавлено 13-09-2024 в 23:17:

Цитата:
Crystallize писал:
Sky brushes not allowed in entity!

Это откуда? Ксаш без проблем позволяет иметь небесные текстуры на энтитях. И полноценно рисовать на них скайбокс.

Добавлено 13-09-2024 в 23:24:

Если кто-то не понял - я не встроил рендермоды в систему материалов. Я добавил нее возможности, позволяющие написать динамическое переключение стейтов opengl и оформить его любым, удобным пользователю способом. Вплоть до того, что в качестве условий переключения можно писать регулярные выражения. Но с другой стороны - стейты это единственное, что можно убрать под динамические условия в рамках самой системы материалов, а не внутри шейдера. Так-то, умало сочетая статичные и динамические условия можно соблюдать баланс между гибкостью и производительностью. Можно всё задекларировать статически. А можно рулить визуалкой с сервера в любых аспектах. Всё на усмотрение юзера.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 14-09-2024 в 10:29:

Цитата:
Дядя Миша писал:
Это откуда? Ксаш без проблем позволяет иметь небесные текстуры на энтитях. И полноценно рисовать на них скайбокс.

p2csg

code:
// check to make sure we dont have an origin brush as part of worldspawn if(( b->entitynum == 0 ) || ( !Q_strcmp( "func_group", name ) || !Q_strcmp( "func_landscape", name ) || !Q_strcmp( "func_detail", name ))) { if( contents == CONTENTS_ORIGIN ) MsgDev( D_ERROR, "Entity %i, Brush %i: origin brush not allowed in world\n", b->originalentitynum, b->originalbrushnum ); } else { // otherwise its not worldspawn, therefore its an entity. check to make sure this brush is allowed // to be an entity. switch( contents ) { case CONTENTS_SOLID: case CONTENTS_WATER: case CONTENTS_SLIME: case CONTENTS_LAVA: case CONTENTS_ORIGIN: case CONTENTS_EMPTY: break; default: COM_FatalError( "Entity %i, Brush %i: %s brushes not allowed in entity", b->originalentitynum, b->originalbrushnum, ContentsToString( contents )); break; } }


Отправлено ZGreen 20-09-2024 в 14:37:

А вот наблюдаю в предыдущем демо такую штуку как materials.def, где указано какие декали, какие звуки у той или иной поверхности. По образцу добавил это в демку квейка из СДК, но такое ощущение, что этот функционал просто отсутствует в этом демо. Это так?
Ну то бишь стекло-то стало прозрачным, но декаль на нем обычная остается.


Отправлено Дядя Миша 20-09-2024 в 16:48:

Цитата:
ZGreen писал:
А вот наблюдаю в предыдущем демо такую штуку как materials.def, где указано какие декали, какие звуки у той или иной поверхности

Она никак не используется, да. По задумке её должен парсить игровой код на Шоте, но этот функционал так и не был добавлен.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 22-09-2024 в 09:30:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 22-09-2024 в 11:54:

Что это значит?

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


Отправлено Дядя Миша 22-09-2024 в 13:58:

FiEctro где?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 23-09-2024 в 07:27:

Цитата:
Дядя Миша писал:
Но по крайней мере после портирования ксаш-мода у меня больше нет никаких масштабных задумок по портированию кода. Тут уж дело за вами.



Вот это не очень понял.

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


Отправлено Дядя Миша 23-09-2024 в 08:08:

FiEctro мало ли ещё старых игр, которые потенциально можно перенести на новый Ксаш? Но я ничего такого не планирую. Муторное это дело. Хотя и вполне реальное.

Добавлено 23-09-2024 в 11:08:

Вы наверное уже и не помните, но всё что я делаю сейчас, я пытался сделать ещё в 2007-м. Тогда у меня не было своего скриптового языка, я попытался использовать расширенный QC от FTE. И портировать на него игровой код из халфовских дллок. Естественно работы там предстояло не в пример больше, а многое было попросту невозможно реализовать. Тогда я отказался от этой затеи и вернулся обратно к обычным библиотекам, а потом Ксер говорит - а смысл очередного несовместимого движка. Лучше сделай его совместимым с халфой. Так на свет появился Xash3D который мы все знаем и любим. Но от своих первоначальных планов я разумеется не отказался.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 23-09-2024 в 09:21:

Цитата:
Дядя Миша писал:
мало ли ещё старых игр, которые потенциально можно перенести на новый Ксаш?


А зачем когда есть эмуляторы под эти игры?

Цитата:
Дядя Миша писал:
а потом Ксер говорит - а смысл очередного несовместимого движка.


И сам сделал ни с чем не совместимую волатилу

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


Отправлено Дядя Миша 23-09-2024 в 12:32:

Цитата:
FiEctro писал:
А зачем когда есть эмуляторы под эти игры?

А зачем Doom на зубочистках запускают? Вот и я не знаю.

Цитата:
FiEctro писал:
И сам сделал ни с чем не совместимую волатилу

Давать советы и следовать им самостоятельно всё-таки разные вещи.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 23-09-2024 в 12:44:

Цитата:
Дядя Миша писал:
А зачем Doom на зубочистках запускают? Вот и я не знаю.


Это конечно да, но кто играет в эти порты? Очевидно - никто.

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


Отправлено SNMetamorph 24-09-2024 в 18:41:

Цитата:
FiEctro писал:
И сам сделал ни с чем не совместимую волатилу

Я полагаю что это был просто какой-то личный гештальт, нежели проект на публику.

__________________
Мой сайт
Xash3D Modding Discord


Отправлено Дядя Миша 25-09-2024 в 06:56:

Портирование игрового кода ксаш-мода на Shot - это очень серьезный стресс-тест для последнего. Исходники весят три мегабайта.
1.3 мегабайта - это монстры и пушки. Остальное - бакэнд и энтити ксашмода. Вот их-то я портирую в первую очередь. То есть должна корректно заработать вся физика, зеркала, порталы, мониторы, лазеры там всякие. Физики твердых тел и машинок ещё нет, её только предстоит написать. Коллизия есть, но нужен солвер.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 25-09-2024 в 07:31:

Дядя Миша
Расскажи хоть в чём особенность портирования заключается? Если шота эмулирует весь С++ код, то что ещё нужно менять?

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


Отправлено Дядя Миша 25-09-2024 в 08:04:

Не шота, а Shot, не коверкай.

Что нужно менять? Имена переменных, ну это так уже, по желанию. В старом ксаше я использовал венгерку, а теперь отказался от нее.
Так же надо прописывать свойства кое-где. Ну и другие мелкие особенности, завязанные на механизмамх самого движка. К примеру у меня есть быстрый поиск объекта по содержимому строки у одного из членов класса. Из-за этого строковым полям нельзя напрямую присваивать новые значения, только через особую функцию Set*. Но это мелочи конечно. Особых отличий нет, поэтому я спокойно могу портировать за день до сто килобайт кода, например. Это с верификацией.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 25-09-2024 в 16:39:

Собственно из намеченного перенёс практически всё. Остался effects.cpp, это где лучи, лазеры, спрайты всякие, пузырьки вообщем.

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

Добавлено 25-09-2024 в 19:37:

Собственно, когда все эффекты и фишки из ксаш-мода начнут оживать - порадую вас свежими скриншотами.

Добавлено 25-09-2024 в 19:39:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 25-09-2024 в 18:34:

Цитата:
Дядя Миша писал:
Собственно из намеченного перенёс практически всё. Остался effects.cpp, это где лучи, лазеры, спрайты всякие, пузырьки вообщем.

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

Добавлено 25-09-2024 в 19:37:

Собственно, когда все эффекты и фишки из ксаш-мода начнут оживать - порадую вас свежими скриншотами.

Добавлено 25-09-2024 в 19:39:

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

Супер ) Демку бы пощупать, побегать )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 26-09-2024 в 06:40:

Цитата:
Дядя Миша писал:
И начнётся масштабная рекурсивная отладка, которая затрагивает практически весь движок


Расскажи пожалуйста как ты вообще всё отлаживаешь имея из внешних инструментов только блокнот? Ну и как я понял ещё средствами движка что то выводишь.

В гейм мейкере кстати был Error report довольно удобный если игра ломалась.
Возможно что то подобное и в ксаше сделать? Или просто в лог писать?

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


Отправлено Дядя Миша 26-09-2024 в 07:21:

Цитата:
FiEctro писал:
Расскажи пожалуйста как ты вообще всё отлаживаешь имея из внешних инструментов только блокнот?

Почему только блокнот? Ну студия-то падает на ошибке, можно стек посмотреть. Как правило этого вполне достаточно.

Цитата:
FiEctro писал:
Возможно что то подобное и в ксаше сделать? Или просто в лог писать?

В ксаше когда Shot с ошибкой падает - он тоже выводит содержимое стека и имя файла (номер строчки) где произошёл вылет. И это в лог пишется, да.
Я конечно могу это оформить в виде диалог-бокса, но лог ИМХО удобнее.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 26-09-2024 в 07:22:

Цитата:
Дядя Миша писал:
Я конечно могу это оформить в виде диалог-бокса, но лог ИМХО удобнее.


Как отдельная опция было бы не плохо

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


Отправлено Дядя Миша 26-09-2024 в 07:59:

FiEctro чем тебя так блокнот смущает? Ты учти, абсолютно всё что сейчас есть в мире из софта, который зародился в 70-х-80х-90х использовало для отладки именно блокнот и ничего более. Ну или отладчик, как продвинутый вариант блокнота.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 26-09-2024 в 08:05:

Цитата:
Дядя Миша писал:
FiEctro чем тебя так блокнот смущает?


Мне не понятно как с этим работать, научишь тогда может не так тригерить будет. Я избалован студией

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


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

Цитата:
Дядя Миша писал:
В ксаше когда Shot с ошибкой падает - он тоже выводит содержимое стека и имя файла (номер строчки) где произошёл вылет.


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

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


Отправлено Дядя Миша 26-09-2024 в 08:38:

Цитата:
FiEctro писал:
Программы в 70-90е были в десятки раз проще чем сейчас, хоть и были все написаны на низкоуровневых языках имеющих высокий порог вхождения

Это винда-то в десятки раз проще?

Цитата:
FiEctro писал:
Тут не обязательно вылет, как в примере например когда мы ссылаемся на несуществующий объект

Всё зависит от критичности. Порой достаточно сообщения в консоль.

Добавлено 26-09-2024 в 11:38:

Цитата:
FiEctro писал:
Я избалован студией

Ты не столько студией избалован, сколько чужими решениями.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 26-09-2024 в 08:51:

Цитата:
Дядя Миша писал:
Это винда-то в десятки раз проще?


Винда 3.1 безусловно. Дальше как раз таки майкрософт уже начал делать свои решения для упрощения жизни разработчикам. Вижуал студия вроде как раз с 95 года начало своё берёт.

Добавлено 26-09-2024 в 11:51:

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


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

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


Отправлено Дядя Миша 26-09-2024 в 09:25:

Цитата:
FiEctro писал:
А что в этом собственно плохого?

До определённого момента - ничего плохого конечно. А потом начинаются проблемы. Когда это всё начинает жить своею жизнью.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 26-09-2024 в 14:40:

Цитата:
FiEctro писал:
Вижуал студия вроде как раз с 95 года начало своё берёт.

То была уже 5-я версия


Отправлено Crystallize 02-10-2024 в 09:30:

Синтаксис материалов у NeoAxis https://forums.unrealengine.com/t/m...aterials/210379


Отправлено Дядя Миша 02-10-2024 в 09:44:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 03-10-2024 в 08:54:

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

Вообще конечно создать бы отдельную папку Assets или Source и в ней хранить как раз исходники текстур, моделей и т.д. А при нажатии волшебной утилиты уже конвертировать их в собственные форматы и упаковывать в pak архив, с которым и будет работать движок и IDE

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


Отправлено Дядя Миша 03-10-2024 в 10:22:

Цитата:
FiEctro писал:
Нужна какая то утилита которая может импортированные текстуры разного расширения пакетно преобразовать в форматы понятные Ксашу, и прописать им дефолтные материалы, желательно ещё чтобы она понимала ещё где нормаль, где спрайт, где альфа, где кубамапа и т.д. и желательно в один клик. Ибо вручную всё это импортировать - жесть. А так же чтобы подчищала исходные форматы из папок с текстурам.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 03-10-2024 в 11:20:

Цитата:
Дядя Миша писал:
maketex же. Но она не удаляет исходники, я посчитал это слишком опасным.


Для такого сделать отдельный флаг лучше да.

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


Просто отградить исходники от того с чем уже работает игра.

Добавлено 03-10-2024 в 14:20:

Цитата:
Дядя Миша писал:
maketex же.


Это просто конвертер. Где потом расфасовывать всё самому надо.

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


Отправлено (_-=ZhekA=-_) 03-10-2024 в 11:24:

Цитата:
FiEctro писал:
и желательно в один клик.

Еще нужна кнопка сделать за меня ААА игру в один клик

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 03-10-2024 в 12:26:

Цитата:
FiEctro писал:
Это просто конвертер. Где потом расфасовывать всё самому надо.

Запусти в корне игры, оно тебе и наконвертит по месту. Оно рекурсивно залезет во все папки.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 07-10-2024 в 19:39:

Большой день сегодня, товарищи. Объекты, склееные воедино посредством парент-системы из ксаш-мода, таки собрались в единую конструкцию и заработали как в оригинале. Даже, можно сказать, без особой отладки.
Хотя на один баг в языке Shot, я всё же потратил несколько часов. Точнее даже не на поиск самого бага, а на попытки понять, в чём именно он заключается.
А ведь я просто механически копировал код из ксаш-мода. Нельзя сказать, что там всё корректно. Тем не менее большая часть заработала автоматически. Это не может не радовать. Движок становится всё стабильнее и предсказуемее.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-10-2024 в 09:04:

Дядя Миша
Так а в чём баг и в чём он заключается?

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


Отправлено Дядя Миша 08-10-2024 в 09:29:

C++ Source Code:
1
class xform
2
{
3
  vec3 mat[4];
4
};
5
class Object
6
{
7
  xform m_matrix;
8
  xform &GetMatrix( void ) const
9
  {
10
    return m_matrix;
11
  }
12
  xform GetTransform( void ) const
13
  {
14
    if( foo )
15
    {
16
      xform tmp;
17
      return tmp;
18
    }
19
    return GetMatrix(); <---
20
  }

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 08-10-2024 в 18:32:

Очередной большой день сегодня! Удалось заставить работать лифт с демокарты elevatordemo.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 08-10-2024 в 18:38:

Слишком много больших событий сегодня

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 09-10-2024 в 06:05:

Цитата:
Дядя Миша писал:
Псевдокод. Собственно вот здесь и была проблема, когда мы брали объект по ссылке, но должны были его скопировать в возвращаемое значение, компилятор, вместо того чтобы скопировать объект, копировал ссылку на него. У меня там было соответствующее условие для объекта, для указателя, а для ссылки я забыл добавить. Нуивот.


Клёво. А в шоте вообще можно без указателей какой то простой код делать? Ну примерно как на шарпах.

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


Отправлено Дядя Миша 09-10-2024 в 14:23:



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

Цитата:
FiEctro писал:
А в шоте вообще можно без указателей какой то простой код делать? Ну примерно как на шарпах.

Да можно конечно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 09-10-2024 в 15:53:

Дядя Миша
Я так понял у тебя мечта оставить только виртуальную машину, а весь движок на шоте написать?

Цитата:
Дядя Миша писал:
Да можно конечно.


Отлично.

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


Отправлено Дядя Миша 09-10-2024 в 16:02:

Цитата:
FiEctro писал:
Я так понял у тебя мечта оставить только виртуальную машину, а весь движок на шоте написать?

у меня не мечта, у меня тестирование нагрузочной способности.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 10-10-2024 в 07:54:

Карта с пулемётом, который рисует декалями. Слева XashXT, справа XashNT

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 10-10-2024 в 07:58:

Дядя Миша
FPS подрос хорошо.
А что с гаммой и декалями? И почему на одной и той же сцене разное количество Дипов и треугольников? От количества декалей зависит?

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


Отправлено Дядя Миша 10-10-2024 в 09:56:

Цитата:
FiEctro писал:
И почему на одной и той же сцене разное количество Дипов и треугольников?

Кол-во дипов не является какой-то фундаментальной величиной, которая зависит от сцены. Сколько раз твой рендер сделает флуш - столько дипов и будет. И с кол-вом треугольников та же песня. Помоему старый ксаш вообще не учитывает полигоны декалей в статистике.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 13-10-2024 в 11:56:

Бесшовный чейнджлевел тоже отлажен и полностью работает
Теперь дело за мультипроходным рендерером - зеркала, порталы, камеры.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 13-10-2024 в 12:50:

Цитата:
Дядя Миша писал:
Бесшовный чейнджлевел тоже отлажен и полностью работает


Это как в халфе или асинхронная загрузка?

Добавлено 13-10-2024 в 15:50:

Дядя Миша
А ты слышал про принцип цикады для уменьшения эффекта тайлинга для однообразных текстур?
https://habr.com/ru/articles/117160/

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


Отправлено Дядя Миша 13-10-2024 в 12:54:

Цитата:
FiEctro писал:
Это как в халфе или асинхронная загрузка?

как в халфе.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 27-10-2024 в 11:05:

Поскольку я плотно занимаюсь рейтрейсером, у меня накопилось немного интересных новостей и я спешу поделиться ими с вами.
Вынужден признать, что несмотря на тот факт, что в своё время я написал компилятор уровней для Паранои, я по прежнему недостаточно хорошо понимаю принцип работы Q1BSP. Точнее в некоторых мелочах у меня пробелы в знаниях. Но поскольку рейтрейсер будет базироваться как раз на дереве такого типа, то я эти пробелы как раз и закрою. Для начала - минутка забавного. Как вы все знаете, для построения BSP используются только позитивные плоскости, но если в ку2 и в ку3 это явно видно в коде, то в ку1 и халфе - совсем даже неочевидно. Но вчера я наткнулся на замечательное:

C++ Source Code:
1
for( int i = 0; i < g_nummapplanes; i += 2 )
2
{
3
  n = AllocSurface();
4
  n->planenum = i; <-- !!!

Нувыпонели, да?
Ну а теперь перехожу к основному. Построить дерево несложно. Сложно определить где и что у нас внутри, а что снаружи. Где солидное, а где несолидное. Помните как я мучался в 2020-м году, строя BSP из полигонов для коллизии? Дерево построено, а где какие контентсы определить - ну решительно невозможно. Если ориентироваться на контентсы, заданные типом самого материала, мы просто придём к тому, что все наши пустые лифы окажутся заполненными. Правда мы можем прибегнуть к инверсному варианту - если в лифе есть геометрия, значит он пустой и наоборот.
Это прекрасно работает, на первый взгляд проблема решена?
Да, но нет. Потому что нам блин надо ещё как-то отличить solid от sky!!!!
Это же одна из основных фишек Q1BSP - возможность отличить просто твёрдую поверхность от неба, просто проверяя ноды, и не касаясь реальной геометрии. И, забегая вперёд, скажу что я был полностью прав - дерево такого типа действительно самая быстрая ускоряющая структура из всех существующих, известных мне. Ну навскидку, такое BSP-дерево быстрее BVH структуры (которая между прочим использует SSE2-оптимизации) в четыре с половиной раза. И это ещё рекурсивный вариант с одной оптимизацией goto. В шейдере-то будет вариант с циклом - он ещё быстрее. Но ровно до тех пор, пока мы не начинаем проверять реальные фейсы, принадлежащие ноде. Что вообщем-то и логично. Геометрия растворена в дереве, мы трейсим дерево и получаем сумашедшую производительность. Одна только мелочь нам мешает - как же диффернцировать солидные фейсы от небесных?

В Q1BSP (да и в халфе так же), контентсы сурфейсов приходят из CSG. А изначально (до CSG) контентсы ставятся брашам, т.е. замкнутным объемам.
Как вы помните, поскольку в Q1 (да и в халфе), может быть только единственный контентс на браш, функция выбора этих самых контентсов - очень ответственное и непростое дело. То есть нам надо решить как поступить если часть браша вода, а часть - солиды, ну итд. А можно не решать, т.к. CSG вполне может отрезать эту солидную часть и останется только вода. Из чего ясно следует - CSG в Q1BSP (да и в халфе тоже), определяет вообще абсолютно всё. Помните как я в своё время удивлялся, что CSG напрямую влияет и на швы на лайтмапе и на качество построения дерева и на всякие визуально-физичные глюки, типа невидимой воды. Ну и вот. При этом CSG в этом конвейере неотключаемый и выбросить его в принципе нельзя - без CSG построить дерево попросту не удасться, т.к. мы не будем знает где какие контентсы. Проще говоря ерунда получится, да и всё.
Хорошо, но так ли всё плохо? Ведь есть же Q2. Там с одной стороны уже и порталы ввели, а с другой - осталось классическое дерево из Q1 где все поверхности уложены на ноду. Совершенно верно, дерево там такое же, несмотря на то, что контентсы задаются уже битами. И CSG там тоже отключаемый, можно и вовсе без него (отдельный кайф это то, как там водяные брашы лишаются своих внутренних сторон, совершенно не так как в Q1, я вам как-нибудь расскажу), следовательно можно прибегнуть к опыту Кармака в Q2 и сделать как там? Да, можно, с одной маленькой поправкой. В Quake2 нет CONTENTS_SKY. Как раз в силу невозможности его определения без CSG. И теперь вы это тоже знаете.
А я буду думать дальше.

Добавлено 27-10-2024 в 14:05:

Собственно, как определяются контентсы в Q2
C++ Source Code:
1
for (b=brushes ; b ; b=b->next)
2
{
3
  // if the brush is solid and all of its sides are on nodes,
4
    // it eats everything
5
  if (b->original->contents & CONTENTS_SOLID)
6
  {
7
    for (i=0 ; i<b->numsides ; i++)
8
      if (b->sides[i].texinfo != TEXINFO_NODE)
9
        break;
10
      if (i == b->numsides)
11
      {
12
        node->contents = CONTENTS_SOLID;
13
        break;
14
      }
15
  }
16
  node->contents |= b->original->contents;
17
}

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 27-10-2024 в 11:25:

Напомни пожалуйста что такое сторона, уложенная на ноду, и чем она отличается от стороны не уложенной на ноду.

Насколько я помню, ты всегда этим условием оперировал как понятным, а мы тебя и не спрашивали. Я понимаю термины, но они не складываются у меня в картинку.

Нода это секущая плоскость, сторона это плоскость браша. Нода, как я знаю, обычно появляется при распространении во все стороны плоскости браша, которую компилятор счёл достаточно важной (аксиальной и большой) чтобы рассечь ею ещё несколько листьев в дереве на более мелкие листья. Получается "сторона лежит на ноде" это просто когда стороны двух брашей лежат в одной плоскости? Но тогда как можно приводить пример с брашем висящим посреди комнаты? Что-то не складывается.


Отправлено Дядя Миша 27-10-2024 в 15:40:

Цитата:
Crystallize писал:
Напомни пожалуйста что такое сторона, уложенная на ноду, и чем она отличается от стороны не уложенной на ноду.

Это очень просто. Видимый полигон, который уже обрезан соседними нодами и принадлежит только этой.

Цитата:
Crystallize писал:
Нода, как я знаю, обычно появляется при распространении во все стороны плоскости браша

Необязательно браша. Любой плоскости. Плоскость бесконечна. У полигона точно так же можно найти плоскость по трём точкам.

Цитата:
Crystallize писал:
Но тогда как можно приводить пример с брашем висящим посреди комнаты?

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

Ну а я тем временем разобрался как правильно задавать контентсы. Это на самом-то деле очень просто. Для каждого полигона, который мы используем для построения дерева, создаётся его зеркальный двойник, который смотрит в обратную сторону. CSG это же самое и делает. Ведь полно ситуаций, когда для CSG нет работы, но он должен дать какой-то выхлоп. Так и тут. А вся магия заключается в задании контентсов.
Основному полигону мы ставим CONTENTS_EMPTY. А зеркальному - уже соответственно CONTENTS_SKY или CONTENTS_SOLID. И из этого набора строим наше дерево.

Добавлено 27-10-2024 в 18:35:

ЗЫ. В халфе и кваке также применяется оптимизация под названием common solid leaf - тот самый нулевой лист, который не существует во время построения дерева и появляется только во время записи в bsp-файл.
В чём тут суть. Солидный лиф очевидно не может содержать никаких полигонов - он же заполнен. То есть он нам и не нужен особо. Поэтому мы можем во первых уничтожить те ветки дерева, у которых дочерние ноды ссылаются на solid leaf, ну потому что дальнейшее продвижение по дереву в этом направлении нам не даст ровным счётом ничего - сколько ни беги, там дальше везде солидный лиф. Таким образом мы можем здорово подсократить кол-во нод. А вторая оптимизация - оставшийся единичный solid leaf нам хранить вовсе необязательно, т.к. нам пофиг на его размеры уже. Поэтому мы без проблем можем его заменить на нулевой лиф, который создадим заранее и выкинуть таким образом ещё и кучу лифов. Из-за этих двух оптимизаций кол-во нодов сильно отличается от кол-ва лифов, но на самом деле изначальное дерево сбалансировано, поэтому кол-во нодов всегда равно кол-ву лифов + 1. Хотя это в сущности бесполезная информация для читаталей. Ну из разряда "знаете ли вы что...".

Добавлено 27-10-2024 в 18:40:

ЗЗЫ, И ещё раз, на примере карты-коробки с небом, после всех оптимизаций.
Такая карта содержит шесть нодов и три лифа.
К каждому из шести нодов прилинкована одна из сторон карты-коробки.
Один лиф это common solid leaf и каждая из пяти нод заканчивается им.
Шестая нода заканчивается аналогичным лифом, но уже с CONTENTS_SKY.
Ну и третий лиф с CONTENTS_EMPTY содержит ссылки на все шесть полигонов нашей карты коробки.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-10-2024 в 06:52:

Цитата:
Дядя Миша писал:
Необязательно браша. Любой плоскости. Плоскость бесконечна. У полигона точно так же можно найти плоскость по трём точкам.


Я так и не понял, эти плоскости только для колизии используются?

А в чём приемущество контентсов перед группой брашей типа того же фанк_детаила?

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


Отправлено Дядя Миша 28-10-2024 в 07:02:

Цитата:
FiEctro писал:
А в чём приемущество контентсов перед группой брашей типа того же фанк_детаила?

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

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

ДА ЧТОЖ ЭТО ТАКОЕ!!!!
Пока я ему отвечаю, так сказать, на один пост - он его по тихому меняет и там уже совершенно другой пост!!!

Цитата:
FiEctro писал:
Я так и не понял, эти плоскости только для колизии используются?

Это ограничивающие плоскости дерева. А как использовать дерево - это твое дело.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-10-2024 в 07:09:

Цитата:
Дядя Миша писал:
Пока я ему отвечаю, так сказать, на один пост - он его по тихому меняет и там уже совершенно другой пост!!!


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

Цитата:
Дядя Миша писал:
Это ограничивающие плоскости дерева. А как использовать дерево - это твое дело.


А как у дерева могут быть плоскости? Это же просто алгоритм поиска. Или ты имеешь ввиду что сами плоскости отсортированы?

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


Получается контентсы это просто свойство материала которое можно и на обычных моделях (не бсп) применять?

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


Отправлено Дядя Миша 28-10-2024 в 07:19:

Цитата:
FiEctro писал:
А как у дерева могут быть плоскости?

секущие плоскости. Как они могут быть у дерева?

Цитата:
FiEctro писал:
Это же просто алгоритм поиска

Алгоритм поиска - это бинарный поиск, например. Вот ты слова отсортировал в алфавитном порядке и теперь можешь выполнять бинарный поиск в этом массиве со словами. Вот это алгоритм поиска. Ты же никогда не задумывался почему strcmp возвращает не просто 0 и 1, а -1, 0, 1? Вот как раз для реализации бинарного поиска.

Цитата:
FiEctro писал:
Получается контентсы это просто свойство материала которое можно и на обычных моделях (не бсп) применять?

Это просто какое-то число, которое мы договорились считать каким-то типом материала. Солидным или текучим или вообще небом.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-10-2024 в 07:26:

Цитата:
Дядя Миша писал:
секущие плоскости. Как они могут быть у дерева?


Я вот не могу понять смысла этой фразы:

Цитата:
Дядя Миша писал:
ограничивающие плоскости дерева


Цитата:
Дядя Миша писал:
Алгоритм поиска - это бинарный поиск, например. Вот ты слова отсортировал в алфавитном порядке и теперь можешь выполнять бинарный поиск в этом массиве со словами. Вот это алгоритм поиска. Ты же никогда не задумывался почему strcmp возвращает не просто 0 и 1, а -1, 0, 1? Вот как раз для реализации бинарного поиска.


Ну да, а откуда плоскости взялись?

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


Отправлено Дядя Миша 28-10-2024 в 07:38:

FiEctro когда пространство делится надвое - для этого используется плоскость. Которая режет полигоны.

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

И вообще я тебе так сказать удивляюсь. Ты же сам нам ролик на юутбе притаскивал, где наглядно показано как дерево режет геометрию.
А теперь спрашиваешь откуда там взялись плоскости.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 28-10-2024 в 08:33:

Цитата:
FiEctro писал:
Я так и не понял, эти плоскости только для колизии используются?

Муж и жена разводятся и делят квартиру. Они нашли у себя в квартире примерно посередине большую стену и у неё одну большую ровную сторону на которой нет картин, лампочек, ничего. И они мысленно продолжили эту сторону стены во всех направлениях и чтобы не забыть, мелком расчертили мысленное пересечение этой плоскости со всем подряд вплоть до самых дальних краёв квартиры.
Получилась воображаемая корневая секущая плоскость (нода) всей квартиры. Про большую плоскую стену от которой расчертили ноду, говорят что она лежит на ноде (в кваке и халве). Нода поделила всю квартиру на лист мужа и лист жены. Вместе нода и её листы образуют ДЕРЕВО. Обязательно прилагается граф, на котором показано, что в ДЕРЕВЕ листы мужа и жены непосредственно прилинкованы к корневой ноде:
code:
О /\ М Ж


Отправлено Дядя Миша 28-10-2024 в 09:08:

Crystallize ты сейчас описал процесс балансировки дерева

Добавлено 28-10-2024 в 12:02:

А само дерево (для условной комнаты) строится иначе.
Есть устойчивое заблуждение, что построение BSP начинается с деления пространства при помощи вновь созданной плоскости. Это неверно.
Т.е. подобное деление разумеется тоже возможно и используется для его балансировки, но совершенно необязательно.

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

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

Если же мы делаем BSP для кубика, то наоборот - там один общий солидный лифт, которым описано содержимое кубика и шесть пустых.

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

Надо бы мне побольше инструментов для визуализации дерева сделать

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 29-10-2024 в 01:26:

Цитата:
Дядя Миша писал:
Есть устойчивое заблуждение, что построение BSP начинается с деления пространства при помощи вновь созданной плоскости. Это неверно.

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


В чём разница с моим описанием? Я беру плоскость от стенки.


Отправлено Crystallize 30-10-2024 в 14:28:

Цитата:
Дядя Миша писал:
За стеной - солидный лиф.

Нулевой лиф, он же всегда конкавный получается? Если пространственно внутри него обычные лифы? Или мы не можем здесь оценивать его по этой характеристике?

Цитата:
Дядя Миша писал:
Перед стеной - пустой лиф, он обычно получается общим для всех шести нод.

А, вот этого я не знал. Значит у лифа бывает несколько нод. А наоборот бывает, когда у ноды несколько лифов?

Цитата:
Дядя Миша писал:
Если же мы делаем BSP для кубика, то наоборот - там один общий солидный лифт, которым описано содержимое кубика и шесть пустых.

Я всё время воображал их либо проецируемыми из внутреннего кубика наружу, оставляя пустое место в углах, либо проецируемыми из внешних стенок внутрь.
Но видимо они просто все разного размера и формы, раз вшестером заполняют всё промежуточное пространство.


Отправлено Дядя Миша 30-10-2024 в 19:39:

Цитата:
Crystallize писал:
Нулевой лиф, он же всегда конкавный получается?

Это условность. Если лиф солидный, то мы дальше не проверяем ничего. Поэтому он можно представить что абстрактно он имеет форму уровня, который вычли из гигантского куба

Цитата:
Crystallize писал:
А, вот этого я не знал. Значит у лифа бывает несколько нод

Это я погнал. Лифы не шарятся между нодами. А вот полигоны в разных лифах вполне могут совпадать. Это справедливо для любого BSP-дерева.

Цитата:
Crystallize писал:
А наоборот бывает, когда у ноды несколько лифов?

Бывает конечно. Когда обе дочерних ноды ведут на лифы.

Добавлено 30-10-2024 в 22:39:

ЗЫ. объем у нод и лифов нужен только для отсечения их фрустумом, т.е. для рассчёта видимости. А больше он ни для чего не нужен.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 31-10-2024 в 06:52:

Спросил нейронку какие методы отрисовки теней в 3д она знает:

Цитата:
1. Shadow Volumes
Описание: Shadow Volumes — это метод, который создает объемы вокруг объектов, отбрасывающих тени. Эти объемы определяют область, которая находится в тени.

Принцип работы: Алгоритм проходит по всем пикселям экрана и определяет, находятся ли они внутри тени, проверяя, пересекаются ли лучи света с объемами тени.

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

Недостатки: Высокая вычислительная сложность, особенно для сложных сцен.

2. Ray Tracing
Описание: Ray Tracing — это метод, который моделирует путь лучей света от источника света до камеры, учитывая пересечения с объектами сцены.

Принцип работы: Для каждого пикселя экрана вычисляется трассировка лучей, и если луч пересекает объект, пиксель находится в тени.

Преимущества: Высокая точность и возможность создания реалистичных теней, отражений и преломлений.

Недостатки: Очень высокие требования к вычислительным ресурсам.

3. VSM (Variance Shadow Mapping)
Описание: VSM — это улучшенная версия Shadow Mapping, которая использует статистические методы для уменьшения артефактов, таких как "зазубрины" (aliasing).

Принцип работы: Вместо одного значения глубины в Shadow Map, VSM хранит среднее значение и дисперсию глубины. Это позволяет использовать неравенство Чебышева для оценки вероятности того, что пиксель находится в тени.

Преимущества: Уменьшение артефактов и более плавные тени.

Недостатки: Может привести к "затенению" (light bleeding) в некоторых случаях.

4. ESM (Exponential Shadow Mapping)
Описание: ESM — это еще одна улучшенная версия Shadow Mapping, которая использует экспоненциальную функцию для уменьшения артефактов.

Принцип работы: Глубина в Shadow Map хранится как экспонента от значения глубины. При проверке тени используется экспоненциальная функция для сравнения.

Преимущества: Уменьшение артефактов и более плавные тени.

Недостатки: Требуется высокая точность хранения данных, иногда может привести к "затенению".

5. PCF (Percentage Closer Filtering)
Описание: PCF — это метод, который используется в сочетании с Shadow Mapping для создания более мягких теней.

Принцип работы: При проверке тени для каждого пикселя учитываются несколько значений глубины из Shadow Map, что позволяет создать размытие тени.

Преимущества: Создание мягких теней с меньшим количеством артефактов.

Недостатки: Требует дополнительных вычислений, может быть ресурсоемким.

6. CSM (Cascaded Shadow Maps)
Описание: CSM — это метод, который использует несколько Shadow Maps для разных уровней детализации в зависимости от расстояния до камеры.

Принцип работы: Создаются несколько Shadow Maps, каждая из которых охватывает разные области сцены. Ближние области имеют более высокую детализацию, а дальние — более низкую.

Преимущества: Улучшенная детализация теней в ближней зоне, сохранение производительности в дальней зоне.

Недостатки: Сложность настройки и потенциальные артефакты на границах каскадов.

7. SSAO (Screen Space Ambient Occlusion)
Описание: SSAO — это метод, который добавляет эффект затенения в областях, где объекты близко расположены друг к другу, даже если они не отбрасывают тени.

Принцип работы: Вычисляется затенение в экранном пространстве, основываясь на расстоянии между пикселями и их нормалями.

Преимущества: Добавляет реалистичность сцены, не требует дополнительных Shadow Maps.

Недостатки: Может создавать артефакты, такие как "шум" или неправильное затенение.

8. LPV (Light Propagation Volumes)
Описание: LPV — это метод глобального освещения, который также может использоваться для создания теней.

Принцип работы: Свет распространяется в объемных сетках, и тени создаются на основе этого распространения.

Преимущества: Может создавать мягкие тени и учитывать глобальное освещение.

Недостатки: Сложность реализации и потенциальные проблемы с производительностью.

9. VPL (Virtual Point Lights)
Описание: VPL — это метод, который использует множество виртуальных точечных источников света для создания теней и освещения.

Принцип работы: Создаются виртуальные источники света, которые отбрасывают тени и освещают сцену.

Преимущества: Может создавать реалистичные тени и освещение.

Недостатки: Высокая вычислительная сложность и потенциальные проблемы с производительностью.

10. Deep Shadow Maps
Описание: Deep Shadow Maps — это метод, который использует "глубокие" текстуры для хранения нескольких значений глубины в одном пикселе.

Принцип работы: Вместо одного значения глубины, Deep Shadow Maps хранят несколько значений, что позволяет более точно моделировать прозрачность и полупрозрачность.

Преимущества: Улучшенная точность для прозрачных и полупрозрачных объектов.

Недостатки: Высокие требования к памяти и вычислительным ресурсам.

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


По оптимизации рейтрейсинга:
Цитата:

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

Преимущества: Уменьшает количество лучей, которые нужно трассировать, что значительно снижает вычислительную нагрузку.

Недостатки: Может привести к потере деталей и появлению артефактов на высоких частотах.

2. Использование ограниченного количества шагов
Метод: Ограничение количества шагов, которые луч может сделать при трассировке, чтобы избежать бесконечного цикла.

Преимущества: Ускоряет процесс трассировки, так как каждый шаг требует вычислений.

Недостатки: Может привести к неточному результату, если луч не достигнет цели за ограниченное количество шагов.

3. Использование упрощенных геометрических примитивов
Метод: Замена сложной геометрии на более простые примитивы (например, сферы или плоскости) для трассировки.

Преимущества: Упрощает вычисления пересечения луча с объектом.

Недостатки: Может привести к потере точности и появлению артефактов.

4. Использование текстурных буферов
Метод: Хранение предварительно вычисленных данных (например, глубины или нормалей) в текстурных буферах для ускорения трассировки.

Преимущества: Позволяет быстро получать информацию о сцене без дополнительных вычислений.

Недостатки: Требует дополнительной памяти для хранения буферов.

5. Использование метода "Ray Marching"
Метод: Вместо классической трассировки лучей, используется метод "Ray Marching", где луч продвигается на фиксированное расстояние на каждом шаге.

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

Недостатки: Может привести к потере точности и появлению артефактов.

6. Использование метода "Screen-Space Ambient Occlusion" (SSAO)
Метод: Адаптация метода SSAO для выполнения частичного рейтрейсинга в экранном пространстве.

Преимущества: Может быть использован для быстрого вычисления окклюзии и других эффектов.

Недостатки: Может не давать точных результатов для всех типов сцен.

7. Использование метода "Screen-Space Reflections" (SSR)
Метод: Адаптация метода SSR для выполнения рефлексий в экранном пространстве.

Преимущества: Позволяет быстро получать рефлексии на поверхностях.

Недостатки: Может привести к артефактам на границах объектов и в сложных сценах.

8. Использование метода "Screen-Space Shadows" (SSS)
Метод: Адаптация метода SSS для вычисления теней в экранном пространстве.

Преимущества: Позволяет быстро получать тени без необходимости трассировки лучей в 3D-пространстве.

Недостатки: Может привести к артефактам и неточностям в сложных сценах.

9. Использование метода "Screen-Space Ray Tracing with Hierarchical Z-Buffer"
Метод: Использование иерархического Z-буфера для быстрого отбрасывания невидимых областей при трассировке лучей.

Преимущества: Значительно ускоряет процесс трассировки, так как позволяет быстро отбрасывать невидимые области.

Недостатки: Требует дополнительных вычислений для построения иерархического Z-буфера.

10. Использование метода "Screen-Space Ray Tracing with Temporal Accumulation"
Метод: Аккумуляция результатов трассировки лучей между кадрами для улучшения качества и снижения вычислительной нагрузки.

Преимущества: Позволяет получить более качественные результаты с меньшими вычислительными затратами.

Недостатки: Может привести к артефактам при движении объектов или камеры.

11. Использование метода "Screen-Space Ray Tracing with Denoising"
Метод: Применение методов денойзинга (например, TAA, FXAA) для улучшения качества результатов трассировки.

Преимущества: Позволяет улучшить качество изображения и снизить артефакты.

Недостатки: Требует дополнительных вычислений для применения денойзинга.

12. Использование метода "Screen-Space Ray Tracing with Early Termination"
Метод: Прекращение трассировки луча, если он выходит за пределы экранного пространства или если результат уже достаточно хорош.

Преимущества: Ускоряет процесс трассировки, так как не тратит время на ненужные вычисления.

Недостатки: Может привести к неполному результату в некоторых случаях.

13. Использование метода "Screen-Space Ray Tracing with Adaptive Sampling"
Метод: Адаптивное изменение количества лучей в зависимости от сложности сцены и требуемого качества.

Преимущества: Позволяет сбалансировать производительность и качество.

Недостатки: Требует дополнительных вычислений для определения необходимого количества лучей.

14. Использование метода "Screen-Space Ray Tracing with Depth Peeling"
Метод: Использование метода Depth Peeling для разделения слоев глубины и трассировки лучей в каждом слое отдельно.

Преимущества: Позволяет более точно учитывать глубину и сложность сцены.

Недостатки: Требует дополнительных вычислений для разделения слоев глубины.

15. Использование метода "Screen-Space Ray Tracing with GPU Acceleration"
Метод: Использование GPU для ускорения вычислений трассировки лучей.

Преимущества: Значительно ускоряет процесс трассировки, так как GPU оптимизирован для параллельных вычислений.

Недостатки: Требует хорошего знания программирования шейдеров и оптимизации для GPU.

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


Отправлено Дядя Миша 31-10-2024 в 07:18:

Нейронка в кучу свалила техники и методы фильтрации. Ну ей простительно.

ESM и VSM часто дают лайтблидинг, а так да - очень мягкие тени получаются и совсем не алиасят. Но с лайтблидингом не получается бороться.

PCF относительно дешёвый, но там постоянно надо мутить с depthBias и depthOffset. Причём их нельзя просто взять как константы. Их надо динамически перерасчитывать для каждого источника, причём формула перерасчёта ещё и зависит от типа источника. Для прожекторов одна, для всенаправленных другая, для каскадных третья. Но если всё это победить, получится результат как в Tesseract. Это примерно предел того, на что способны тени с PCF.

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

SSAO к слову можно реализовать через тот же рейтрейсинг. В том же самом шейдере.

LPV не имеет к теням никакого отношения.

VPL - это часть технологии LPV, но не только. Они много где используются.

Про Deep Shadow Maps ранее не слышал. Возможно это для теней от полупрозрачных объектов.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ZGreen 31-10-2024 в 08:18:

Да, нейронка...


Отправлено FiEctro 31-10-2024 в 18:18:

Дядя Миша

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

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


Отправлено (_-=ZhekA=-_) 31-10-2024 в 20:04:

FiEctro
А где ссылка и скрины?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 01-11-2024 в 06:12:

(_-=ZhekA=-_) это только для бетатестеров

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 01-11-2024 в 06:53:

Цитата:
Дядя Миша писал:
(_-=ZhekA=-_) это только для бетатестеров

Я не совсем понял, это бета тест чего, ксаша, юнити?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 01-11-2024 в 07:20:

(_-=ZhekA=-_)
Ксаша, демки на других движках тоже могут быть как пример для сравнения.
Работает примерно так:


Но моя демка попроще, там просто карта из первой кваки без текстур.

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


Отправлено FiEctro 01-11-2024 в 12:13:

У меня кстати такой вопрос по дереву. Вот мы сортируем числа исходя больше они или меньше. Но что если на вход поступает равное число? На какую ветку его расположить и почему? Ведь ветки для равенства у нас нет.
https://alxgk.ru/uploader/img/ee520b63f2a5fe45b72e988213e41ceb.png

И отсюда вытекает другой вопрос, что если полигон лежит параллельно секущей плоскости? Куда он пойдёт? Учитывать нормаль?

Что если 1 вертекс полигона лежит на другой стороне плоскости?

Что если 2 вертекса на разных сторонах плоскости, а третий на ней?

Какие ещё комбинации я забыл упомянуть?

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


Отправлено ZGreen 01-11-2024 в 13:34:

Как это у тебя с вертексами получилось такое измыслить? По геометрии что было в школе?


Отправлено FiEctro 01-11-2024 в 13:46:

Цитата:
ZGreen писал:
Как это у тебя с вертексами получилось такое измыслить? По геометрии что было в школе?



Когда учителя хорошие были пятерки, но раньше у нас геометрию вела злючая и жирная математичка с мерзким голосом. Баб она била тряпкой для доски по таблу, а мне однажды поставила ноль по алгебре когда я не принёс домашнее задание. Ещё у нас химичка такая же свиноматка была, мы ей кнопок на стул положили, а она даже не почувствовала.

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


Отправлено Дядя Миша 01-11-2024 в 14:44:

Цитата:
FiEctro писал:
Вот мы сортируем числа исходя больше они или меньше

Погоди постой, ты меня не путай. Если речь про бинарный поиск, то все числа в массиве должны быть уникальные. Нельзя чтобы в массиве было две пятёрки, очевидно же. Иначе бинарный поиск сломается.

Цитата:
FiEctro писал:
И отсюда вытекает другой вопрос, что если полигон лежит параллельно секущей плоскости? Куда он пойдёт? Учитывать нормаль?

Параллельно или лежит прям на ней? Это важно. Если прям на этой же плоскости, то они все на этой ноде как раз и останутся. Но будут сверху обрезаны иерархией дерева. А если просто параллелен, то не имеет значения. Ну и да, нормаль тоже учитывается, хотя это и не обязательно.

Только вот причём тут вертексы-то вообще? Мы когда строим дерево вертексами не опирируем, только плоскостями.

Цитата:
FiEctro писал:
мы ей кнопок на стул положили, а она даже не почувствовала

Интересный опыт.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 01-11-2024 в 15:28:

Цитата:
Дядя Миша писал:
Погоди постой, ты меня не путай. Если речь про бинарный поиск, то все числа в массиве должны быть уникальные. Нельзя чтобы в массиве было две пятёрки, очевидно же. Иначе бинарный поиск сломается.


Тогда смысл от такого поиска ?

Цитата:
Дядя Миша писал:
Параллельно или лежит прям на ней? Это важно.


На ней.

Цитата:
Дядя Миша писал:
Только вот причём тут вертексы-то вообще? Мы когда строим дерево вертексами не опирируем, только плоскостями.


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

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


Отправлено Crystallize 02-11-2024 в 01:31:

Цитата:
FiEctro писал:
Что если 1 вертекс полигона лежит на другой стороне плоскости?

как это вообще


Отправлено ZGreen 02-11-2024 в 03:46:

Цитата:
FiEctro писал:
как определить по какую сторону лежит пересекающая если она бесконечная?

Пересекающая, по какую-то сторону? Тут нет ли опечатки?


Отправлено Дядя Миша 02-11-2024 в 05:18:

Цитата:
FiEctro писал:
Тогда смысл от такого поиска

У тебя в уровне все полигоны уникальные. Иначе бы они схлопнулись в один треугольник.

Цитата:
FiEctro писал:
На ней.

ну значит будет лежать на этой ноде.

Цитата:
FiEctro писал:
я всегда считал что они используются просто как условие чтобы отфильтровать лишние полигоны

Всмысле отфильтровать. Фильтрация это идеальный случай, когда полигоны либо справа либо слева (ну условно). А если пересекает? Надо разрезать полигоны. Подсказка: от того что ты порежешь полигоны, их плоскости не поменяются.

Цитата:
FiEctro писал:
как определить по какую сторону лежит пересекающая если она бесконечная?

Да элементарно. Для построения дерева используются только позитивные плоскости, вот как раз чтобы не запутаться где у тебя лево, а где право.
То есть у полигона может быть какая угодно плоскость, но функция, которая генерирует плоскости по трём точкам создаёт ДВЕ плоскости, позитивную и негативную. И располагает их в массиве таким образом, чтобы позитивная усихда была чётной. Это важный момент, про который обычно никто не упоминает почему-то.

Добавлено 02-11-2024 в 08:18:

Ну и да, плоскость плоскостью разрезать невозможно, очевидно. Поэтому из плоскости делают один супер-гигантский полигон топ-1 в мире.
Он размерами со всю карту и даже в 1.74 раза больше чем вся карта.
И вот его уже мы обрезаем плоскостью. Шесть раз обрезали и вот у нас вместо супер-гигантских полигонов получился наш брашевый кубег.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 02-11-2024 в 08:04:

Цитата:
Crystallize писал:
как это вообще


https://alxgk.ru/uploader/img/2d821af0743406d1de12912279c823d0.jpg
Вот собственно варианты которые я описывал. И если что даже не я это придумал. Вариант E описывает пересечение с плоским полигоном условно бесконечной высоты и ширины.

D - полигон лежит на плоскости.

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


Для чего нужно 2 плоскости? И по какому критерию она отбирает какая будет четной? Я думал там просто нормаль.

Цитата:
Дядя Миша писал:
Это важный момент, про который обычно никто не упоминает почему-то.


Там полно важных моментов которые нигде не расписаны.

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


Отправлено Дядя Миша 02-11-2024 в 13:05:

Цитата:
FiEctro писал:
Для чего нужно 2 плоскости?

ну я же написал - одна чётная, другая нечётная. Но у реальных полигонов плоскость-то не всегда чётная, вот в чём штука. А мы их храним в едином массиве. Как же нам по быстрому отличить чётную плоскость от нечётной? Ну вот так - по номеру. Чётный номер = чётная плоскость.
Таким образом planenum & ~1 нам всегда вернёт чётную.

По умолчанию позитивной плоскостью считается та, которая используется для разбиения дерева, но. Если она аксиальная и нормаль меньше нуля, то свапается. Для неаксиальной этого не делается, там всё равно чёрт ногу сломит какую считать позитивной, а какую нет.

Цитата:
FiEctro писал:
Там полно важных моментов которые нигде не расписаны.

Есть такое.

Псевдокод:
C++ Source Code:
1
AddNewPlane()
2
{
3
  array[i+0] = plane; // позитивная чётная
4
  array[i+1] = -plane; // негативная нечётная
5
 
6
  if( plane.axial && plane.normal[plane.axis] < 0 )
7
  {
8
    swap( array[i+0], array[i+1] );
9
  }
10
}

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 08-11-2024 в 16:56:

Потихоньку заменяю все тяжелые вызовы в Шоте на интринсинки. С одним моментом - функции написанные на самом Шоте я тоже оставляю. Т.е. они работают не хуже движковых, просто медленные.
Когда у Шота появится JIT или даже AOT к ним можно будет вернуться.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 08-11-2024 в 17:18:

Мне кажется в коде будет полезна какая-то тулза x.WasUpdated(), UpdateAmountOf(x) которая обнаруживает изменение переменной между кадрами, ну и насколько изменилось. А то я чето часто вверху функции пишу static oldx а внизу oldx=x.


Отправлено FiEctro 08-11-2024 в 18:00:

Цитата:
Дядя Миша писал:
Потихоньку заменяю все тяжелые вызовы в Шоте на интринсинки. С одним моментом - функции написанные на самом Шоте я тоже оставляю. Т.е. они работают не хуже движковых, просто медленные.
Когда у Шота появится JIT или даже AOT к ним можно будет вернуться.


Что значат все эти страшные слова ?

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


Отправлено Дядя Миша 11-11-2024 в 14:12:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 18-11-2024 в 11:20:

Дядя Миша
Кстати по поводу туманчика, что думаешь насчёт тумана который плавно переходит в скайбокс?
https://camo.githubusercontent.com/...13238302e706e67

https://github.com/keijiro/KinoFog

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


Отправлено Дядя Миша 18-11-2024 в 12:24:

Цитата:
FiEctro писал:
Кстати по поводу туманчика, что думаешь насчёт тумана который плавно переходит в скайбокс?

Я же вам в демке сталкера именно такой туман и демонстрировал
Он и в оригинале такой.

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 18-11-2024 в 12:32:

Дядя Миша
Народная демка с демонстрацией возможностей движка на каком-нибудь красивом уровне-то будет?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено FiEctro 18-11-2024 в 12:52:

Дядя Миша
Хм, наверное просто сам уровень обрезается раньше чтобы это заметить. Запустил лост вилейдж, вроде да, похоже.

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


Отправлено FiEctro 19-11-2024 в 12:58:



120 игроков на карте в хл2

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


Отправлено FiEctro 20-11-2024 в 06:13:

Цитата:
Дядя Миша писал:
Я же вам в демке сталкера именно такой туман и демонстрировал
Он и в оригинале такой.


Ещё кстати такой момент, в Юнити есть что то вроде trigger_volume который позволяет настраивать настройки окружения для определенной области на карте, например чтобы уменьшить туман когда входим в помещение, или поменять скайбокс в другой части уровня, изменить дальность прорисовки и т.д.. Вроде ещё в спирите на хл1 что то подобное было. Есть ли такое в ксашмоде?

Кстати в шейдерах у тебя есть что то вроде ноды Time (время синхронизированное с сервером)? Sin? И т.д.? Логику смены дня и ночи можно было бы вынести полностью в шейдер, вместо медленных конструкций из if, а слои отключать умножением на 0 или 1. Я думаю это бы дало ещё фпс которых так не хватает на слабых машинах. Всеравно там везде смешивание умножением по сути.

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


Отправлено Дядя Миша 20-11-2024 в 08:23:

Цитата:
-=ZhekA=- писал:
Народная демка с демонстрацией возможностей движка на каком-нибудь красивом уровне-то будет?

Народная пока что не планируется. Для народа будут игры на движке.
А это для разработчиков.

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

Есть но не так, как ты это описал. Можно налепить несколько скайбоксов, поскольку скайбокс привязан к материалу. Можно и туман уменьшать, но в новом ксаше туман можно привязывать к помещениям безо всяких хитростей.
Я же показывал туман под водичкой на канале. Это работает и для любой другой комнаты.

Цитата:
FiEctro писал:
Кстати в шейдерах у тебя есть что то вроде ноды Time

Разумеется есть. В документации описано.

Цитата:
FiEctro писал:
Логику смены дня и ночи можно было бы вынести полностью в шейдер, вместо медленных конструкций из if, а слои отключать умножением на 0 или 1

Логика смены дня и ночи - это захардкоденая таблица значений, из которой интерполируются два соседа. Выносить такое в шейдер никакого смысла наоборот не вижу, тем более что туман влияет не только на дальность прорисовки но и на зоркость монстров, например.
А условий там и вовсе нету. А чтобы переключать скайбоксы - это нужны биндлесс-текстуры и GL 4.6 минимум. Причём визуально оно останется таким же, быстрее работать тоже не станет, зато системные требования резко вырастут.
Поздравляю, ты наконец-то научился задирать системные требования на ровном месте.

Добавлено 20-11-2024 в 11:22:

Смена дня и ночи написана на Шоте, исходники от которого я так же выложил, можешь посмотреть. src_user\SampleProgs\world.shot там всё.

Добавлено 20-11-2024 в 11:23:

А что касается тормозов на Интел - так в старой демке ещё не было инстансед-мешей, вот оно и тормозило.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 20-11-2024 в 09:43:

Цитата:
Дядя Миша писал:
А что касается тормозов на Интел - так в старой демке ещё не было инстансед-мешей, вот оно и тормозило.


Я выкладывал в Сеамлес реалм шейдер который практически удваивает фпс на интелах. Более мощных видяхах он тоже даёт прирост, но уже куда более скромный.

Цитата:
Дядя Миша писал:
А чтобы переключать скайбоксы - это нужны биндлесс-текстуры и GL 4.6 минимум. Причём визуально оно останется таким же, быстрее работать тоже не станет, зато системные требования резко вырастут.
Поздравляю, ты наконец-то научился задирать системные требования на ровном месте.


Как то ты глубоко капнул. Впрочем за OGL не шарю, возможно и правда он так убого работает.

Добавлено 20-11-2024 в 12:43:

Цитата:
Дядя Миша писал:
А условий там и вовсе нету.


В static_lighting.h их полно. И мне не очень понятно зачем.

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


Отправлено Дядя Миша 20-11-2024 в 09:44:

Цитата:
FiEctro писал:
Я выкладывал в Сеамлес реалм шейдер который практически удваивает фпс на интелах

я без понятия во что там разворачиваются тернарные операции и почему.
Но может идёт умножение на что-то вроде lessThan.
На нормальных вендорах понятно, там без разницы.

Цитата:
FiEctro писал:
Впрочем за OGL не шарю, возможно и правда он так убого работает.

"Убого" работает как раз таки DX, где вызов Draw Indexed Primitive изначально вызывал синхронизацию вплоть до нулевого кольца операционной системы. С понятными временными задержками.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 20-11-2024 в 09:52:

Цитата:
Дядя Миша писал:
"Убого" работает как раз таки DX, где вызов Draw Indexed Primitive изначально вызывал синхронизацию вплоть до нулевого кольца операционной системы. С понятными временными задержками.


Не встречал.

Цитата:
Дядя Миша писал:
На нормальных вендорах понятно, там без разницы.


Ну почему же, как я писал ранее прирост тоже есть небольшой в 200 фпс, но не везде. Возможно это от шейдера ландшафта зависит, я не разобрался с ним покачто.

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


Отправлено (_-=ZhekA=-_) 21-11-2024 в 12:06:

Цитата:
Дядя Миша писал:
Народная пока что не планируется.

На новый год порадовал бы народ красивой демкой
Цитата:
Дядя Миша писал:
Для народа будут игры на движке.

А когда они будут?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Crystallize 22-11-2024 в 06:50:

Дядя Миша А у тебя можно будет трейсы кидать и чтобы модельки статичные трейсились?
У тебя будет 4 хулла как в халфе или как вообще с этим ситуация?


Отправлено Дядя Миша 22-11-2024 в 12:56:

Crystallize произвольная геометрия, да. Хуллы тоже есть, но для AI-сетки, с физикой они не связаны.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 22-11-2024 в 15:55:

Дядя Миша а можно для хайполи геометрии построить грубый хулл с детализацией первокваки? Должно быть удобно для внешних камер или ориентации каких-нибудь дронов летающих.


Отправлено Дядя Миша 23-11-2024 в 08:06:

Грубый хулл нужен только для твёрдых тел, во всех остальных случаях можно использовать точный.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 23-11-2024 в 11:48:

Дядя Миша
А переключать и создавать кодом их можно? Ну вот допустим мне капсула нужна определенного размера, а в отдельном случае эта капсула должна быть меньше, ну типа как игрок приседает.

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


Отправлено Crystallize 23-11-2024 в 13:06:

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

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


Отправлено Дядя Миша 24-11-2024 в 08:00:

Цитата:
FiEctro писал:
А переключать и создавать кодом их можно? Ну вот допустим мне капсула нужна определенного размера, а в отдельном случае эта капсула должна быть меньше, ну типа как игрок приседает.

да, конечно. И скейлить тоже будет можно налету.

Цитата:
Crystallize писал:
Помнишь дорожку которая ведет в третий эпизод в кваке, туда идешь и там пол и ворота в виде зигзагов.

ну там клипом обнесено

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 28-11-2024 в 09:58:

И так товарищи, спустя всего-навсего 15 лет ко мне наконец-то пришло понимание, почему связка из матрицы 3х3 + позиция - удобнее, нежели единая матрица 4х3. Вот как раз когда с физикой плотно завязался - так сразу и понял. А до этого было как-то неочевидно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 28-11-2024 в 10:47:

Цитата:
Дядя Миша писал:
И так товарищи, спустя всего-навсего 15 лет ко мне наконец-то пришло понимание, почему связка из матрицы 3х3 + позиция - удобнее, нежели единая матрица 4х3. Вот как раз когда с физикой плотно завязался - так сразу и понял. А до этого было как-то неочевидно.



Так почему же?

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


Отправлено Дядя Миша 28-11-2024 в 14:47:

Из-за удобства.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 29-11-2024 в 10:37:

Цитата:
Дядя Миша писал:
И так товарищи, спустя всего-навсего 15 лет ко мне наконец-то пришло понимание, почему связка из матрицы 3х3 + позиция - удобнее, нежели единая матрица 4х3. Вот как раз когда с физикой плотно завязался - так сразу и понял. А до этого было как-то неочевидно.

Я кстати нигде кроме ксаша не видел, чтоб матрицы были неквадратными. Зато в idTech 4 видел матрицы 5x5 и даже 6x6. Охренел с такого нежданчика как-то.


Отправлено Дядя Миша 29-11-2024 в 13:26:

Та это эигеновские матрицы, для всяких линейных солверов.

Добавлено 29-11-2024 в 16:26:

Цитата:
SNMetamorph писал:
Я кстати нигде кроме ксаша не видел, чтоб матрицы были неквадратными

Ну а в халфе они какие по твоему?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 01-12-2024 в 08:01:

24 декабря возможен какой-то релиз?


Отправлено Дядя Миша 01-12-2024 в 08:40:

Crystallize "какой-то" релиз я могу сделать хоть завтра. Без документации, и с полу-рабочим ксаш-модом. Ну и зачем вам такое видеть?

Вам что, релиза Nau-Engine было мало в таком стиле?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 20-12-2024 в 15:40:

Наконец-то дошли руки до халфовских монстров. Мне предстоит объединить код оригинального планировщика из халфы (реализованный на Шоте) с моей оригинальной системой поиска пути. В теории должны получиться очень умные монстры, но посмотрим.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 21-12-2024 в 16:28:

Навскидку могу сказать, что вероятно, будучи обеспеченный мощной системой поиска пути, которая независит от нодов, расставленных дизайнером (или же наоборот - не расставленных\расставленных неверно),
AI должен заработать лучше чем в халфе.

Правда мне сперва надо будет подружить эти две системы. К примеру в той же халфе монстр хранит всего-навсего 8 ближайших точек маршрута, причём расстояние между точками может быть произвольным. Очевидно это не ложится на мою систему, которая просто заспамит этот путь коротеньким отрезком, юнитов на 128, не больше.
Возможно надо будет сделать повторную симплификацию пути, вернув только ключевые точки маршрута.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 30-12-2024 в 14:49:

Цитата:
Crystallize писал:
Помнишь дорожку которая ведет в третий эпизод в кваке, туда идешь и там пол и ворота в виде зигзагов.

Цитата:
Дядя Миша писал:
ну там клипом обнесено

Причём трейс проходит его насквозь Т_Т


Отправлено Дядя Миша 30-12-2024 в 15:15:

Цитата:
Crystallize писал:
Причём трейс проходит его насквозь Т_Т

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 30-12-2024 в 17:09:

Дядя Миша А какой ещё бывает? о_О


Отправлено Дядя Миша 30-12-2024 в 20:09:

Цитата:
Crystallize писал:
А какой ещё бывает? о_О

Ббоксом, например. А ты думаешь, как игрок двигается.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 31-01-2025 в 20:15:

Давно ничего не писал. Ну зато вот вспомнил про Сферические Гауссовы Лайтмапы и решил с ними разобраться на досуге.

https://mynameismjp.wordpress.com/2...epresentations/

Ссылка на цикл статей. Это от авторов имплементации в Order 1884.
Наверное это заверщающая техника, которая меня интерисовала в лайтмаппинге. Всё остальное я там в принципе уже попробовал и реализовал.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 02-02-2025 в 21:17:

Ну чтоже, вот мы с вами потихоньку и добрались к очередному моменту принятия решений. Напомню вам как долго и мучительно я создавал свою систему материалов, размышляя над ней почти четыре года. Но в итоге создал и остался доволен. Следующая задачка попроще, но тоже ответственная. Поскольку я портирую ксаш-мод на XashNT, естественным образом появилась потребность в говорящих монстрах и сентенциях.
Новому ксашу достался звуковой движок в наследство от старого, это единственная вещь, которую я вообще не трогал с 2019-го года. Единственное что сделал - это поддержку ogg-формата.
Ну вот теперь пришла пора его отрефакторить. Сам рефакторинг видится мне довольно прозрачным, особых вопросов не вызывает.
Но надо определиться с системой описания звуковых материалов.
Да, звуки - это не рендеринг, они больше зависят от окружения, то есть какой-то фундаментальной привязки к текстовым настройкам тут как правило нет. Но тем не менее, какая-то система должна быть.
И вот вопрос - какая?

Добавлено 03-02-2025 в 00:05:

Поизучал уже существующие решения по быстрому и минимальное понимание появилось. В Doom3, как вы знаете, были так называемые звуковые шейдеры - по аналогии с обычными, где указаны текстуры.
Скорее всего их реализовали просто для консистенции. Потому что эта конструкция настолько надуманная и неудобная, что они даже толком параметры для нее придумать не смогли.
Звук в игре - это такая штука, которая привязана к конкретной точке.
А точка может перемещаться. И звук должен перемещаться вместе с ней.
Это поведение по умолчанию и не существует ситуации, когда бы нам потребовалось его изменить. Либо звук стоит на месте, либо движется вместе с объектом. Два варианта. Очевидно никакие материалы для описания этого не нужны.
Пойдем дальше. Так-то какие-то скрипты для звуков нужны, безусловно, но как вы знаете, тот простейший набор параметров, предложенный ещё Кармаком в ку1, в подавляющем большинстве случаев оказался достаточным.
Вспомним что там у нас было?

Канал - номер канала. Ну тут понятно, либо чтобы затереть один звук другим, либо чтобы проиграть несколько звуков вместе.
Затухание - дистанция до звука, на которой его ещё будет слышно. В принципе там есть три константы. Амбиентный звук, откуда-то издалека. Рычание монстров и типичное затухание, разговор или перестрелка.
Громкость - тут требуется пояснение. В норме этим параметром никто не пользуется. Его используют если попался слишком громкий звук, а под рукой нет редактора, чтобы нормализовать. Обратите внимание, что если звук слишком тихий, то вам этот параметр никак не поможет, он в норме стоит на максимуме. Valve добавила в этот набор ещё один параметр - pitch. Стало возможным динамически менять тон проигрываемого звука.
Используется в двух случаях - либо для иммитации раскрутки\останова func_rotating, либо для разнообразия голосов монстров. Хотя для голосов наверное параметров могло бы быть и поболее. Но не суть.

При портировании ксаш-мода на HeadShot я для удобства завернул функцию проигрывания звука прямо в базовый класс энтити и назначил аргументам дефолтные параметры

C++ Source Code:
void	EmitSound( int channel, const string sample, float volume = VOL_NORM, float attn = ATTN_NORM, int pitch = PITCH_NORM );

Вот примерно так. То есть канал используется регулярно, чтобы звуки друг-друга не перезатирали или наоборот - перезатирали. Путь к звуку, естественно тоже. А всё остальное стоит по дефолту, оно особо и не нужно. Ну для монстров будет рандом-питч. Возможно ещё для выстрелов.
Теперь вопрос - где и главное зачем в такой стройной системе ещё и какие-то там текстовые скрипты и описания материалов? Правильно, они тут и не нужны.

Добавлено 03-02-2025 в 00:17:

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

То что у меня есть на данный момент реализовано в виде пресловутой поименованной секции фигурных скобок, такого плана

C++ Source Code:
1
soundDef "tele_sound"
2
{
3
  sound		"misc/r_tele1.wav"
4
  sound		"misc/r_tele2.wav"
5
  sound		"misc/r_tele3.wav"
6
  sound		"misc/r_tele4.wav"
7
  sound		"misc/r_tele5.wav"
8
  volume		"1.0"
9
  channel		"voice"
10
  attenuation	"0.8"
11
  pitch		"100"
12
}


Что мы здесь видим? Несколько подряд объявленных звуков (значит будет рандомный выбор между ними), громкость, канал, затухание, питч.
То есть ровно тот же набор параметров, о котором я писал выше при вызове функции PlaySound. Но вы меня спросите, как и зачем он здесь оказался? Отвечаю - это механизм для воспроизведения эффектов.

Эффекты в новом ксаше, это нечто вроде темпэнтитей. На данный момент он умеет вызывать две функции: ParticleEffect и PlaySound.
Первый понятно - там параметры партиклей. Эффект телепорта, эффект взрыва, возможно даже луч из партиклей или эффект funnel (когда партиклы затягиваются в одну точку). В принципе партиклям можно назначать анимированные текстуры, то есть они по сути превращаются в спрайты и получается полноценная замена темп-энтитям.
Ну а звуки нужны для звукового сопровождения этих эффектов, естественно. Разумеется я мог бы не делать никаких описаний скриптовых звуков, но рассудил, что так будет удобнее для всех. Таким образом программист из игрового кода вызывает функцию PlayEffect с определённым именем, та в свою очередь вызывает например вот такой скрипт
C++ Source Code:
1
TE_TELEPORT
2
{
3
  ParticleEffect( "tele_splash" );
4
  PlaySound( "tele_sound" );
5
}

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 02-02-2025 в 21:44:

Зачем писать каждый раз:

sound "misc/r_tele1.wav"
sound "misc/r_tele2.wav"
sound "misc/r_tele3.wav"
sound "misc/r_tele4.wav"
sound "misc/r_tele5.wav"

Когда можно написать что то вроде:

sequence "misc/r_tele"
type "wav"

Ну или что нить в духе: sound "misc/r_tele[].wav" ?

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


Отправлено Дядя Миша 02-02-2025 в 21:48:

Тем не менее, один момент, для которого нам всё-таки нужны текстовые описания у нас есть, это как вы догадались - сентенции.

У вальвы сентенции описаны довольно лаконично, но не особо понятно
Пример

C++ Source Code:
1
HG_COVER0 hgrunt/clik (t30) take! cover!(t0) clik
2
HG_COVER1 hgrunt/clik (t45) (e75) I!(e80) need!(e80) suppressing!(t20) fire!(t10) clik
3
HG_COVER2 hgrunt/clik (t45) we! need! backup!(t10) clik
4
HG_COVER3 hgrunt/clik(p120) (t40) two!(e75) hot!(e80) here! clik
5
HG_COVER4 hgrunt/clik(p110) (t30) fall!(e80) out! clik clik
6
HG_COVER5 hgrunt/clik(p120) (t20) clear! this! area! clik
7
HG_COVER6 hgrunt/clik (t40) god! damn! clik
8
HG_COVER7 hgrunt/clik (t40) cover!(e75) fire! clik

Во первых отметим тот факт, что сентенции с похожими именами образуют как бы неявную группу сентенций, которая может проигрываться рандомным образом. Правда документации нет и о подобных вещах приходится узнавать либо из кода, либо из экспериментов. Дальше обратите внимание, идёт путь к папке - hgrunt/. Эта штука работает по типу команды cd.
Т.е. сменив директорию единожды нам уже нет нужды писать этот путь всякий раз. Вроде бы удобно, но абсолютно не наглядно и неочевидно.

Опять-таки расширений звуков нет. Есть параметры в скобках.
Вопрос на засыпку - параметр в скобках применяется к уже объявленному звуку или к следующему? Снова неочевидно. И что значит восклицательный знак? Впрочем со знаком как раз проблем меньше всего - достаточно зайти в папку hgrunt, чтобы увидеть что там возгласы записаны и сохранены как раз в двух вариантах. С восклицательным знаком и без такового. То есть с разной экспрессией. Кое-где попадаются сентенции без пути к папке. Здесь по умолчанию используется захардкоденная папка vox. Тоже об этом прочитать негде. Только догадаться.
Просматривая параметры в круглых скобках можно наткнуться на таковые перед самым первым путём к звуку, из чего становится понятно - сначала параметр, потом звук. Так же неясности добавляют встречающиеся точки и запятые. Это сейчас мы знаем, что они означают автоподстановку пустых файлов, которые по смыслу соответствуют длине пауз, для запятой и точки соответственно. Причём наличие точки как бы уже предполагает что расширение файла мы указать не сможем - это будет понятно неправильно.
Хорошо, теперь переходим к однобуквенным параметрам: Их может быть всего пять штук:
v - громкость в процентах
p - pitch в процентах
s - смещение от начала звукового файла (тоже в процентах)
e - смещение от конца звукового файла (тоже в процентах)
t - тайм компрессия. Питч не меняется, но звук проигрывается быстрее.
Отсутствует в Xash3D и Source. Но есть в GoldSrc. Но только для 8-битных сэмплов. Величина тоже указывается в процентах.

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

А теперь, товарищи, скажите мне, какие у вас соображения, по поводу всего вышенаписанного? Кратко, невнятно, но когда разберёшься - удобно. Но всё захардкодено, не поменять ни добавить. Хотя тут полноценная секвенция проигрывания. То есть мы вызываем даже не сентенцию - группу сентенций, выбирается одна из и дальше следует командам - поменять громкость, обрезать конец слова, ну итд.
Я полагаю что здесь неплохая точка приложения усилий для моей системы автозамены, которая используется для материалов рендринга.
Здесь тоже можно будет переопределить все эти точки и прочие запятые, чтобы писать ещё более лаконично, но при этом все переопределения будут у пользователя перед глазами. Как и в случае с системой материалов. Очевидно такой механизм вполне имеет право на жизнь.
Ну а некоторая изыбточность скомпенсируется наглядностью.
Разработка низкоуровневого синтаксиса для описания сентенций будет позже, когда я уже непосредственно приступлю к рефакторингу звукового движка. Ну а пока что - мысли по теме. Как когда-то давно, когда и Ксаш ешё не был написан, а я больше теоретизировал как оно будет
Может быть кто-то скучает по тем временам? Ну вот.
Продолжение следует...

Добавлено 03-02-2025 в 00:48:

Цитата:
FiEctro писал:
Когда можно написать что то вроде:

sequence "misc/r_tele"
type "wav"

Ну или что нить в духе: sound "misc/r_tele[].wav" ?

Вот как раз в этом посте и находится ответ на твой вопрос.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 03-02-2025 в 07:38:

В плане звуков не хватает наложения на них каких-либо DSP-эффектов, когда не хочется применять глобальный room_type, но на звук надо навесить.
Еще не хватает сдавливания верхних частот, когда звук находится за глухой стенкой.
То же самое касается, когда звук находится на дистанции (но, если добавлять такой параметр, ему следует быть опциональным). Я у себя реализовал нечто подобное путем смешения заранее заготовленных звуков, сдавленного и обычного в зависимости от дистанции. А вот за стенкой уже не выйдет сделать.

Ах да, было бы неплохо еще иметь крутилку для high pass и low pass, чтобы можно было их крутить как pitch и volume.

__________________
Мой мод на Xash


Отправлено FiEctro 03-02-2025 в 07:55:

Цитата:
Дядя Миша писал:
А теперь, товарищи, скажите мне, какие у вас соображения, по поводу всего вышенаписанного?


Я здесь вижу одну большую проблему. Что если у игры несколько озвучек на разных языках?

Цитата:
Дядя Миша писал:
Вот как раз в этом посте и находится ответ на твой вопрос.


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

И сделать общий конфиг для всех игровых текстов который будет ссылать на эти ссылки.

Ещё как идея сделать физический блок для материала который содержит динамическое трение, статическое трение и боунс (прыгучесть).

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


Отправлено (_-=ZhekA=-_) 03-02-2025 в 08:52:

Цитата:
FiEctro писал:
Я здесь вижу одну большую проблему. Что если у игры несколько озвучек на разных языках?

Смена языка это не только озвучка НПС, но и текстуры, декали, модели, текст

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 03-02-2025 в 10:04:

Цитата:
FiEctro писал:
Я здесь вижу одну большую проблему. Что если у игры несколько озвучек на разных языках?

Проще локализованный пак подключить. Где будут и звуки и текстуры и всё прочее на другом языке.

Цитата:
Aynekko писал:
В плане звуков не хватает наложения на них каких-либо DSP-эффектов

Не проще ли запечь этот эффект прямо в звук?

Цитата:
Aynekko писал:
Еще не хватает сдавливания верхних частот, когда звук находится за глухой стенкой.

Окклюзия, да. Это можно сделать.

Цитата:
FiEctro писал:
Ещё как идея сделать физический блок для материала который содержит динамическое трение, статическое трение и боунс (прыгучесть).

Это средствами Шота реализуется.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 03-02-2025 в 11:42:

Цитата:
Дядя Миша писал:
Не проще ли запечь этот эффект прямо в звук?

Как разовая акция - проще, а так, думаю, движку не составит труда воспроизвести звук с нужным эффектом по какому-то флагу. Это и удобно будет.

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-02-2025 в 14:32:

Цитата:
Aynekko писал:
движку не составит труда воспроизвести звук с нужным эффектом по какому-то флагу

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 03-02-2025 в 15:01:

Цитата:
Дядя Миша писал:
Ну это как если бы ты предлагал всё освещение запечь прямо на текстурах.

Я думаю, ближайшая аналогия - сделать func_wall с rendermode Texture и renderamt 100, вместо того чтобы запечь альфу 100 сразу в текстуру.

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-02-2025 в 16:14:

Цитата:
XaeroX писал:
сделать func_wall с rendermode Texture и renderamt 100, вместо того чтобы запечь альфу 100 сразу в текстуру

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 03-02-2025 в 16:35:

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

__________________

xaerox on Vivino


Отправлено FiEctro 03-02-2025 в 17:19:

Цитата:
Дядя Миша писал:
Проще локализованный пак подключить. Где будут и звуки и текстуры и всё прочее на другом языке.


Это решение из нулевых, сейчас мало кто так делает. Или ты предлагаешь издателю писать инструкции как ставить пак с другим языком ?

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


Отправлено Crystallize 04-02-2025 в 02:35:

FiEctro а как делают сейчас?


Отправлено FiEctro 04-02-2025 в 05:58:

Crystallize
Обычно есть некоторая очень простая система. Например .json или .txt файлик со всеми репликами и надписями. Например lang_ru.txt где хранится ключ и значение для конкретной надписи, типа "menu" "игровое меню", в халфе уже что то подобное есть вроде для кредитсов. Через меню самой игры можно выбирать язык, где будет подгружаться нужный lang_**.txt
Естественно самому разработчику не надо всё хардкодить, зашивать текст внутрь игры, а только дать ссылку на нужный ключ, а игра уже сама подтянет нужную надпись.

А вот то что предлагает Дядя Миша это патчи, которые вечно тащат за собой вирусы и яндекс браузеры.

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


Отправлено (_-=ZhekA=-_) 04-02-2025 в 06:27:

Цитата:
FiEctro писал:
А вот то что предлагает Дядя Миша это патчи, которые вечно тащат за собой вирусы и яндекс браузеры.

Почему же? Вот, например, в киберпанке и много где еще тоже используются языковые паки, очень удобно просто удалил не нужные языковые паки и вася кот )

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Crystallize 04-02-2025 в 06:34:

FiEctro Так ты определись, либо у тебя издатель распространяет игру в Стиме с автообновлением, либо это фан-игра на которую пользователи сами скачивают самодельные локализации.

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


Отправлено FiEctro 04-02-2025 в 07:20:

Цитата:
Crystallize писал:
FiEctro Так ты определись, либо у тебя издатель распространяет игру в Стиме с автообновлением, либо это фан-игра на которую пользователи сами скачивают самодельные локализации.


Одно другому не мешает. Да и почему фан игра по твоему мнению должна быть обязательно кривой и не гибкой?

Цитата:
Crystallize писал:
Вообще эта система с файлами lang по сути говорит нам что мы обречены не иметь хороших удобных вещей потому что они также удобны для мошенников. Такой себе менталитет.



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

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


Отправлено ZGreen 04-02-2025 в 07:34:

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

Учитывая, что даже в демке квейка можно было сделать локализацию (условно, не помню в точности как в конкретной демке хранятся тексты) отдельным паком без перезаписи оригинальных файлов, не могу взять в толк за что топит товарищ FiEctro. Почему файлы должны быть перезаписаны?

Добавлено 04-02-2025 в 14:34:

Я же лично делал пак текстур для этой демки и он ничего не перезаписывает.


Отправлено Crystallize 04-02-2025 в 07:38:

Цитата:
FiEctro писал:
Каких вещей? Яндекс браузер?

нет, паки по типу ку3 где весь контент мода в одном файле. ты же против них выступаешь, как я понял.

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

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


Отправлено (_-=ZhekA=-_) 04-02-2025 в 07:41:

Цитата:
Crystallize писал:
Ну это как мутаторы в Анриле

Что за мутаторы?

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 04-02-2025 в 07:45:

Цитата:
FiEctro писал:
а только дать ссылку на нужный ключ, а игра уже сама подтянет нужную надпись.

И что мешает игре подтянуть нужный пак, вместо текстового файлика?

Цитата:
(_-=ZhekA=-_) писал:
Что за мутаторы?

в UT 99 можно было самостоятельно смешивать разные режимы игры. Например CTF и Last Man Standing, подключать разрывные пули и Insta Gib, ну итд.

Добавлено 04-02-2025 в 10:45:

Цитата:
ZGreen писал:
не могу взять в толк за что топит товарищ FiEctro

Он любит спорить просто ради спора.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-02-2025 в 08:48:

Цитата:
Crystallize писал:
нет, паки по типу ку3 где весь контент мода в одном файле. ты же против них выступаешь, как я понял.


Я не очень понимаю логики паковать контент чтобы заработала локализация.

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


Отправлено Дядя Миша 04-02-2025 в 08:56:

Цитата:
FiEctro писал:
Я не очень понимаю логики паковать контент чтобы заработала локализация.

ну вот у тебя два пака. lang_ru и lang_en. В них файлы с одинаковыми именами. На уровне файловой системы подобное невозможно. А в файловой системе самого движка - очень даже возможно. Вот движок и выбирает - какой пак грузить, с какими ресурсами. И заморочка с языком снимается автоматически. Ты ведь ещё учти, что локализация может менять не только текстовый файлик. К примеру в той же халфе для немецкой локализации вместо солдат были роботы. А вместо крови из них падали шестерёнки. И когда они погибали, то просто садились на пол и мотали головой. Вот такая локализация.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-02-2025 в 11:10:

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


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

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


Отправлено Дядя Миша 04-02-2025 в 12:42:

Цитата:
FiEctro писал:
Как есть паки, так есть и рутовая папка. Например таже valve_russian

паки используются чтобы уменьшить время доступа к файлу. Это время константное и не зависит от типа используемого жесткого диска, составляет порядка 1 милисекунды. То есть чтобы просто открыть 1000 файлов с диска понадобится целая секунда. А если из пака, то гораздо быстрее, там ведь реально открывается только один физический файл.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 04-02-2025 в 12:57:

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


Не знаю, я вот вады парсил. Открывал халфлайф.вад и собирал текстуры из него, там далеко даже не секунда.

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


Отправлено Unit 04-02-2025 в 13:43:

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


Это получается, что паки писали чтобы сэкономить целую секунду при загрузке игры, при условии, что загрузка потребует аж 1000 файлов. Мне казалось, что они нужны чтобы контент быстрее копировался с носителей/сети.


Отправлено a1batross 04-02-2025 в 16:30:

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


Ещё и поиск файлов по паку гораздо проще, без технических ограничений самой файловой системы. Например, если файловая система регистрозависимая, strcasecmp по паку сильно проще, чем полная перестройка всего пути до файла, со сканироваем каждого каталога.

Ну и потом паки это прямой путь к своей собственной виртуальной ФС, как раз как уже сказано для локализации, но ещё и для DLC, обновлений...

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 05-02-2025 в 06:30:

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

А при копировании файлы не открываются? Та же самая ситуация.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 16-02-2025 в 07:03:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено (_-=ZhekA=-_) 16-02-2025 в 07:33:

А для простых смертных, что-то будет? Видео хотя бы записал, что ли, а то кроме текста в теме ничего нет (

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png


Отправлено Дядя Миша 16-02-2025 в 08:22:

(_-=ZhekA=-_) видео может пользователи запишут, выложим.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Nesx 16-02-2025 в 09:44:

А это чат для простых смертных?

__________________
Как вставить аватарку?


Отправлено Дядя Миша 22-02-2025 в 07:39:

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

Просто как бы есть вещи, которые на OpenAL воспроизвести невозможно - тот же тайм-компресс слов из сентенций. Да и настройки DSP непонятно как подбирать. То есть само по себе использование OpenAL мне мало что даст.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 25-02-2025 в 15:56:

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

Добавлено 25-02-2025 в 18:25:

Ну и собственно, мне предстоит разработать новый формат описания сентенций.

Потому что вот это

C++ Source Code:
HG_MONST0 hgrunt/clik(p110) (t50) bogies!(t0), my! sector!(t0) clik

Конечно компактно, но ничерта не понятно, что здесь вообще происходит.

Сделаю на базе уже существующего препроцессора системы материалов, но конечно с настройками для звуков.

Добавлено 25-02-2025 в 18:56:

Ну хорошо, вот тестовая раскладка для примера.
Было:
C++ Source Code:
HG_ALERT0 hgrunt/(t30) squad!, we!(e80) got!(e80) freeman!(t20 p105), clik(p110)

Стало:
C++ Source Code:
1
sentenceDef "HG_ALERT0"
2
{
3
  directory		"sound/hgrunt"
4
  timecompress	30
5
  word		squad!
6
  word		,
7
  word		we!
8
  end		80
9
  word		got!
10
  end		80
11
  word		freeman!
12
  timecompress	20
13
  pitch		105
14
  word		,
15
  word		clik
16
  pitch		110
17
}

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

В текущем виде файл сентенций занимает 50 килобайт. Если его первести в тот, что я набросал, ну наверное килобайт 300-400 займет.
То есть вариант тоже не слишком хороший, прямо скажем.

Буду думать дальше. Если у вас есть какие-то идеи - предлагайте.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 25-02-2025 в 18:09:

Цитата:
Дядя Миша писал:
Если его первести в тот, что я набросал, ну наверное килобайт 300-400 займет.
То есть вариант тоже не слишком хороший, прямо скажем.

Буду думать дальше. Если у вас есть какие-то идеи - предлагайте.

Можно использовать эмоджи


Отправлено XaeroX 25-02-2025 в 20:14:

Unit
Это шедевр!

__________________

xaerox on Vivino


Отправлено FiEctro 25-02-2025 в 22:36:

Однажды Дядя Миша поймёт что здесь нужен аниматор
Время и событие на таймлайне.

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


Отправлено XaeroX 25-02-2025 в 22:55:

FiEctro
Какой ещё аниматор? С этим справится и программист. И даже доплачивать ему не придётся.

__________________

xaerox on Vivino


Отправлено Crystallize 26-02-2025 в 02:26:

Цитата:
Дядя Миша писал:
Проблема короткого варианта ещё и в том, что решительно невозможно понять, как применяются параметры - до указанного слова или же после.
В вышеприведённой записи они присутствуют и так и эдак.

Ну сделай ты уже чтобы параметры были на той же строке что и сентенция, а разные сентенции были на разных строках.

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


Отправлено XaeroX 26-02-2025 в 02:38:

Цитата:
Crystallize писал:
Для человека с гуманитарной жилкой совершенно не очевидно

Вот скажи мне, как человек с гуманитарной жилкой - человеку с гуманитарной жилкой. Очевиден ли тебе смысл написанного текста?

ТРУД НОС КОТОМКА ПРИЗЫ КОТЕЛ СМЕТА НУДНО ВЫЛ И ЗАЛ ВСЁ

Ну должно же у человека быть хоть какое-то чутьё - хоть лингвистическое, хоть даже и пролетарское...

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-02-2025 в 05:18:

Цитата:
Unit писал:
Можно использовать эмоджи

Если бы они поддерживались каждым блокнотом, то безусловно.

Цитата:
FiEctro писал:
Однажды Дядя Миша поймёт что здесь нужен аниматор

Здесь нужен не аниматор а интуитивно считываемые спецсимволы.
Но я пока ещё не готов сказать точно.

Добавлено 26-02-2025 в 08:18:

Цитата:
Crystallize писал:
Ну сделай ты уже чтобы параметры были на той же строке что и сентенция, а разные сентенции были на разных строках.

В халфе оно так и есть. Но меня смущают вот эти параметры в скобках.
Тут без ста грамм не разобраться.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 26-02-2025 в 05:30:

XaeroX Я раза три прочитал прежде чем заподозрил что это не просто набор слов. Сначала показалось что это какая-то повесть о превозмогании "трудно, выл и лизал"


Отправлено XaeroX 26-02-2025 в 05:55:

Crystallize повесть об эмиграции. Нудный труд по вылизыванию котлов, призы в виде скидок по акциям, а потом увольнение и привет, котомка и просторы улиц с тёплыми вентиляционными решётками.

Добавлено 26-02-2025 в 00:55:

Цитата:
Дядя Миша писал:
Если бы они поддерживались каждым блокнотом, то безусловно.

А ты напиши свой редактор!

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-02-2025 в 12:26:

Цитата:
Crystallize писал:
Сначала показалось что это какая-то повесть о превозмогании "трудно, выл и лизал"

И демоны тусклых квартир цедили из ран нашу боль!
Стращали охраной порядка, лизали Луной!

Ну да ладно, прежде чем прийти к чему-то определённому в будущей системе, неплохо бы определиться с тем, что мы уже имеем и понять, нужно ли это нам.
В халфе, в системе сентенций, как вы знаете, есть ПЯТЬ параметров, обозначенных буквами:
v - громкость
p - pitch
s - начало звука
e - конец звука
t - тайм-компрессия (вырезана в сорсе)
Все параметры выражены в процентах, от 0 до 200. Т.е. максимум можно выставить 200 процентов или множитель 2.

Исследование начнём прежде всего с самых загадочных параметров s и e,
действие которых самое очевидное. И, как вы догадались, здесь проценты не могут быть больше ста.
Разберём на примере - (s50) провоцирует проиграть файл, начиная с середины и до конца. (e50) - сыграть с начала и до середины.
То есть это нечто вроде ножниц, скиссора (который в переводе те самые ножницы и есть).

Пример использования
C++ Source Code:
BA_ATTACK0 barney/openfire(e50)
BA_ATTACK1 barney/openfire(s50)

Сентенции ссылаются на один и тот же файл, только первый проигрывается до середины, а второй - с середины. То есть технически в файле как бы зашито две фразы. В принципе, в самой халфе это почти неиспользуется. Есть вот такие забавные конструкции
C++ Source Code:
please(s0 e100)

Заведомо бессмысленные то есть. Начать с нуля процентов, играть до ста процентов.
Иногда вот такое попадается
C++ Source Code:
(s5)

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

Вот такие ещё конструкции попадаются
C++ Source Code:
(s0 e100 t0)

Начать с нуля, проиграть до ста процентов, таймкомпрессия 0.
То есть сдвиг с начала практически не используется. Обрезание конечной части напротив юзается куда активнее, особенно в сентенциях грантов.

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

Есть ещё любопытное применение, на примере костюма
C++ Source Code:
HEV_D00 fvox/fuzz fuzz(p130), power_restored

Вот у нас произносится полная фраза Power restored.
А вот здесь:
C++ Source Code:
HEV_1P fvox/fuzz fuzz, power_restored(e30), ten percent
HEV_2P fvox/fuzz fuzz, power_restored(e30), fifteen percent

Обрезанная до 30 процентов, т.е. только слово Power. Переиспользование фразы. Видимо основной смысл в том, чтобы не лезть каждый раз в редактор и не плодить короткие копии. То есть небольшая оптимизация по памяти. Хотя звуки в принципе мало места занимают.

Так или иначе, в самой халфе эти фишки используются для следующих сентенций:
Гранты
Компьютер в лабораториях
Аварийные двери
HEV
Уровне-специфичные сообщения (как правило имеют составное имя из имени карты и номера сообщения).

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

Добавлено 26-02-2025 в 11:17:

Продолжаю исследование. Система на самом деле очень капризная.

Вот я составил сентенцию
C++ Source Code:
TEST hgrunt/ (p200)clik,,, (p100)clik,,, (p50)clik

Ругается, что не может загрузить файлы. Зато вот так
C++ Source Code:
TEST hgrunt/clik(p200),,, clik(p100),,, clik(p50)

Работает. Следует так же отметить, что регулировка pitch работает только в небольших пределах и преимущественно вверх. То есть pitch = 50 звучит уже довольно уродливо, не говорю уже про pitch 10. Скорее всего реальный диапазон регулировки лежит между 70 и 130. Так же отмечу, что множественные запятые парсером игнорируются почему-то.

Добавлено 26-02-2025 в 11:38:

Очень вязкая система на самом деле. Вот так:

C++ Source Code:
TEST hgrunt/heavy!(v50) heavy

Первый звук звучит на половинной громкости, а второй - на полной
А вот так
C++ Source Code:
TEST hgrunt/heavy! (v50) heavy

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

Добавлено 26-02-2025 в 12:24:

Давайте подведём некие промежуточные итоги.
Хотя вышеприведённые параметры и можно крутить на первый взгляд в широких пределах, они либо ограничены физическими размерами файла, либо частотными характеристиками звукового тракта.
То есть, к примеру сделать определённую фразу в два раза громче не факт что получится, а вот в два раза тише - можно.
Тримминг с начала сэмпла использется в одном-единственном месте.
Тримминг в конце сэмпла как правило чаще, он как бы помогает "глотать" окончание слова, добавляя экспрессии.
Громкость для экспресии фраз не используется на удивление, только для амбиентных звуков, как бы подчёркивая их удалённость. Кстати да, громкость от 0 до 100, т.е. выше ста не используется.
Питч используется более активно, от 50 до 130 примерно.
Но тут опять же, это скорее уместно для всяких компьютеров, чем для персонажей. Например для симуляции поломки техники.
Плохо то, что питч применяется фиксированно к слову и не может меняться, например, на протяжении проигрывания всей фразы плавно. Точнее говоря такой функционал есть, но в рамках ambien_generic. А вот внутри описания сентенции подобное задать невозможно.

Добавлено 26-02-2025 в 12:29:

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

Добавлено 26-02-2025 в 15:26:

Короче говоря, на примере сентенции
C++ Source Code:
HG_CHARGE0 hgrunt/clik (t40) go! recon! clik(p120)

(t40) отделённая пробелами означает дефолтный параметр, т.е. применяющаяся ко всем последующим словам и фразам.
А следующая сразу за какой-либо фразой - применяется только к ней.
Прикол в том, что нельзя прописать к примеру
C++ Source Code:
hgrunt/ (t40)

Это трактуется как ошибка. Надо писать непременно
C++ Source Code:
hgrunt/(t40)

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

1. параметры внутри круглых скобок следует отделить запятыми для наглядности, чтобы это больше было похоже на вызов функции с параметрами. Примерно так (p130, v70, e95).

2. Чтобы больше не зависеть от пробелов и не запоминать когда пробелы нужны, а когда не нужны, ввести чёткие правила расстановки:
2.1 параметры всегда пишутся после слова, к которому применяются
2.2 для обозначения дефолтных параметров используется ключевое слово default
2.3 допускается явный промежуток после указания пути к папке со звуками

Таким образом, следующая декларация
C++ Source Code:
HG_ANSWER0 hgrunt/clik(p110) (t20) uhh roger(e75) that, clik(p120) clik

Превращается вот в это
C++ Source Code:
HG_ANSWER0 hgrunt/ clik(p110) default(t20) uhh roger(e75) that, clik(p120) clik

Чуть более сложный случай. Было:
C++ Source Code:
C1A0_8 dadeda (e95) coded message for captain black, command and(s0 e100 t0) communication center(e100)

Стало:
C++ Source Code:
C1A0_8 vox/ dadeda default(e95) coded message for captain black, command and(s0, e100, t0) communication center(e100)

На что тут обратить внимание. Ну во первых в халфе была папка по умолчанию vox. Мне такой хардкод не нужен, поэтому папку следует каждый раз указывать явным образом. В вызове (s0, e100, t0) добавились запятые. Ну и ключевое слово default.
На первый взгляд изменения чисто косметические, но их важность в том, что они не оставляют пространства для разночтения.

Так же, можно попробовать заменить слово default на какой-либо спецсимвол например, поскольку это слово само по себе может потенциально путать. Этот момент я ещё обдумаю.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 27-02-2025 в 06:01:

Цитата:
Дядя Миша писал:
Здесь нужен не аниматор а интуитивно считываемые спецсимволы.
Но я пока ещё не готов сказать точно.


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

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


Отправлено Дядя Миша 03-03-2025 в 07:28:

На данный момент я сохраню совместимость. А потом посмотрим.

Добавлено сегодня в 09:59:

Пока что не стал предпринимать радикальных шагов, ограничился двумя нововведениями:

1. можно написать hgrunt/ (p110) с пробелом после слэша и это будет работать. В оригинале просто выдавало непонятную ошибку. То есть
hgrunt/(p110) эквивалентен hgrunt/ (p110). Это касается только второго токена в декларации, который задаёт рабочую папку для звуков сентенции.
Здесь изначально присутствовала неоднозначность, поскольку по логике вещей мы задаём дефолтный параметр для всей сентенции, а значит нам его надо отделить пробелом, но оригинальный парсер почему-то ругался когда мы отделяли пробелом путь к папке от параметров и вообще ничего не грузилось. Теперь оба варианта валидны.

2. внутри круглых скобок, между объявлением параметров теперь допустимо ставить запятую, пример (p110, v50, t30). Раньше так было нельзя, можно было писать только (p110 v50 t30). Теперь допустимы оба варианта. Вариант с запятой больше похож на параметры функции, а значит и более нагляден.
Старый вариант оставлен ради совместимости.

В принципе на этом пока что и всё. Более радикальные изменения вероятно будут с появлением новых возможностей в звуковом движке, например, если я перведу его на OpenAL.

Добавлено 03-03-2025 в 10:11:

Ну чтож, приступил к имплементации Core Profile. Дело это ответственное, поэтому сперва надо как следует ознакомиться с документацией:

Цитата:

Profiles define subsets of OpenGL functionality targeted to specific application domains. OpenGL 3.2 defines two profiles (see below), and future versions may introduce additional profiles addressing embedded systems or other domains. OpenGL 3.2 implementations are not required to support all defined profiles, butmust support the core profile described below.

Иными словами начиная с версии 3.2 гарантированно поддерживаются только Core Profile и нормально работают только они. Разумеется профиль совместимости есть во всех драйверах, но там особого ничего не гарантируется. Что мы и наблюдаем, собственно.

Добавлено 03-03-2025 в 10:18:

Цитата:

OpenGL 3.2 is the first version of OpenGL to define multiple profiles. The core profile builds on OpenGL 3.1 by adding features described in section H.1. The compatibility profile builds on the combination of OpenGL 3.1 with the special GL_ARB_compatibility extension defined together with OpenGL 3.1, addingthe same new features and in some cases extending their definition to interact with existing features of OpenGL 3.1 only found in GL_ARB_compatibility. It is not possible to implement both core and compatibility profiles in a single GL context, since the core profile mandates functional restrictions not present in the compatibility profile. Refer to the WGL_ARB_create_context_profile and GLX_ARB_create_context_profile extensions (see appendix J.3.68) for information on creating a context implementing a specific profile.

Отсюда становится понятным, что доступность старых фичей теперь следует проверять через специальное расширение GL_ARB_compatibility, тогда как типичный способ проверки может вернуть поддержку, но при этом в режиме совместимости фича просто не включится. Ну например потому что драйверописатели не успели её включить в профиль совместимости. Но формально, повторюсь, железо её поддерживает. Этим в особенности славился Intel и я никак не мог понять что за чертовщина. Ну вот теперь стало понятно. Хотя в имплементации Core Profile эта информация нам никак не поможет, но хотя бы ответ на старый вопрос получен.

Добавлено 03-03-2025 в 10:19:

Так же, как видите, минимальная версия GL, с которой вообще начались эти профили - как раз 3.2. И инстансинг присутствует начиная с этой версии.
Так что возможно именно версию 3.2, а не 3.3 следует сделать в качестве базовой, ну впрочем посмотрим.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 03-03-2025 в 10:38:

Чтобы не лезть каждый раз в спецификацию, я вынесу сюда список всего, что было удалено из Core Profile и прокомментирую. Итак, поехали:


То что не рекомендуется к использованию:

Цитата:
Wide lines -LineWidth values greater than 1.0 will generate an INVALID_-VALUE error

Насколько я понимаю, предлагается самостоятельно отрегулировать толщину линии через пользовательский шейдер. У меня почти везде используется значение 2.0, но это только для вывода отладочной геометрии.

Цитата:
Global component limit query - the implementation-dependent values MAX_VARYING_COMPONENTS and MAX_VARYING_FLOATS.

Движок считывает этот параметр и может показать пользователю в консоли при вводе команды r_info. Но сам никак его не использует. Так что можно просто выбросить без проблем.

Добавлено 03-03-2025 в 10:50:

Цитата:

Application-generated object names - the names of all object types, such as buffer, query, and texture objects, must be generated using the corresponding Gen* commands. Trying to bind an object name not returned by a Gen* command will result in an INVALID_OPERATION error. This behavior is already the case for framebuffer, renderbuffer, and vertex array objects. Object types which have default objects (objects named zero), such as vertex array, framebuffer, and texture objects, may also bind the default object, even though it is not returned by Gen*.

С этим у меня нет проблем, об этой особенности я давно знал, поэтому новые объекты всегда генерирую через соответствующую функцию. Для интерисующихся сообщу, что раньше было можно задавать номер напрямую, что к примеру делал Кармак в Quake. Теперь такое поведение работать не будет. Здесь мне ничего менять не нужно, проблемы нет.

Добавлено 03-03-2025 в 10:52:

Цитата:

Color index mode - No color index visuals are supplied by the window system-binding APIs such as GLX and WGL, so the default framebuffer is always in RGBA mode. All language and state related to color index mode vertex, rasterization, and fragment processing behavior is removed. COLOR_INDEX formats are also deprecated.

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

Добавлено 03-03-2025 в 11:03:

Цитата:
OpenGL Shading Language versions 1.10 and 1.20. These versions of the shading language depend on many API features that have also been deprecated.

А тут конечно проблема. После версии 1.2 синтаксис сильно поменялся, мне предстоит переписать абсолютно все шейдеры на версию 320.
Собственно, учитывая тот факт, что шейдеры придётся переписывать, я и не старался их как-то сильно оптимизировать или хорошо оформить их код.
Но теперь уже можно переписать набело, так сказать. Собственно шейдеры я могу начать переписывать уже прямо сейчас, не переключаясь на Core Profile. Чтобы не иметь сразу несколько точек нестабильности в процессе перехода.

Добавлено 03-03-2025 в 12:14:

Цитата:
Begin/End primitive specification -Begin, End, and EdgeFlag*; Color*, FogCoord*, Index*, Normal3*, SecondaryColor3*, TexCoord*, Vertex* Vertex*; and all associated state.Vertex arrays and array drawing commands must be used to draw primitives. However, VertexAttrib* and the current vertex attribute state are retained in order to provide default attribute values for disabled attribute arrays.

Ну тут понятно - никаких бегинов больше нет. У меня это используется для вывода отладочной геометрии, а так же для отрисовки HUD и меню. Тут сложнее в том смысле, что вывод геометрии теперь обязан иметь пользовательский шейдер (в режиме совместимости используется шейдер, встроенный в драйвер и эмулирующий FFP). И здесь уже сложнее, поскольку рендер Ксаша не предполагает рендеринг минуя систему материалов, а система материалов в свою очередь затачивалась под 3D рендеринг, который резко отличается от 2D рендеринга. Для 3D достаточно один раз настроить все материалы и дальше просто подавать это на вход тесселятора, пусть рисует. В 2D так не получится - у нас же нет Z-буффера, значит порядок отрисовки важен. Мы по прежнему можем батчить секвенции, написать эмулятор бегинов, да я собственно это давно уже сделал, однако оптимизировать секвенции уже не имеем права - то есть вывод именно в таком порядке, в котором он был задан пользователем.
И что характерно, для 2D рендеринга возможности системы материалов практически не нужны. Там как правило одна текстура и переключение режимов блендинга. Из чего вытекает нехитрый вывод, что нам не нужно создавать материал на каждую загруженную 2D картинку. Это нам скорее наоборот будет только мешать. Но при этом желательно всё же предусмотреть подобную возможность. Например, если мы захотим снабдить наших спрайтовых персонажей нормал-мапой по новомодной технологии, описанной на хабре. То есть в норме всё равно должна быть у нас возможность подключать к выводу 2д геометрии любые шейдеры. Это и так отвечает поставленным мною задачам максимальной кастомизации, поэтому надо реализовать в любом случае. Но повторюсь, тут нельзя просто скопировать поведение материалов из 3D конвейера. Хотя материалы в сущности будут те же самые.

Добавлено 03-03-2025 в 12:19:

Цитата:

Edge flags and fixed-function vertex processing ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TexCoordPointer, VertexPointer, EnableClientState, DisableClientState, and InterleavedArrays, ClientActiveTexture; Frustum, LoadIdentity, LoadMatrix, LoadTransposeMatrix, MatrixMode, MultMatrix, MultTransposeMatrix, Ortho, PopMatrix, PushMatrix, Rotate, Scale, and Translate; Enable/Disable targets RESCALE_NORMAL and NORMALIZE; TexGen* andEnable/Disable targets TEXTURE_GEN_*, Material*, Light*, LightModel*, and ColorMaterial, Shade-Model, and Enable/Disable targets LIGHTING. VERTEX_PROGRAM_TWO_SIDE, LIGHTi, and COLOR_MATERIAL; ClipPlane; and all associated fixed-function vertex array, multitexture, matrix and matrix stack, normal and texture coordinate, lighting, and clipping state. A vertex shader must be defined in order to draw primitives. Language referring to edge flags in the current specification is modified asthough all edge flags are TRUE. Note that the FrontFace and ClampColor commands are not deprecated, as they still affect other non-deprecated functionality; however, the ClampColor targets CLAMP_VERTEX_COLOR and CLAMP_FRAGMENT_COLOR are deprecated

Аналогично вышесказанному. На данный момент используется в отладочной отрисовке, чтобы избежать написания дополнительного шейдера. Для транслейтов-ротейтов и прочих операций с матрицами давно написана имплементация, но на данный момент это ещё используется для 2D рендеринга, который использует FFP. Что логично. Легко выбрасывается. Единственный момент, который я недопонял - это с клип-плейнами. Ну если они нужны только в вершиннике, то ок.

Добавлено 03-03-2025 в 12:35:

Цитата:

Client vertex and index arrays - all vertex array attribute and element array index pointers must refer to buffer objects. The default vertex array object (the name zero) is also deprecated. Calling VertexAttribPointer when no buffer object or no vertex array object is bound will generate an INVALID_OPERATION error, as will calling any array drawing command when no vertex array object is bound.

Тут тоже понятно - абсолютно вся геометрия должна лежать в VBO, который прилинкован к VAO. Все механизмы для этого у меня есть, давно отлажены, но ещё не везде используются. Проблем с этим нет.

Добавлено 03-03-2025 в 12:36:

Цитата:
Rectangles -Rect*.

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

Добавлено 03-03-2025 в 12:37:

Цитата:
Current raster position RasterPos*andWindowPos*, and all associated state.

Использование glRasterPos видел очень давно в примерах от NeHe для вывода 2D текста. Больше нигде не видел. Сам не использую.

Добавлено 03-03-2025 в 12:38:

Цитата:
Two-sided color selection Enable target VERTEX_PROGRAM_TWO_SIDE; OpenGL Shading Language builtins gl_BackColor and gl_BackSecondaryColor; and all associated state.

Тоже не юзал никогда.

Добавлено 03-03-2025 в 12:40:

Цитата:
Non-sprite points Enable/Disable targets POINT_SMOOTH and POINT_SPRITE, and all associated state. Point rasterization is always performed as though POINT_SPRITE were enabled

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

Добавлено 03-03-2025 в 12:42:

Цитата:
Wide lines and line stipple -LineWidthis not deprecated, but values greater than 1.0 will generate an INVALID_VALUE error; LineStipple and Enable/Disable target LINE_STIPPLE, and all associated state.

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

Добавлено 03-03-2025 в 12:44:

Цитата:
Quadrilateral and polygon primitives - vertex array drawing modes POLYGON,QUADS, and QUAD_STRIP, related descriptions of rasterization of non-triangle polygons, and all associated state.

Квады выбросили. Эту задачу решает мой собственный эмулятор бегинов, который уже написан. Некритично.

Добавлено 03-03-2025 в 12:48:

Ну чтож, для начала вышеперечисленного вполне достаточно. Там дальше ещё довольно много пунктов, но я полагаю, что сперва надо реализовать то, о чём уже написано. А потом двигаться дальше.
И начну я с добавления кастомных материалов для 2D отрисовки, а так же для отрисовки отладочной. Чтобы всю геометрию перенести в VAO.

Добавлено 03-03-2025 в 13:38:

Впрочем нет. Начну я с ревизии отладочной визуализации. Как вы наверное уже догадались, в процессе имплементации той или иной подсистемы я по быстрому городил дебаг-отрисовку, чтобы убедиться что всё работает правильно. На бегинах, естественно. Часть этой отрисовки уже давно потеряла свой контекст, она никому не нужна, к тому же у меня есть уже структурированная отладочная отрисовка, которая в дальнейшем и предполагается к использованию. А часть отрисовки у меня вообще сделана функциями, взятыми ещё из P2:Savior. Понятно что оно ни на что не влияло, но это как раз прекрасный повод выбросить не нужные режимы отладочной визуализации, а нужные - структурировать в единую систему. Которая в дальнейшем и будет переведена на динамически обновляемый VBO.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 07-03-2025 в 12:41:

Настала пора подвести промежуточные итоги. В деле перехода на Core Profile у нас аналогичная ситуация, когда одно цепляется за другое и порядок работы строго определён. Поэтому я возился целых пять дней и на данный момент смог только избавиться от пары glBegin\glEnd.
Но, как вы понимаете, это одна из самых важных вещей. Дальше уже должно пойти полегче. Кроме ситуации с альфа-тестом, вот этот момент меня прям дико вымораживает.

Итак, я структурировал и упорядочил всю отладочную отрисовку и перевёл её на динамический VBO, который на данный момент тем не менее всё равно использует фиксированный функционал для отрисовки. Так же я полностью сбатчил всю 2д-геометрию, к которой относятся видеоролики, худ, меню, отладочная отрисовка и консоль. Теперь всё это обновляется с частотой 60 герц. И VBO обновляется с такой же частотой. Бегинов в коде больше нет.
А вот отрисовка без шейдеров - есть. Разумеется мне не хотелось бы просто подключить туда некие встроенные шейдеры, это негибко. Нужно всё это тоже реализовать через систему материалов. И тут конечно надо подумать.
Если для отладочной отрисовки какие-то особенные материалы и не нужны, то для 2д они очень даже пригодятся. Чтобы иметь возможность подключать разные кастомные эффекты, например. Со шрифтами вопрос решается удобно, каждому шрифту можно дать свой материал. А как быть с одиночными картинками? Этот вопрос ещё предстоит проработать.

Итак, следующая задача - перевод абсолютно всей отрисовки на шейдеры и материалы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 07-03-2025 в 12:44:

Цитата:
Дядя Миша писал:
И тут конечно надо подумать.

А что тут думать? В ку3 тоже абсолютно всё, включая 2д-картинки меню, рисовалось через шойдеры.

__________________

xaerox on Vivino


Отправлено FiEctro 07-03-2025 в 16:58:

Ну да, UI тоже шейдеры нужны. И ещё сразу вопрос на засыпку, будет ли возможность подключать .ttf шрифты? Потому что те шрифты что есть сейчас, никуда не годятся, они мыльные.

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


Отправлено XaeroX 07-03-2025 в 17:59:

FiEctro
В волатиле битмаповые шрифты, и вполне чёткие. Секрет в нормальном растеризаторе

__________________

xaerox on Vivino


Отправлено FiEctro 07-03-2025 в 18:00:

Цитата:
XaeroX писал:
В волатиле битмаповые шрифты, и вполне чёткие. Секрет в нормальном растеризаторе



Подскажи где взять такой.

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


Отправлено XaeroX 07-03-2025 в 18:24:

FiEctro
В MacOS. Все шрифты волатилы растеризованы в MacOS.

__________________

xaerox on Vivino


Отправлено Unit 07-03-2025 в 18:57:

Цитата:
XaeroX писал:
В волатиле битмаповые шрифты, и вполне чёткие.

Это ж прошлый век. Современный движок с заготовленными картами шрифтов. Они как минимум должны при выборе группы/стиля/размера шрифта динамически растеризоваться.


Отправлено FiEctro 07-03-2025 в 19:11:

Цитата:
XaeroX писал:
В MacOS. Все шрифты волатилы растеризованы в MacOS.


Расскажи пожалуйста подробнее. Это утилита какая то?

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


Отправлено XaeroX 07-03-2025 в 22:33:

Unit
Мы тут на форуме на нынешний век и не претендуем. А для прошлого вполне норм!

FiEctro
Да, в SDK волатилы будет утилита. Но смысл именно под макосью её запускать. Там встроенный в ось растеризатор работает через обвязку QT.

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-03-2025 в 07:19:

Цитата:
FiEctro писал:
И ещё сразу вопрос на засыпку, будет ли возможность подключать .ttf шрифты?

Ксаш налету генерит шрифты из ttf. А мыльные они совсем по другой причине - я масштабирую итоговую картинку, вместо того чтобы пересчитывать разрешение. То есть, для других point size будут сгенерены новые чёткие шрифты, просто на данный момент код отрисовки меню не делает запроса на них. То есть ещё раз - шрифты генерятся из ttf и кэшируются в виде растровых. Это всё происходит налету и прозрачно для пользователя.

Добавлено 08-03-2025 в 10:19:

Вы все наверное читали эти увлекательные заметки на Хабре и смешные рассказы на башорге, как наследование одних объектов от других приводило к совершенно удивительным и непредсказуемым эффектам. Ну из того, что запомнилось лично мне - в какой-то военной стратегии надо было сделать окружающую живность, типо свиней, коров и птиц. И их унаследовали от солдат. В результате чего хрюшки оказались патриотичными и переодически пытались атаковать неприятеля.
Ну так вот, можно сказать, что в XashNT теперь тоже есть такой класс.
Я унаследовал растровые шрифты от класса модели. Однако, благодаря изначально грамотно продуманной и хорошо спланированной архитектуре, это не просто сделано, чтобы заткнуть компилятор, который не хочет собирать проект, а напротив - сработало на композицию и наделило шрифты всеми свойствами полноценной модели. Теперь буквы шрифтов потенциально можно рендерить в 3D-пространстве, собирать для них освещение, трассировать буквы и символы, даже лайтмапу можно наложить.
Универсальный контейнер, в которой хранятся шрифты не отличается от таковых для хранения моделей и тоже наследует все их свойства.
То есть в данном случае всё получилось правильно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Unit 08-03-2025 в 09:05:

Цитата:
XaeroX писал:
Мы тут на форуме на нынешний век и не претендуем.

А зря, картинка в волатиле на это способна. Да и вон ДМ шрифты динамические сделал, вполне современно.


Отправлено FiEctro 08-03-2025 в 13:32:

Цитата:
Дядя Миша писал:
То есть в данном случае всё получилось правильно.


Но они по прежнему мыльные

Добавлено 08-03-2025 в 16:32:

Цитата:
XaeroX писал:
Да, в SDK волатилы будет утилита. Но смысл именно под макосью её запускать. Там встроенный в ось растеризатор работает через обвязку QT.



Блин, если я захочу такое сгенерировать, что мне нужно будет сделать?

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


Отправлено Дядя Миша 08-03-2025 в 16:19:

Цитата:
FiEctro писал:
Но они по прежнему мыльные

Ну представь мне сидеть и под каждое разрешение вручную подбирать раскладку элементов в меню, этож с дуба рухнуть. Такого даже в винде и то нет. Ну хочешь - оно съедет в верхний левый угол и будет маленькое. Устроит тебя такое?

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 08-03-2025 в 16:53:

Цитата:
FiEctro писал:
Блин, если я захочу такое сгенерировать, что мне нужно будет сделать?

Ну грубо говоря - написать простейший растеризатор шрифтов в битмапы на Qt и запустить под макосью, и там сохранять картинки, а не под виндой.

__________________

xaerox on Vivino


Отправлено FiEctro 08-03-2025 в 17:05:

Цитата:
Дядя Миша писал:
Ну представь мне сидеть и под каждое разрешение вручную подбирать раскладку элементов в меню, этож с дуба рухнуть. Такого даже в винде и то нет. Ну хочешь - оно съедет в верхний левый угол и будет маленькое. Устроит тебя такое?


А зачем вручную? У тебя якорей чтоле нет? И в процентах считать не умеет? Неужели нельзя высчитать какой процент на экране оно занимает, и из этого процента от разрешения получить нужное значение в пикселях и прочие скейлы и сдвиги? Ну или по тупому атлас в 2к генерить для всех разрешений. Тоже конечно мыльно будет, но не так сильно, жить можно.

В UI обязательно все элементы в процентах считать и якоря задавать. А то со сдвигами в пикселях там реально жопа будет. Вот тут можешь почитать про адаптивную верстку:
https://unityhub.ru/guides/sozdanie...i-interfejsa_35

Цитата:
XaeroX писал:
Ну грубо говоря - написать простейший растеризатор шрифтов в битмапы на Qt и запустить под макосью, и там сохранять картинки, а не под виндой.


А какая разница? Под виндой или макосью будет оно сохранять? Это же твой растеризатор.

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


Отправлено Unit 08-03-2025 в 17:07:

Цитата:
FiEctro писал:
Блин, если я захочу такое сгенерировать, что мне нужно будет сделать?

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


Отправлено XaeroX 08-03-2025 в 19:38:

Цитата:
FiEctro писал:
Это же твой растеризатор.

Да, но под капотом используется системный.

__________________

xaerox on Vivino


Отправлено Дядя Миша 09-03-2025 в 07:43:

Цитата:
FiEctro писал:
Неужели нельзя высчитать какой процент на экране оно занимает, и из этого процента от разрешения получить нужное значение в пикселях и прочие скейлы и сдвиги?

Как я тебе переведу POINTSIZE в функцию от масштаба разрешения? Оно же нелинейное.

Добавлено 09-03-2025 в 10:43:

Это Кармаку легко было, у него шрифты с фиксированными отступами и все буквы квадратные.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 09-03-2025 в 13:10:

Немного теоретической инфы выдам, чтобы вы поняли суть проблемы.
Итак, в Core Profile невозможно ничего нарисовать как прежде - забиндить текстуру, вызвать glBegin и погнали. Это в сущности невеликая проблема.
Когда я только-только начинал строить XashNT я уже исходил из того, что буду переводить его на Core Profile, поэтому у меня абсолютно весь рендеринг строится на VAO+VBO+IBO и на шейдерах. Но это справедливо только для трёхмерного рендеринга. Двухмерный в своё время я тоже перевёл на VAO+VBO, однако конвейер остался фиксированный. Не было у меня времени тогда с этим возиться, а ничего сложнее смены текстуры и задания цвета от двухмерных картинок не требовалось, да собственно, в рамках меню и худа - не требуется и по сей день. Хорошо, теперь проблема так сказать получила максимальный приоритет в рамках миграции на Core Profile и я её решаю. В 2D мы имеем дело с двумя сущностями: шрифты (под шрифтом разумеется что угодно, как буквы, так и набор именованных иконок), и просто картинки. Теперь, собственно, самая суть:

В новом ксаше абсолютно всё рисуется через систему материалов, кроме того, что рисуется через фиксированный конвейер. Поскольку в Core Profile этого функционала уже нет, нам очевидно следует перевести всё на систему материалов. И тут возникают известные трудности. Во первых материал, сам по себе не может существовать в вакууме. Он слинкован с сущностью, для которой он принадлежит, причём эта сущность непременно должна наследоваться от базового класса модели.
Тогда мы можем запрашивать для нашего материала кучу всяких полезных вещей - освещение, амбиент-кубы и протчее. То есть ситуации, когда материал не слинкован с моделью, попросту не предусмотрено.
Для шрифтов это требование довольно легко соблюсти - достаточно унаследовать класс шрифта от класса модели. Технически шрифт сам по себе и есть модель - он тоже использует юниформ-контейнер для хранения данных и всё такое. Тут проблем нет. А мелкие шероховатости для такой имплементации элементарно решаются в процессе отладки.
То есть система сразу заработает как надо, а если что-то вдруг будет не так, исправится после очередного бета-тестирования.
Совсем иная ситуация с рендерингом отдельно стоящих картинок.
Картинка очевидно не может быть сущностью, типа модели. Уже хотя бы потому что в материале этих картинок может быть сколько угодно загружено. Ну то есть, логическая нестыковка.
Поэтому я принял следующее решение: любые картинки будут загружаться как шрифты. То есть с тем же именем, создавать для себя уникальный материал ну и всё такое. И представлены будут как шрифт с одной буквой ну или с одной иконкой, если хотите.
К тому же, поскольку там целый набор взаимодействия с ректанглами, к этой сущности куда проще и удобнее прикрутить динамические текстуры с обновляемыми пикселями. То есть концепция достаточно стройная и надёжная. Но не без подводных камней, о которых я расскажу немного позже.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 09-03-2025 в 13:56:

Цитата:
Дядя Миша писал:
Я унаследовал растровые шрифты от класса модели.

Замечательный задел для школьников будущего которые выкатят свой "исправленный ксаш" где будет отдельный класс для шрифтов.


Отправлено Дядя Миша 09-03-2025 в 14:29:

Crystallize так он и так отдельный.

Ну что же. Продолжаю страдать с миграцией на Core Profile (дежурно замечу, что с миграцией на Вулкан страдания можно смело умножать на 10 или даже на 100). Прикол в том что тривиальнейшие вещи превращаются в какое-то законченное мозгоёбство. Ну вот помните функцию ещё из халфы - FillRGBA? Цветную полосочку нарисовать или квадратег там. Ну чёт такое.
Что может быть проще? В Core Profile этого нельзя в принципе. Это должна быть полноценная геометрия в VBO и с шейдером. А шейдеры у меня без материалов не рисуются в принципе. Тут конечно следует оговориться.
Да, я мог бы конечно нарисовать какие-то вещи прямо внутри движка, захардкодить, даже мог бы шейдеры встроить прямо в бинарник, но это идёт вразрез с моей концепцией. Не нужно мне такого, вот оно что.
Так что - в общем порядке. Грёбанный дефолтный материал со встроенной текстурой *white и погнали. Тварство.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 09-03-2025 в 16:13:

Цитата:
Дядя Миша писал:
Как я тебе переведу POINTSIZE в функцию от масштаба разрешения? Оно же нелинейное.


Ну тоесть ты делаешь шрифт с поинтсайзом допустим 10 на маленьком разрешении и растягиваешь его? Я правильно понимаю? Поинтсайз даёт картинку символа всегда в фиксированом разрешении?

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


Отправлено Дядя Миша 09-03-2025 в 16:35:

Цитата:
FiEctro писал:
Ну тоесть ты делаешь шрифт с поинтсайзом допустим 10 на маленьком разрешении и растягиваешь его?

Я растягиваю не просто шрифт, а всю композцию на текущий момент.
Поэтому меню и мыльное. Меню было создано в начале пандемии, с 2020-м году, с тех пор я его и не касался. Ну вот, через непрямое воздействие - из-за перехода на Core Profile, у меня наконец-то дошли руки до меню.
А с поинтсайзом не так всё очевидно. Какой поинтсайз использовать для разных разрешений? Можно ли его как-то вычислить?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 09-03-2025 в 16:49:

Дядя Миша
А ты можешь высчитать PPI для разрешения?

Поидее так:
новый поинтсайз = опорный поинтсайз * (новый PPI/опорный PPI).

Например у нас опорный поинтсайз 12pt.
Опорное разрешение 1920x1080 (96 PPI)
Новое разрешение 3840x2160 (192 PPI)

Тогда новый поинтсайз = 12 * (192/96) = 24 pt.

Но чтобы рассчитать PPI нужно знать диагональ экрана, возможно ли программно её получить из драйвера?

Нейронка предложила следующее:

C++ Source Code:
1
#include <windows.h>
2
#include <iostream>
3
#include <cmath>
4
 
5
int main() {
6
  // Получаем разрешение экрана в пикселях
7
  int screenWidth = GetSystemMetrics(SM_CXSCREEN);
8
  int screenHeight = GetSystemMetrics(SM_CYSCREEN);
9
 
10
  // Получаем физический размер экрана в миллиметрах
11
  HDC hdc = GetDC(NULL);
12
  int widthMM = GetDeviceCaps(hdc, HORZSIZE);
13
  int heightMM = GetDeviceCaps(hdc, VERTSIZE);
14
  ReleaseDC(NULL, hdc);
15
 
16
  // Вычисляем диагональ в дюймах
17
  double diagonalMM = std::sqrt(widthMM * widthMM + heightMM * heightMM);
18
  double diagonalInches = diagonalMM / 25.4;
19
 
20
  // Вычисляем PPI
21
  double PPI = std::sqrt(screenWidth * screenWidth + screenHeight * screenHeight) / diagonalInches;
22
 
23
  // Выводим результат
24
  std::cout << "Screen Resolution: " << screenWidth << "x" << screenHeight << std::endl;
25
  std::cout << "Physical Size: " << widthMM << "x" << heightMM << " mm" << std::endl;
26
  std::cout << "Diagonal: " << diagonalInches << " inches" << std::endl;
27
  std::cout << "PPI: " << PPI << std::endl;
28
 
29
  return 0;
30
}


Примечания:
Точность данных: Физический размер экрана, возвращаемый GetDeviceCaps, может быть неточным на некоторых мониторах, особенно если драйверы не предоставляют корректную информацию.

Многомониторные системы: Этот код работает только для основного монитора. Для работы с несколькими мониторами используйте EnumDisplayMonitors и GetMonitorInfo.

Высокий DPI: На системах с высоким DPI (например, Retina-экраны) может потребоваться учет масштабирования Windows. Используйте SetProcessDPIAware или SetProcessDpiAwareness для корректной работы.

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


Отправлено Дядя Миша 09-03-2025 в 19:31:

Цитата:
FiEctro писал:
А ты можешь высчитать PPI для разрешения?

А почему по ссылке написано "эту статью предлагается удалить"? Уж не ты ли её редактировал?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 10-03-2025 в 03:49:

Цитата:
Дядя Миша писал:
Crystallize так он и так отдельный.

В том смысле что он не будет унаследован от класса модели.


Отправлено Дядя Миша 10-03-2025 в 07:34:

Цитата:
Crystallize писал:
В том смысле что он не будет унаследован от класса модели.

До позавчерашнего дня он и не был унаследован от класса модели.
А теперь унаследован

Добавлено 10-03-2025 в 10:34:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 10-03-2025 в 08:31:

Дядя Миша
Стоит ли расчитывать на разметку для UI пока ты им занялся? У тебя же уже есть свой аналог json, можно его использовать для разметки.

Цитата:
Дядя Миша писал:

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


О это дело хорошее.

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


Отправлено Дядя Миша 10-03-2025 в 16:47:

Цитата:
FiEctro писал:
Стоит ли расчитывать на разметку для UI пока ты им занялся?

Вот прямщас - не стоит. Но поскольку я занялся, я буду там наводить порядок, улучшать ситуацию и переписывать меню. Чтобы нормально было.
Я это мыло в меню сделал в начале 2020-го года, когда буквально не знал за что хвататься - ни своих форматов уровней, моделей, рендер не написан, ни-че-го. Да и скриптового языка тогда уже не было. Теперь же, когда всё это появилось, я возращаюсь к старым проблемам и делаю рефакторинг.
К тому же это всё равно необходимо для правильной работы Core Profile, то есть два в одном получается. Ну и функционал расширяется, теперь можно будет использовать шейдеры в 2D.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 10-03-2025 в 16:59:

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


Я кстати тогда тебе и говорил, что движок по идее может работать с абстрактным массивом пикселей. А вот как туда их загружать это можно вынести и в пользовательскую часть. Чтобы каждый мог прикрутить свои форматы. Но ты помню сказал что архитектура под такое не заточена.

Цитата:
Дядя Миша писал:
К тому же это всё равно необходимо для правильной работы Core Profile, то есть два в одном получается. Ну и функционал расширяется, теперь можно будет использовать шейдеры в 2D.


Это правильно. Шейдеры в 2д нужны, особенно с прозрачностью и альфой всякой. Щас мода вернулась ещё из аэро 7ки делать размыливающий фон шейдер

Цитата:
Дядя Миша писал:
Вот прямщас - не стоит. Но поскольку я занялся, я буду там наводить порядок, улучшать ситуацию и переписывать меню. Чтобы нормально было.


Это хорошо. Язык разметки нужен, т.к. верстать в коде UI это полный ужас.

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


Отправлено Дядя Миша 10-03-2025 в 19:04:

Цитата:
FiEctro писал:
Чтобы каждый мог прикрутить свои форматы

Да откуда ты понабрался этой пакости?
Что значит "прикрутить свои форматы" ? А может ты тогда заодно прикрутишь вообще всё, и операционную систему впридачу, и компьютер сам соберёшь и кремний из песка тоже добудешь, я правильно понимаю?

Цитата:
FiEctro писал:
Язык разметки нужен, т.к. верстать в коде UI это полный ужас.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 12-03-2025 в 16:43:

Итак, я полностью переработал концепцию движковых шрифтов, изменил их формат, снял некоторые ограничения, добавил мета-информацию и заставил всё это рисоваться с использованием системы материалов и кастомных шейдеров. Отдельно хочу отметить тот факт, что мне даже удалось сохранить нетронутой отрисовку в движке, что на первый взгляд было довольно непросто сделать. То есть движок рендерит ряд вещей, которые используются для отладки, а так же пресловутый FillRGBA. И ещё кадры видео. Разумеется мне совершенно не хотелось завязывать это внутри движка с системой материалов. Ибо материалы, как вы понимаете - они пользовательские. То есть у нас бы наружу торчали материалы, которые грузит и использует сам движок, а не пользователи.
Кто-то конечно скажет - да ну ерунда, такое у всех есть, но мне эта ситуация не нравилась изначально. Что движок что-то там такое грузит.
В то же время никакой хард-код внутри движка мне тоже делать совершенно не хотелось и я не стал его делать. На данный момент движок грузит ровно один уникальный материал под названием *fixedpipeline который используется для рендеринга всяких вещей, не нуждающихся в специализированном материале. То есть, проще говоря, я сэмулировал FFP в ограниченном объеме, прямо внутри движка. В принципе система получилась прозрачная и пользователям она мешать не должна. Так что с 2D отрисовкой слава богу всё получилось и устаканилось.

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

Добавлено 12-03-2025 в 18:32:

Вообще, в дальнейшем, если мне понадобится подгрузить дополнительные материалы из движка (ещё один или два), то я так и буду использовать звезду в качестве индикатора системности.

Добавлено 12-03-2025 в 18:48:

После того как я переведу отладочную отрисовку на VAO + шейдеры можно будет наконец-то подвести итоги по вышенаписанному и двигаться дальше.

Добавлено 12-03-2025 в 19:43:

Провёл ревизию отладочной визуализации. Насчитал 7 (СЕМЬ) не связанных друг с другом систем. Охренеть конечно. Буду сокращать, выбрасывать ненужное, нужное объединять с другим. В идеале конечно бы оставить одну, но к сожалению не получится. Впрочем поглядим.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 12-03-2025 в 16:53:

Цитата:
Дядя Миша писал:
азумеется мне совершенно не хотелось завязывать это внутри движка с системой материалов. Ибо материалы, как вы понимаете - они пользовательские. То есть у нас бы наружу торчали материалы, которые грузит и использует сам движок, а не пользователи.
Кто-то конечно скажет - да ну ерунда, такое у всех есть, но мне эта ситуация не нравилась изначально. Что движок что-то там такое грузит.


Но свои то материалы и шейдеры для 2д можно делать?

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


Отправлено Дядя Миша 12-03-2025 в 18:20:

Цитата:
FiEctro писал:
Но свои то материалы и шейдеры для 2д можно делать?

конечно можно, любые без ограничений. Только вот практика подсказывает - это мало кому нужно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 13-03-2025 в 16:19:

Потихоньку осваиваю появившиеся возможности для двухмерного рендеринга. Добавил разные материалы, кстати появилась возможность менять цвета в превьюшках модели игрока через палитру. Top и Bottom color.
Раньше это работало только для самих моделек, т.е. в 3D.

Сделал предварительную ревизию отладочной отрисовки - выбросил поддержкку .pts файлов (это где описана утечка на уровне с помощью точек). Устаревшая штука, .lin файлы гораздо лучше с этим справляются.

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

Так что выбросил.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 14-03-2025 в 15:10:

Ну чтож, перевёл отладочную отрисовку на VAO + VBO + шейдеры.
Из менеджера VBO выбросил кучу жуткого кода, написанного в 2019-м году, там килобайт 50 шаблонов было, чтобы в компайл-тайм конструировать какие-то дефолтные типы фиксированных вертексов, причём я уже и сам крайне смутно помнил как там всё это работает. Ну и соответственно больше это не нужно, код стал чище и понятнее.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 15-03-2025 в 17:04:

Я это сделал! Теперь XashNT абсолютно всё рендерит через VAO+VBO (IBO опционально). Самые сложные задачи, которые повлекли за собой и рефакторинг, и даже, как вы знаете - изменение формата шрифтов успешно решены. Давайте ещё раз пройдемся по тому списку и посмотрим что было сделано.

Добавлено 15-03-2025 в 19:40:

Цитата:
Profiles define subsets of OpenGL functionality targeted to specific application domains. OpenGL 3.2 defines two profiles (see below), and future versions may introduce additional profiles addressing embedded systems or other domains. OpenGL 3.2 implementations are not required to support all defined profiles, butmust support the core profile described below.

В процессе имплементации выяснилось несколько неприятных вещей. Так в частности различные встройки от Intel умеют максимум в OpenGL 3.1 на Windows и OpenGL 3.3 на Linux. Почему такое происходит сказать затрудняюсь, тем не менее - вот. Причём в режиме совместимости они могут возвращать абсолютно любую бредятину, рапортуя о поддержке всего на свете, тогда как по факту ничего подобного. Ну может они пытаются это проэмулировать? Этот момент предстоит ещё выяснить. Но пока что я для себя определил базовую версию Core Profile как 3.1. Там правда нет инстансинга, но всё остальное работать будет.

Цитата:
OpenGL 3.2 is the first version of OpenGL to define multiple profiles. The core profile builds on OpenGL 3.1 by adding features described in section H.1. The compatibility profile builds on the combination of OpenGL 3.1 with the special GL_ARB_compatibility extension defined together with OpenGL 3.1, addingthe same new features and in some cases extending their definition to interact with existing features of OpenGL 3.1 only found in GL_ARB_compatibility. It is not possible to implement both core and compatibility profiles in a single GL context, since the core profile mandates functional restrictions not present in the compatibility profile. Refer to the WGL_ARB_create_context_profile and GLX_ARB_create_context_profile extensions (see appendix J.3.68) for information on creating a context implementing a specific profile.

Вот тут к слову опять непонятно. Значит ли это, что в версии 3.1 нет никакого Core Profile? Или может быть мне необходимо как бы придерживаться Core версии через самоцензуру? Пока непонятно, но я не исключаю такой момент. Главное чтобы работало у всех.

Цитата:
Wide lines -LineWidth values greater than 1.0 will generate an INVALID_-VALUE error

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

Добавлено 15-03-2025 в 20:01:

Цитата:
Global component limit query - the implementation-dependent values MAX_VARYING_COMPONENTS and MAX_VARYING_FLOATS.

Это выбросил. Да оно собственно и не использовалось никогда. Хотя и было выведено в систему материалов, где тоже никогда не использовалось.

Цитата:
Application-generated object names - the names of all object types, such as buffer, query, and texture objects, must be generated using the corresponding Gen* commands. Trying to bind an object name not returned by a Gen* command will result in an INVALID_OPERATION error. This behavior is already the case for framebuffer, renderbuffer, and vertex array objects. Object types which have default objects (objects named zero), such as vertex array, framebuffer, and texture objects, may also bind the default object, even though it is not returned by Gen*.

Ещё раз всё проверил - таких имён у меня нет, всё генерируется через glGen.

Цитата:
Color index mode - No color index visuals are supplied by the window system-binding APIs such as GLX and WGL, so the default framebuffer is always in RGBA mode. All language and state related to color index mode vertex, rasterization, and fragment processing behavior is removed. COLOR_INDEX formats are also deprecated.

Этого у меня и не было.

Цитата:
OpenGL Shading Language versions 1.10 and 1.20. These versions of the shading language depend on many API features that have also been deprecated.

Да, здесь предстоит масштабная работа по переписыванию всех шейдеров. Собственно, это и есть ближайшая задача по продолжению миграции на Core Profile. И кстати версию шейдеров придётся выбирать либо 130, либо 140. Пока ещё не решил.

Цитата:
Begin/End primitive specification -Begin, End, and EdgeFlag*; Color*, FogCoord*, Index*, Normal3*, SecondaryColor3*, TexCoord*, Vertex* Vertex*; and all associated state.Vertex arrays and array drawing commands must be used to draw primitives. However, VertexAttrib* and the current vertex attribute state are retained in order to provide default attribute values for disabled attribute arrays.

Успешно избавился - больше нигде не используется. Собственно именно эта задача и отняла у меня больше всего времени, спровоцировала изменение RenderAPI в Шоте, изменение формата шрифтов и затронул кучу подсистем, которые пришлось отрефакторить. По времени - больше недели. И это несмотря на то, что в 3D весь рендеринг давно уже использует VAO + VBO + Shader. Но по крайней мере я сделал всё правильно, а не наговнял по быстрому. Теперь в рендеринге 2д-изображений появилась поддержка материалов, шейдеров и открылась куча новых возможностей.

Цитата:
Edge flags and fixed-function vertex processing ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TexCoordPointer, VertexPointer, EnableClientState, DisableClientState, and InterleavedArrays, ClientActiveTexture; Frustum, LoadIdentity, LoadMatrix, LoadTransposeMatrix, MatrixMode, MultMatrix, MultTransposeMatrix, Ortho, PopMatrix, PushMatrix, Rotate, Scale, and Translate; Enable/Disable targets RESCALE_NORMAL and NORMALIZE; TexGen* andEnable/Disable targets TEXTURE_GEN_*, Material*, Light*, LightModel*, and ColorMaterial, Shade-Model, and Enable/Disable targets LIGHTING. VERTEX_PROGRAM_TWO_SIDE, LIGHTi, and COLOR_MATERIAL; ClipPlane; and all associated fixed-function vertex array, multitexture, matrix and matrix stack, normal and texture coordinate, lighting, and clipping state. A vertex shader must be defined in order to draw primitives. Language referring to edge flags in the current specification is modified asthough all edge flags are TRUE. Note that the FrontFace and ClampColor commands are not deprecated, as they still affect other non-deprecated functionality; however, the ClampColor targets CLAMP_VERTEX_COLOR and CLAMP_FRAGMENT_COLOR are deprecated

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

Цитата:
Client vertex and index arrays - all vertex array attribute and element array index pointers must refer to buffer objects. The default vertex array object (the name zero) is also deprecated. Calling VertexAttribPointer when no buffer object or no vertex array object is bound will generate an INVALID_OPERATION error, as will calling any array drawing command when no vertex array object is bound.

Тут всё в порядке - всё лежит в соответствующих массивах VBO.

Цитата:
Rectangles -Rect*.

По правде говоря, ксаш даже эти экспорты никогда не подтягивал, ни новый ни старый.

Цитата:
Current raster position RasterPos*andWindowPos*, and all associated state.

Аналогично ректанглам. Не использовалось.

Цитата:
Two-sided color selection Enable target VERTEX_PROGRAM_TWO_SIDE; OpenGL Shading Language builtins gl_BackColor and gl_BackSecondaryColor; and all associated state.

Не использовалось.

Цитата:
Non-sprite points Enable/Disable targets POINT_SMOOTH and POINT_SPRITE, and all associated state. Point rasterization is always performed as though POINT_SPRITE were enabled

Не использовалось. Я вообще от греха подальше выбросил рендеринг GL_POINTS. Да и нет в нём никакой особенной необходимости. Вот линии нужны, а точки нет.

Цитата:
Wide lines and line stipple -LineWidthis not deprecated, but values greater than 1.0 will generate an INVALID_VALUE error; LineStipple and Enable/Disable target LINE_STIPPLE, and all associated state.

Повторюсь - вроде бы как работает. Ну может только на Нвидии. Проверим.

Цитата:
Quadrilateral and polygon primitives - vertex array drawing modes POLYGON,QUADS, and QUAD_STRIP, related descriptions of rasterization of non-triangle polygons, and all associated state.

На данный момент ксаш оперирует только двумя типами примитивов - GL_LINES и GL_TRIANGLES. Так что и здесь всё в порядке.

Добавлено 15-03-2025 в 20:04:

Определим список новых задач, с учётом вышенаписанного (я всё это так подробно пишу, потому что может кому-нибудь ещё пригодится, да мало ли).

1. Избавиться от LoadMatrix
2. Избавиться от "йопанных клипплейнов"
3. Переписать все шейдеры ну как минимум на версию 130 (судя по всему версии 130 и 140 мало чем отличаются друг от друга).

Когда же и эти задачи будут выполнены, можно будет переходить уже к новым пунктам в документе.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 16-03-2025 в 11:19:

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

https://registry.khronos.org/OpenGL...ngSpec.1.30.pdf
https://registry.khronos.org/OpenGL...ngSpec.1.40.pdf
https://registry.khronos.org/OpenGL...ngSpec.1.50.pdf
https://registry.khronos.org/OpenGL...ngSpec.3.30.pdf

Здесь, как вы видите старый добрый принцип всё ещё в действии - подставляя в адрес просто другие циферки попадаешь на правильную страничку.

Добавлено 16-03-2025 в 13:08:

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

Цитата:
Use of the keywords attribute andvarying (use in and out).

Вот этот момент меня к слову и выбесил больше всё в своё время. Просто так на ровном месте бери да заменяй модификаторы на новые. Ну ладно, что тут сделаешь.

Цитата:
Use of gl_ClipVertex (use gl_ClipDistance)

Вот эту словесную конструкцию я не понял если честно. То есть понятно, что gl_ClipVertex устарел. Но здесь что предлагается? Использовать gl_ClipDistance вместо этого? Или gl_ClipDistance тоже устарел?
Но вот на сайте хроноса написано следующее:
Цитата:
gl_ClipDistance — provides a forward-compatible mechanism for vertex clipping

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

Цитата:
Use of gl_FragData and gl_FragColor (use user-defined out instead).

Ага, ну про это я тоже в курсе. Надо самостоятельно забиндить выходные атрибуты. Это нужно для более гибкого управления MRT, как я понимаю.

Цитата:
Built-in attributes. Use user-defined vertex inputs instead.

Тут проблем нет - у меня все атрибуты юзер-дефайнед.

Цитата:
Fixed function vertex or fragment stages mixed with shader programs. Provide shaders for all activeprogrammable pipeline stages.

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

Цитата:
All built-in texture function names. See new names.

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

Цитата:
Use of the built-in varyings gl_FogFragCoord and gl_TexCoord. Use user-defined variable instead

Первое никогда не юзал, а второе успешно выбросил, если и было.

Цитата:
The built in function ftransform. Use the invariant qualifier on a vertex output instead

Эту функцию я тоже не юзаю, хотя и в курсе про нее конечно.

Цитата:
Most built-in state.

Расплывчато. Видимо по ходу буду разбираться.

Цитата:
gl_MaxVaryingFloats (use gl_MaxVaryingComponents instead)

Не юзал.

Цитата:
Built-in coloring: gl_FrontColor, gl_FrontSecondaryColor, gl_Color, gl_SecondaryColor,gl_BackColor and gl_BackSecondaryColor

Не юзаю.

Добавлено 16-03-2025 в 13:28:

Теперь давайте посмотрим, что же добавилось в версии GLSL 140 по сравнению с версией 130.

Цитата:
Add uniform blocks and layouts to be backed by the application through buffer bindings

Честно говоря не очень понял тут. То ли в 1.3 эту поддержку убрали, а в 1.4 снова добавили, но мне надо чтобы шейдер неявно пронумеровал атрибуты, а приложение просто взяло эти индексы - это важная часть системы материалов, которая позволяет выбрасывать из загружаемого VBO неиспользованные атрибуты и таким образом экономить видеопамять.

Цитата:
Rectangular textures, including the closure of the functionality indicated by the originaltexture_rectangle extension, the gpu_shader4 extension and the 1.3 version of GLSL

А вот это действительно важная вещь. Поясню почему. Дело в том, что некоторые вендоры на некоторых версиях драйверов (Интел, ага) непременно требуют, чтобы включение расширений происходило на начальных строках исходного текста шейдера. Из чего следует нехитрый вывод - я уже толком не могу это написать прямо в теле шейдера и в произвольном месте. Лучше всего это автоматически включить в тело шейдера. Вот тут-то и кроется засада! У меня нет механизмов для четкого определения что я использую ректангл-текстуру! То есть было бы гораздо лучше, если бы она просто поддерживалась в базе, да и всё. Поэтому имеет смысл сразу целиться на версию GLSL 140. Версия 140 - это как раз OpenGL 3.1, то есть именно то что и нужно. Тут всё в порядке.

Цитата:
Texture buffers

Не юзал, но возможно и буду. Дело такое.

Цитата:
Add gl_InstanceID for instance drawing

Ага, вот именно с версии 140 он уже в базе. Это отличная новость.
Но прикол в том, что glDrawElementsInstancedBaseVertex поддерживается только с версии 3.2. Взрыв мозга!

Цитата:
Don't require writing to gl_Position

Пока что ничего не могу сказать по этому поводу. Разумеется я всегда записываю результат в gl_Position. Ситуации, когда этого не требуется, у меня не возникало вроде.

Добавлено 16-03-2025 в 13:35:

Следующий шаг: посмотрим что удалено в версии 1.4 по сравнению с 1.3. Т.е. для версии 1.3 они были просто нежелательны к использованию, но всё ещё продолжали работать, а тут их совсем удолили нахрен.

Цитата:
Use of gl_ClipVertex. Use gl_ClipDistance instead

Тут понятно, так и сделаю.

Цитата:
Built-in vertex shader inputs.

Не юзаю, тут всё хорошо.

Цитата:
Built-in uniforms except for depth range parameters

Наверное это всё что начинается с префикса gl_, разумеется за исключением gl_VertexID и gl_InstanceID.

Цитата:
Built-in interface between vertex and fragment: gl_TexCoord, gl_FogFragCoord, and all the colorvalues.

Не юзаю.

Цитата:
Built-in two-sided coloring.

Не юзаю.

Цитата:
Fixed functionality for a programmable stage. Supply shaders for all stages currently being used.

Не юзаю.

Цитата:
ftransform(). Use invariant outputs instead.

Не юзаю.

Добавлено 16-03-2025 в 13:40:

Про версию шейдеров 150 кратко скажу, что там добавились геометрические шейдеры, а так же фетчинг для MSAA, но мне пока что это всё не нужно.
Тут бы с текущим разобраться, так сказать. В версию шейдеров 330 я тоже заглянул - по сравнению с версией 150 там ничего удалено не было, но добавился ARB_explicit_attrib_location который мне не нужен.

Итак, рабочий вариант - целимся на GL 3.1 и версию шейдеров 140.
Правда здесь есть две очевидных несуразности.
1. Инстансинг поддерживается только с версии GL 3.2
2. В OpenGL 3.1 вообще нет Core Profile.

Но в любом случае выбросить всё старое можно и не переключаясь на Core Profile - между прочим профит от исключения вызовов фиксированного конвейера из кода реально есть. Продолжаю работу.

Добавлено 16-03-2025 в 14:19:

PS. Маленькая поправка: gl_ClipDistance можно будет использовать не раньше перехода на версию 130 или 140. На версии 120 этого сделать не даёт даже NVidia.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 16-03-2025 в 12:30:

Супер! Работа проделана большая. А что такое VAO и IBO?

Цитата:
Дядя Миша писал:
Да откуда ты понабрался этой пакости?
Что значит "прикрутить свои форматы" ? А может ты тогда заодно прикрутишь вообще всё, и операционную систему впридачу, и компьютер сам соберёшь и кремний из песка тоже добудешь, я правильно понимаю?


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

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


Отправлено Ku2zoff 16-03-2025 в 13:05:

Много текста, это, конечно, здорово. Хотелось бы увидеть, что и как движок на данный момент рисует. Особенно в свете последних требовательных игр, типа Инди Джонса и второго Свалкера. У меня от обоих видюха в 2k разрешении просто задыхается. А картинка на уровне первого Деда под спайсом, только текстуры чётче. Вот и не понятно, на что мощности компа расходуются.


Отправлено FiEctro 16-03-2025 в 13:08:

Цитата:
Ku2zoff писал:
Много текста, это, конечно, здорово. Хотелось бы увидеть, что и как движок на данный момент рисует. Особенно в свете последних требовательных игр, типа Инди Джонса и второго Свалкера. У меня от обоих видюха в 2k разрешении просто задыхается. А картинка на уровне первого Деда под спайсом, только текстуры чётче. Вот и не понятно, на что мощности компа расходуются.


На скриншотах будет думаю тоже самое. А вот производительность покажет только будующий бетатест.

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


Отправлено Дядя Миша 16-03-2025 в 13:18:

Цитата:
FiEctro писал:
А что такое VAO и IBO?

Vertex Array Object и Index Buffer Object. VBO хранит вертексы, IBO хранит индексы, VAO ссылается на VBO + IBO + раскладку вертекса в памяти для этих буфферов.

Цитата:
FiEctro писал:
Я просто вижу что ты пишешь движок-эмулятор для других игр

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

Цитата:
FiEctro писал:
но зато тебе не нужно будет таскать все нужные тебе форматы во всех играх, а сделать их подгрузку для конкретной игры индивидуально

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

Цитата:
FiEctro писал:
Чисто архитектурно я считаю это изящное решение.

Возьми движок от ночных водолазов, как он там называется. Вот эта помойка умеет работать с любыми форматами, потому что там просто половину кода от старой игры копируют на некую базу и таким образом получают совместимость. Разумеется движок, сконфигурированный для q1 и для q2 таким образом - это две разные версии движка, между которыми нет ничего общего. Особенно приятно всё это поддерживать, я полагаю.

Цитата:
Ku2zoff писал:
Хотелось бы увидеть, что и как движок на данный момент рисует

Только через запись в бета-тестеры.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 16-03-2025 в 13:35:

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


Движок работает с треугольниками и текстурными координатами, а что там за форматы ему как то фиалетово. Ну по крайней мере в Юнити/Анрилах так И никто там движок не пересобирает.

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


Отправлено Дядя Миша 17-03-2025 в 06:44:

Цитата:
FiEctro писал:
Движок работает с треугольниками и текстурными координатами, а что там за форматы ему как то фиалетово

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 17-03-2025 в 08:54:

Цитата:
Дядя Миша писал:
В таком случае напиши простенькую программку, которая в цикле рендерит треугольники - вот тебе и готов движок


Так вон в хл1 же триапи был, насколько я помню им так же можно было рисовать что угодно (в рамках лимитов триапи и халфы конечно же). Не удивлюсь если там можно будет даже ему геометрию из какого нибудь .obj или .fbx скормить. Ещё я помню Сразу Рашен прикручивал .tga текстуры к клиенту халфы.

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

Этих инструментов уже с головой хватит чтобы при наличии пользовательского самописного загрузчика при загрузке карты сгенерировать геометрию, колизию и текстуры из форматов которые изначально не поддерживались.

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


Отправлено Дядя Миша 17-03-2025 в 15:19:

Да проще неподдерживаемый формат переконвертировать в поддерживаемый

Подведём промежуточные итоги. Параметры клип-плейнов я вывел в систему материалов, однако gl_ClipDistance доступен начиная лишь с версии GLSL 130, поэтому само уравнение плоскости я пока не прописывал. От загрузки матриц тоже полностью избавился. Все программы на Шоте переписаны с учётом изменившегося API, все материалы обновлены, устаревшие шрифты сконвертированы или сгенерированы заново, все шейдеры тоже обновлены с учётом использования новых юниформов (но пока что остаются в рамках версии 120). Сделана масштабная ревизия функций OpenGL, подтянуты те, которые используются в Core Profile. То есть в сущности сделана вся работа, кроме переписывания шейдеров на новую версию. Но я решил это оставить на самый последок, а вместо этого пройтись дальше по документу, хотя полагаю что там уже не будет ничего такого масштабного, по сравнению с тем, что я уже сделал и это заняло более двух недель. Ну посмотрим.

Добавлено 17-03-2025 в 15:44:

Поехали:

Цитата:
Separate polygon draw mode - PolygonMode face values of FRONT and BACK; polygons are always drawn in the same mode, no matter which face is being rasterized.

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

Цитата:
Polygon Stipple - PolygonStipple and Enable/Disable target POLYGON_-STIPPLE, and all associated state.

Не юзал и не юзаю.

Цитата:
Pixel transfer modes and operations - all pixel transfer modes, including pixel maps, shift and bias, color table lookup, color matrix, and convolution commands and state, and all associated state and commands defining that state.

Не юзал. Это что-то из времён OpenGL 1.0

Цитата:
Pixel drawing -DrawPixels and PixelZoom. However, the language describing pixel rectangles in section 3.7 is retained as it is required for TexImage* andReadPixels

Не юзал.

Цитата:
Bitmaps -Bitmap and the BITMAP external format

Даже не знал что OpenGL в такое умел.

Цитата:
Legacy OpenGL 1.0 pixel formats - the values 1, 2, 3, and 4 are no longer accepted as internal formats by TexImage* or any other command taking an internal format argument. The initial internal format of a texel array isRGBA instead of 1.TEXTURE_COMPONENTS is deprecated; always use TEXTURE_INTERNAL_FORMAT.

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

Цитата:
Legacy pixel formats - all ALPHA, LUMINANCE, LUMINANCE_ALPHA, and INTENSITY external and internal formats, including compressed, floating-point, and integer variants; all references to luminance and intensity formats elsewhere in the specification, including conversion to and from those formats; and all associated state. including state describing the allocation or format of luminance and intensity texture or framebuffer components

Вот этого вот вообще не понял. А что плохого в таких форматах?
У меня загрузчик текстур по возможности сохраняет в эти форматы просто ради экономии видеопамяти. Ну если уж текстура чёрнобелая, зачем её хранить в RGBA? То-то и оно, что незачем.

Цитата:
Depth texture mode - DEPTH_TEXTURE_MODE. Section 3.8.16 is to be changed so that r is returned to texture samplers directly, and the OpenGLShading Language 1.30 Specification is to be changed so that(r,r,r,1) is always returned from depth texture samplers in this case.

Это напрямую относится к предидущему кейсу. Т.к. DEPTH_TEXTURE_MODE мог быть либо LUMINANCE либо INTENSITY. Мне-то в целом пофиг, т.к. я не понял зачем эти режимы вообще нужны. Ну видимо и правда незачем, раз выбросили.

Добавлено 17-03-2025 в 17:35:

Продолжим. Переделал все текстурные форматы с GL_LUMINANCE и GL_LUMINANCE_ALPHA на GL_R и GL_RG соответственно. Потребовалось скопировать альфу в зелёный канал и настроить свиззлинг естественно.
Опять же то что раньше было в драйвере теперь вручную делается.

Цитата:
Texture wrap mode CLAMP - CLAMP is no longer accepted as a value of texture parameters TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_ - WRAP_R.

Ну тут понятно. Старый GL_CLAMP выбросили, а GL_CLAMP_TO_EDGE, который ранее был доступен в качестве расширения теперь вошёл в ядро и должен использоваться по умолчанию вместо GL_CLAMP.

Добавлено 17-03-2025 в 17:48:

Цитата:
Texture borders - the border value to TexImage* must always be zero, or an INVALID_VALUE error is generated (section 3.8.3); all language in section 3.8 referring to nonzero border widths during texture image specification and texture sampling; and all associated state.

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

Цитата:
Automatic mipmap generation -TexParameter* target GENERATE_-MIPMAP, and all associated state.

Эту фичу я выбросил из нового ксаша ещё в 2019-м. Теперь всё только вручную.

Цитата:
Fixed-function fragment processing -AreTexturesResident, PrioritizeTextures, and TexParameter target TEXTURE_PRIORITY; TexEnv target TEXTURE_ENV, and all associated parameters; TexEnv target TEXTURE_-FILTER_CONTROL, and parameter name TEXTURE_LOD_BIAS; Enable targets of all dimensionalities (TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, and TEXTURE_CUBE_MAP); Enable target COLOR_SUM; Enable target FOG, Fog, and all associated parameters; the implementation-dependent values MAX_TEXTURE_UNITS and MAX_TEXTURE_COORDS; and all associated state.

Выброшено. Осталось выбросить lodbias. Ну да дело нехитрое.

Добавлено 17-03-2025 в 18:00:

Цитата:
Alpha test -AlphaFunc and Enable/Disable target ALPHA_TEST, and allassociated state.

Вот это вот единственный случай, когда на свой страх и риск выбрасывать не буду. Я привык к альфа-тесту, он очень удобный, постараюсь этот функционал сохранить. Посмотрим что из этого получится. Там дело в том, что он у меня привязан к условиям в материале, чего не получится сделать другим способом. Не то чтобы это было прямо так уж принципиально, но с другой стороны я не видел ситуации чтобы альфа-тест где-то не работал.
Хотя это возможно потому что я ещё не переключался в кор-профиль или не переходил на версию шейдеров 1.3? Увидим. Пока что я проигнорирую это.

Цитата:
Accumulation buffers -ClearAccum, and ACCUM_BUFFER_BIT is not valid as a bit in the argument to Clear(section 4.2.3); Accum; the ACCUM_*_-BITS framebuffer state describing the size of accumulation buffer components; and all associated state. Window system-binding APIs such as GLX and WGL may choose to either not expose window configs containing accumulation buffers, or to ignore accumulation buffers when the default framebuffer bound to a GL context contains them.

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

Цитата:
Pixel copying -CopyPixels (the comments also applying to CopyTexImage will be moved to section 3.8.4).

Не юзал.

Цитата:
Auxiliary color buffers, including AUXi targets of the default framebuffer.

Не юзал.

Цитата:
Context framebuffer size queries -RED_BITS, GREEN_BITS, BLUE_BITS, ALPHA_BITS, DEPTH_BITS, and STENCIL_BITS.

Не юзал.

Цитата:
Evaluators -Map*, EvalCoord*, MapGrid*, EvalMesh*, EvalPoint*, and all evaluator map enables, and all associated state.

Не юзал.

Добавлено 17-03-2025 в 18:13:

Цитата:
Selection and feedback modes -RenderMode, InitNames, PopName, PushName, LoadName, and SelectBuffer; FeedbackBuffer and PassThrough; and all associated state.

Не юзал и не знаю зачем оно нужно.

Цитата:
Display lists -NewList, EndList, CallList, CallLists, ListBase, GenLists, IsList, and DeleteLists; all references to display lists and behavior when compiling commands into display lists else where in the specification; and all associated state.

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

Цитата:
Hints - the PERSPECTIVE_CORRECTION_HINT, POINT_SMOOTH_HINT, FOG_HINT, and GENERATE_MIPMAP_HINT targets to Hint(section 5.4).

Я юзаю только GL_LINE_SMOOTH_HINT, но его в этом списке нет.

Цитата:
Attribute stacks -PushAttrib, PushClientAttrib, PopAttrib, Pop- ClientAttrib, the MAX_ATTRIB_STACK_DEPTH, MAX_CLIENT_ATTRIB_-STACK_DEPTH, ATTRIB_STACK_DEPTH, and CLIENT_ATTRIB_STACK_-DEPTH state, the client and server attribute stacks, and the values ALL_-ATTRIB_BITS and CLIENT_ALL_ATTRIB_BITS.

В старом ксаше ещё немного юзал, в новом уже нет.

Добавлено 17-03-2025 в 18:19:

Цитата:
Token names and queries - all token names and queries not otherwise mentioned above for deprecated state, as well as all query entry points where all valid targets of that query are deprecated state (chapter 6 and the state tables)

Надеюсь мне debug output выдаст те места, которые больше использовать нельзя, хотя, следуя документу я вроде бы и так от них избавился. Ну а если нет - пусть драйвер ругается.

Цитата:
Unified extension string -EXTENSIONS target to GetString

Вот тут вообще не понял. Очевидно, что старая строка расширений больше неактуальна. Но что юзать вместо неё в этом разделе документа не сообщается. После всех изменений расширений, которые юзает Ксаш осталось мало совсем - ну может штук семь от силы. Из которых два расширения - это поддержка бинарных шейдеров (кэш) и пресловутый debug output. А остальные не требуют никаких функций, ну всякие там анизотропные фильтрации и бесшовные кубемапы, типа такого.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 18-03-2025 в 06:40:

С проверкой расширений разобрался, оказывается теперь есть glGetStringi которая возвращает расширения по одному. И проверять их теперь надо именно так. Так же сконвертировал на пробу парочку шейдеров - всё работает. Теперь список задач следующий:

1. перевести все шейдеры на версию языка 140
2. посмотреть, возможно добавить какие-то встроенные макросы в движок, чтобы они автоматически эмитились в исходные тексты шейдеров. Хотя я и противник этого, но посмотрю.
3. собственно сделать то, ради чего всё и затевалось - включить в wglCreateContext соответствующую версию Core Profile.
4. обновить reqtest с учётом сделанных изменений

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 18-03-2025 в 15:43:

Для пробы перевёл все шейдеры, относящиеся к Half-Life и ксаш-моду на новую версию GLSL 140, включил заветный Core Profile, по факту включения вычистил ещё несколько разных ошибок, в основном выбросил ненужное, код стал проще и чище. Но увы - фпс никак не поменялся, всё осталось по прежнему. Но Core Profile - ЗАРАБОТАЛ. Впрочем напоминаю, что это не самоцель, а всего лишь средство огородиться от проблем несовместимости на зоопарке пользовательского железа. Достиг я этой цели или хотя бы упростил себе задачу в её достижении - покажет время и предстоящий бета-тест. Ну а на данный момент мне осталось выполнить ещё две задачи:

1. обновить reqtest с учётом сделанных изменений и выложить его народу на первичное тестирование, чтобы получить предварительную обратную связь
2. перевести оставшиеся шейдеры на GLSL 140.

Но в целом можно сказать, что задача близка к завершению, точнее первая половина этого плана, повторюсь, нам ведь нужен не сам Core Profile, а чтобы у всех работало.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 21-03-2025 в 10:52:

Можете меня поздравить! Переход на Gl Core Profile успешно завершён!
По времени это заняло 18 дней. Конечно же есть у нас товарищи, что пишут браузеры за одну ночь, но увы - мне за ними не угнаться

Так что скоро будет масштабное обновление, список оставшихся задач:

1. завершить рефакторинг движка, поскольку Core Profile очень многое затронуло и теперь можно без опаски выбросить остатки легаси.

2. Обновить документацию с учётом всех изменений

3. Дождаться обновлённой версии Джека с одним маленьким но очень важным багфиксом

4. Собственно выход очередной бета-версии

__________________
My Projects: download page

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

Цитата:

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


Временная зона GMT. Текущее время 04:36.
Показать все 479 сообщений этой темы на одной странице

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