HLFX.Ru Forum Страницы (251): « Первая ... « 242 243 244 245 [246] 247 248 249 250 » ... Последняя »
Показать все 3764 сообщений этой темы на одной странице

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=5297)


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

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

Добавлено 10-06-2024 в 23:40:

Цитата:
FiEctro писал:
Это глобальные эвенты их создаёт фреймворк движка, а пользовательские скрипты на них подписываются. Соответственно если объект удаляется то он просто отписывается от них и всё. Если всё же другие объекты на него ссылались ну они будут возвращать Null тогда, хотя я обычно делаю проверку. Как бы ничего страшного игра не крашнется если где то случайно разработчик ссылается на несуществующий объект, просто консоль сообщит ему это.

Ты меня опять не понял. Если объект удаляется - будет ли вызван какой-то эвент?
В Шоте, к слову нет никаких глобальных подписок со стороны движка - всё в ведении пользователя и компилятора. То есть там есть 5-6 глобальных вызовов, из которых, собственно всё и происходит.

__________________
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-06-2024 в 21:44:

Цитата:
Дядя Миша писал:
Ты меня опять не понял. Если объект удаляется - будет ли вызван какой-то эвент?


Вроде нет. Но ты можешь создать свой эвент для таких вещей если я тебя правильно понял.
https://stackoverflow.com/questions...s-are-destroyed

Цитата:
Дядя Миша писал:
В Шоте, к слову нет никаких глобальных подписок со стороны движка - всё в ведении пользователя и компилятора. То есть там есть 5-6 глобальных вызовов, из которых, собственно всё и происходит.


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

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


Отправлено Дядя Миша 11-06-2024 в 06: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'


Отправлено Camblu_Buildovich 11-06-2024 в 20:40:

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

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

__________________
Я когда был маленький и только-только увидел Quake я сразу же решил сделать его продолжение и даже придумал для него название: Quake 2!
А потом я узнал что Quake 2 и даже Quake 3 только што вышел.
Вот я расстроился


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

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

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


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

Очередной важный прорыв совершён сегодня. Движок, как вы знаете, наследуется от Xash3D, а тот в свою очередь - от семейства движков ID Software. В этом нет ничего плохого, на самом деле подавляющее большинство, так или иначе наследует если не кодобазу, то хотя бы идеи Кармака. И конечно наследуется не только хорошее, но и плохое.
Когда речь идёт об идеях, то что-то можно просто не брать. Когда мы имеем дело с какой-то древней кодобазой, то туда попадает разное.
В частности - биты контентсов (содержимого). Ну все наверное про них в курсе, кто имел дело с этими движками. Весь ужас в том, что этих контентсов не так уж и много - всего 32 штуки, поскольку они хранятся в 32-х разрядной целочисленной переменной, но это-то ещё ладно, обычно такого кол-ва хватает за глаза в рамках одной игры. Проблема в том, что к этим контентсам привязан весь workflow - их смотрят компиляторы, движок, при этом вы даже можете толком не знать какие биты используются тулзами и для чего. К тому же они запечены уже в готовой геометрии.

Подобные на первый взгляд простейшие вещи вычищать из среды невероятно сложно, у меня это заняло почти пять лет - начиная с 2019-го года. Правда надо признать, что я не особенно торопился на этот счёт.
Итак, как же мне удалось от них избавиться?
Для утилит введено понятие контентсов компилятора - их всего-навсего три шутки: небо, солид и ликвид. Большего компиляторам и не требуется, им вполне достаточно такого абстрактного разделения.
Движок знает ровно один контент - CONTENTS_SOLID. Я бы конечно мог избавиться и от него, но тогда бы получилось как в вашей любимой Unity - по дефолту вся геометрия не коллидит и игрок бы вываливался с уровня почём зря. Не думаю, что кому-то бы понравилась такая "гибкость".
Так что один бит захардкоден и навряд ли вызовет неудобства, а остальные 31 бит - полностью в вашем распоряжении.
Вы можете создавать разные типы воды, окон, решёток, вообщем всё что угодно для фильтрации коллизии.

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

__________________
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-06-2024 в 11:31:

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


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



Цитата:
Дядя Миша писал:
их всего-навсего три шутки: небо, солид и ликвид.


Есть триггеры ещё, это вроде и не солид, и не ликвид и не небо.

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


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

Цитата:
FiEctro писал:
Есть триггеры ещё, это вроде и не солид, и не ликвид и не небо.

Верно. Но, как я уже и сказал - можно задавать сразу несколько бит для коллизии. Мы у триггера ставим CONTENTS_TRIGGER, а CONTENTS_SOLID - убираем. Вот и получается, что на триггеры реагирует только определённый тип трассы. И всё - в ведении пользователя. У меня ничего не прибито гвоздями, как на картинке выше. Пользователь сам определяет типы контентсов и за что они отвечают. Но разумеется есть полноценные примеры использования.

Добавлено 12-06-2024 в 16:38:

Кстати, можно создавать такие штуки, которые одновременно и вода и триггер, к примеру.

Добавлено 12-06-2024 в 16:39:

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

Добавлено 12-06-2024 в 17:04:

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

__________________
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-06-2024 в 14:09:

