Ну чтож, движок находится в разработке почти пять лет. Давайте подведём промежуточные итоги.
Что было создано:
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.
Начиная с пятого пункта идут задачи уже на следующий год, с первого по четвертый планирую управиться уже в этом. Разумеется будет и большое обновление для бета-тестеров в этом году.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.
Дядя Миша
Это здорово! Великолепно что движок развивается
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Открой любой проект на Юнити, оно везде одинаковое. И да, навмеш агент это констрейнт. Вот сам навмеш увы вшит в движок и ничего с ним не поделать, это я смело могу заявить как один из недостатков Юнити. Благо есть кастомные. О чём я и говорю что за простоту всегда приходится платить гибкостью.
Ты как-то странно используешь слово констрейнт. В моём представлении это шарнир такой с определённым кол-вом степеней свободы. Где навмеш, а где шарнир?
Цитата:
Так и тут. Ну ничего тебе не мешает обернуть констрейнт в инстанс и спавнить его как обычные халфовские энтитии.
Ну вот тоже абсолютно непонятная для меня терминология. Каким образом констрейнт, обвёрнутый в инстанс может стать обычной халфовской энтитью? Что это за чертовщина такая.
Я мыслю вот какими категориями:
1. Есть сцена, обычно она принадлежит нулевому объекту worldspawn.
2. Есть все остальные объекты, которые взаимодействуют друг с другом на этой сцене.
3. Сцена обеспечивает статичную геометрию, запечённое освещение, нав-меш или аи-сетку, а так же коллизию.
4. Объекты коллидят со сценой и друг с другом.
5. У объектов может быть модель, одна, но любая, а может и не быть.
6. Возможности объекта зависят от наличия модели. Очевидно если нет модели, то проиграть анимацию не получится.
7. Движок взаимодействует с объектами - считает для них коллизию, посылает по сети, сохраняет и восстанавливает их состояния, рисует на экране.
Ну и на базе всего этого делается игра.
А тебя послушать, так в Юнити сплошь какие-то констрейнты, обвёрнутые в инстансы и кости для них можно настраивать прямо из редактора.
Я видел очень много игр на голдсорсе, но никаких констрейнтов в каждой энтите, да ещё и обвернутой в инстанс там и близко не было. А игры были.
А теперь ты мне говоришь, что на этих констрейнтах можно всю кваку сделать. Ты уж пожалуйста своими словами изложи как это у вас устроено, чтобы я понял.
Добавлено 04-08-2024 в 15:55:
Цитата:
Все объекты в Юнити абстрактные, и констрейнты абстрактные. И для игровых объектов, и для ИИ, и для интерфейса, и для всего остального. Объект это просто точка с именем, а констрейнт задаёт ему свойства. Твои скрипты тоже можно как констрейнт использовать.
Абстрактность бывает разного уровня, вот я что хочу сказать. Сугубая конкретика, это если ты в коде создал объект sunduk_1 и поместил его единственный раз на одну сцену в строго определённом месте и прописал ему действия, типа если игрок открыл - взять несметные сокровища.
Ну или что-то в этом роде. А ты мне толкуешь за абстракцию, когда в юнити объект - это вообще отдельно висящая матрица трансформации, а больше и нет ничего. И её прямо в редакторе можно куда-то там навесить.
Дядя Миша писал: Ты как-то странно используешь слово констрейнт. В моём представлении это шарнир такой с определённым кол-вом степеней свободы. Где навмеш, а где шарнир?
Как я говорил объект это пустышка с именем. А класс который задаёт ему свойства это констрейнт, например - трансформ, колайдер, аниматор, ригидбоди, шарнир, навмеш агент (не путать с самим навмешем, агент просто говорит искать путь объекту в его пространстве), пользовательский скрипт и т.д.
Цитата:
Дядя Миша писал: Ну вот тоже абсолютно непонятная для меня терминология. Каким образом констрейнт, обвёрнутый в инстанс может стать обычной халфовской энтитью? Что это за чертовщина такая.
Ну вот как монстры спавнятся в халфе? Тоже самое. Монстр это сложная штука которая состоит из кучи объектов и спавнит другие объекты. Т.е. по сути префаб. Но ты можешь просто создать объект пустышку и сказать ему - поставь этот префаб здесь.
Вот например Доктор Тресси сделал брашевой салют из множества энтитей, а ты сказал что так не годится, и просто сделал 1 энтитию env_bsalut которая спавнит все эти энтитии уже настроенные во время игры.
Цитата:
Дядя Миша писал: 1. Есть сцена, обычно она принадлежит нулевому объекту worldspawn.
2. Есть все остальные объекты, которые взаимодействуют друг с другом на этой сцене.
3. Сцена обеспечивает статичную геометрию, запечённое освещение, нав-меш или аи-сетку, а так же коллизию.
4. Объекты коллидят со сценой и друг с другом.
5. У объектов может быть модель, одна, но любая, а может и не быть.
6. Возможности объекта зависят от наличия модели. Очевидно если нет модели, то проиграть анимацию не получится.
7. Движок взаимодействует с объектами - считает для них коллизию, посылает по сети, сохраняет и восстанавливает их состояния, рисует на экране.
Ну и на базе всего этого делается игра.
1. Со сценой в целом всё верно. Только активных сцен может быть несколько в пространстве, включая DontDestroyOnLoad (из названия думаю понятно).
2. Не просто объекты, а иерархия, ну как та панелька в кварке. Кроме объектов в иерархии может быть префаб, хотя это тоже объект.
3. Нет, сцена это просто контейнер с объектами, ничего она про геометрию не знает. В Юнити статичная геометрия это просто обычная модель с флагом static которой ты можешь отдельно от всего уровня перезапечь лайтмапу. Ну либо сразу всем. Тоже самое с запеканием навмеша.
4. В Юнити есть свойство (констрейнт) для объекта - коллайдер, есть бокс коллайдер (ббокс), есть капсула из третьей кваки, есть сфера, есть терраин коллайдер, есть мешколайдер как в сорсе (в т.ч. его можно конвертировать в конвекс), так же их можно переключить в режим триггера. Всё взаимодействие с физикой происходит через него.
Если ты повесишь ещё ригидбоди на тот же объект, он автоматом его подцепит и уже будет сталкиваться с другими объектами со всеми законами физики.
5. В Юнити так же, но моделей у объекта может быть несколько, как и колайдеров например один физический - второй для триггера у двери. Так же модель может быть процедурной (например маршевые кубы, БСП, блобы или ещй какой то изначально не поодерживаемый формат геометрии), потипу TriApi из халфы. Это тоже отдельный констрейнт Меш рендер, а файл модели Меш Фильтер.
6. Логично в целом, но Юнити без разницы, там один объект может управлять другим.
7. Юнити так же, вот представь у тебя есть серверная стойка. Это объект, тебе надо поставить в эту стойку сервера с нужными свойствами, это констрейнты или в терминологии юнити - компоненты, классы. Констрейнты это больше из 3д пакетов, но смысл у них тот же самый, я просто использую этот термин поскольку ты уже понимаешь его смысл.
Дядя Миша писал: А тебя послушать, так в Юнити сплошь какие-то констрейнты, обвёрнутые в инстансы и кости для них можно настраивать прямо из редактора.
Я видел очень много игр на голдсорсе, но никаких констрейнтов в каждой энтите, да ещё и обвернутой в инстанс там и близко не было. А игры были.
А теперь ты мне говоришь, что на этих констрейнтах можно всю кваку сделать. Ты уж пожалуйста своими словами изложи как это у вас устроено, чтобы я понял.
Понимаю я наверное запутал тебя, я не говорил что всю кваку сделать, нет ты перепутал всё. Я говорю что многие простые вещи можно собрать на I/O системе (к примеру теже двери), на ней к слову в Юнити почти весь UI строится. Ты просто отлавливаешь событие в одном компоненте и передаёшь событие другому.
Вот к примеру как я делал звуки у дверей:
В поле Name пишем имя эвента которое отлавливаем.
Добавлено 04-08-2024 в 21:49:
Дядя Миша
Посмотри личку, я ещё тебе прислал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Как я говорил объект это пустышка с именем
Но в халфе оно не так. Да и в новом Ксаше тоже. У объекта может не быть никакого имени, имя ему по большому счёту нужно только для корректной десериализации.
Цитата:
FiEctro писал: А класс который задаёт ему свойства это констрейнт, например - трансформ, колайдер, аниматор, ригидбоди, шарнир, навмеш агент
Очень странный механизм, очень. Я использоую наследование, ну как и в халфе, собственно, хотя там оно было добавлено скорее от балды, а у меня несёт реальную функциональность.
Т.е. вот есть класс CBaseEntity - на его основе можно создавать совсем простые объекты. Есть класс CBaseAnimating - на его основе уже создаются анимированные модели. Есть класс CbaseToggle - тут у нас двери и лифты.
Прикол в том, что побольшому счёту (а особенно в новом Ксаше) это дикая условность. Все эти классы добавлены просто для удобства и ничего не мешает создать класс вообще без наследника и получить в нём ровно тот же самый функционал, что и в унаследованных классах. То есть здесь нет каких-либо ограничений. Можно вообще нагородить сколько угодно изолированных классов, которые ни от чего не наследуются - это будет так же корректно работать как и существующая система. В Юнити, насколько я знаю подобный трюк провернуть нельзя - там все объекты обязаны наследоваться от какого-то базового, который корнями уходит в движок.
Цитата:
FiEctro писал: Монстр это сложная штука которая состоит из кучи объектов и спавнит другие объекты
Да нет же. Монстр это один объект. Унаследованный от CBaseMonster.
Цитата:
FiEctro писал: Вот например Доктор Тресси сделал брашевой салют из множества энтитей, а ты сказал что так не годится, и просто сделал 1 энтитию env_bsalut которая спавнит все эти энтитии уже настроенные во время игры.
Да, но мой салют не был брашевым...
Цитата:
FiEctro писал: Только активных сцен может быть несколько в пространстве
Я такое не делал. В принципе это не противоречит архитектуре движка, но я пока не представляю где и зачем мне это понадобится. А пока я этого не представляю, лучше и не пытаться это делать. Вполне вероятно, что это костыль самого Юнити, призванный компенсировать какие-то недостатки. Ну например отсутствие бесшовного чейнджлевела.
Цитата:
FiEctro писал: Не просто объекты, а иерархия, ну как та панелька в кварке. Кроме объектов в иерархии может быть префаб, хотя это тоже объект.
Я долго думал над иерархической природой сцены, но так ни к чему и не пришёл. Тут ещё сказывается мой опыт в разработке языка программирования. Подобное упражнение очень сильно прочищает мозги и те вещи, которые всегда казались очевидными - перестают таковыми быть, открываются новые горизонты. Вот и в случае с иерархичностью сцены. Нет четкого критиерия, по которому должна осуществляется эта иерархичность. Родительский трансформ? Но этого явно недостаточно чтобы заявить об иерархии. Объекты бывают связаны между собой разными неявными способами и далеко не всегда можно определить какой у какого в подчинении. К примеру модель оружия приаттачена к модели NPC физически, но она же отправляем ему эвенты с анимаций своей модели оружия. Т.е. в каком-то смысле выступает источником команд, хотя с точки зрения физики - это явно подчинённый предмет.
Цитата:
FiEctro писал: В Юнити статичная геометрия это просто обычная модель с флагом static которой ты можешь отдельно от всего уровня перезапечь лайтмапу. Ну либо сразу всем. Тоже самое с запеканием навмеша.
Минимум компиляции да, я помню.
Цитата:
FiEctro писал: В Юнити есть свойство (констрейнт) для объекта - коллайдер, есть бокс коллайдер (ббокс), есть капсула из третьей кваки, есть сфера, есть терраин коллайдер, есть мешколайдер как в сорсе (в т.ч. его можно конвертировать в конвекс), так же их можно переключить в режим триггера. Всё взаимодействие с физикой происходит через него.
Свойство - это проперти, а не констрейнт. Констрейнт в переводе на русский это ограничение, ограничитель. А что касается физики, то я выбрал такой подход, где разработчику вообще не надо думать ни про какие коллайдеры. Единственный выбор который приходится делать - это аппроксимация NPC. По хитбоксам или просто коробкой\капсулой там.
А статичная геометрия всегда имеет точную коллизию. Ну и в дальнейшем надо будет сделать коллизию для анимированных моделей с обратной связью. Это когда анимированная дверь может реально давить игрока и отъезжать назад. Что-то такое.
Цитата:
FiEctro писал: В Юнити так же, но моделей у объекта может быть несколько, как и колайдеров например один физический - второй для триггера у двери.
Я мог бы это сделать, но по моему убеждению это нарушает тиеричность и путает. Когда у простейшего объекта появляются дополнительные свойства. И это всегда приводит к проблемам менеджмента. Т.к. мы даже не знаем толком сколько моделей у объекта и за что они отвечают, если получаем доступ в него со стороны.
Цитата:
FiEctro писал: Логично в целом, но Юнити без разницы, там один объект может управлять другим.
Разумеется. Взять те же scripted_sequence из халфы. Своих моделей у этой энтити не было, но они управляли монстрами.
Цитата:
FiEctro писал: это констрейнты или в терминологии юнити - компоненты, классы
Это вот щас чо было? Это не официальный термин Юнити, ты сам его придумал использовать в таком качестве?
Цитата:
FiEctro писал: Вот к примеру как я делал звуки у дверей:
Нет, ты путаешь. Это анимационные события. Причём тут система ввода-вывода? Впрочем, в халфе такое тоже было. Когда Гордон после поездки в вагончике заходит в холл, его встречает Барни на крутящемся стуле. Так вот верчение этого стула как раз и рулится из эвента анимации. Там таргентейм жестко закомпилен прямо в модель барни.
Хочу уточнить насчет Unity.
Классы движка можно наследовать, можно создавать классы без наследования от классов движка, ну как это делается в C#.
Если говорить про IDE, то обычное дело когда есть огромные ветки из иерархий вложенных объектов. У каждого объекта может быть множество компонентов, это специальные классы движка, которые добавляют функционал объектам. Есть куча готовых компонентов, можно свои написать. Все это может быть по разному взаимосвязано.
Работа с IDE примерно такая: сделал пустышку, навесил нужные компоненты. Обычно логику игровых механик выделяют в "чистые" С# классы, но можно прям и в компонентах писать.
Да стоит упомянуть, что у пустышки захадкожен компонент "Трансформ" отвечающий за положение в иерархии и координаты на сцене.
__________________
Моё имя Snecy, но все меня зовут бухать
Дядя Миша
Ты все всегда, так красиво описываешь и рассказываешь - читать конечно интересно )
Но, ты бы выкладывал, какие-нибудь обычные демки для тех, кто просто хочет посмотреть, тупо побегать и не более того ) Ну еще баги там поискать, если они есть )
__________________
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.
(_-=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.