Дядя Миша
Ты наверное мои посты не читаешь.

Цитата:
FiEctro писал:
Ещё в Юнити есть слои (к слову слои есть преднастроенные, и пользовательские


Преднастроенные можно настроить по своему, ну или вообще их не использовать. Галочки что с чем взаимодействует тоже можно настраивать.

А у тебя пользователь может создавать свои физические слои?

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


Отправлено Crystallize 12-06-2024 в 14:14:

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

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


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

Цитата:
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 17-06-2024 в 09:05:

XashNT же уже умеет овербрайты?


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

Crystallize умеет всё что можно сделать в шейдерах.

__________________
My Projects: download page

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

Цитата:

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


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

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

Каждая модель может использовать информацию из мировой модели для эффективного отсечения видимости, подавая на вход тесселятора список из видимых поверхностей. Поверхностей в каждой модели может быть сколько угодно. У поверхности есть материал (ссылка на систему материалов), объем для отсечения по фрустуму и для поиска в трёхмерном пространстве (например пересчение с источниками света), некоторый уникальный набор данных - как правило связанный с освещением, индексы источников света, которые взаимодействуют с данной поверхностью, и ссылка на VBO, хранящий её геометрию. Ссылка на шейдер находится уже внутри материала и задаётся пользователем. Там же находятся GL-стейты и юниформы, связанные с реальными данными. Данные могут быть как встроенными (например текущее время или позиция объекта), так и определёнными пользователем. Ну да я об этом уже не раз писал.

Сам тесселятор представляет из себя очень простой механизм. Он состоит из двух списков. Первый список - это непрозрачные поверхности, второй, соответственно прозрачные. Одна и та же модель может эмитить свои поверхности в разные списки в зависимости от того, какие режимы отображения выставлены в материале пользователем. Дополнительно полупрозрачные поверхности ещё сортируются по дальности от наблюдателя. Ну а сама отрисовка - полностью абстрактный механизм, это просто цикл перебора списка поданых на растеризацию поверхностей, бинд материала (включает в себя бинд шейдера, текстурных юнитов, юниформов и выставление GL-стейтов) и вызов VBO на отрисовку.
То есть этот механизм един для абсолютно всех поверхностей и не содержит никаких условий для каких-то особых типов рендеринга.
Собственно это тот самый момент, который меня больше всего нервировал в старом ксаше - невозможность формирования абстрактного списка для отрисовки. Потому что у нас были отдельные вызовы для отрисовки партиклей, лучей, декалей, была проблема с полупрозрачными мешами внутри студиомоделей, наконец у каждого типа моделей были свои собственные, непересекающиеся наборы юниформов.
Всё это было крайне тяжело поддерживать и расширять. Теперь же это абстрактный универсальный конвейер, где любой тип модели имеет полный набор возможностей. То есть мы можем дать освещение лучам, партиклям. трейсерам, если нам вдруг по смыслу это понадобится.
Ну скажем партикли будут не искрами, а пылинками - разумеется в таком случае им понадобится нормальное освещение. Да и туман наложить неплохо бы. Теперь всё это полностью контролируется из текстовых описаний самих материалов - лезть в ядро движка нет никакой нужды.

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

Добавлено 18-06-2024 в 12:36:

Ещё хотелось бы отметить, что в переносе старых эффектов немаловажную роль играет тот факт, что теперь весь этот антураж должен быть аппаратно ускорен. В смысле - записан в VBO и трансформирован на GPU. Иначе полностью теряется смысл в разработке движка на "модерновой" версии OpenGL. Модерновой версией, насколько я помню начали называть API 3.0 и выше. Когда уже официально запретили использование glBegin.

Правда стоит отметить что на данный момент XashNT всё же использует бегины - для рендеринга консоли и сетевого графика. Но вся внутриигровая ситуация и HUD - реализованы на VBO. Постепенно я полностью откажусь от вызовов glBegin и тогда можно будет переключиться на Core-context, что по идее положительно скажется на работе с видеокартами от Intel (хотя 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 18-06-2024 в 11:26:

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


Кстати в Юнити можно каждой камере выбирать отложенный рендеринг или форвард. Грубо говоря одна камера у тебя может работать в одном режиме, другая во втором. Редко, но иногда бывает полезно.

Ещё можно комбинировать изображение с 2х камер, например чтобы отрисовать 3д интефейс поверх обычного изображения.

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

https://docs.unity3d.com/ru/2018.4/...-Projector.html

А ещё им можно было делать простые декали но с сильными ограничениями.

Цитата:
Дядя Миша писал:
была проблема с полупрозрачными мешами внутри студиомоделей


Вот да, в Юнити это тоже проблема, сортировка и освещение моделей с 8ми битной альфой (как мне объяснили это ограничение Z-буфера). С монохромной альфой сортируются они неплохо, и освещение и тени есть. А вот 8битную приходится комбинировать в 2 прохода с 8мибитной, сортируется тоже не очень, зато есть освещение и тени. Надеюсь в Ксаше проработаешь этот момент.

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

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


Временная зона GMT. Текущее время 20:25. Страницы (251): « Первая ... « 242 243 244 245 [246] 247 248 249 250 » ... Последняя »
Показать все 3764 сообщений этой темы на одной странице

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