![]() |
Показать все 3825 сообщений этой темы на одной странице |
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)
XashNT: блог разработчика
Разработка движка так или иначе носит характер ключевых звеньев, цепляющихся одно за другое. Одна из фундаментальнейших вещей это организация уровня. Всё остальное так или иначе строится вокруг нее. И от этого естественно вплотную зависит конечный результат. Посмотрим. У меня уже был неудачный опыт в 2015-м году, но ведь на тот момент я во всём этом разбирался гораздо хуже. Это вторая итерация, задача имеет следующий вид:
1. построить формат уровня, отвечающий современным требованиям. То есть как минимум он должен спокойно переваривать детализацию уровня Metro Exodus, ну или что-то в этом духе. Но при этом уметь компилировать и старые-добрые карты, типа ad_sepulcher. Вообщем необходимо достигнуть баланса между брашами и моделями, чтобы каждый для себя мог выбрать оптимальный способ построения левелов. Кому-то нравится делать уровни моделями? Пожалуйста, из брашей будут использоваться только триггеры и водичка. Ну и скайбокс конечно. Нравится кубать брашами - аналогично нет проблем. То есть вот такое на первый взгляд противоречивое требование. Это задел на потенциальное расширение аудитории движка в будущем.
2. Компиляция должна проходить быстро. Чтобы как минимум избежать справедливых упрёков в том, что иные движки вообще начисто её лишены. Сами понимаете если у нас будут уровни, где 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'
Поскольку ожидается большая порция экспериментов связанных с изменением формата карт, моделей и прочего, я решил написать универсальный базовый класс-абстракцию, от которого будут наследоваться все типы моделей. В теории это позволит иметь зоопарк форматов, но у меня несколько иная цель. Кстати говоря этот же механизм может быть использован для бесшовной подгрузки новых уровней.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Ты действительно этого хочешь?
__________________
Ну вот, а говорите я ваши движки обсираю. Сразу видно прогресс, а то так бы до пенсии на кубсп и сидели.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
nemyax
Наши цели ясны, задачи определены, за работу, товарищи!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В какой-то мере вышеозвученная идея реализована в том же даркплейсе, но поскольку он на чистом Си, там конечно нет никаких виртуальных методов, там указатели на функции. Идея в том, чтобы не просто сделать такие загрузчики, а чтобы разместить в наследуемых классах абсолютно все методы взаимодействия с загруженными ресурсами, выведя за скобки лишь описания текстур и материалов. То есть вот у нас стандартные методы, LoadModel, DrawModel, CollideModel и через них осуществляется взаимодействие. А внутри может быть как BSP, там и студиомоделька. Што немаловажно, подобный подход, позволит, например иметь в качестве мира эту студиомодель. Или загружать одновременно следующий уровень, не выгружая преведущего, а в момент чейджлевела, просто поменять местами указатели. Ну и разумеется зоопарк форматов. Но повторюсь, зоопарк мне больше нужен для изолированного тестирования новых фичей, чтобы не вносить изменения в уже отлаженную ветку одного формата, а сделать рядом аналогичный и спокойно сравнивать регрессии. Есть у подхода и два минуса, точнее даже не совсем минусы, а потенциальные UB. Во первых как это подружить с кэшированной информацией для каждого эдикта, во вторых - отрисовка полупрозрачных объектов, которая как известно требует сортировки. Впрочем эти две проблемы остаются в любом случае, независимо от архитектуры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На данный момент я так понимаю, XashNT еще только в стадии проектирования?
На данный момент XashNT под угрозой срыва. Буквально час назад выяснилось, что на умирающем винте всё-таки повредились бэкапы и часть текущих исходников. Бэкапы повреждены с начала февраля, а в исходниках client.h и cl_frame.cpp. Не знаю удастся ли это восстановить. Все три резервные копии повреждены, архивы не восстанавливаются.
Добавлено 20-07-2019 в 12:43:
Но покрайней мере остальные части движка компилируются, только ядро не собирается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Понятно, что поздняк и советы постороннего, но попробовал бы бакапиться на bitbucket-е. Там есть приватные репозитории забесплатно. Я пользуюсь, нравится.
проблема в том, что бэкапов минимум шесть источников и абсолютно повезде битые архивы. И как битые - наглухо. Они солидные и без информации для восстановления, когда-то очень давно, в 2007-м году, я поленился прописать этот ключик. Я пытаюсь спасти эти архивы с абсолютно любого диска и абсолютно везде они битые. Одному богу известно когда это вообще началось, ведь диск умирает достаточно давно. Но есть и хорошая новость - client.h и cl_frame.cpp всё таки удалось спасти в целости со старого диска с рабочего компьютера с отформатированного раздела. Таким образом я восстановил работоспособность актуальной копии исходников. А плохая новость заключается в том, что потеряны абсолютно все бэкапы новый ветки, начиная с февраля этого года.
Добавлено 20-07-2019 в 16:32:
Ура. Удалось спасти еще два бэкапа за 24-е и 25-е марта этого года. Если учесть, что апрель-май были отданы работе над параноей, то это почти-что средняя точка, для отладки пригодится. Ну хотя бы не пустое место.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Напомнило вот эту душераздирающую историю: http://www.anim8or.com/smf/index.php/topic,5743.0.html
Там всё кончилось хорошо, он переписал свои потеряшки.
Проблема заключалась в том, что все мои архивы-бэкапы оказлись битыми. И вот это конечно было совсем уму нерастяжимо. Они как NAN расползлись по всем хранилищам. А ведь я был уверен что у меня есть актуальные бэкапы на фрэшке, но увы. Впрочем спасённого достаточно для полноценного продолжения работы. В промежуточных бэкапах не было ничерта интересного.
Добавлено 20-07-2019 в 17:26:
Если я немного туманно написал: текущий прогресс полностью сохранён. Утеряна только б0льшая часть бэкапов в промежутке между февралём-апрелем.
Добавлено 20-07-2019 в 17:28:
Мне это напомнило начало разработки Xash3D. Тогда я точно так же потерял стартовые бэкапы с февраля по июнь. Правда там у меня ничего не полетело. Я их сам удалил, подумал что не пригодятся. Так и оказалось.
Добавлено 20-07-2019 в 17:32:
Ну чтож, выводы из случившегося сделаны. Написан скрипт для тестирования всех бэкапов на валидность, а к скрипту создания бэкапа добавлен параметр сохранения информации для восстановления.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож. Не всё так просто, как казалось бы. Испорчены еще cl_view.cpp и cl_gameui.cpp.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша gui? Может оно и к лучшему, и в NT не будет дурацкоко won меню? Или я не о том подумал?)
Я уже всё восстановил, иначе бы ядро не скомпилилось.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Потихоньку переписываю вообще всё. Заворачиваю в синглтоны и атд по смыслу. В движке накопилось очень много мест для шареного кода, эти места лучше всего реализовать в виде закрытых классов. Конечно будь я помоложе, я бы всё это разломал на отдельные дллки, но прав был тот чувак с геймдева, который когда-то сказал мне, пока ты молод и неопытен, тебе хочется всё разделить на модули. А когда ты уже искушенный, для тебя оптимальмым является единый экзешник и никакого DLL Hell. Сейчас, спустя 13 лет, я понимаю, насколько же он был прав.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Lev +1.
Дядя Миша переноси гуй движка на mainui_cpp. Раз уж и так всё на плюыс переводишь.
А дллки это всё же удобно. Конечно, когда есть цель сделать какой-то модуль опциональным или заменяемым.
__________________
Xash3D FWGS форк
Переписываю загрузчик и менеджер текстур. Фактически - полдвижка. Где-то на этой точке необратимо дропнется потдержка восьмибитных текстур и прочей экзотики, типа впечатывания номера билда в массив пикселей.
Останется только три базовых формата - bmp, tga и dds. Причём, как водится, первые два - для разработки, а последний уже для финальной сборки. Впрочем, в том же крайэнджине в качестве формата источника юзают TIFF, но насколько я помню TIFF это вообще мета-контейнер, а не формат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
На каком контенте тестируешь?
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В процессе перекраивания API и отрезания ненужного в рамках новой парадигмы, после очередного тестового запуска вдруг выскочила давно забытая надпись.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>You use is too old version
Ты использовать слишком старая версия!
Добавлено 08-08-2019 в 22:42:
Не мучай трубы.
__________________
Xash3D FWGS форк
Иисус, ваш терапевт имеет лот, чтобы ответить для!
Английский язык через канпелятор не прогонишь
Если вы хотите мой совет - дайте это дерьмо вверх!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пришло время избавиться от структурки entvars_t. Ну это которая pev->
Эта зараза пронизывает всю серверную часть движка, поэтому процесс будет непростым.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>https://hlfx.ru/forum/attachment.ph...=&postid=182326
там блуум от неба или?
__________________
http://www.moddb.com/mods/monorail-quest
годреи это. Да они есть в финальной версии XashXT, сюда по наследству попали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff но на клиенте нет entvars_t. Да и энтварсы не для синхронизации. Для этого entity_state_t, а вот что с ним Дядя Миша решит делать...
Добавлено 10-08-2019 в 17:34:
string_t я надеюсь тоже под нож?
__________________
Xash3D FWGS форк
__________________
XaeroX
А чем он плох? (без троллинга, действительно любопытно).
__________________
http://www.moddb.com/mods/monorail-quest
XaeroX как вариант. Хотя что-то мне подсказывает, что Дядя Миша наврядли что-то использует из STL.
Добавлено 10-08-2019 в 17:53:
thambs string_t-то? Ну, в первую очередь, это рудимент от кваки, где виртуальная машина работала со строками довольно бедно и фактически лишь давала идентифактор. Может я тут где-то ошибаюсь.
Valve запихнули проблему ещё дальше, сделав из string_t просто разницу указателей. В итоге литералы у нас идут в MAKE_STRING, а генерируемые строки в ALLOC_STRING.
__________________
Xash3D FWGS форк
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX ну черт его знает. В условиях отсутствия ВМ я не вижу смысла так работать со строками.
Я на самом деле и не против. Просто string_t должен быть явно помечен как платформозависимый и вообще не давать возможности разработчику записывать его в файл(о_О), передавать по сети(что только в воспаленное сознание не придёт), сравнивать его численное значение с другими, помимо равенства наверное, да и вообще не иметь доступа к нему именно как идентификатору.
Именно он был и есть самой большой проблемой при порте на 64-битные указатели.
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Потихоньку переношу из entvars_t в CBaseEntity. Их там более ста штук, вот такая тупая работа и отымает чёртову уйму времени. Попутно жы еще пишу разные новые механизмы, типа парсера новых кейвалуев, поиска по строкам в DATAMAP и прочего. Ну и стараюсь убрать эту порочную практику, когда для новых энтить вовсю использовались переменные из entvars_t подходящие по типу, чтобы не возится с описанием IMPLEMENT_SAVERESTORE и прочей гадости. Помоему это Лаури первым придумал, этот фантазёр.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
это из-за этого всякие полезные параметры называются неочевидными ключами вроде netname и подобного?
__________________
http://www.moddb.com/mods/monorail-quest
Именно так, да. В халфе довольно сложная возня с объявлением сейв-рестора, чтобы в новой энтите сохранить хотя бы одну переменную, надо скопипастить довольно большой кусок кода и там поперименовывать всё. А потом еще и в KeyValue добавить лишнее условие, народ (и я в том числе), предпочитали брать уже готовые переменные. Вот в кваке там с этим было хорошо, объявил переменную с точкой и она у тебя уже и из настроек сразу читается и в сейв пишется.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А ты как теперь делаешь эту систему, там какая-то сериализация или?
__________________
http://www.moddb.com/mods/monorail-quest
Там с 12-го года другая сериализация, похожая на ту что в сорсе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
Мне кажется, энтварсы очень удобная штука. Они позволяют шарить основные параметры энтитей между разными библиотеками, и в том числе с ботами и скриптовой системой (в волатиле это например Lua). А переиспользуются они в целях экономии памяти, и в этом с точки дизайна нет ничего плохого. Единственное что я делаю - добавляю в класс простенькие геттеры/сеттеры, чтобы по ходу кода потом не гадать, что же тут значит pev->body.
__________________
энтварсы для разработчика это UB в первую очередь, потому что нет никакого соглашения какие переменные смотрит движок, какие он меняет, на какие реагирует, на какие возможно будет реагировать в дальнейшем.
В квейке была виртуальная машинка и там было совсем другое дело.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Движок реагирует на очень небольшое число энтварсов, и как правило, они имеют вполне чёткое предназначение, типа classname или origin. Но я согласен, работу движка с энтварсами надо минимизировать, они нужны пользовательским дллкам, и конечно же скриптовой системе, которая ничего не знает про pvPrivateData.
__________________
1 | struct edict_s |
2 | { |
3 | int flags; // edict->flags |
4 | float freetime; // sv.time when the object was freed |
5 | int serialnumber; // increment each time when entity was freed |
6 | link_t area; // linked to a division node or leaf |
7 | void* pvPrivateData; // alloced, freed and used by DLLs |
8 | }; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А если ты потом захочешь скрипты прикрутить, ну или блупринты какие-нибудь, как ты туда инфу о классах протащишь?
Не знаю, как в новом УЕ, а в старом классы были на UnrealScript и к ним был доступ через специальный экспорт, где перечислялись "внешние" поля. Но на плюсах ты так легко не сделаешь, по идее.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Я Unreal никогда толком не ковырял, так ничего сказать не могу.
Добавлено 13-08-2019 в 14:41:
Думаю настала пора полностью отказаться от лайтмапы, в NT будет только динамическое освещение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А на каком варианте для индиректа ты решил остановиться? А вообще жаль, лайтмэпы дюже православны.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
Вместо рада будет расчёт каких-то специфических данных для динамики?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Так я ж наоборот говорю, в наше время фуллдинамик быстрее лайтмапы будет. Если конечно пытаться сделать нечто похожее на динамику.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
На риватнт ни то ни другое точно не запустится, особенно если ДДС в несжатые текстуры распаковывать
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Ну вот опять ты ложные слухи распускаешь. А потом жалуешься, что тебя в аське в игнор добавляют.
__________________
ncuxonaT ну про дуум это ты уже сам придумал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша http://advances.realtimerendering.c...016_idTech6.pdf
слайд 20
Diffuse indirect lighting: Lightmap for static geometry, irradiance volumes for dynamics
ncuxonaT ты помоему еще вчера жаловался, что времени нет ни на что, а сегодня оно уже есть
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша может, я последовал совету
Я выше уже написал почему не хочу связываться с лайтмапами.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Потому что не можешь сделать нормальные лайтмапы для моделей?
__________________
XaeroX нормальная лайтмапа - это которая в реалтайме считается каждый кадр
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
The fastest way to compute is to precompute.
__________________
Я вот чем больше изучаю другие движки тем больше склоняюсь к тому, что вот это разделение на клиентские и серверные энтити - это невероятная дурь и она не нужна абсолютно. Ничего кроме неудобства, дублирования кода и повышенного потребления памяти она не создает.
Движок никогда не работает в таком режиме, когда бы его два набора энтить оказались разделены реальным сетевым соединением, это всегда две разные копии игры на удалённых машинах, ну или хотя бы на одной, но через микрософтовский лупбэк. То есть нет никакого резона держать в рамках одной сессии два набора энтить. Это очень порочная практика, которая порождает массу проблем на самом деле, но мы уже настолько к ним привыкли, что даже не можем себе представить, что может быть как-то иначе. Ну например чисто серверная энтить по дефолту не имеет предиктинга. В лучшем случае он достается только игроку, хотя по идее должен быть у всех энтить абсолютно. То есть у нас либо один и тот же файл компилируется дважды, на клиенте и на сервере, либо вообще для клиента приходится городить какой-то отдельный урезаный огород, который бы выполнял функцию предиктинга. Если функционал серверной энтити поменяется - значит клиентскую тоже надо пересобрать как минимум. Наиболее отвратный пример такого подхода - голдсорсовский предиктинг оружия. Насколько я знаю его так никто и не освоил, в лучшем случае копипастой с похожего оружия. Народ просто не понимает что там и куда копировать, чтобы это работало. При том что наилучшие результаты предиктинга вообще-то достигаются при полной идентичности клиент-серверного кода, а единственное что меняется - это время с серверного на клиентское. Второй негативный момент - два набора энтить потребляют в несколько раз больше памяти. Зависит от организации этого набора. Может и в два, а может и в полтора. И на клиенте у нас всегда несовпадающий функционал, из-за чего даже трассу приходится дублировать. Причём это справедливо, даже если ты не просто пишешь новые энтити, а что-то делаешь в движке. Если ты что-то сделал на серверной части, у тебя сразу головная боль - надо чтобы на клиенте это тоже работало. Но два набора это не предел. Теперь когда мы передали энтити на клиент нам еще надо их нарисовать. Для чего выделяется очередной список либо из клиентских, либо из особых рендер_энтить. Что в свою очередь порождает проблему слабой контролируемости рендерера из сервера. Ну вы помните как скорость движения конвейера в рендерколор запихнули. И соответственно в движке ответный хак. Хотя оптимальным выходом была был виртуальная функция в классе энтити, ну что-то типа ChangeRendererParams и там для этой энтити бы применялись какие-то настройки. Аналогично и с отрисовкой. Иметь в классе энтити еще один виртуальный метод типа DrawModel. И там уже прекрасно себе настраивать кости или еще что-то специфичное выполнять. И всё это в рамках одной библиотеки. Зачем дизайнеру игрового кода вообще забивать себе голову клиент-серверной архитектурой, особенно если разрабатывается сингл?
А для сетевой модели в класс добавляются пара виртуальных же функций, типа ReadFromSnapshot и WriteToSnapshot, по аналогии с сейв-рестором. И оно там себе само прекрасно пишет и читает, минуя промежуточные стадии вроде entity_state_t. baseline при таком подходе создаётся вообще автоматически - клиент точно так же спавнит карту и читает на ней все энтити и к моменту прихода первой дельты у него уже есть с чем её сравнивать. То есть baseline вообще не надо никуда передавать. Чисто клиентские энтити в эту систему укладываются даже лучше чем в классическую. Нам достаточно будет добавить что-то типа настроечного флага FCAP_CLIENT_ENTITY и всё. В сингле её проспавнит сервер, в мультике - клиент, и в обоих случаях у нас будет с ней нормальная коллизия с предиктингом. Да, её нельзя удалять с карты, она будет занимать слот, но она будет его занимать в любом случае, если мы хотим её сохранить в сейв например. Просто она будет занимать какой-то отдельный массив, а при записи демки, к примеру. нам всё равно придется заново переслать эти энтити на клиент. То есть все вот эти уловки с отдельными массивами для специфических энтить, они только усложняют и запутывают всё дело, из-за неудачно выбранной архитектуры однажды.
Еще момент - двойной набор энтить предполагает и двойную её обработку, как на клиенте, так и на сервере. Причём фпс при таком подходе будет падать экспоненциально с ростом кол-ва энтить, как вы понимаете, при условии что на клиенте присутствует тот же предиктинг с коллизиями. Вообщем нет положительных сторон. Но мы уже привыкли что их два набора и не можем себе представить что возможно как-то иначе. Стереотип короче говоря.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX ну хотя бы потому что фпс всегда падает экспоненциально 1/х - это экспонента.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чтобы не было недопонимания: я любую нелинейную функцию называю экспонентой, а уж парабола там или гипербола в данном случае непринципиально.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А зачем? Вот почитает тебя какой ни будь Гуль, например, — и у него окончательно крышу сорвёт, уже не только в плоскую землю уверует, а число pi опровергать начнёт. Спросят, а кто же виноват, кто его так с ума свёл? А вот он! Это всё Дядя Миша, сидит в кустах с хитрой ухмылкой.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а исходит ли это в принципе из клиент-серверной архитектуры?
Всегда на что-то отдается больше предпочтение и соответственно проектируется. Хорошо, у нас единые энтити и на клиенте, и на сервере. Это будет работать в сингле, но что делать с мультиплеером? Делаем под мультиплеер и в итоге получаем все предиктинги и прочие лагокомпенсации, потому что игровой мир клиента не равен миру сервера.
__________________
Xash3D FWGS форк
Это для мультиплеера даже более оптимально, чем традиционная модель, я бы сказал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Код станет меньше и понятней?
__________________
http://www.moddb.com/mods/monorail-quest
я вот склоняюсь к тому, чтобы наружу вынести только скрипты, ну типо прогс.дат как в квейке или что-то вроде этого. А остальное всё в движок упрятать и пусть оно там уже будет. Никому это неинтересно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я напомню, что обновлённый голдсорс делался на базе QW, который был физически разделён на клиент и сервер. Вот оттуда все ушы и растут.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пока что всё под вопросом. Остановил разработку, надо подумать как лучше сделать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Но скрипты это очень хорошая и правильная идея, в любом формате, хоть на хацкеле.
__________________
http://www.moddb.com/mods/monorail-quest
На хаскеле, это было бы очень круто!
__________________
Как говорится, Maybe. Кстати, почему нет, для скриптинга-то. Только вряд ли найдётся компактный интерпретатор.
Халфовская игровая дллка, это эталонный пример анти-паттерна конечно.
Это надо всем начинающим пограмистам показывать как не надо делать.
В кваке был целостный эдикт и непрерывный массив, что хотя и увеличивало потребление памяти с одной стороны, но с другой гарантировало нам, что мы никогда не промахнёмся по адресу, можем ссылаться на мёртвые эдикты и так далее. В халфе, мало того что разрушили эту концепцию, казалось бы с благой целью, так еще и долгое время не могли определиться что послужит базовым указателем на сущность. entvars_t? edict_t? CBaseEntity?
В итоге мы имеем три сущности и три преобразования-апкаста туда и сюда, которые вообще не несут абсолютно никакого смысла, только запутывают.
Плюс еще те переменные, что входят в состав entvars_t неявно модифицируются\читаются движком и об этом нигде ничего не написано. Отдельного упоминания заслуживают флаги, часть флагов явно задаёт поведение движка, а часть существует только в игровом коде.
В сорсе на первый взгляд попытались это привести в порядок, но на деле только осложнили ситуацию. Там теперь всё в каллбэках, чтобы сделать типичный вызов движковой функции надо писать класс-заглушку с каллбэком и от нее наследовать какую-то чертовщину. То есть вот мы к примеру хотим отправить сетевое сообщение всем клиентам. Мы уже не можем написть MSG_ALL, нам надо городить специальный класс, который пропускает сообщение для всех клиентов в каллбэке. Пример избыточной гибкости, которая может пригодится примерно никогда.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Замутил АТД для string_t для удобства. Теперь не надо писать каждый раз эти идиотские ALLOC_STRING, STRING, теперь как в виртуальной машинке
pev->targetname = "player";
и была же охота вальвовцам копипастить одно и тоже сотни раз.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
std::string, надеюсь, а не велосипед?
__________________
я не пользую STL
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Какой смысл писать на С++ и не пользовать STL?
STL уже давно часть языка.
__________________
XaeroX вывези ваську
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Долбанные энтварсы, когда же они уже закончатся. Этот рефакторинг я навсегда запомню как самое бессмыссленное и в то же время необходимое действие.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Мастер от своей сортировки ничего не получил. А у меня рефакторинг архитектуры. Потом еще от entity_state_t избавляццо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну зачем ты так. Мастер получил красивый и отрефакторенный delta.lst.
__________________
1 | typedef struct entvars_s |
2 | { |
3 | int rendermode; |
4 | float renderamt; |
5 | vec3 rendercolor; |
6 | int renderfx; |
7 | } entvars_t; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Неправильно! Должно быть вот так отсортировано:
1 | typedef struct entvars_s |
2 | { |
3 | float renderamt; |
4 | vec3 rendercolor; |
5 | int renderfx; |
6 | int rendermode; |
7 | } entvars_t; |
__________________
Сам говорит дела, времени нет, сам строчки сортирует, уму нерастяжымо
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я ему помочь стараюсь - а он недоволен.
__________________
XaeroX если бы ты еще пинговался, так тебе бы цены не было
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Определился. Будет две "пользовательские" библиотеки, в кавычках, потому что я пока еще не решил, буду ли раскрывать их сорцы всем желающим.
Progs.dll и GameUI.dll. В первой будут находится все энтити единый клиент-серверный массив, он же используется для рендеринга и в самих энтитях будет метод Draw ну или что-то вроде этого. И GameUI.dll где клиентский худ и главное меню. Их нет смысла разделять, это по сути один хрен.
а в ядре остаётся абстрактный бакэнд, работа с файловой, сетью, форматами моделей и звуков.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А с vm что решил?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax
Оно будет работать там, где оно имеется. Создали объект на сервере - имеем его на сервере. Создали на клиенте - имеем его на клиенте. А для синхронизации уже нужны приседания. Дядя Миша, видимо, хочет эти приседания заранее предусмотреть и всё-всё синхронизировать автоматически, при этом максимально экономя трафик. Пока звучит как утопия. Но будем посмотреть.
__________________
Насчёт экономии трафика я ничего не говорил. Я исхожу из того очевидного, но упорно игнорируемого соображения, что ситуации, в которой нам может понадобиться два комплекта энтить попросту не существует. Если сервер в режиме дедика - это один комплект энтить. Если клиент подключился к удалённому серверу - это один комплект энтить.
Таким образом для любого сетевого подключения нам требуется один комплект энтить. Чтобы это понять необязательно даже глубоко разбираться в теме. И два комплекта нам почему-то требуются в случае локальной игры, т.е. там где они точно так же не нужны. А поскольку локальная игра, это еще и синглплеер, мы имеем бесполезный перерасход памяти на два набора энтить. Какой в этом смысл? Да никакого абсолютно.
Это такая же пакость, навроде SQB, однажды сделали неоптимально и потом тащили аж до третьей кваки. Но там еще дальше пошли - там и карту зачем-то два раза начали загружать, отдельно для коллизии и для рендеринга. Опять таки смысла никакого.
Я вам так скажу это основная беда движкописателей - взять какой-то форк за основу и на этой основе просто наворачивать тени мягкие, физику и так далее. Осознать, что архитектура требует пересмотра никто не может и не хочет. Даже Ксерокс.
Добавлено 08-09-2019 в 16:09:
ЗЫ. конечно если в игре предполагается 600-900 эдиктов, то как бы и пофигу. А вот 20-30 тысяч уже не получится при таком раскладе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
Да надо просто как в том же Doom3 сделать глобальные скрипты, локальные скрипты, ну что-то вроде этого. Ну то потом всё, это архитектуру не затрагивает никоим образом, скорее приятное дополнение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну штож, новый механизм уже вполне себе вырисовывается. Для простоты и удобства я сделал его частью механизма сейв-рестора. Точнее говоря от сейв-рестора там только табличка глобальных деклараций, ну которая DECLARE_DATA_DESC(); Но дело в том, что эта табличка сама-по себе не обязывает хранить в ней непременно данные для сериализации. Это просто такая универсальная табличка, где можно хранить всё что угодно, а различать по выставленным флагам.
Сейчас, для примера, чтобы передать на клиент оригин и углы, не надо больше ничего копировать в AddToFullPack, не надо сортировать строчки в delta.lst и не надо писать ответный код на клиенте (для entity_state_t разумеется, а для кастомной дельты, как в Сорсе - надо). Достаточно просто добавить в DATADESC вот такие штуки:
DEFINE_DELTA( m_vecAbsOrigin, FIELD_POSITION_VECTOR ),
DEFINE_DELTA( m_vecAbsAngles, FIELD_ANGLES ),
и всё. Не надо по особому помечать переменные, создавать новые таблицы, подключать какие-то каллбэки для прокси и прочую чертовщинку. Я полагаю это самый оптимальный вариант. Разумеется это автоматически учитывает наследие классов и посылает для каждого класса всё объявленное, ну собсно, как и с сейвами.
Добавлено 09-09-2019 в 19:41:
Больше скажу. Этот механизм позволяет даже передавать указатели на функции по сети.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Вот вам для примера как тот же оригин посылается в сорсе:
Сперва он объявляется хитрым образом:
CNetworkVector( m_vecOrigin ); |
1 | // This table encodes the CBaseEntity data. |
2 | IMPLEMENT_SERVERCLASS_ST_NOBASE( CBaseEntity, DT_BaseEntity ) |
3 | SendPropDataTable( "AnimTimeMustBeFirst", 0, &REFERENCE_SEND_TABLE(DT_AnimTimeMustBeFirst), SendProxy_ClientSideAnimation ), |
4 | SendPropInt (SENDINFO(m_flSimulationTime), SIMULATION_TIME_WINDOW_BITS, SPROP_UNSIGNED|SPROP_CHANGES_OFTEN|SPROP_ENCODED_AGAINST_TICKCOUNT, SendProxy_SimulationTime), |
5 |
6 | SendPropVector (SENDINFO(m_vecOrigin), -1, SPROP_NOSCALE|SPROP_CHANGES_OFTEN, 0.0f, HIGH_DEFAULT, SendProxy_Origin ), |
CInterpolatedVar< Vector > m_iv_vecOrigin; |
1 | BEGIN_RECV_TABLE_NOBASE(C_BaseEntity, DT_BaseEntity) |
2 | RecvPropDataTable( "AnimTimeMustBeFirst", 0, 0, &REFERENCE_RECV_TABLE(DT_AnimTimeMustBeFirst) ), |
3 | RecvPropInt( RECVINFO(m_flSimulationTime), 0, RecvProxy_SimulationTime ), |
4 |
5 | RecvPropVector( RECVINFO_NAME( m_vecNetworkOrigin, m_vecOrigin ) ), |
AddVar( &m_vecOrigin, &m_iv_vecOrigin, LATCH_SIMULATION_VAR ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Зачем кому-то в сети указатель на функцию в чужой памяти?
Для предихтинга жеж. Хотя хз. Может и не понадобится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Разыменуешь — бида. Но сравнивать-то с адресами из той же памяти можно без последствий.
А кто сказал, что я буду посылать по сети именно указатель? Это вы сами придумали. Указатель сперва превращается в уникальное имя Class::Function, потом это имя добавляется в общий пул строк, который автоматически синхронизируется по сети, потом я посылаю идентификатор этой строки два байта, принимаю на клиенте, превращаю обратно в строку и по строке ищу указатель на функцию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Сейв-рестор вынесу целиком в игровую часть, движку он не нужен.
Собсно, смысл в том, чтобы движок не знал ни о каких эдиктах, это вообще не его дело. Не тот уровень абстракции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дядя Миша
Ну прям микродвижок, навроде микроядра ОС.
nemyax
При том не кроссплатформенный
Я так понимаю, Дядя Миша из Ксаша решил сделать первый квейк.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Первый квейк кокрастоке клиент-серверный монолитный.
__________________
XaeroX
Тогда это неплохо.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати интересно как с лимитами будет здесь? А то а халве если честно с ними совсем туго, и на количество оружия и на кол во моделей и вылезти за них очень легко чтобы половина энтитей стала не видимой или игра вообще вылетела. В других движках оно не так жестко, взять хотя бы тот же Unreal Engine к примеру помню проходил сингл моды на анрил торнамент вроде Operation Na Pali и других там в настройках можно отключить к примеру исчезновение кусков мяса, вон в брутал думе тоже не только кровищя но и магазины с гильзами остаются, и ничего, работает и не лагает даже на старом железе, а в халве чуть что и можно вылет словить.
Да и на кол во моделей и спрайтов лимит тоже не удобно, если всего много добавлено как к примеру взять ХЛВЕ то приходится кучу моделей соединять в одну с кучей бодигруп, со спрайтами тоже самое.
Ну вот всё это как раз и делается для того (в том числе), чтобы наращивать лимиты из игровой дллки, не затрагивая ядро.
Добавлено 10-09-2019 в 18:14:
Если вам хочется порассуждать за тиеричность, то самый нижний уровень - это собсно ядро, бакэнд всякий, туда пользователю соваться вообще нет смысла. Средний уровень - это игровая дллка с энтитями, логикой, монстрами. И верхний уровень - скрипты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А партиклы вообще-то не мешало бы. Довольно некрасиво выглядит ситуация когда сохранился, например, под дышалкой с паром. Загрузился, а пар снуля начинает идти, будто только включили его.
__________________
http://www.moddb.com/mods/monorail-quest
ну их для этого сохранять необязательно. Время промотать вперёд, чёб они вышли на готовность и всё. Я уже когда-то такое делал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Вершинную анимацию поддержишь на модельках?
Дядя Миша
А так что бы сетевая игра могла работать через пару десятков НАТов без выделенного сервера с белым ip, оно возможно?
__________________
http://www.moddb.com/mods/monorail-quest
thambs видимо да, т.к. ребяты из FWGS замутили возможность запускать сервер на ведроиде через ви-фи. Не знаю, работает ли оно через сотовую связь, т.к. там по-умолчанию все исходящие порты закрыты самим ОпСоСом.
Завершил перенос сейв-рестора в игровую дллку. Движок, соответственно, вызывает только сами методы LoadGame, SaveGame и ChangeLevel, с передачей имён уровня или .sav файла. В этом действии, как вы понимаете заключён глубокий смысл. Можно будет сделать несколько вариантов progs.dll в зависимости от лицензии и цены на покупку. То есть совсем без сейва и без чейнджлевела - это одна цена, с сейвом и чейнджлевелом, по типу кушного - другая цена и со сглаженным чейнджлевелом - максимальная.
Так же можно будет приложить исходник пустой игровой библиотеки, ну сделать там класс камеры и пару энтить. В дефолте. Или скажем физика будет различаться в разных ценовых категориях. Так что тут большое поле для возможностей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну так DEFINE_DELTA в коде всё равно сортировать можно! Или там от порядка зависеть не будет?
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro ну положишь в папку с игрой, ктож тебе запретит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Апробовал новый алгоритм дельта-компрессии. Ну что, хорошая штука, удобная. Если ничего не менялось, то ничего и не обновляется. Лимита Max Visibile Entities тут тоже не будет, принудительное обновление каждые 64 секвенции не требуются. Из чего отпадает надобность в клиентских энтитях. Если такая энтить не модифицируется, то и на размер пакета она никак не влияет. А вот с темп-энтитями сложнее. Эти вещи как правило используются для раскидывания мелкого короткоживущего мусора, который нет смысла сохранять в сейв. Если мусор живёт долго, под него логичнее выделить нормальный эдикт. А хрень типа гильз от патронов не попадает ни туда ни сюда. Потому что с одной стороны это не партикля, а с другой эдикты под такое отдавать жалко. Но эту задачку можно разрешить, если научить систему партиклов рендерить не только спрайты, но и модельки.
Думаю это самый оптимальный вариант.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша так вроде логично, что эмиттеру должно быть пофиг, что раскидывать - или один полигон спрайта или несколько для модельки
__________________
-Brain is dead-
Да вот не скажи. В том же сталкере гильзы спрайтовые сделали. Кто-то решил не заморачиваться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да любая развитая RenderSystem система частиц умеет в модельки.
Дядя Миша
Ну если гильзы будут пропадать между сэйвами и ченджлевелами это не очень красиво. В хл, те же пропадающие гибсы смотрятся мерзко.
__________________
http://www.moddb.com/mods/monorail-quest
Кстати интересно, "размер камеры" будет зашит в движке, или в игровой длл-ке? Этот z_linear или как его там, а то в халве он маловат если честно, как пример если модель оружия от 1 лица соответствует размерам мира то она может в экран иногда залазить, особенно если позиция оружия находится близко к экрану.
Z_NEAR ты наверное имел в виду.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
Вот и дошла очередь до Pmove. Теперь его можно вернуть в класс игрока.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что такое пмове?
Player Movement
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Раньше игрока двигали только обстоятельства, а теперь он сам вызывает своё движение?
Дядя Миша
А там тоже будут фиксированные хуллы, или как-то ещё решил сделать?
__________________
http://www.moddb.com/mods/monorail-quest
thambs ну пока что формат остается близким к HLBSP из практических соображений - когда я закончу формирование игровой либы, я наверное пройду под ней разные там халф-лайфы, моды рейда, надо убедиться что ничего не испортилось. А так формат карт будет новый, что-то такое симбиотическое из сталкера\метро\ку3\хл. Еще не определился.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Перенёс движение игрока и лагкомпенсатор в дллку. API должно быть как можно тоньше и использовать по возможности только атомарные типы.
Это гарантия от того, что в будущем его придётся расширять.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А что мешает перенести движок целиком в дллку, как в халфе, открыть его сорцы и загружать из папки dlls мода? Это, имхо, решает абсолютно все вопросы с апи.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша как никто не воспользовался? Был же custom build от товарища) Тут дело такое, есть например базовые вещи, скажем нормал-мэппинг, тени, отражения там. А есть специфические вещи, например я для мультиплеерного билда, который мы с купахтомасом гоняли, кодил на клиенте эффект реальной линзы для вьюмоделек с прицелом (ну там арбалет, револьвер). У меня это было привязано к имени текстуры в модельке (модельки я перекомпилировал, соответсвенно). И вот в отрисовке вьюмодельки я проверял на наличие этой текстуры и рендерил в нее фреймбуфер мира, понимаешь, да) Может и не самый правильный подход, но без кастомного рендера такого в принципе не сделаешь. Если, например, такое будет можно тонко провернуть с помощью шейдеров и скриптов - то будет замечательно или тот же моушен-блюр, хотя я знаю, ты его не любишь)
Добавлено 21-09-2019 в 17:27:
То, что в новом XT шейдеры были переведены на glsl это огромный шаг, кстати, я их понемногу ковырял, пока в жизни не начались проблемы и времени на это перестало быть)
__________________
-Brain is dead-
Ну такие вещи быстрее всего будут доступны через систему материалов.
Рендеринг вообще дело мало кому нужное. Это в первую очередь загрузка треугольников и вертексов в VBO. Вам это всё точно не нужно. Вам надо чёб можно было кастомные шейдеры и свои параметры в них.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
OIT в продакшене не юзают - тормозно
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну хотя бы сортировка, с возможностью гибкой настройки.
__________________
Дядя Миша
Уровни-то как надо будет делать? Моделить?
ну конечно надо, чтож за игра без уровней
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну так моделить или кубать?
Я за то, чтобы кубать)) ну по крайней мере основную геометрию. Вот честно, нигде не видел более удобной работы с текстурированием, именно в плане маппинга, чем в VHE/Джеке. Ну знаете это, когда референсный плэйн выделяешь и потом правой кнопкой мацаешь, и текстура с такими же параметрами вставляется, скейл там, UV и прочее. Там какой-то шаманизм с текстурной матрицей видимо, я так до конца и не разобрался, но удобно прям вообще)
__________________
-Brain is dead-
nemyax на усмотрение разработчика
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX сложный ландшафт логично делать моделью) я говорил про основную геометрию. Да и в любом случае, лоу-поли скалы удобнее текстурить в джеке, чем долбаться с разверткой в том же блендере. Просто для того, чтобы по-быстрому накидать уровень любой 3d-моделлер слишком избыточен
__________________
-Brain is dead-
Ну чтоже. Вот мы вплотную и подобрались к самой главной, так сказать фундаментальной проблеме всего движка. К формату его уровней. Это краеугольный камень всего. От этого зависит как на уровне взаимодействуют монстры, как отсекается видимость, насколько надёжна физика и насколько быстро всё это рендерится. Ни один из существующих форматов, близких по духу к кушным движкам не отвечает поставленным требованиям. Возможно кто-то просто не задавался таким вопросом или наоборот считает, что там всё в порядке. Я на это отвечу следующим образом: если сознательно ограничить свою фантазию колидорами из кваки - то конечно жы проблем нет.
Перечислю здесь основные проблемы, применительно к форматам уровней Quake1 и Quake3 (я их выбрал как базовые, которые знаменовали смену поколений). Но сперва обозначу общие проблемы, которые нас подстерегают в 2019-м году, если мы решили строить наши уровни вокруг BSP-дерева:
1. Очевидно, что BSP-деревом можно описать любую солидную структуру. Для ускорения поиска и пересечения. Но есть проблема. Чем больше полигонов в структуре - тем больше дерево. В какой-то момент возникает ситуация, когда нережущие алгоритмы управляются на порядок лучше режущих. К тому же BSP существует в варианте, который ничего не разрезает и там оно не сказать что блещет производительностью. К тому же само его построение с уникальными полигонами на ноде может занять чертовски много времени. Ну с этим можно бороться сделав какие-то изначальные допущения. Сам алгоритм особо не покрутишь.
2. Из преведущего пункта очевидно вытекает, что наилучшим образом с BSP дружат браши - замкнутные конвексные структуры, которые по своей сути обладают одним интересным свойством - их легко редактировать, легко текстурировать и они хорошо держат точность, чтобы на базе такой геометрии можно было строить абсолютно замкнутые уровни и генерировать порталы видимости в автоматическом режиме, а не заниматься расстановкой функ_окклюдеров. Но есть у брашей и серъезные минусы. В силу специфики их текстурирования, из брашей практически нереально построить tri-strip объекты для ускорения отрисовки. Невозможно склеить вертексы, когда на каждой стороне браша какая-то своя отдельная текстура. В моделях такое практически не встречается, хотя разумеется и возможно. Ну просто там изначально другой подход к текстурированию. Из чего вытекает следующее правило - много брашевой детализированной геометрии будет тормозить независимо от того как мы её оптимизируем. Невозможность использования стрипов снижает конечную производительность от 1/3 до 1/2 от возможной скорости. Из чего сам собой напрашивается вывод - использовать брашевую геометрию только для грубых набросков, не увлекаться.
3. BSP обладает приятной возможностью создать офлайн-массив видимости, т.е. заранее знать из какого сектора уровня какой будет виден. Не в последнюю очередь благодаря автоматической генерации порталов. Собственно это вообще единственный способ иметь такую видимость. Все остальные способы базируются на уже отрендеренных полигонах и на PC имеют лаг, связанный с получением данных непосредственно из видеокарты (на приставках ЧСХ лага нет, там другая архитектура). Это обходится либо созданием упрощённого софт-рендера, который работает в отдельном потоке, либо забиванием на оптимизацию, как в юнитях разных. Но всё это имеет смысл только коридорной геометрии. На открытых пространствах толку никакого, как вы понимаете.
Очевидно что полагаться на один PVS нельзя, требуются дополнительные способы.
4. Возможность трассировки полигонов без построения каких-то дополнительных ускоряющих структур. Очень сильно завязано на детализацию, как вы понимаете. Плюс сам факт разрезания полигонов не полезен для рендеринга. Но можно решить построением нескольких деревьев и разных наборов видимых сурфейсов, хотя это и приводит к увеличению размера карты. Можно построить чисто аксиальное дерево, однако в плане увеличения производительности от него немного толку.
5. Надо так же отметить, что вышеописанные проблемы при отказе от BSP, вообщем-то никуда не деваются, а некоторые становятся вообще принципиально неразрешимы, типа рассчёта PVS. Отказ от брашей нецелесообразен, поскольку дизайнеру часто требуется создавать какие-то зоны, водные пространства, триггеры, навмешы. Брашы для этих целей подходят идеально. Как там народ делает триггеры в движках без брашей остается только догадываться.
Добавлено 22-09-2019 в 16:55:
Теперь по списку проблем в уже известных форматах.
Применительно к Quake1:
1. Слишком подробное дерево. Это хорошо для реализации сверхбыстрой точечной трассы, но плохо для визуализации, если мы собираемся использовать дерево. Впрочем для рендеринга можно использовать другие собирательные структуры, ну скажем нечто вроде суперлифов, которые включают в себя основные лифы с видимостью и детальные лифы с такой же видимостью.
2. Фиксированные хуллы. На основе информации, имеющейся в карте возможно построить коллизию для произвольных фигур, но есть одна проблемка - туда не попадут клипбрашы. Восстановление клипбрашей из соответствующих деревьев тоже не будет точным, поскольку для разных хуллов деформированная геометрия уже выглядит не так как для точечного (ну вы это могли видеть, включив визуализацию хуллов).
3. Raw-лайтмапы. Ну это легко исправить, немного доработав формат. Минус таких лайтмап в том, что они провоцируют появление швов на сложной геометрии, состоящей из треугольников. Если кубать строго квадратными брашами, то никакой проблемы нет. Но брашевый ландшафт из треугольников провоцирует появление швов на лайтмапах, несмотря на все метды противодействия им.
4. Нету ареапорталов. Ну здесь я даже не знаю, так ли уж они актуальны в наше время. Мне кажется этот подход уже устарел и не нужен. Он только усложняет получение информации видимости в различных частях рендерера, т.к. необходима синхронизация состояний, плюс лишняя нагрузка на сеть.
Применительно к Quake3:
1. Брашы вместо клипнодов. Может показаться странным, но по некоторым причинам код трассировки брашей неоднозначен. Есть там такая проблемка, при которой с одной стороны браша игрок проникает в него на эпсилон, а с другой наоборот - не достает. Решается через параметр overbounce, который отталкивает игрока в PM_FlyMove. Как в ку2, так и в ку3. Я не знаю, может вальва в сорсе и решила эту проблему (там не юзается овербаунс), но в Doom3, Кармак от греха вообще не использует коллизию по брашам, они там только для определения контентсов.
2. Упрощённое дерево. Баланс между избыточностью и скоростью. Для рассчёта PVS и рендеринга дерево оптимально, для трассировки производительностью не блещет, из-за чего возможно лайтмапы считаются достаточно медленно. Впрочем это можно решить, построив в лайтмаппере какую-то кастомную трассу.
3. Типы поверхностей. Нет юниформности, мы должны с каждым видом действовать по своему. С брашами так,с патчами эдак, с фларесами иначе. В качестве эксперимента может это было и неплохо, но вообще это очень неудобно. После компиляции мы не должны знать что это было раньше патч или модель, для нас это должен быть просто полигон. Впрочем допустимы некоторые хинты, которые позволят загружать группы полигонов в VBO единым целым, например, если из них реально построить стрипы (для патчей или моделей). Ну вообщем достаточно неоднозначная вещь.
4. карта не содержит в себе информацию о рёбрах, которая могла бы нам пригодится, ну например для физики, или Ксероксу для создания теневых объемов
Подводя итоги, хочется обратить ваше внимание, что ни тот ни другой из форматов в чистом виде нам не подходит. И модификация в любом случае будет достаточно серъезным делом. Основной вопрос заключается в том, какой из форматов взять за исходную точку для дальнейших доработок.
Собственно оба подходят в равной степени, надо решить нелёгкий вопрос, что будет быстрее в плане имплементации, что займет меньше времени.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да неко кой!
ncuxonaT ответ неверный. Имплементация любого другого формата займет еще больше времени.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Помню, в серьёзном сэме были огромные пространства и при этом отличная производительность. Или это только за счёт того, что на тех пространствах нихренашеньки кроме монстров не было?
Пространства сами по себе значения не имеют. Имеет значение только поликаунт. Вон в первом дууме ставят на карту сто тысяч монстров и это всего-навсего 200 тысяч треугольников, монстры-то спрайтовые!
Вот и не тормозит. Вспомнил забавную штуку, вот как раз связанную с пространствами. Есть такая единственная игра для Unigine - называется Cradle. При старте мы спавнимся в своей хижине. Хижина жутко интерактивная. Там все предметы настоящие. Это значит что в любом комоде, мало того, что можно выдвинуть любой ящик, так еще и в этих ящиках лежат настоящие итемы, которые можно брать. Ну вообщем внутри хижины поликаунт зашкаливает просто. А я тогда рассуждал в точности как ты - уж если в индоре такие тормоза, то в аутдор вообще соваться без резона. Но я набрался храбрости, выглянул и офигел. Потому что гигантский аутдор (5-7 кв.км) ВООБЩЕ не тормозил, а чему тормозить, если это был пустой ландшафт?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Там и pathfinding примитивный, чего бы им не бегать? Это вам не CheckLocalMove с триангуляцией плюс нодеграф.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Расскажу немного о новой концепции материалов. Она не совсем новая, я её придумал еще в 2015-м году, но тогда посчитал излишним к реализации, поскольку разработка NT застопорилась, а для паранои она бы была черезчур сложной. В чём основная идея?
Материалы у нас, как вы знаете основываются в первую очередь на возможностях рендерера. До появления программируемого конвейера вполне логичным было бы просто охватить все возможные комбинации и стадии фиксированного конвейера и задавать рендеринг довольно простым языком, который Кармак реализовал еще в Quake3. Впоследствии, когда появился бамп и Cg, эта система была пересмотрена в сторону упрощения, но всё равно не избавилась от духа FFP. В настоящее время её использование носит негативный характер. Там где требуется создать простой материал она избыточна, а там где материал кастомный что либо реализовать затруднительно. Собственно, этот момент отразился уже в Wolfenstein 2009, там дуумтришную систему материалов полностью перепахали в сторону гибкости и использования шейдеров. В чём заключается моя идея?
Нам не надо пытаться описать в материале принципы рендеринга, это реализуется в GLSL, в стандартных или пользовательских шейдерах.
Всё что нам надо - это настроить переменные и юниформы, однако как вы понимаете, прописывать каждый раз пачку переменных для каждого материала каждой текстуры - сомнительное удовольствие. На помощь приходят шаблоны с предустановленными дефолтными параметрами.
Однако и тут возникает вопрос - надо ли нам каждый раз прописывать пути к каждой текстуре, ведь мы не сможем указать эти пути явным образом в шаблоне? Явным образом нет, но мы можем построить наш путь из переменных значений, таких как <wadname>, <modelname>, <mapname>. Приведу пример шаблона и материала, построенного с его использованием. Это ни в коем случае не окончательный вариант синтаксиса, один из текущих:
1 | template<world> |
2 | { |
3 | image u_ColorMap = "textures/<wadname>/<mipname>.tga"; |
4 | image u_NormalMap = "textures/<wadname>/<mipname>_norm.tga"; |
5 | image u_GlossMap = "textures/<wadname>/<mipname>_gloss.tga"; |
6 | image u_DetailMap = "$matdesc/detailMap"; |
7 | image u_DepthMap = "$screendepth"; |
8 | image u_DeluxeMap = "$deluxemap"; |
9 | image u_LightMap = "$lightmap"; |
10 | image u_GlowMap; |
11 | matdef material = "metal"; |
12 | float u_Smoothness = 0.35f; |
13 | float u_ReflectScale; |
14 | float u_RefractScale; |
15 | float u_AberrationScale; |
16 | float u_ReliefScale; |
17 | vec2 u_detailScale = "$matdesc/detailScale"; |
18 | } |
19 |
20 | shader<world> |
21 | { |
22 | vertex = "glsl/<progname>_vp.glsl"; |
23 | fragment = "glsl/<progname>_fp.glsl"; |
24 | template = world; |
25 | } |
26 |
27 | "ps_metal00" |
28 | { |
29 | template world; |
30 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Допустим чувак захочет реализовать подсветку досягаемого объекта под кросс-хером. Как ему поможет такая система материалов? Ведь для конкретного объекта не выставишь униформ.
Добавлено 23-09-2019 в 11:31:
Хотя по идее в униформ можно толкнуть ID объекта.
nemyax всё зависит от тех переменных, которые мы передаём в шейдер. Я же не сказал, что можно будет прописать только константы.
Будет привязка как к глобальным, так и к локальным переменным.
Но синтаксис я пока еще не продумал.
Опять же, можно наделать много шаблонов на все случаи жизни и использовать их в разных материалах, на ходу перегружая те или иные параметры. В основе системы лежат два простых соображения:
1. чтобы не надо было каждый раз прописывать одно и тоже для кучи материалов или в крайнем случае это был минимальный набор данных.
2. чтобы любой из заданных параметров было возможно перегрузить. В том числе - создать новый параметр, который в шаблоне вообще отсутствует.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я бы вместо треугольных скобок сделал квадратные, а то и вообще без всяких скобок, просто писать в верхнем регистре: WADNAME, MIPNAME.
ни в коем случае квадратные. Шаблоны вот именно так и обозначают через треугольные.
__________________
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-09-2019 в 13:11:
Ну вот что это за дрянь к примеру:
def b2midcp(p0, m, p2): |
"cp to get b2 line from p0 to p2 passing thru m" |
return 2.0*m-0.5*(p0+p2) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В моём представлении любой скриптовой язык это в первую очередь песочница и безопасная работа с памятью. Зачем там изобретать новый синтаксис мне вообще непонятно. Я могу понять какие-то небольшие отличия, обусловленные возможностями языка. Но всё переиначивать это маразм.
Добавлено 23-09-2019 в 13:21:
Народ живёт стереотипами, ему почему-то кажется, что это его святой долг - выдумать совершенно новый непохожий синтаксис. В связи с этим вспоминается, как Лебедев устроил конкурс на самую лучшую панель кнопок для лифта и куча идиотов прислала ему совершенно дикие варианты. Вот тоже самое абсолютно. Сишный синтаксис в первую очередь ценен своей максимальной наглядностью и удобочитаемостью. Первый признак мудака - это когда начинают заменять фигурные скбоки, то вообще их выкинут как в петоне, то пропишут словами begin\end или на квадратные заменят. Вот зачем спрашивается? А низачем, чтобы люди страдали. Thambs например. Он жы любит страдать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я вам больше скажу - никто и никогда не проводил психовизуальное тестирование восприятия разного синтаксиса человеческим глазом. А если бы провели, то очень быстро убедились, что отличные от С\С++ варианты максимально затрудняют восприятие, особенно в тепичном блокноте без подсветки.
Добавлено 23-09-2019 в 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'
Дядя Миша
Ну смотри.
- Типы расслабленные, значит половина сишного синтаксиса уже отпадает, в том числе способ объявления функций.
- Встроенные составные типы: кортежы, списки, словареги. Нужен синтаксис.
- Присутствуют всякие фишки из функциональщины типа анализаторов списка, лямда-функций и зайчатошного паттерн-матчинга. Раньше, чем Страус начал скотчем приматывать их к плюсам.
И так далее. Так что по-любому от сей мало что осталось бы. Ну если бы занимались именно художественной резьбой по сям.
nemyax объясни мне пожалуйста каким образом наличие кортежей запрещает использовать фигурные скобки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Никаким. Конкретно это — обычная щепотка маразма. Фигурные скобки действительно не помешали бы. А инициализировать словарики можно было бы и по-другому.
Добавлено 23-09-2019 в 15:04:
Вообще говоря, ну если нужен сиподобный скриптовой язык, вон же Squirrel.
Crystallize ну лебедев вообще заново пирдумал букву "М" за сто лярмов, чо уж там
Добавлено 23-09-2019 в 16:35:
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
KiQ
Но ЧАЭС-то из модельки сделался уровнем. Значит и для NT, наверное, можно будет так же. А уж для создания моделек инструментария хоть объешься.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax ну я вот моделить не умею от словасовсем. И опять же, ты не уловил видимо. Я говорил про экосистему вокруг движка и инструментарий, который для него специально сделан, понимаешь да. Те ксаш-тулзы и т.д. А вот для маппинга с учетом новой концепции по сути ничего из существующих решений толком не подходит
Добавлено 23-09-2019 в 17:45:
__________________
-Brain is dead-
Да ну какая там может быть новая концепция? Статичные модели по прежнему расставляются через точечные энтити, а вокруг уровня - всё тот же скайбокс. Я совершенно нехочу это менять. Если кому-то это не нравится, для них всегда юнити там разные, унреалы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пока что сделал так:
Тимплейт в хидере template.h:
1 | template <worldSolidMaterial> |
2 | { |
3 | image u_ColorMap = "textures/<wadname>/<mipname>.tga"; |
4 | image u_DetailMap = "materials.def::detailmap"; |
5 | vec2 u_DetailScale = "materials.def::detailScale"; |
6 | float u_Smoothness = "0.35"; |
7 | } |
1 | #include "scripts\template.h" |
2 |
3 | "fifties_wall1y" worldSolidMaterial |
4 | { |
5 |
6 | } |
"fifties_wall1y" worldSolidMaterial; |
"fifties_wall1y" using worldSolidMaterial |
1 | textures/decals/floating_trash |
2 | { |
3 | TextureTransform |
4 | { |
5 | Translate { Global::Time.x * .018 Global::Time.x * 0 } |
6 | } |
7 | NoShadows |
8 | NoOverlays |
9 | NoFragment |
10 | NoTFix |
11 | MaterialType NoImpact |
12 | Contents NonSolid |
13 | Technique DSAddGBuffer%r_gBufferMode%_AlphaTest_TextureTransform_Depth |
14 | Image NormalMap textures\decals\trash_decal_street_local |
15 | Image DiffuseMap textures\decals\trash_decal_street_d |
16 | Image SpecularMap textures\decals\trash_decal_street_s |
17 | Image MaskMap textures\decals\trash_decal_street_d |
18 | AlphaTest 0.40 |
19 | Vector Specular 64 .1 1 0 |
20 | vertexcolor |
21 | } |
22 | textures/decals/pebbles_01 |
23 | { |
24 | EditorImage textures/decals/pebbles_01_d |
25 | Image DiffuseMap textures/decals/pebbles_01_d |
26 | Image NormalMap textures/decals/pebbles_01_local |
27 | Image SpecularMap textures/decals/pebbles_01_s |
28 | Vector Specular 16 0 1 0 |
29 | AlphaTest .1 |
30 | noOverlays |
31 | VertexColor |
32 | PolygonOffset 1 1 |
33 | NoTFix |
34 | Contents Nonsolid |
35 | NoShadows |
36 | nofragment |
37 | Vector DetailNormalControls 3 3 2 0 |
38 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так падажите, материал от шейдера не будет зависеть? Просто прибит гвоздями к движку?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro эм, наоборот. В материале указывается шейдер для использования совместно с ним. Ну или указывается в шаблоне, чтоб каждый раз не писать его заново.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не помню, говорил я вам или нет, но в расширенном формате студиомоделей (который с развесовкой), есть одна очень любопытная штука - он способен сохранять KeyValue. Entity string если хотите. А новая архитектура пишется в том числе и с таким рассчётом, чтобы на месте мира могла бы любая модель, не только bsp. Так что потенциально вполне возможно будет делать мир моделькой, а кубать в блендере.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
К чему привязаны ключзначения? К целой модельке или к костям? Могут ли кости в модельковом мире играть роль энтитей?
nemyax один к секвенциям, другой глобальный. Впрочем это не так уж и важно, когда мы имеем дело с кей-валуями, привязать можно всё что угодно.
Добавлено 25-09-2019 в 10:29:
А кости в роли энтитей - такое уже было в третьем дууме. Только смысла в нём немного. Разве что расчленёнка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вообще-то во первых в модельке существует лимит на 128 костей, а во вторых у брашевого мира никаких костей и вовсе нет. Да я думаю, если написать такой плагин к блендеру, который бы умел парсить стандартные кей-валуи, то никаких проблем бы не было. Он бы просто расставлял по миру-модельке различные энтити, в том числе и брашевые конечно. Поскольку возможность подгружать маленькие брашевые модельки тоже сохраняется.
Ну как в кваке аптечки были, к примеру. Так оно и здесь будет. Эта принципиальная возможность иметь в качестве модели мир открывает множество интересных комбинаций на самом деле.
Добавлено 25-09-2019 в 11:51:
Собственно при разработки второй паранои я уделил большое внимание тому, чтобы уравнять в правах модели и брашы. На статические модели декали ложаться как браши, один в один. Прикрутил к ним коллизию не хуже чем у брашей. Наконец дал им лайтмапу, правда пока с оговоркой - отражённый свет в индоре не учитывается. Но это я исправлю в NT. Таким образом у нас осталась только одна проблема - определение видимости.
Возможно я использую какой-то иной подход как для брашей, так и для моделей, т.к. методов всяких придумали очень много, надо будет подробно изучить этот вопрос.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А для ворлдмодели(ей) есть такое понятие, как снаружи и внутри, или она(и) не обазательна(ы) быть замкнутой(ами)?
__________________
http://www.moddb.com/mods/monorail-quest
thambs снаружи\внутри используется только для генерации порталов в BSP. Ну еще можно проверять что игрок в нулевом лифе и выполнять всякие оптимизации, например отключать зеркала на карте.
Больше оно нигде не используется.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Рендеринг скорее всего тоже будет в игровой дллке. Не полностью конечно, а та часть, которая отвечает за отрисовку энтить. Так что поидее у каждой энтити будет виртуальный метод Render из которого и будет производится отрисовка с нормальным доступом ко всем членам класса. Как минимум это будет работать в сингле, даже если кто-то забудет прописать строчки в дельту. Правда надо будет еще придумать как подружить отложку с зеркалами-порталами. Если бы все объекты были непрозрачные, это не представляло бы никакого труда.
__________________
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-2019 в 14:25:
И еще. Я попробую восстановить функционал Quake3 на своей системе. Ну конечно не так, как там сделано, у меня не будет этих настроек, жестко прописанных. Но сами эффекты вполне реально будет замутить. Это будет тест на гибкость.
Добавлено 26-09-2019 в 14:26:
Можно будет даже скреатить такой специальный шаблон quake3shader и в нём намутить всё
Добавлено 26-09-2019 в 15:44:
ума не приложу что с мультипроходностью делать. Или полностью отказываться. Ну для водички-то отражения сделать будет можно, это ладно.
А вот насчёт мониторов-порталов-камер, это прямо таки под вопросом.
Отложка сама по себе не мешает организовывать мультипроходность, хотя конечно и жрёт видеопамяти очень много, кратно числу проходов, если мы хотим иметь рекурсивные отражения, например. Но, это как вы понимаете, легко отрегулировать в настройках, много видеопамяти - используем.
А вот как быть с прозрачными объектами, это прямо трогедия. Точнее если мы не будем их освещать. то половина трагедии, а вот если будем, это вообще кошмар какой-то. Я даже хз что делать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша пили форвард+
ncuxonaT
Чем форвард+ отличается от форвард-?
__________________
Дядя Миша
Порталы может-то и не нужны, а вот без мониторов и камер плохо будет.
__________________
http://www.moddb.com/mods/monorail-quest
XaeroX разбиением на тайлы со списками лайтов, декалей, лайтпроб и прочего в скрин спейсе или, еще лучше, в клип спейсе.
ncuxonaT опять какие-то сетки. Хотя это может оказаться полезным, скажем на этапе расположения лайтпроб.
Добавлено 26-09-2019 в 16:45:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша то есть это тот самый прикол из-за которого в современных играх перестали делать зеркала, даже наподобие Спирита? Не говоря уже об отражении в них игрока.
Crystallize
Честные зеркала перестали делать, потому что они удваивают работу рендерера и в общем случае в 2 раза снижают фпс. На абсолютно ровном месте. Не все готовы это терпеть.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут вот еще думаю, может быть есть смысл изобрести какую-то новую технику. Раз существующие меня не устраивают.
Добавлено 26-09-2019 в 20:51:
ncuxonaT на речке
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша так то скрин спейс
ncuxonaT нме Элбер скидывал новые интервью с разрабами. И они там говорят - да, настоящие зеркала. Может надо настройки намаксимум поставить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дядя Миша они поди про RTX говорили
В халфе вот эта гадость в input.cpp, ну где куча кнопок InKeyUp, InKeyDown.
Ну в халфе понятно оно из кваки, а там не заморачивались. Но в сорсе-то наверное переписали? Хрен там плавал! Так и тянут код из первокваки.
Уму нерастяжимо. Ну ладно написал менеджер для всего этого дела.
Теперь хоть выглядит семпотично.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сделал авто-регистрацию статически объявленных кваров. Больше не надо каждый раз писать CVAR_REGISTER (&some_variable);
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну что жы, потихонечку начинает вырисовываться новая архитектура.
Конечно сейчас она в какой-то степени повторяет оригинальный код, т.к. перенос с одновременным переосмыслением это вообще невозможное дело, в плане тестирования. Но чуть позже, когда всё устаканится, там уже явным образом будет видно, как можно упростить код. Причём это касается всех частей движка. Сейчас такое интересное время, когда старый код трудится параллельно с новым и каждый работает примерно на половину своего функционала. Ну это как новый дом строят поверх старого.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Ghoul [BB]
Например, вот эту станцию из одиссеи замутить:
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
thambs ты бы лучше mq доделал...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
ну либо магические паззлы делать:
https://youtu.be/Thu0hZrgofk?t=203
thambs а я когда подростком играл этого не заметил как и невидимого монстра. Там видимо нужно умнее быть.
Кстати по всей видимости Timeline 2 вдохновлён вот этим:
https://www.youtube.com/watch?v=xPpXHX-Tu5U
__________________
...и кстати игрок игроком, а для "космической станции" нужно будет и про энтити не забыть, чтобы та же дверь ездила в нужную сторону. Указать им всем источник откуда они будут брать корректный вектор.
Ghoul [BB]
Увы, это уже только если команда будет — мне нужен ещё один мэппер и моделлер пропсов. В одиночку уже точно ниасилю — сам же видел сколько сил уходит на одну локацию (особенно если затупишь с чем-то).
XaeroX
Крутится да. Ну, конечно, это фича редкая и не то что бы востребованная, но отдельным работам придать изюминку может, ящитаю. В порядке "а что если", думаю, что будь у автора hazardous course 2 такая возможность — он бы станцию замутил, благо, даже с обычной гравитацией сделал локацию из "фонтанов рая", да и отсылок к "одиссее" там вагон и маленькая тележка (да и в приложенных сырцах есть эскиз станции). Кстати, если у вас в PW кроме беготни по колидорам и пустыне будет что ни будь орбитальное (предпоследний уровень, например, типа цель куда всю игру идёшь), то оно придаст игре дополнительных плюсов.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
XaeroX
Ну в ку2-то оно и на станцию мало похоже. Там, по моему, даже окон небыло, т.е. весьма абстрактная консткукция (ну и конечно, никакой кривизны). Да и потом, в ку2 небо рыжее с камнями, а у вас серое в тучах, как во втором фильме про чужих (активное терраформирование идёт?).
Добавлено 30-09-2019 в 14:45:
__________________
http://www.moddb.com/mods/monorail-quest
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
nemyax
Вот, кстати, ещё вспомнил, в серии dead space вполне себе было много локаций, где на магнитных ботниках нужно было ходить по стенам и потолку. Т.е. не такая уж это прямо таки никому ненужная фича, но редкая, да.
__________________
http://www.moddb.com/mods/monorail-quest
В mirrors edge можно было по стенам немношко бегать
__________________
I tell you to enjoy life
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Беготня по стенам конечно очень специфичная фишка, реально годной темой были бы разрушаемые браши в стиле Ред Фекшон.
Вообще разрушаемости особенно детальной мало в играх удаляют внимания, а в современных ее почти и нет, вспоминается только онлайн шутер где ломать стены можно, а в остальных играх весь мир абсолютно статичный, даже у мебели и прочих пропсов просто физики нету, а зря разрушаемость это очень веселая часть игры, вспомнить те же автоматы с напитками из 1 халвы, вспомнить можно ещё и первый кризис с ломаемыми пальмами и халабудами, мне лично всегда было забавно орощить все в играх.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, теперь самое интересное. Надо придумать метод при помощи которого рендерер будет получать новые энтити для отрисовки. Тут две проблемы, которые к тому же противоречат друг-другу. Сам рендер энтити брать не должен, т.к. ничего про них не знает, но если игровая дллка будет ему сама их давать, возникает вопрос, как тогда быть с мультипроходностью. Зеркала, вот это всё.
Добавлено 02-10-2019 в 13:04:
Там надо составлять какие-то листы видимости для каждого прохода, но в них нельзя ничего копировать, это будет слишком тормозно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот очём я и говорил, "красивый код" не всегда самый эффективный
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Задачка имеет решение, надо лишь подумать как грамотно сделать.
Добавлено 02-10-2019 в 16:55:
Придумал. Перед началом основного кадра дллка добавляет список всех энтить для отрисовки в произвольном порядке, причём сами эти энтити могут быть вообще чем угодно, необязательно эдиктами. Могут и темп-энтити быть, например. Но при условии что эти объекты наследуются от абстрактного класса IRenderEntity. Примерно такого:
1 | class IRenderEntity |
2 | { |
3 | public: |
4 | ~IRenderEntity() {} |
5 | virtual bool CheckVisibility( const ref_viewpass_t *view ) const = 0; // entity is present for this viewpass |
6 | virtual const vec3 &GetRenderOrigin( void ) const = 0; // actual entity origin |
7 | virtual const vec3 &GetRenderAngles( void ) const = 0; // actual entity angles |
8 | virtual const matrix3x4 &GetRenderTransform( void ) const = 0; // actual entity matrix |
9 | virtual const matrix3x4 *&GetRenderBones( int &num_bones ) const = 0; // get bones for studiomodels |
10 | virtual const float GetBlendFactor( void ) const = 0; // opacity value 0-1 |
11 | virtual const IModelBase *GetRenderModel( void ) const = 0; // get model for rendering |
12 | }; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax собсно все средства именно в пользовательской части и сосредоточены.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ладно, вам наверное текст читать не слишком интересно. Вот картинки.
Это AABB-Tree из первого квейка, в узлы линкуются энтити когда мы вызываем UTIL_SetOrigin.
А это такое же дерево, но из Doom3
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Больше лучше?
__________________
I tell you to enjoy life
AntiPlayer под разные задачи просто.
Для Doom3 регулярная сетка по всем измерениям. Для квейков - только по XY.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Зачем сетку за картой строить?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для чего используются такие дерева?
Почему для квейков регулярная по XY, а не по XZ? Y же вертикальная ось?
ncuxonaT в квейках Z вертикальная ось, порабы уже запомнить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а на твоём скрине где вертикальная ось, если регулярная сетка по XY?
Ну чтожы пришло время вплотную заняться модель-менеджером. В игровом коде кстати вот это тяжкое бредовое наследие из кваки, оно ведь не нужно совершенно. Я имею в виду эти магические пары PRECACHE_MODEL\SET_MODEL. Это имело смысл только для виртуальной машинки первокваки, поскольку она не могла обращаться со структурой model_t и там ввели модельиндексы для этого дела. Но на практике постоянно возникает необходимость считать какую-то информацию из модели. В халфовском сервере с этим очень грустно дела обстояли, на клиенте чуть полутьшы.
То есть там даже со всеми функциями, которые я ввёл, надо было сперва получить модельиндекс, потом по нему взять модель и только потом к ней обратиться. Всё это не нужно совершенно. Одной функции SetModel более чем достаточно. Прекэш можно оставить только для клиентских моделей, причём на клиент посылать не загадочный модельиндекс, а номер строки, который соответствует имени модели, чтобы потом на клиенте найти её по этому номеру. А модельиндексы соответственно вообще упразднить, они не нужны, как таковые. Точнее говоря в них был смысл, пока не было системы уникальных строк, идентификаторы которых куда как лучше справляются с заменой этих модельиндексов. Потому что эти таблицы репласемнтов по сути излишняя абстракция, которая была нужна только для сохранения совместимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так же мне хотелось бы заложить поддержку на уровне движка деформируемого и разрушаемого окружения. Ну тут достаточно просто, это лишь часть задачи. Очевидно, что берётся исходная модель, к которой применяются некоторые действия. Причём эти действия необязательно связаны деформацией, главное отличие - это изменение какой-либо информации в модели. Например модели с лайтмапами. В исходной модели информации о лайтмапах нет, всё необходимое записано в карту. Но вертексы там уже иные, либо как в случае последних экспериментов, он развернуты в фан-вертексы. либо если делать по уму, то остаются стрипами, но всё равно добавляется информация о развёртке лайтмапы. То есть вертексы уже не оригинальные. В случае с деформацией, они дополнительно еще и сдвинуты согласно физическим законам. Как это реализовать? В нужный момент, во время игры или на старте делается копия модели, но не полная, а только та часть, которая поменялась, ну в данном случае это вертексы. Т.е. создаётся некая мета-модель со ссылкой на референс. А чтобы не путаться и держать всё в юниформе - она просто помещается в тотже единый массив из всех моделей. Конечно её можно будет сохранить в сейв, если понадобится. Аналогичным образом происходит и разрушение - модель делится на свои обломки, которые гененрируют целую пачку новых мета-моделей, на каждую назначается своя энтить с физикой твёрдого тела. Конечно с BSP такую штуку не проделаешь, но вот со студиомоделями - вполне себе.
точнее говоря, с BSP тоже можно, но бессмысленно, там ведь основной смысл в PVS, видимость. Такое на лету не пересчитаешь.
Добавлено 07-10-2019 в 12:04:
Еще один важный шаг к генеричности надо сделать - убрать из движка любую информацию про worldmodel. Ему не надо знать, что какая-то модель это мир. Для движка все модели должны быть равноправны. Что в свою очередь позволяет потенциально иметь несколько миров, загруженных одновременно и быстро переключаться между ними. И всё это можно реализовать в рамках пользовательской библиотеки.
В сущности у движка привязка к миру сводится лишь к построению overview, но это я уберу, сделаю членом класса модели.
А ну и естественно при таких параметрах нам понадобится хороший такой лимит на эти модели. Тысяч на 16 я думаю. А энтить на 65к. Но лимит на энтити всё равно в игровой части, там их можно будет сколько угодно замутить. Вот только с кол-вом клиентов пока не определился. Их по прежнему остается 32 штуки. Ну да ладно, клиентами я займусь, когда буду сетевую модель переделывать, до этого еще долико.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так товарищи. Все необходимые подготовительные работы выполнены, я уже избавился от client.dll и подготовил базу для рендерера, частичную, но основные уточнения уже будут непосредственно по ходу разработки, т.к. у меня еще мысль не оформилась, такое только на практике делается, особенно если учесть что для меня это совершенно новый тип рендерера, и поскольку я сам его придумал, то подсмотреть реализацию негде. По остальным саб-системам решение принято, там ничего особо интересного нет, да и движок выбирают за картинку. Так что наступает самая ответственная часть проекта - собственно рендеринг. Посмотрим что у меня получится, ну и в процессе постараюсь вас радовать скриншотами.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax ну неисключено.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Crystallize
Axis-aligned bounding box.
Crystallize что ты нисёжъ?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну что же написал загрузчик вертексов в видеопамять. Там такая тема, что каждый вертекс должен точно соответствовать кол-ву своих переменных. Нельзя просто завести вертекс, в котором будут все атрибуты на все случаи жизни и использовать его для разных типов данных - будет ощутимо тормозить. Поэтому неплохо бы формировать эти вертексы исходя из данных, которые реально будут использоваться. Но проблема в том, что этих вариантов у меня уже накопилось достаточно немало и прописывать каждый вертекс отдельно во первых трудоёмко, во вторых очень легко запутаться, а в третьих мне еще и две версии надо иметь для старого железа и для нового.
Поэтому я разработал универсальный загрузчик. Здесь кстати, наглядно проявилось то, во что превращается крестовый код, если активно использовать все возможности. Понять что там происходит стороннему человеку уже практически невозможно, это взрыв мозга.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Продолжаю имплементацию материалов. Сейчас именно тот самый момент, от которого зависит насколько будет удобно прописывать материалы по умолчанию. Надо подумать как лучшы сделать. Неявные хинты, дефолтный материал, или еще что-нибудь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Добавь в свой модельвьювер сразу возможность создавать и просматривать эти самые материалы в реальном времени, и дефолтные меши кроме самих моделей, кубик, сфера, цилиндр, конус, плоскость.
В блокноте врядли кто то будет ковыряться.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
А с отказом от ворлда, возможны ли будут "компилируемые префабы", ну или что-то вроде независимых кусков карты, которые можно вставить в другие карты и обращаться как к единому целому, так и к её составляющим?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Всё что было написано заранее, подготовлено, зачищено, так или иначе свелось к логическому упору, к самому главному моменту - настала пора заменить старый модельменеджер, который оперирует model_t на новый, который CModelBase. Это самая фундаментальная часть движка, на которой базируется абсолютно всё. Так что эта замена потребует порядочно времени, плюс у нового еще не все патчи дописаны, к примеру он умеет грузить только брашевые модели и ничего более. Так что в ближайшие недели новостей не будет. Но когда замена осуществиться - будет уже гораздо веселее, т.к. это самая масштабная часть операции по работе над ядром. Там уже глядишь и скриншоты пойдут, а может и демки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Если кому-то интересно - проект готов примерно на треть.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как ты измеряешь готовность проекта?
__________________
XaeroX по соотношению намеченного и реализованного.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Помню, ты экспериментировал с фиксированным серверным пингом для более стабильной физики. Что получилось в итоге, войдёт ли оно в NT?
__________________
http://www.moddb.com/mods/monorail-quest
Не пингом. Фиксированным серверным фпс. да, войдет, но не в том виде.
Теперь клиент-сервер тикают синхронно, а рендер уже сколько задашь.
Добавлено 16-10-2019 в 18:18:
И да, кстати, интерполяцию надо делать не между клиентскими кадрами, а между кадрами рендерера. Клиенту по большому счёту пофиг на интерполяцию. В халфе с этим как раз и была мешанина. Часть интерполяций делалась между рендер-кадрами, часть между серверными, в итоге возникало рассогласование. Ничего удивительного.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>пингом
Опечатка.
Дядя Миша
А как оно с управлением игроком / поворотами камерой работает, сохранится ли отзывчивость, присущая высоким fps?
__________________
http://www.moddb.com/mods/monorail-quest
Сохранится
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я вот размышляю над тем, что модифицированные модели полезно сохранять в сейв. Вспомним опыт первого дуума.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а как же мультиплеер? Это я про интерполяцию в рендерере.
Интерполировать движение объектов нужно и не только для рендерера. Халфа игроков интерполирует и получается, что на клиенте мы можем бросить трейс и быть уверенными что он попадёт в игрока как на клиенте, так и на сервере(на самом деле нет, ну оно просто само такое неидеальное). А когда сервер отмотает кадры в процессе анлага, то трейсы действительно придут куда надо.
__________________
Xash3D FWGS форк
a1batross так на клиенте фраги не считаются всё равно. А за визуальную часть попадания отвечает именно рендерер.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну это да, а как же интерполированные энтити сделать солидными? Ну то, есть их рендерер будет солидными для себя?
__________________
Xash3D FWGS форк
a1batross не забивай преждевременно голову
Вообщем получился у меня такой типичный крестовый код. В максимальном приближении всё очень красиво, но только Аллах ведает как это всё взаимодействует и работает.
Навскидку, ну вот такая хрень
1 | CVBOCache *CVBOManager :: CreateBuffer( const char *pszName, const CMeshBuilder &src ) |
2 | { |
3 | CVBOCache *pVBO = AllocBuffer(); |
4 | Q_strncpy( pVBO->m_name, pszName, sizeof( pVBO->m_name )); |
5 |
6 | if( pVBO->Construct( src )) |
7 | return pVBO; |
8 |
9 | // for some reasons we failed |
10 | FreeBuffer( pVBO ); |
11 | return NULL; |
12 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а чего не new CVBOCache/delete pVBO?
__________________
Xash3D FWGS форк
a1batross такого тожы хватает.
По материалам я принял следующее решение: подсказки. Вот как это будет выглядеть:
1 | template <worldSolidMaterial> |
2 | { |
3 | image u_ColorMap = "textures/<wadname>/<mipname>.tga"; |
4 | image u_DetailMap = "materials.def::detailmap"; |
5 | vec2 u_DetailScale = "materials.def::detailScale"; |
6 | float u_Smoothness = "0.35"; |
7 | frag u_ShaderFrag = "glsl/bmodelSolid_vp.glsl"; |
8 | vert u_ShaderVert = "glsl/bmodelSolid_fp.glsl"; |
9 | #define APPLY_PBS |
10 | #usage mod_brush // hint for template to implicit apply them for all brush model materials |
11 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
#usage
Дядя Миша
Это директива препроцессору, или? Первый раз вижу, где почитать можно что это такое?
__________________
http://www.moddb.com/mods/monorail-quest
thambs это мои материалы такие. К С++ это отношения не имеет.
Добавлено 19-10-2019 в 00:14:
Скажем вот в том же ку3, если шейдер не был прописан явным образом, он генерировался в коде из каких-то дефолтных настроек. Но пользователь не мог на это повлиять, он и не знал точно какие там настройки применяется, к тому же это зависело от типа модели. Моя идея в том, чтобы эти шаблоны по умолчанию создавал сам пользователь, так как ему нужно. То есть допускается иметь шаблоны с подсказкой - эти будут применяться автоматически к материалам, для которых вообще нет описания и шаблоны без подсказок - эти пользователь сам сможет применять к материалам, указывая их явным образом и перегружая нужные ему настройки.
В принципе для отдельно взятого материала можно перегрузить все настройки или вообще не использовать шаблон для его построения.
Кол-во настроек материала тоже задаётся пользователем. То есть к примеру можно не указывать шейдер, если материалу он по смыслу не требуется, будет осуществлён рендеринг на фиксированном функционале.
Теоретически на подобной системе легко эмулировать функционал как кутришных шейдеров, так и дуумтришных материалов, причём пользователь сам это создаёт скриптами и шейдерами. Аналогично, если не хочется ничего прописывать, можно обустроить тепичные шаблоны для всех материалов, прописать их один раз и не париться. Вообщем под разные задачи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
1 | Месяц Год |
2 |
3 | Доходы: |
4 |
5 | дата |
6 | источник - сумма |
7 |
8 | дата |
9 | источник - сумма |
10 |
11 | ... |
12 |
13 | дата |
14 | источник - сумма |
15 |
16 | Расходы: |
17 |
18 | дата |
19 | цель - сумма |
20 |
21 | дата |
22 | цель - сумма |
23 |
24 | ... |
25 |
26 | дата |
27 | цель - сумма |
28 |
29 | Итого: |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
blockname |
{ |
} |
<blockname></blockname> |
<blockname /> |
frag u_ShaderFrag = "glsl/<rendertype>/bmodelSolid_vp.glsl"; |
vert u_ShaderVert = "glsl/<rendertype>/bmodelSolid_fp.glsl"; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а что если как раз дать переопределять дефолты? А то и разрешать наследование материалов:
default { /* default materials opts */ }
material1 { ... }
material2 : material1 { ... }
Это я так, про экономию строчек и удобство работы с материалами.
XaeroX нынче модно молодёжно это JSON.
Который кстати тем же COM_ParseFile в теории можно распарсить.
__________________
Xash3D FWGS форк
a1batross
Ну джонсон-то человекочитаем и человекоредактируем в отличие от.
__________________
http://www.moddb.com/mods/monorail-quest
thambs да, так и есть.
__________________
Xash3D FWGS форк
Дядя Миша
А материал можно будет автоматически вывести из имени используемой текстуры? Например есть шаблон *wood*, и все текстуры содержащие *wood*, что отдельно не описаны, наследуют этот шаблон?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX
А зачем их "на работе парсить", когда этим библиотека занимается?
Добавлено 19-10-2019 в 15:34:
__________________
http://www.moddb.com/mods/monorail-quest
Мне стало интересно что вообще творится со скриптами в остальных движках, ибо, как известно, современный движок этими самыми скриптами и силён. В этом его главное отличие от кваки, где наоборот всё захардкодено и крутись как хочешь. Ну вот открыл UnrealScript:
Вот к примеру структурки:
1 | struct {DOUBLE} double |
2 | { |
3 | var native const int A; |
4 | var native const int B; |
5 | }; |
6 |
7 | struct BitArray_Mirror |
8 | { |
9 | var native const pointer IndirectData; |
10 | var native const int InlineData[4]; |
11 | var native const int NumBits; |
12 | var native const int MaxBits; |
13 | }; |
1 | struct immutable Vector |
2 | { |
3 | var() float X, Y, Z; |
4 | }; |
1 | struct immutable Plane extends Vector |
2 | { |
3 | var() float W; |
4 | }; |
const MaxInt = 0x7fffffff; |
const Pi = 3.1415926535897932; |
1 | native(133) static final operator(34) byte *= ( out byte A, byte B ); |
2 | native(198) static final operator(34) byte *= ( out byte A, float B ); |
3 | native(134) static final operator(34) byte /= ( out byte A, byte B ); |
4 | native(135) static final operator(34) byte += ( out byte A, byte B ); |
5 | native(136) static final operator(34) byte -= ( out byte A, byte B ); |
6 | native(137) static final preoperator byte ++ ( out byte A ); |
7 | native(138) static final preoperator byte -- ( out byte A ); |
8 | native(139) static final postoperator byte ++ ( out byte A ); |
9 | native(140) static final postoperator byte -- ( out byte A ); |
10 | native(129) static final preoperator bool ! ( bool A ); |
11 | native(242) static final k2pure operator(24) bool == ( bool A, bool B ); |
12 | native(243) static final operator(26) bool != ( bool A, bool B ); |
13 | native(130) static final operator(30) bool && ( bool A, skip bool B ); |
14 | native(131) static final operator(30) bool ^^ ( bool A, bool B ); |
15 | native(132) static final operator(32) bool || ( bool A, skip bool B ); |
1 | static final function float FInterpEaseIn(float A, float B, float Alpha, float Exp) |
2 | { |
3 | return Lerp(A, B, Alpha**Exp); |
4 | } |
5 |
6 | static final simulated function k2pure float RandRange( float InMin, float InMax ) |
7 | { |
8 | return InMin + (InMax - InMin) * FRand(); |
9 | } |
1 | /** @return the name of the package this object resides in */ |
2 | final function name GetPackageName() |
3 | { |
4 | local Object O; |
5 |
6 | O = self; |
7 | while (O.Outer != None) |
8 | { |
9 | O = O.Outer; |
10 | } |
11 | return O.Name; |
12 | } |
13 |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
Походу, один только я пишу код сплошными ифами и кейсами в не зависимости от языка.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
code:
VBOMesh |->material0 |->textures |->texture0 |->texture1 |->systemTexture0 (e.g. lightmap) |->systemTexture1 (e.g. screencopy) |->shaderObject |->techique0 (shader, glstate, defines) // ambient pass |->techique1 (shader, glstate, defines) // spotlight pass |->techique1 (shader, glstate, defines) // omnilight pass |->material1 |->material2
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Пересмотрел концепцию (я научился этому у покойного бумки), текущий вариант выглядит вот так, он уже парсится. Вариант не окончательный, но уже близкий к тому. Декларация псевдокодом по моей задумке должна подчёркивать, что всё написанное это не просто переменные, которые либо будут использоваться, либо нет, а то, что гарантированно будет выполнено в коде. Техника таким образом это готовый шейдерный проход, позволяющий что-то нарисовать с заданными параметрами. Там список неполный, надо еще подключить технику для теней и отложки, но это позже.
Добавлено 20-10-2019 в 00:14:
Ну чтожы, потихоньку система собирается из тысячи кусочков в единый механизм
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша эка у меня сразу текстовый редактор сказал -- это исходный код на C.
Наверное из-за .def расширения.
code:
depthMask( GL_FALSE ); blendFunc( GL_ONE, GL_ONE );
__________________
Xash3D FWGS форк
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, ну судя по всему от первоначального варианта вообще мало что останется. Не выдержал он столкновения с реальностью. А реальность нам дана в ощущениях в виде шейдеров из паранои.
Добавлено 21-10-2019 в 00:41:
Тимплейты под нож пойдут скорее всего, они не нужны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I tell you to enjoy life
__________________
Ну чтоже. После всех поправок и корректировок моих фантазий сообразно с реальностью и внутренней организацией конвейера, получилось вот такое вот. Это уже не абстрактный пример, оно парсится и генерит шейдеры.
Поясню что здесь к чему.
Каждый материал содержит ссылку на т.н. ShaderObject, который содержит в себе Techinques - техники. Назначение техник жестко определено в движке, это фиксированный набор, который нельзя изменить. На данный момент в наборе есть следующие типы:
base (ambient) - проход для рендеринга в паре с лайтмапами, статичный свет. Что рендерить в этом проходе выбирает конечно сам юзер, ему никто не навязывает непременно рисовать лайтмапы.
spot - освещение объекта для спот-лайтов
omni, sun - аналогично для всенаправленных и солнца.
shadow (depth) - для прохода теней.
в дальнейшем так же планируется проход для г-буффера, возможно для пост-процессинга, ну вообщем понятно. Все техники указывать необязательно, если вы например хотите чтобы какой-то конкретный материал (ну например полупрозрачный) не давал тени - просто не прописываете её технику в описание шейдер объекта. Или наоборот хотите, чтобы объект было видно только в лучах фонаря - для base строите пустой шейдер, который записывает только в буффер глубины, и для спот-лайта еще один. Ну это просто как пример использования.
В самих техниках можно настроить gl-state, практически весь набор, используемый в паре с шейдерами (который невозможно эмулировать из шейдера) - куллинг, запись в буффер глубины, полигоноффсет, ваерфрейм, итд. gl-state нельзя переопределить ниоткуда, он всегда существует только в самой технике. Если вам нужно непременно его переопределить для какого-то материала, то заведите отдельный шейдеробъект. Разные шейдер-объекты могут ссылаться на одни и те же техники. В техниках, как вы видите прописаны юниформы, которые используются в шейдерах, путь до которых задаётся там же. Кроме самих юниформов им назначаются дефолтные значения, как явные, так и относительные, в виде ссылок на какую-то информацию из движка.
Всего доступно несколько больших групп с переменными:
globals - глобальные параметры
light - для текущего источника света
entity - параметры энтити
render - позиция камеры, вьюматрица, ну понятно
lightProbe - типа R_LightForPoint
cvar - взять переменную, имя текстуры или индекс текстуры из квара.
materials.def - взять из описания материалов.
либо задать константу. Константы можно задавать и для vec2-vec3-vec4.
смешанные данные для векторов не поддерживаются, это всё же не язык программирования, а просто скрипты.
аналогично прописываются и текстурные юниты с относительными путями, конечно никто не мешает влепить туда константный путь.ъ
юниформы и текстурные юниты можно перегружать из любого материала в любом кол-ве. Хоть вообще все, но есть одна тонкость - всё что вы пропишете в материале будет применено ко всем техникам из шейдерного объекта. Разумеется для конкретного прохода будут использоваться только те юниформы, которые реально существуют в конкретном шейдере, т.е. объявлять лайтмапу для спотлайта имеет смысл, если сам шейдер обращается к ней.
С макро-подстановками немного по-другому. Они доступны сразу из трёх мест - из шейдер объекта, из материала и из техники. В случае использования в материале и в шейдер объекте, макросы будут применены сразу ко всем техникам в группе.
Единственное что я еще планирую сделать на этом фоне - возможность постановки тех или иных макросов в шейдеробъекте в зависимости от условий. Т.е. ввести кондиции в шейдеробъект.
Задавайте вопросы, что непонятно, предлагайте что поменять. Вам же потом с этим работать.
Добавлено 21-10-2019 в 16:58:
Можете так же приводить примеры из других движков, если вам там что-то понравилось, какие-то идеи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ладно, раз молчите, расскажу немного о концепции всего этого дела.
Эта система возникла не на пустом места, а явилась итогом многолетних рассуждений на тему организации материалов в рендерере. Я изучал как это реализовано в других движках, как к этому относятся непосредственные пользователи и выяснил несколько любопытных вещей:
1. Если движок базируется на идеях Кармака или просто частичный форк - там непременно будут либо кутришные шейдеры, либо дуумтришные материалы, либо их симбиоз в самых разнообразных вариациях. Причём не имеет особого значения, был ли это движок куплен у Кармака в далёкие времена или это народная модификация на GPL-сорсах. Тут еще что любопытно, те, кто эти системы модифицирует, как правило сам никаких материалов не пишет.
2. Если движок принципиально отвергает идеи Кармака, то материалы представляют собой две крайности: или это полная минималка, как в сталкерах-метро, где можно настроить несколько параметров и указать путь к детальной текстуре, либо чуть ли не свой собственный язык с визуальным конструктором, как во всяких Unity\Unreal.
3. Пользователи так же делятся на два типа. Одним просто нравится играться с настройками материалов, но ихние игры почти никогда не идёт в продакшен, это просто хобби такое, ну максимум ассет выпустят когда-никогда. Причём они в этом ассете все настройки пару лет подбирали. Второй тип, это которые делают реальную игру и у них голова болит сразу за миллион вещей и им эти материалы как серпом об асфальт.
4. То есть со стороны реального пользователя имеем на первый взгляд такие взаимоисключающие требования - с одной стороны чтобы система была мощной, с другой, чтобы по дефолту не надо было ничего крутить.
Вот на четвертом пункте, я и строил свою систему. Какое-то время у меня безусловно крутились мысли насчёт того, чтобы использовать все эти кутришные и дуумтришные материалы. Но в них есть одна очевидная проблема: эти материалы создавались в первую очередь для фиксированного конвейера и пытались собою подменить его функционал. Очевидно, если бы это имело практический смысл, то производители видеокарт не стали бы делать программируемый конвейер и все бы радостно юзали материалы из д3. Но в настоящее время, когда мы имеем возможность программировать конвейер видеокарты, все эти устаревшие концепции только мешают эффективному рендерингу. И кстати очень сильно ограничивают возможности редактирования визуальной части со стороны пользователя (через материалы), но по большей части это довольно сложно понять, т.к. обилие настроек в этих кутришны-дуумтришных материалах по большей части сбивает с толку, кажется что там есть абсолютно всё. На практике куда ни ткнись, кастомизировать не возможно ничего. Ну вот взять простейший пример - интеракция с динамическим светом. Что можно сделать из кутришного шейдера? А ничего. Максимум что можно - это запретить освещение совсем. Поменять модель освещения, сделать какие-то вариации на тему Subsurface Scattering или в случае, если у нас там волосы, глаза, зубы, всё приехали - это только лезть в код и не факт, что это получится сделать красиво, потому что придется эти настройки еще и выводить в эти шейдеры.
В этом плане моя система является полной противоположностью такому подходу. Это Data-Driven концепция, когда пользователь сам полностью формирует этапы рендеринга, а движок лишь выполняет то, что ему задали, не внося никакой отсебятины, не имея дефолтных параметров.
В идеале бы конечно построить такой механизм, когда вся кастомная часть рендера окажется в пользовательских скриптах и шейдерах. Ну и второй момент - это, как выразился thambs - вменяемые дефолты.
Здесь активно используются относительные пути, если мы имеем дело с текстурами и ссылки на другие источники. Большинство материалов уложится в стандартные параметры, описать придётся лишь всякие специальные вещи, типа зеркал, мониторов, но я полагаю это небольшая проблема
Добавлено 21-10-2019 в 21:33:
ЗЫ. Как я уже говорил, лучше всего на этих кутришных шейдерах получается сделать всякие мигалки и бегущие текстуры. Ну собсно, именно их все и делали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
просто в материале прописываешь шейдер, вот и всё
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
вот в том-то и дело, что не ждут. Привыкли и смерились!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С новой системой поидее можно будет иметь разные рендереры в разных модах, просто заменяя шейдеры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вчера был осуществлён успешный пуск рендерера, который базируется на новых идеях. Data-Driven, как следует из названия потребляет очень много этой самой даты. Надо придумать как бы её ужать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Типа дудосит жесткий диск?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Юзер сам создаст, поидее.
Добавлено 23-10-2019 в 19:21:
Хотя можно и налиту, конечно. Разницы особо нет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ты про трансформируемые картинки или про секвенции кадров?
Про секвенции конечно жы. А вы что подумали?
Добавлено 23-10-2019 в 20:52:
А что такое трансформируемая картинка?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, тю. Ну в моей система это элементарно реализуется прямо в шейдерах.
Все эти крутилки. Единственное что - задавать их придётся конечно не так, как в кутрёх, иной синтаксис. Но тут как бы тоже не всё печально. В моей системе ведь есть макросы! так что можно очень даже близко переопределить всё. Я конечно потом проверю, аж самому интересно стало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну матричку наверняка можно скормить. Но ведь её ещё домножать надо до нужного спейса. Хотя смотря как там у тебя.
nemyax ты имеешь в виду задать константную? Да можно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут принял решение отказаться от всех этих кастомных аллокаторов памяти, в настоящее время они практически неактуальны. Простенький лик-детектор еще можно оставить, но не более того. Я тут проанализировал код и понял, что мемпулы у меня используются только при загрузке моделей, а всё остальное прекрасно в деструкторах высвобождается. Ну то есть городить огород нет смысла. Для моделей я мемпулы завернул в класс, там это всегда полезно - посмотреть сколько памяти занимает та или иная модель, а остальное интереса не представляет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX маллок обычный. Вообще-то в CRT есть своя куча. Вот пусть и разбираются там. Я же говорю, после того как все рассчёты переместились на GPU, единственное что неплохо бы кастомизировать это модели.
Кармака понять можно, он для теневых объемов временные буфферы на кадре аллокал постоянно. Конечно ему кастомная куча была нужна.
Сейчас память аллокается только при загрузке, во время работы - нет.
Ну так и смысл городить аггарот?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Я где-то на хабре видел статью вот как раз по архитектуре коры дуба и она полностью мои представления перевернула. Ну точнее привела в соответствие с современным железом.
Добавлено 24-10-2019 в 17:01:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX обижаешь. Это был перевод с английского, на Хабре только их и можно читать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
А где асинхронные модели, там и асинхронные текстуры, так-то.
__________________
С декалями я придумал вот какую концепцию - декаль будет тоже модель. Ну разумеется не для пользователя, а с точки зрения движка. Мой менеджер моделей в своей концепции позвоялет ссылаться на другую модель, как на родителя. Таким образом парент для модели декалей будет например мир или бмодель. Причём эта модель будет линковаться не к самой модели, а к энтити, чтобы не получилось ситуации, например, когда дубликат одной и той же встроенной модели заодно дублирует и свои декали на ней. Сохранение таких декалей будет происходить через методы, встроенные в саму модель (не только для модели декалей, а вообще для любой модели).
И пользователь сам сможет определить для какой модели надо сохранять декали, а для какой нет. Аналогично для такой модели будет строится и область видимости, как и для брашевой. Это позволит держать рендеринг в юниформе. И для травы будет точно такая же модель со ссылкой на родителя. а шейдеры будут линковаться через хинты mod_decal, mod_grass.
Сам рендеринг при этом принимает максимально однотипный вид - промаркировали видимость для списка и отрисовали всё.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Текущий вариант организации скриптов. Здесь всё рабочее, все условия, параметры. всё рулит процессом. Работать становится всё удобнее, я к примеру добавил освещение на брашы, дописав несколько строчек в shaders.def
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как порядок наложения декаль-моделей будет рулиться?
code:
"duct_flr02a" { #material vent }
__________________
http://www.moddb.com/mods/monorail-quest
thambs не, нельзя.
Этож не просто key-value. Если бы ты дальше промотал. то увидел бы вот например такое:
1 | "{gratestep3" |
2 | { |
3 | #material grate |
4 |
5 | AlphaFunc( GL_GREATER, 0.25f ); |
6 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это да, понимаю. Я имел ввиду синтаксический сахар для тривиальных текстур.
__________________
http://www.moddb.com/mods/monorail-quest
thambs когда я закончу препроцессор, ты сможешь использовать макроподстановки для этих целей.
вот типа такого:
#define MATERIAL( tex, mat ) \
tex
{ \
#material mat\
}
ЗЫ, дополнил немного технику бмоделей
1 | technique "bmodelSolidLightmapPass" |
2 | { |
3 | vertShader( "glsl/forward/scene_bmodel_vp.glsl" ); |
4 | fragShader( "glsl/forward/scene_bmodel_fp.glsl" ); |
5 |
6 | image u_LightMap = "entity->$LightmapTexture"; |
7 | float u_LightStyleValues[64] = "globals->lightStyles"; |
8 |
9 | #if r_fullbright || !MODEL_HAS_LIGHTMAP |
10 | #define LIGHTING_FULLBRIGHT |
11 | #endif |
12 |
13 | #if r_lightmap == 1 |
14 | #define LIGHTMAP_DEBUG |
15 | #endif |
16 |
17 | #if r_lightmap == 2 && MODEL_HAS_DELUXMAP |
18 | #define LIGHTVEC_DEBUG |
19 | #endif |
20 |
21 | depthMask( GL_TRUE ); |
22 | } |
#if r_detailtextures && u_DetailMap |
#define HAS_DETAIL |
#endif |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я правильно понимаю, что к моделькам уже можно вязать ключ-значения и что они могут передаваться как параметры в шейдер? И для каждой модельки эффект будет зависеть от значений параметров?
nemyax через скрипты да. Вкомпиливать это внутрь модели смысла не вижу. Как тогда редактировать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А в какой момент изменения значений на модельке прорастают в шейдер?
Это операторы словами:
GL_EQUAL ==
GL_NOTEQUAL !=
GL_GREATER >
GL_LESS <
GL_GEQUAL >=
GL_LEQUAL <=
Добавлено 28-10-2019 в 13:46:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну што, работа идёт потихоньку. С новой скриптовой системой фичи добавлять одно удовольствие. Бамп подключил со спекуляром, за час.
Собсно, справился бы за пять минут, но ведь новые части системы написаны, а еще толком не отлажены. Плюс некоторые уточнения концепции.
Конечно нельзя сказать, что всё гладко. К примеру самая главная проблема отрисовки брашей - она никуда не делась. Надо придумать как оптимизировать это дело. А дело тут вот в чём:
Модель - понятно, загрузил меш, загрузил его индексы и рисуй себе.
С брашами не так. Там конечно можно весь мир засунуть в один вбо, но рисовать-то придётся по видимым фейсам, накапливая их в промежуточном буффере. Это первая проблема, то что нужен такой массив. Вторая проблема, что для того, чтобы сказать драйверу, какие именно сурфейсы рисовать, нам очевидно надо проталкивать индексы по шине каждый кадр.
Их не надо хранить, они всегда производное от surf->firstvertex (можете в ксаш-моде посмотреть), но положение это не спасает. Во первых их надо накопить в массиве. Во вторых их надо загрузить в видеопамять. Хреново вообщем. Пока карты стандартные халфовские это ни на что не влияет. Но взять ту же спонзу или карты рейда, и выходит что мы за кадр проталкиваем порядка 40 тысяч индексов. Конечно не вертексов, конечно это быстрее.
Но всё равно. Там где могло бы быть 2000 фпс, остаётся всего 300-400.
А с лайт-проходами и прочим, падение будет еще сильнее. Плюс это только рендерер. Вообщем имеет место быть мультипликационный эффект падения производительности. Надо придумать что с этим сделать.
Самое очевидное решение - вообще не использовать сложную брашевую архитектуру оставим на усмотрение дизайнерам. Если бы таких карт в природе не было, я бы может и не парился. Но они есть. И с этим надо что-то делать.
Добавлено 30-10-2019 в 18:51:
Из влобных решений - можно попробовать завести VBO для каждого фейса, но чёт мне кажется это плохая идея.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Забить на отсечение брашевых фейсов и рисовать единый вбо? С з препассом, например. Медленно получится?
ncuxonaT
У меня тут одна знакомая дочь офицера говорила по поводу з-препасса, что... ну ты понял.
__________________
BSP геометрию при загрузке конвертить в модель
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша текстуры можно собрать в атлас с GL_NEAR, а фильтрацию делать в шейдере, но это, конечно извращение немножк
__________________
-Brain is dead-
Crystallize
Если текстурные координаты за пределами единичного квадратика, то на атласе они бы брали чужие текстуры.
nemyax А, ну это понятно. Ну при тайлинге отдельно хранимой текстуры рендер же доходит до конца массива пикселей и потом сбрасывает координаты на начало и начинает рисовать следующий тайл той же текстуры. Ну а в атласе значит надо для каждой текстуры хранить границы в которых она находится в атласе, и так же циклиться между ними. Это по идее, в атласах наверное есть заморочка почему это невозможно, или ещёченить.
Это в общем такая фундаментальная проблема что не ждёшь что она ещё где-то не решена.
Crystallize для каждого атласа заводить texture region по количеству изначальных текстур, которые будут клампить оффсет?
__________________
-Brain is dead-
Crystallize это всё было бы хорошо в теории, если бы не существовало пирамидальной фильтрации, анизотропной фильтрации и других страшных слов.
Добавлено 30-10-2019 в 20:53:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну так а это, сортировать видимые фейсы в текстурные списки?
__________________
-Brain is dead-
Первые эксперименты по оптимизации.
Чёт какой-то COF получился.
Добавлено 30-10-2019 в 22:01:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще по сути с текущим пайплайном, как я его понял, проблема не только в текстурах, ведь одна текстура может шариться на несколько материалов, например, а значит конвейер будет тормозиться уже не на смене текстуры, а на переключении шейдера
__________________
-Brain is dead-
ну текстура, материал, неважно. Понятно же что речь идёт об уникальном объекте. Пока не было шейдеров, в их роли выступали текстуры.
Список фейсов хитро отсортирован, чтобы минимизировать все переключения, так что этот фактор не влияет.
Вообщем я опробовал сравнительно свежий glMultiDrawElementsBaseVertex
и древний glMultiDrawArrays. И вот последний в моём случае дал наилучший результат. В принципе, когда у тебя вот такие вот три-фаны, их наверное и правда лучше рисовать совсем без индексов - быстрее будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша вайрфрейм бы интересно глянуть, как оно разбивается
__________________
-Brain is dead-
Поскольку текстура потенциально может грузиться из разных мест, добавил в скрипт функцию addImageLocation. Конечно при нормальной разработке игры, это ненужно, но для моей отладки, когда у меня тут зоопарк из разных карт, в том числе и кутришных, это может оказаться полезным.
Через этот же механизм реализуется и дефолтная текстура, которую можно задать, если ничего не нашлось. Для бампа, например можно сделать чёб он поискал текстуры с разными суффиксами, ну там _gloss, _spec понятно.
Для диффузки - в ваде, в папке textures и так далее. Эти пути конечно тожы можно перегружать раздельно для шейдер объекта, для материала и для техники и заключать в условия.
Добавлено 31-10-2019 в 17:18:
Вчера ради интереса поглядел как это устроено в старом Unigine - там очень похожая схема, ну просто очень. Точнее не схема, а концепция, там тоже есть обозначенные типы проходов - амбиент, разные типы лайтов, отложка, постпроцесс. Но там довольно много встроенных параметров, у меня нет вообще. Полностью настраиваемый конвейер.
Для полного щастья осталось добавить команду cvar, которая будет регистрировать квары, например из game.rc и можно создавать различные рендереры, вообще не затрагивая код.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
XaeroX DX не нужен
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С китайскими детайлами одна беда - они сделаны для сохранения совместимости, поэтому кол-во производимых лифов просто зашкаливает.
Сами понимаете, проверять десятки тысяч лифов на каком-нибудь сепульчере дорогостоящее удовольствие. Можно конечно пойти простым путём как Ксерокс, прикрутить кутришные карты. Но так неинтересно.
Тут всё дело в том, что у нас есть необходимая информация, чтобы из общей кучи лифов и нодов восстановить дерево без детайлов. Ну точнее говоря, смержить все детайл-лифы обратно в один, и ноды подсократить. Насколько их меньше? ну скажем на Edge Of Forever 145 тысяч лифов, а реальных, которые отвечают за видимость около двух тысяч (кстати даже меньше чем в ку3). Лифы, первый в списке это основной, остальные с таким же оффсетом виздаты - детальные. Ну и руководствуясь этой информацией, как вы понимаете, идя, обратно по родителю лифа, можно найти детальные ноды и построить новое дерево. Правда оно не годится для трассировки например, только для видимости. так что старое тоже останется.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А от разрезаний всего и вся и щелей это поможет?
__________________
http://www.moddb.com/mods/monorail-quest
Ну кто о чём
Добавлено 01-11-2019 в 12:10:
Мне это напоминает, как какой-то чувак увидел в хидерах vgui какой-то класс SurfaceGL и тут же решил что это мониторы из третьего дуума. Ну ему просто очень хотелось, чтобы они там оказались.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Та не о чём, а о том что больше всего беспокоит в истории с дизайном карт.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так всё-таки 4 тысячи полигонов а не 4 миллиона, правильно?
Crystallize да. Построил новое дерево. Ну неплохо, на сипульчере 200 фпс, на Edge Of Forever 300. Теперь надо выкинуть лишние ноды из дерева.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Там от оптимальности дерева куда больше зависит, чем от остального.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну собсно, первые валидные результаты, для Edge Of Forever
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Vis Tree, что это и для чего нужно
Ну чтожы, давайте немного расскажу о том, что это вообще такое, откуда взялось, почему не было раньшы. Бинарные деревья (хотя навряд ли только они), имеют следующую особенность - их построение привязывается к конкретной задаче. То есть нельзя построить идеальное дерево для всего сразу, но можно для одних и тех же данных построить несколько деревьев и каждое будет оптимально для своих задач. Собственно, поэтому и клипноды - оптимизированное дерево для коллизии. С видимостью всё не так однозначно. После первой кваки, Кармак решил не хранить более одного дерева на модель. В ку2 это привело к проблемам - на ноды пришлось класть брашы, дерево получилось неоптимальным, переусложнённым. Настолько неоптимальным, что для рассчёта видимости, компилятор создаёт новое дерево, игнорируя детальные и мелкие лифы. Но в ку2 нет явной привязки виздаты к лифам - там промежуточные индексы, которые называются кластерами. В ку3 дерево еще более общее. Если быть точным, оно ни для чего. Для коллизии оно слишком поверхностное, кмк регулярная сетка была бы куда более оптимальна. Для точечной трассы - аналогично, оно не включает в себя например плоскости патчей, трисурф-моделей, это надо трейсить отдельно. Еще и проверяя, что в этом лифе мы уже трейсили (это особенно интересно выполнять при мультипоточных рассчётах). Единственное для чего кутришное дерево оптимально - это для видимости. В моду уже входили графические ускорители, риваТНТ опять же. И вот с их учётом дерево и было построено. А для первой кваки остался самый неоптимальный вариант на текущий момент. Рассмотрим это подробнее.
В первой кваке\первой халфе, как известно нет функ_детайла, нет ареапорталов и прочего. Дерево там в первую очередь устроено для максимальной оптимизации коллизии. А небольшой размер дерева получался автоматически - квака не блистала детализаций в 95-м году, сами понимаете. Но время шло, карты становились всё навороченней и вот то самое дерево, которое идеально подходило для колоизации, выступило ключевым тормозом перестройки для проверки видимости.
По очень простой причине - чем больше детализация, тем больше лифов и нодов, чем больше лифов и нодов, там дольше обходить дерево. Возникала ситуация, когда проверка на видимость в десятки раз дольше, чем, собственно отрисовка. Вот кстати, что касается, сипульчера, спонзы и прочих подобных карт. Китаец и автор TyrUtils, понимали проблему, поэтому попытались ввести детайл-брашы для первого квейка\халфы. Но проблему это решило только наполовину и вот почему: оптимальное дерево существовало только для виза и здорово сокращало время его рассчётов, вплоть до того, что карта, которая могбы считаться часов 30, теперь считалась пару минут. Но для сохранения совместимости с форматом халфы\кваки, им в любом случае пришлось нагенерить дополнительных нодов-лифов для того чтобы описать все эти детальные брашы, чтобы движок смог их отрисовать. Причём нельзя даже сказать, что они вообще не нужны - ведь они же еще и для коллизии используются. Тот же рад, например тени по ним считает. Но считать видимость по такому дереву нельзя категорически. Вот у того же Edge Of Forever, скомпиленного в формат условной первохалфы, получается 136 тысяч лифов. Даже если просто пробежать их в цикле - ну можете подсчитать сколько времени это займет. Далее, видимые лифы копятся для энтить для быстрой проверки видимости. Ну кто движок ковырял тот знает. А если лифов через чур много, то вместо них делается проверка видимости по хеадноде. Вы никогда не задумывались сколько времени занимает такая вот проверка? Я не считал точно сколько там энтить каждый кадр её запрашивают, но всего на карте 386 энтить. Ну пусть половина. Этот запрос на проверку видимости, отнимает по времени 0.07 секунд!!!!! Рендер, к примеру управляется на два порядка быстрее. То есть получается идиотизм. Вроде бы и детайлы есть и виз оптимизированный. А фпс всё хуже и хуже. К слову говоря старый Кармаковский код с поиском лифов через родителя ноды в данной ситуации чувствует себя чуть получше. Но и только. Конечно это всё неюзабельно, как вы понимаете. Как же поступить в данной ситуации? Какие варианты у меня были?
Добавлено 02-11-2019 в 20:56:
самый "простой" метод, который у меня был, как вы понимаете - это взять формат карт из Quake3. После всего что я сделал для халфовского формата, научил его считать лайтмапы на моделях, повертексное и еще массу других интересных вещей, взять дропуть и прикрутить кутришный формат, как в Волатиле. Ну не скрою, текущая архитектура XashNT позволяет его прикрутитьЮ не затрагивая другие подсистемы. Но сами особенности формата могут доставить немало весёлых минут мапперам, если я им потенциально предложу на него перейти. Напомню, что я даже патчи и трисурфы имплементировал в халфовский формат. Как говорится - последний довод за кутришный, который мне всегда приводили в пример.
Ну вообщем с учётом вышесказанного я решил, что мне нужно не маяться дурью прикручивая к движку разные там форматы карт, этим хорошо заниматься, когда ты учишься, и попытаться решить проблему более элегантным способом. Например построить такое специальное дерево для видимости. Как это сделать? Компиляторы, учитывющие детайлы в картах делают одну оптимизацию - для детальных лифов пишется тот же самый оффсет виздаты, что и для главного лифа, из которого они наследуются. Второй момент - они обычно не раскиданы по карте вперемежку, а идут группой подряд. Собсно это второе больше влияет на возможности оптимизации по скорости построения нового дерева, а не на какую-то принципиальную невозможность. Главное же условие, я назвал - совпадающие оффсеты у виздаты. Итак, по этим оффсетам мы находим настоящие визлифы, их кол-во и создаём новый массив с визлифами, аккумулируя в один лиф всё из детальных. Аналогично из обычных нодов создаётся массив визнодов. Здесь над подстерегает одна нехорошая проблема - во первых эти ноды раньше ссылались на детальные лифы, а теперь на одни и те же номера обычных лифов, которыми мы их подменили. Это не фатально, но провоцирует дубликат в BoxLeafnums, что в свою очередь быстро приводит к их переполнению в массивах энтить и снова здравствуй поиск по хеадноде, а поскольку визнодов столько же, сколько было в исходном массиве, никакой оптимизации считайте и не было - только память зря израсходовали. То есть моя основная задача, которую я решал последние два дня - как эффективно выкинуть эти лишние ноды и при этом не поломать дерево и чтобы это было быстро (поскольку делается во время загрузки уровня). Ну собно, немного статистики я привёл выше. Edge Of Forever с виздеревом теперь выдаёт вместо 15 фпс, около 500. У спонзы тоже фпс очень вырос.
ну и разумеется в моде рейда произойдут аналогичные позитивные улучшения.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ничего не понял, но как всё таки с т.з. левел-дизайнера результирующие полигоны будут выглядеть на неаксиальной геометрии?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Компилятор уровней в формат XashNT всё так же будет резать браши через определённые промежутки, пусть и не такие большие?
Crystallize лайтмапы-то большие, можно практически не резать.
Во всяком случае это лучше, чем пытаться уменьшить лайтмапу, как ку3 делает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В ку3 ты можешь сам порезать большие браши в Джеке, где надо.
__________________
Очевидно в джеке можно порезать брашы для любой карты
Я кстати понял, откуда взялась внезапная оптимизация дерева даже для тех карт, где нет никаких детайлов.
1 | for( i = 0, data = g_uncompressed; i < leafnum; i++, data += g_bitbytes ) |
2 | { |
3 | if( !memcmp( data, outbuffer2, g_bitbytes )) |
4 | { |
5 | g_dleafs[g_leafstarts[leafnum]+1].visofs = g_dleafs[i+1].visofs; |
6 | c_reused++; |
7 | return; |
8 | } |
9 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
1 | for( int i = 0; i < numleafs; i++ ) |
2 | { |
3 | for( int j = i + 1; j < numleafs; j++ ) |
4 | { |
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'
__________________
Вот вам для понимания картинка виздерева, циферками обозначены номера лифов. Красной циферкой - аутсайд лиф, общий. Как видите тут очень много ссылок на второй номер лифа виздерева. В реальном дереве там конечно был какой-то свой уникальный лиф, но это неважно, потому что у всех этих уникальных лифов была ссылка на один и тот же указатель виздаты. Мой оптимизатор дерева исходит из очевидных предпосылок - если у ноды ссылки на детей оканчиваются одним и тем же лифом - такую ноду можно выкинуть. Если у ноды дальше по дереву всего два уникальных лифа, причём один из них общий, то такую ноду тоже можно безболезненно выкинуть, оставив только ссылку на ненулевой лиф. Почему - понятно, этож дерево видимости, за пределами уровня, оно всё равно значения не имеет, так что на его целостность это не влияет. Но вот иногда бывают такие мерзкие случаи как накартинке. С которыми я решительно не знаю чего делать. Да и нужно ли с ними что-то делать вообще. Время покажет.
Добавлено 03-11-2019 в 15:18:
Результаты для быстрого построения визтри и для медленного.
Конечно далеко не на каждой карте такая разница большая.
Добавлено 03-11-2019 в 17:06:
У меня тут еще появилось вот какое соображение. Дубликаты проявились только на картах, собранных промежуточной версией p2st. Возможно там что-то неоптимальное было. Надо будет пересобрать и проверить заново.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А почему для всех задач деревья, то такие то сякие? Не может ли статься, что где-то больше подойдёт какая-нибудь хеш-табличка ну или там я не знаю?
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я вот что понять-то не могу. Вот взять сипульчер. Ну хорошо может там не прямо сложная геометрия. Но всё компилится, микродырок нет. Что родными компиляторами, что моими. Далее. Не скажу за p2st, но XashNT Tools прекрасно собирают родные кутришные карты - q3dm1, q3dm7. Со светом. Опять таки - некоких дырок, выпадающих полигонов там нет и близко. Достаточно простые карты? Ну хорошо Edge Of Forever достаточно сложная? А там снова идеальный результат. Но почему-то у Тхамбса проблемы на простейших скруглённых тоннелях вылезают, я этого решительно не могу понять. Гротто - там да, неисключено, такое вообще никто не рисковал компилировать в BSP. Но чтобы тоннели?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну точность флоата как бы никто не отменял, это правда. Но во первых в компиляторе даблы, а во вторых точность сохраняется до диапазона +\- 16384 примерно. Если гротто выходит за рамки, там возможны какие-то проблемы с генерацией порталов, да собсно всё упирается в эти долбаные порталы, там ОЧЕНЬ важна точность. Альтернатива вам хорошо известна - вручную расставлять окклюдеры у каждого дверного проёма.
Так, ну штож. С брашами подразобрались, настала очередь моделей. Может показаться, что я просто беру и копироваю код из паранои, но параноя писалась с учётом особенностей Xash3D, многие вещи нуждаются в переработке, можно сделать гораздо оптимальнее. Да и вообще в халфе эта дурь с сетапом костей в рендерере очень сильно вставляет палки в колёса. Вот зачем рендереру заниматься сетапом костей? Зачем ему вообще это нужно? Ему это никак не нужно. Ему просто надо получить кости из энтити и всё.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я правильно понял из вашей беседы, что в ку3 компилятор на нарезает геометрию на куски как, например, на скриншоте Тхамбса (обратите внимание на тоненькую полосочку, отрезанную от прямоугольного фейса на стене)? При этом там нормально строится и работает бсп-дерево и всё такое?
Не нарезает, да. Но и использовать такое дерево для трассировки уже проблематично. Только для видимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Выходит, вся эта канитель с кучей лишних треугольников, микрофейсами, корявой геометрией и швами нужна только чтобы трассу легко строить по дереву? При условии, что Кармак справился с этим 20 лет назад?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ты приглядись внимательнее к eof -- там большинство брашей или аксиальыне, или под 45, остальные с рациональным соотношением сторон. У симонока вообще большей частью там замки, а террайны с преимущественно с близкими к регулярным сеткам. А чем больше флоатов, треугольников, чем больше брашей с близкими (но не совпадающими) плоскостями и чем меньше углы между ними, и чем дальше они от центра карты и больше по размеру -- тем больше проблем вылезает. p2st очень многое исправило, но всё равно раз-на раз не приходится. Т.е. даже если щелей нет, то будут места, где тонкие чёрные полоски -- из-за того что лайтмэпа плохо легла на микрофэйс, будут места со странными застреваниями или наоборот проваливаниями. И никак это не спрогнозировать. В результате вырабатывается конечно некоторое эмпирическое умение как минимизировать проблемы, но это получается перекладывания с больной головы на здоровую, в том смысле, что компьютер должен работать а человек думать, а не наоборот.
__________________
http://www.moddb.com/mods/monorail-quest
1 | void TraceLine( const vec3_t start, const vec3_t stop, trace_t *trace, qboolean testAll, traceWork_t *tw ) { |
2 | int r; |
3 | int i, j; |
4 | dleaf_t *leaf; |
5 | float oldHitFrac; |
6 | surfaceTest_t *test; |
7 | int surfaceNum; |
8 | byte surfaceTested[MAX_MAP_DRAW_SURFS/8]; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не гадить, а подготавливать особенным образом. Тот же кутри лишён CSG, там вся внутренняя хрень, которая исчезает при препроцессинге, здесь радостно остаётся. И для нее тоже считается лайтмапа. На иных картах залетишь вот так в стенку, а внутри - еще одна стенка и на ней лайтмапа посчитана. Конечно это лучше. Щас во всех играх такое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подключил студиомодели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Совместимость с голдовскими будешь ломать?
В дальнейшем буду. Я предусмотрю такой же конвертор из одного формата в другой, как и для уровней.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот кстати говоря насчёт TBN на моделях. В параное сглаживание происходило только в рамках одного меша. Если кто-то не знает структуру студиомодели, поясню. Вся модель делится на Body Parts - это таблица индексов, к которой прилинкованы субмодели. Через параметр pev->body мы можем указывать рендереру какие именно части тела рендерить. Хитрость этой таблички в том, что мы уже при компиляции можем задать любые сочетания из имеющихся у нас субмоделей и привязать их к определённому номеру body. Допустим солдат-негр с дробовиков содержит в табличке 3 субмодели - тело солдата, голова негра и дробовик. Эти три меша будут отрисованы. Субмодели делятся на мешы, но при этом вертексы-нормали общие для всей субмодели. Один меш отличается от другого только текстурой. Так вот всё дело в том, что чаще всего нормали сглажены только для отдельно взятого меша, а не для всей субмодели. Проверить это утверждение очень легко - достаточно попробовать нарисовать Glow Shell, используя те нормали, которые уже есть в модели. Ну вы все знаете, как делается Glow Shell:
vec3_t vertex = mesh->vertex + mesh->normal * shell_scale; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша будешь делать обрезалку квадов спрайтов, как хумус завещал?
http://www.humus.name/index.php?ID=266
Не знаю пока насчёт обрезалки. Я тут в коде упаковщика картинок от Кармака баг нашёл. Сначала понять не мог, да что за дерьмо такое, ну вот ситуация. Допустим у нас в спрайте всего 1 кадр 16х16. Размер атласа аналогично 16х16. У меня там перед загрузкой еще код пытается определить потенциальные размеры атласа, чтобы потуже упаковать кадры.
Вполне естественно что для одного кадра он покажет именно его размеры.
А упаковщик - посылает. А всё почему?
1 | for( i = 0; i < blockWidth - w; i++ ) |
2 | { |
3 | best2 = 0; |
4 |
5 | for( j = 0; j < w; j++ ) |
6 | { |
7 | if( allocated[i+j] >= best ) |
8 | break; |
9 | if( allocated[i+j] > best2 ) |
10 | best2 = allocated[i+j]; |
11 | } |
12 |
13 | if( j == w ) |
14 | { |
15 | // this is a valid spot |
16 | x = i; |
17 | y = best = best2; |
18 | } |
19 | } |
for( i = 0; i <= blockWidth - w; i++ ) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да не, от еденичных спрайтов подряд оно не спасёт. Это для облака партиклей в первую очередь полезно. Вот там да, овердрав, который можно сильно уменьшить.
Добавлено 07-11-2019 в 19:19:
Кстати насчёт того исправления о котором я написал выше. Залез в код ку3 - а там уже исправлено Причём тем же способом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Та я уже почти никуда не лажу. А если и лажу, то не за кодом, а посмотреть архитектурное решение.
Добавлено 07-11-2019 в 20:36:
Чтоб не мелочиться, загрузил вообще все спрайты, которые были. Прикольно выглядит.
Добавлено 07-11-2019 в 20:44:
Барон Ада из дуума занял текстуру 1024х768.
Добавлено 07-11-2019 в 20:46:
Вообще в NT я планирую сжать эти спрайты в DXT1\DXT5, это и будет "новый" формат.
Добавлено 07-11-2019 в 23:20:
Возвращаясь к теме убитых нормалей, то что я писал утром. Вспомнил, что у меня есть моделька, конверченная из ку3 с помощью этой японской программы, название которой я уже забыл. Ну вообщем нормали там вообще никакие. Я не знаю почему. Собсно слева - нормали в модели, а справа seamless normals by area weighting про которые я говорил.
Это конечно искуственный случай, ну просто чтобы было понятнее о чём речь.
Добавлено 07-11-2019 в 23:52:
Да, возвращаясь к вашей самой любимой теме, о том как можно текстуры с разных моделей совершенно не грузить, как дубликаты. В NT это вполне себе реализуемо. Правда с той оговоркой, что компиляторы пытаются подрезать текстуру на разных моделях ($cliptotexcoords), из-за чего одна и та же текстура может менять свой размер на разных моделях. Поэтому для таких текстур будет сделан дубликат. Но их не очень много.
Немного статистики для c1a0d.
Все текстуры уникальные - 653 штуки.
С дубликатами для одинаковых имён и разных размеров - 695 штук
Уникальные текстуры для каждой модели - 790 штук.
Для халфовских моделек вся экономия - 2 мегабайта памяти.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша взвешенное сглаживание нормалей планируешь опциональным делать? Потому что если модель будет с запеченной нормалмапой, то из-за изменений нормалей нормалмапа пойдет по одному месту.
Crystallize ты как-то спрашивал на КСМе, почему в хлраде нет антиалиасинга у лайтмап, только блюр. А я ответил, что толку от антиалиасинга не будет, потому что при увеличении даже сглаженной текстуры всё равно полезут пиксели. Так вот, оказалось, что я был неправ, и можно заморочиться, чтоб лайтмапа была более-менее гладкая. Нужно пиксели интерполировать не билинейным фильтром, а, например, бикубическим. Но видеокарта в него не умеет, поэтому придётся городить огород в шейдере, и фпс немного упадёт, конечно.
Вот вроде бы самый быстрый способ:
http://www.java-gaming.org/index.php?topic=35123.0
Ожидаемый результат примерно такой:
Может, ДМа заинтересует.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша добавлять бордюр в один пиксель вокруг каждого куска в атласе?
>https://ndotl.files.wordpress.com/2...arvsbicubic.jpg
Красота какая.
__________________
http://www.moddb.com/mods/monorail-quest
С бордюром\без бордюра. Если бы у меня что-то получилось с бикубиком, я бы его еще в параною добавил. Ему нужны сплошные непрерывные лайтмапы судя по всему, развертки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А возможно в принципе поглядеть как оно выглядит на самом атласе и как туда полигоны отображаются?
__________________
http://www.moddb.com/mods/monorail-quest
это швы
__________________
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-2019 в 14:00:
__________________
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-2019 в 14:49:
вот ежели у меня руки когда-нибудь дойдут до LCSM, вот тогда и можно будет вернуться к этой теме.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подразумевалось, что бордюр будет заполнен цветом из соседнего пикселя, а не останется черным
ncuxonaT
А если шов идёт по диагонали?
__________________
http://www.moddb.com/mods/monorail-quest
thambs то что?
Хым. Это я бордюр неправильно строил. Надо же по два пикселя брать, а я брал один. Вообще эти бордюры строить нетривиальная задачка, оч. легко запутаться. Но с бордюром, темнименее, мне уже прямо нравится. Я его окрасил в красный цвет для дебага, так вот даже уже с таким цветом - швы практически незаметны. Продолжаю эксперимент.
Добавлено 08-11-2019 в 19:32:
Всё равно швы лезут от бикубика. Правда в данном случае - на тех местах где они были изначально. Слева билинейка, справа бикубик
Тут еще надо отметить что эта версия c1a0d была скомпилена еще оригинальными вальвовскими компилерами, т.е. там полюбому швы были.
Может быть, если бы швов не было, они бы и не вылезли?
Добавлено 08-11-2019 в 19:40:
Ну вообщем серавно фигня. Вот заведомо бесшовная карта, а вот что происходит:
Спровидливозти ради стоит отметить, что это происходит далеко не везде. Может ему недостаточно бордюра в 1 пиксель? Попробую два.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а как ты бордюр строишь?
ncuxonaT в основном - вокруг лайтмайпы. Или вквадрат, если быть точным.
Добавлено 08-11-2019 в 20:23:
Корочи даже по три пикселя бордюр даёт точно такой же эффект со швом. Спровидлизвоти ради стоит заметить что со включённой диффузкой этот шов незаметен, да и сами швы появляются далеко не везде, с бордюром-то.
Добавлено 08-11-2019 в 20:28:
Ну что тут скажешь. Есть места, где всё становится только лутьшы. Вот к примеру:
А здесь наоборот - сплошное расстройство
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Эй, это же ку3дм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 ну выбросите лайтмапы, будет одна динамика
Добавлено 09-11-2019 в 00:21:
До сих пор разгребаю последствия полетевшего винта. Тут внезапно выяснилось, что все бэкапы паранои - тоже того, уже не являются архивами.
Ну есть конечно финальные актуальные сорцы. Но промежуточные все утеряны. Месяца за 4-5.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подтверждаю, у меня тоже швы вылазят. Теоретически я могу сделать, чтобы моя убиралка швов делала это с учетом бикубика, но тогда нужно будет хранить все куски с бордюром в 1 пиксель. Ну или сразу фикшенный атлас.
1 | technique "studioSolidLightmapPass" |
2 | { |
3 | vertShader( "glsl/forward/scene_studio_vp.glsl" ); |
4 | fragShader( "glsl/forward/scene_studio_fp.glsl" ); |
5 |
6 | image u_LightMap = "entity->$LightmapTexture"; |
7 | image u_DeluxeMap = "entity->$DeluxemapTexture"; |
8 | float u_LightStyleValues[64] = "globals->lightStyles"; |
9 | float u_AmbientFactor = "globals->ambientFactor"; |
10 | vec3 u_LightDiffuse = "lightProbe->color"; |
11 | vec3 u_LightDir = "lightProbe->direction"; |
12 | vec2 u_LightShade = "lightProbe->shadeAmbient"; |
13 | vec3 u_AmbientCube[6] = "lightProbe->ambientCube"; |
14 |
15 | #if MODEL_HAS_LIGHTMAP |
16 | #define SURFACE_LIGHTING |
17 | #endif |
18 |
19 | #if MODEL_HAS_VERTEXLIGHT |
20 | #define VERTEX_LIGHTING |
21 | #endif |
22 |
23 | // NOTE: TBN should be computed even bump texture is missed |
24 | #if MODEL_HAS_DELUXMAP |
25 | #define HAS_DELUXEMAP |
26 | #endif |
27 |
28 | #if r_fullbright |
29 | #define LIGHTING_FULLBRIGHT |
30 | #endif |
31 |
32 | #if r_lightmap == 1 |
33 | #define LIGHTMAP_DEBUG |
34 | #endif |
35 |
36 | #if r_lightmap == 2 && MODEL_HAS_DELUXMAP |
37 | #define LIGHTVEC_DEBUG |
38 | #endif |
39 | #define NORMAL_RG_PARABOLOID |
40 | depthMask( GL_TRUE ); |
41 | } |
1 | shaderObject "StudioModel" |
2 | { |
3 | setTechniquePass( "solid", studioSolidLightmapPass ); |
4 | // setTechniquePass( "spot", studioSolidSpotLightPass ); |
5 | // setTechniquePass( "omni", studioSolidOmniLightPass ); |
6 | // setTechniquePass( "proj", studioSolidProjLightPass ); |
7 |
8 | // declare common uniforms |
9 | image u_ColorMap = "globals->$WhiteTexture"; // fallback texture |
10 | image u_DetailMap = "materials.def->detailMap"; |
11 | image u_NormalMap = "textures/<modelname>/<texname>_norm"; |
12 | image u_GlossMap = "textures/<modelname>/<texname>_gloss"; |
13 | // image u_GlowMap = "textures/<texname>_luma"; |
14 |
15 | vec4 u_BonesArray[384] = "entity->bonesMatrix"; |
16 | vec4 u_BoneQuaternion[128] = "entity->bonesQuaternion"; |
17 | vec3 u_BonePosition[128] = "entity->bonesPosition"; |
18 | vec2 u_DetailScale = "materials.def->detailScale"; |
19 | vec2 u_TexOffset = "entity->conveyorMovement"; |
20 | float u_Smoothness = "materials.def->smoothness"; |
21 | vec4 u_RenderColor = "entity->renderColor"; |
22 | mat4 u_ModelMatrix = "entity->transform"; |
23 | vec3 u_ViewOrigin = "render->viewOrigin"; |
24 |
25 | addImageLocation( u_ColorMap, "*<texname>" ); // embedded model texture |
26 | addImageLocation( u_ColorMap, "textures/<modelname>/<texname>" ); |
27 |
28 | // add image extra info to help engine |
29 | setImageHint( u_ColorMap, "Albedo" ); |
30 | setImageHint( u_NormalMap, "Normal" ); |
31 |
32 | // add flags for image loader |
33 | addImageFlags( u_ColorMap, TF_SILENT_LOADING|TF_KEEP_SRC_IF_ALPHA ); |
34 | addImageFlags( u_NormalMap, TF_SILENT_LOADING|TF_NORMALMAP ); |
35 |
36 | // FIXME |
37 | #if MODEL_NUM_BONES == 1 |
38 | // #define MAXSTUDIOBONES 1 |
39 | #endif |
40 |
41 | #if MODEL_HAS_BONEWEIGHTS |
42 | #define APPLY_BONE_WEIGHTING |
43 | #endif |
44 |
45 | #if r_physic_based_shading |
46 | #define APPLY_PBS |
47 | #endif |
48 |
49 | #if r_detailtextures && u_DetailMap |
50 | #define HAS_DETAIL |
51 | #endif |
52 |
53 | #if r_normal_mapping && u_NormalMap |
54 | #define HAS_NORMALMAP |
55 | #define COMPUTE_TBN |
56 | #endif |
57 |
58 | #if r_specular && u_GlossMap && u_Smoothness > 0 |
59 | #define HAS_GLOSSMAP |
60 | #endif |
61 |
62 | #if u_GlowMap |
63 | #define HAS_LUMA |
64 | #endif |
65 |
66 | #if WORLD_HAS_GLOBALFOG |
67 | #define APPLY_FOG_EXP |
68 | #endif |
69 |
70 | #usage mod_studio |
71 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT перенести бикубическую фильтрацию в лайтмаппер, перед дядьмишиной затиралкой швов попяченой с хл2
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ну в сорсовском лайтмаппере тогда.
ну нету в сорсе никакой затиралки швов нигде. Включи mat_showlightmaps или как оно там называется и убедись сам.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize у меня есть затиралка швов, но она работает исходя из того, что потом текстура будет фильтроваться билинейно. Можно переделать для бикубика, но нужно будет как-то хранить бордюры
А по поводу размерностей в UI есть какие-то идеи для движка?
Я ковырялся с этой проблемой, в итоге решил что со всем многообразием дисплеев с разными разрешениями, размерами и DPI, проще просто добавить в настройки параметр для скейла всего UI целиком. Не получилось у меня найти какого-то универсального решения.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
SNMetamorph как вариант -- запихать спрайты в вектор и при загиузке их рендерить в нужное разрешение.
Это будет точно лучше, чем набор 320hud, 640hud из халфы и где последний рисуется "пиксель-в-пиксель" на FullHD и в итоге ничего вообще не видно, мелко.
__________________
Xash3D FWGS форк
a1batross а как быстро и красиво рисовать вектор в рилтайме? Я читал про разные методы рендера шрифтов, и в заключении одной из недавних статей по этой теме было написано "Мы представили новый метод рисования векторных шрифтов, он быстрее всех предыдущих реализаций. Но в 40 раз медленнее, чем просто рисовать квад с текстурой".
На самом деле даже вектор не гарантирует, что всё четко будет. Не просто так в линуксах векторные иконки рисуют в разных разрешениях.
ncuxonaT
Растр под макосью в режиме HDPI очень чёткий, не хуже вектора.
__________________
XaeroX растр без мазни не отмасштабируешь, кернинг не сделаешь. Иными словами, шрифты - говно.
ncuxonaT
Зачем в реалтайме?
__________________
http://www.moddb.com/mods/monorail-quest
thambs ну а как иначе, если текст может меняться, или, например, прокручивать его нужно
ncuxonaT
Так вроде-то задача не рендерить postscript-страничку, а заменить растровый шрифт фиксированного размера. Сменил разрешение -- закешировал рендеры шрифтов/иконок. Тот же растр остался, только генеришь его по необходимости из векторного исходника.
__________________
http://www.moddb.com/mods/monorail-quest
thambs если потом рендерить растр пиксель в пиксель, то не получится сделать кернинг, плюс из-за округления расстояние между буквами будет не таким, каким должно быть. Если рендерить растр не пиксель в пиксель, то получится мазня.
ncuxonaT а зачем? Отрисовал в атлас и вперёд. Ну, хочется играть с масштабом -- есть SDF. Неидеально, но наврядли кто-то заметит разницу.
Вон у меня в mainui_cpp шрифторендер в атлас рисует и никогда больше не трогает шрифты. Пока конечно юзер не ресайзнул окно, лол.
__________________
Xash3D FWGS форк
a1batross как с атласом делать кернинг?
В атласе ширина глифов целочисленная или с плавающей точкой?
__________________
I'm on github
I'm on opendesktop.org
FreeSlave только вот в большинстве тем там лежат именно svg.
стандартные КДЕшные иконки:
https://github.com/KDE/breeze-icons...er/icons/places
бывшие стандартные убунтушные иконки:
https://git.launchpad.net/ubuntu/+s.../Humanity/mimes
ncuxonaT
__________________
Xash3D FWGS форк
a1batross а неплохо. Но это атлас нужно рисовать в 2 раза больше, чем текст потом? То, что ты показываешь, - это не кернинг. Вот кернинг: https://ru.wikipedia.org/wiki/%D0%9...%B8%D0%BD%D0%B3
ncuxonaT
>Но это атлас нужно рисовать в 2 раза больше, чем текст потом?
Моя ошибка, на второй картинке -- атлас "большого" шрифта, он редко используется пока что. В основном используется "средний" или "мелкий". Их размеры высчитываются относительно высоты окна.
На самом деле конечно не нужно.
>То, что ты показываешь, - это не кернинг. Вот кернинг:
И в чём потенциальная разница? Ну, я не специалист в типографии, но по-моему мы говорим об одном и том же.
Видишь у меня буквы не разъезжаются, а вот ра-ааньше они разъезжались!
Конечно, всё это автоматически, ничего вручную я не расставлял, только по информации которая доступна в самом TTF файлике.
> А ты открой 32х32 и 64х64 или 64х64 и 128х128. Картинки будут те же, но поправленные, чтобы всё попадало пиксель в пиксель. Да даже 16х16 и 22х22.
Я открыл 128 и 512 иконку LibreOffice. Действительно, 512x512 выглядит лучше, чем 128x128 увеличенный до 512x512. Screenshot.
Но если приглядеться, видно, что в 128x128 убрана детализация, которую никто не увидит в таком разрешении.
В 256 уже, как ты и сказал, попадание пиксель-в-пиксель. Screenshot
Но как это соприксается с моим предложением вообще использовать вектора в HUD? Если у тебя векторная иконка пушки X в 4K будет выглядеть хуже, чем на HD, ты сделаешь отдельную версию для 4К, которая визуально будет приятнее. Но тем не менее, внутренний перфекционист игрока не будет ущемлён из-за того, что ты не подумал о, например, 1680x1050. А если в твою игру поиграет человек через 20 лет с монитором в 16K? Что ему делать, наслаждаться мылом или маленькими иконками?
У самого несколько месяцев назад был 1680x1050 и в некоторых случаях игры не догадывались брать 1080p HUD и брали 720p и была в основном просто мелкота. К счастью, никому мылить HUD в голову не приходит.
Особо богатые буратины на ютубах выкладывают записи игр в 8K, 16K разрешениях. Открыл случайное, GTA 4 в 8K выглядит хорошо. В Half-Life 2 он HUD не показал, но текст очень мелкий. Несмотря на то, что там TTF. Наверное правится в конфигах, не так критично если был бы битмапный.
__________________
Xash3D FWGS форк
Можно наш трёп про шрифты и интерфейсы в отдельную тему перенести, чтобы тут на засорять? Спасибо.
a1batross ты шрифт из атласа рисуешь на экране 1:1 или масштабируешь тоже? Размер квадов и их координаты попадают в экранные пиксели? Отступы и размеры глифов в атласе в целых пикселях или как-то иначе?
Вы не видите самого главного, всё это битмаповое гамно должен кто то рисовать. Для всех модов. А шрифтов хоть жопой жуй, качай нихачу. Зачем каждый раз возиться в фотошопе, если это можно реализовать программно вектором?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ncuxonaT > Просто хотел сказать, что это не серебряная пуля
Серебрянных пуль вообще не существует. Разве что не делать HUD вообще.
Если задача сократить себе работу на поддержке разных разрешений, можно вообще сделать его трёхмерным и тогда никакой речи о pixel perfect идти не будет. Это кстати популярно нынче.
Но я предлагаю решение для классического двухмерного HUD, который обязан выглядеть хорошо.
>ты шрифт из атласа рисуешь на экране 1:1 или масштабируешь тоже
1:1.
Масштабируется он только там, где отрисовать шрифт заново -- слишком дорого. Например, на мобильниках. Но там и ресайз окна -- задача нетипичная, на Android законным методом это можно делать только в последних версиях и этим никто не пользуется, особенно в активных играх.
>Кернинг это вроде дополнения к твоим отступам
Нет, такой вещи у меня нет. Но может когда-нибудь будет. Сейчас в шрифторенедере мне сильно нехватает дорисовки новых символов в атлас, просто MenuAPI Ксаша это не учитывает. А так будет -- и можно по запросу объединять символы и вообще хоть на арабском писать, просто атлас-текстура будет деномически расширяться.
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Генератор фонтов из TTF.
Ну найди для первокваки например такой.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну вот, теперь и спрайты рисуются
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Полноцветные?
nemyax Ишь!
nemyax обычные. Форматы менять - хаммер не поймет, как работать будете? Тут нужны предварительные договорённости.
Добавлено 13-11-2019 в 12:31:
Мне еще предстоить сделать mod_skybox, mod_grass и mod_particle.
Формировать какие-то списки отрисовки для каждого типа примитивов бессмысленно - их же рендерер в кадре сортирует. Поэтому абстракция должна выглядеть так. С лучами аналогично, но лучи станут частью mod_sprite.
Добавлено 13-11-2019 в 12:32:
А mod_skybox скорее всего будет отвечать за погоду, ну там дождь, снег, облака, время суток.
Добавлено 13-11-2019 в 12:33:
Самое сложное избавиться от долбаных рендермодов в движке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще говоря реальных рендермодов, если продолжать и дальше такое деление, существует две штуки на каждый из режимов рендеринга геометрии. А режимы рендеринга геометрии понятно какие - непрозрачные и прозрачные. Так вот вариации на тему - это соответственно с освещением и без. В эти четыре кейса укладывается абсолютно любой запрос, ну кроме может быть этих старых фейковых гларесов, которые светили сквозь геометрию, но они это делали скорее неотхорошей жизни, а из-за того что шейдеров не было.
Добавлено 13-11-2019 в 12:42:
Теперь что касается смены одного рендермода на другой. Хотя в халфе и подразумевается возможность поменять любой на любой, но в реальности это никто не пользует, просто нет смысла. Вся замена это - прозрачный на непрозрачный и наоборот. Ну и опционально - включение фуллбрайта, но для солидных мешей в халфе это нереализуемо попросту. Там делали два меша, один фуллбрайт, другой нормально освщённый и меняли один на другой с помощью прозрачности.
Добавлено 13-11-2019 в 12:52:
Здесь thambs неявно опять поднял проблему скриптового языка, для описания энтить, но у меня признаться нет каких-то особых идей на этот счёт. Понимаете, все эти скрипты отлично работают на картах квейк-стайл, когда ты уровень прошёл и всё, больше туда не возвращаешься. Но на халфовских сейв-ресторах, когда ты можешь бесконечно нарезать круги по одним и тем же локациям, это вызывает массу вопросов. Во первых эти сами скрипты, они запускаются как в hlfx из какой-то энтити типо script_lua или из файлика с именем карты?
А если они дают эффект на энтить, которая может перемещаться на другой уровень вслед за игроком? Я напоминю, НИГДЕ я не видел, чтобы можно было брать с собой энтити с одного уровня на другой явным образом. Нигде.
Только неявным, через инвентарь. Или по скрипту, что фейк. Но вот так, чтобы игрок какого-то перса тыкнул, мол пойдем со мной и провёл его через всю игру - этого нет нигде. И это очень осложняет подключение внешних скриптов. Если скрипты пишутся для конкретной карты, как понять, что их исполнение нужно забрать на следующую карту? Если скрипт написан для какой-то энтити, как корректно перенести его состояние вместе с этой энтитью? Это практически неразрешимая задача. Я собсно, потому и не спешу внедрять какие-то скрипты, а пытаюсь всё описать внутри самиъ энтить. Но если у вас есть какие-то идеи концепции, то я вас слушаю.
Добавлено 13-11-2019 в 12:55:
Когда логическая энтить образует какую-то скриптовую конструкцию, мы можем её просто пометить, что она должна переходить на другой уровень.
Но в рамках скриптового языка мы не можем, написать, что вот эти функции должны, например работать где-то еще причём с переменными с этой же карты, потому что возникнет неизбежный вопрос, откуда брать эти сами переменные? С энтить? Тогда в чём вообще смысл скрипта? Из какого-то глобального пространства? Тогда как определить что они не пойдут на следующий уровень?
Добавлено 13-11-2019 в 12:59:
У меня еще был вариант, в скриптах описать сами энтити, например реализующие сложные логические условия, но и тут не всё гладко. У скриптов не будет полноценного доступа к настоящим энтитям. И наоборот тоже не очень понятно. Скорее всего они смогут выполнять только простейшие действия, типо активации цели, сеторигин и так далее. Выход из положения напрашивается сам собой - надо как в ку1 сделать виртуальную машинку подо все энтити. Но и тут проблема - как прикажете рассчёт костей делать? Тоже в куси? А поиск навигации для монстров, шедули эти все? Неподъемно для виртуалки, слишком тяжело.
Не знаю вообщем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Соображения есть, но пока не готов расписать, нужно ещё продумать всё. Сначала вопросы:
1. Есть ли в игре возможность явного доступа на чтение к полям энтити, например к таргетнэйму, ориджину и пр.?
2. Если ли возможность явного доступа к полям на запись, если есть, то как они защищены/не защищены?
3. В каком виде сервер сохраняет состояние энтить, как она сериализуется?
__________________
http://www.moddb.com/mods/monorail-quest
Плюс если делать виртуалку, там придётся учитывать наследование классов, для того чтобы, оно отвечало текущей иерархии дллки, которая оптимизирует эти классы под новую структуру движка. Ну скажем, студиомодельки теперь работают только из класса CBaseAnimating, потому что это единственный класс, который занимается сетапом костей.
Добавлено 13-11-2019 в 13:06:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Насколько я понимаю, скриптинг обычно реализуют именно в виртуальной машинке и на основе отправки-приёма ивентов между скриптованными сущностями.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вызов цели это всего лишь одна разновидность ивента. Бывают и другие. Взять те же префиксы, которые через задницу реализуют кокрастоке разные типы ивентов.
И да, без скрипта ты не запрограммируешь обработку принятого ивента.
Скриптовой язык, это ведь не только операции, это еще и переменные.
Переменные через энтити конечно тоже доступны - env_local, env_global, но пока их немного, и они в сущности практически булевы. В скриптах же так не получится, надо как-то придётся указать, что вот эти переменные относятся к той или иной энтите, которая потом потенциально уедет на новый уровень. То есть либо эти скрипты так задавить ограничениями, что они не будут особо отличаться от скриптования энтитями, либо одно из двух.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати говоря, в халфе када лепили свою скрипт-систему это отлично понимали, поэтому она у них умеет только групповой вызов целей, скрин-фейд, ну и прогрывание сентенций. Никаких переменных там и близко нету.
Добавлено 13-11-2019 в 15:26:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
code:
class mcguffin { entity target1; entity target2; void on_init(void); void on_kill(void); }; void mcguffin::on_init() { target1 = entities.get("entity14"); target2 = entities.get("entity88"); } void mcguffin::on_kill() { events.kill(target1); events.kill(target2); die(); }
Я думаю, что скриптовым языком в ксаше просто обязан стать Haskell.
Представьте себе, какое удовольствие будут получать мапперы, когда смогут реализовать сложнейшую функциональную взаимосвязь всего несколькими строчками и без переменных.
__________________
nemyax то что ты привёл - это скрипт над объектами.
Добавлено 13-11-2019 в 16:01:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Есть, есть.
__________________
nemyax ну, как продолжение самих объектов, например.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я имел в виду, что этот скрипт можно связать с любой энтитью, и у неё появится этот конкретный обработчик ивента kill. При kill-е любой такой энтити она поведёт себя так, как определено в скрипте. А например on_use здесь не определено, поэтому на use она реагировать не будет.
Добавлено 13-11-2019 в 16:30:
Либо пусть запускает дефолтную реакцию энтити на ивент, если обработчик не определён. А чтобы отключить реакцию, явно прописывать в классе void on_hurt(float) {} или void on_hide(void) {return;}.
Если просто ограничить скрипты вызовом эвентов, ну просто разгрузить карту от нагромождения логических энтить, то какой-то смысл в этом есть. Ну, послушаем, что Тхамбс предложит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я не вкуриваю почему нельзя пропарсить все карты мода и отслеживать все инкарнации одной и той же энтити на разных картах и отслеживать все её исчезания и появления на картах которые происходят когда игрок утащил энтитю с карты через одну дверь и потом притащил с другой карты через другую дверь.
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
При чём тут карты мода? Они лежат себе и не меняются.
Это всё хорошо, но вот и настала пора для моих любимых экспериментоф.
Как вы помните я уже много всего опробовал, оттестировал, но кое-что еще у меня осталось в запасе. Специально для NT оставил, т.к. на старом ксаше такое было затруднительно тестировать. Я конечно апробую еще некоторые технологии в графике, но навряд ли это займет много времени, сейчас механизмы рендеринга максимально благоприятствуют экспериментам. А вот из отложенных про запас у нас остался извечный спор с Камрадом Ксероксом - так ли уж плох или хорош BSP46, в народе известный как ку3бсп. Ксерокс считает что формат годится для современных задач, надо только добавить в него лайтстили и еще пару мелочей. Я в свою очередь наоборот полагаю, что с учётом всего, что я сделал для развития халфовского формата карт, актуальность кутришного бсп под большим вопросом. Под кутришным бсп я разумею принцип построения дерева и хранения данных, бинарная совместимость особой роли не играет.
Впрочем моё исследование предполагается достаточно обширным, в качестве побочного эффекта, я наверное даже напишу новые компиляторы уровней для ку3. Собсно, я их еще в прошлом году писать начал, но пока остановил процесс. Наверное заведу под них отдельную тему.
Добавлено 13-11-2019 в 23:25:
Тема про компиляторы тут: https://hlfx.ru/forum/showthread.php?s=&threadid=5398
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По каким критериям будет оцениваться плохость или хорошесть BSP46?
Скорее пригодность для моих задач. Тут и так не очень простая ситуация - я уже могу в халфовский формат скомпилить любую кутришную карту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Загрузил лайтмапы. В ку3 там уже и так страницы атласа, но мелкие 128х128. Неудобно. Я придумал оригинальную абстракцию - представил страницы лайтмап как будто сурфейсы с лайтмапами 128х128 и загрузил их как эти сурфейсы. Ну чтобы не переделывать лайтмаппер под новый принцип. Надо только придумать как на вертексах сдвинуть оффсет st. ну то решаемая задача, в куфужене чот такое делают. Как же давно я в посл. раз загружал кутришные карты. в 2009-м году.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сколько же дури в этом кутри. Вот скажем взять эти патчи. Вот зачем их налиту строить во время загрузки? Почему нельзя было просто сохранить в карту? Опять же непонятно, как считается лайтмапа для такой текучей конструкции с переменной детализацией. Патчи, это абстракция, которая вообще не должна покидать компиляторы. Её взяли и засунули в рендерер. Ради автолодов, понятно. Вы помните эти автолоды? Трубу сделаешь, отошёл на пять шагов, она восьмиугольной стала. Зашибись оптимизация.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша просто не умеет работать с патчами.
В PW, кстати, они активно используются, и не только для труб, но и для геометрии уровня. Вот и скажете потом, сильно ли смена лодов бросается в глаза на патчах. По-моему, на моделях - сильнее, если присматриваться.
__________________
FiEctro ДА НЕ КАК
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Первые опыты. Чё, его так плющит, понять не могу. Наверное индексы где-то напутал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вторые опыты. Теперь надо патчи нагенерить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мысли по поводу скриптовой системы #1: возможная структура и юзкейсы
$set(*entity, key, value) -> status |
$get(*entity, key) -> value |
$find(*world, mask) -> [*entity] |
$sleep(time) |
$find(*world, "func_door:storage*") |
lst = $find(*world, "func_door:storage*") |
1 | //следим за условиями |
2 | watch(){ |
3 | if cond1 { ... } |
4 | if cond2 { ... } |
5 | } |
1 | /* определяем сохраняемые поля */ |
2 | @static var1 = ... |
3 | @static var2 = ... |
4 | /* определяем обработчики */ |
5 | spawn(...) |
6 | watch(...) |
7 | call(...) |
8 | /* определяем всякие вспомогательные функции */ |
9 | ... |
1 | @static wheels = $find(*world, $get(*this, "targetname")+"_wheels") |
2 | @const radius = 6 |
3 | watch(){ |
4 | v_old = $get(*this, "v_old"); |
5 | v_new = $get(*this, "v_new") |
6 | if v_old neq v_new{ |
7 | for( wheel : wheels){ |
8 | $set(*wheel, "speed", v_new/radius) |
9 | } |
10 | } |
11 | } |
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну основная идея что скрипт намертво привязывается к сущности. Т.е. у неё есть, например, поле script, в котором ссылка на текстовик, который читаем при загрузке карты, и есть какое-то скрытое поле, хранящее стек скрипта. Соответственно, паровозик переходит с карты на карту вместе со всей своей требухой что в скрипте насчиталась.
ps: я ещё обдумываю семантику и возможные варианты.
__________________
http://www.moddb.com/mods/monorail-quest
Crystallize
Плевать на синтаксис, ДМ сделает как считает нужно. Давайте лучше семантику обсуждать.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
>> $find(*world, "func_door:storage*")
Ну и дичь лютую вы удумали, писать скрипт под конкретную карту, для каждой сущности. Ещё и трахаться с ДЕБАЖИТЬ отладкой этих финдов.
Что мешает просто подгружать файл скрипта как отдельную сущность со своими полями? Написали какой нибудь trigger_butthurt.qc, если есть на карте он, то он подгрузился, если нет, то нет. Как во всех современных движках. А наследования в скриптах делать по классике, через объявление public/private и т.п.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Ответь, почему ты так нагло ПЕРЕВИРАЕШЬ то что я писал?
__________________
http://www.moddb.com/mods/monorail-quest
Сгенерил патчи на кутришной карте, ну вроде норм - язык пропал (на q3dm1), как корова в реке утопила. Да что за бред, начал разбираться.
Оптимизатор отключаешь - язык на месте, остальное в порядке. Ну где я мог накосячить? Очевидно нигде. Расковырял функцию оптимизатора - там ошибка. Это походу уже становится традицией.
Добавлено 19-11-2019 в 17:37:
ЗЫ. Оптимизатор из OverDose если что. Не из ку3.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Что оптимизирует оптимизатор?
Оптимизатор оптимизирует брашевые языки, вестимо.
__________________
Xash3D FWGS форк
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Финальный результат.
Кутришные шейдеры прекрасно заменяются моей системой материалов, даже при отсутствии специализированных GLSL-шейдеров для кутришных заморочек. ну типа мигающих текстур, пидарасов, которые, как известно, ползут по трубам итак далее. Но всё это реализуется в пользовательской части, рендерер трогать не надо.
Для сравнения, тепичный кутришный шейдер, который ничего не делает, а просто заменяет путь к текстуре:
1 | textures/skin/surface8_trans |
2 | { |
3 | qer_editorimage textures/skin/surface8.tga |
4 | surfaceparm nonsolid |
5 | { |
6 | map $lightmap |
7 | rgbGen identity |
8 |
9 | } |
10 | { |
11 | map textures/skin/surface8.tga |
12 | rgbGen identity |
13 | blendFunc GL_DST_COLOR GL_ZERO |
14 |
15 |
16 | } |
17 | } |
1 | textures/skin/surface8_trans |
2 | { |
3 | image u_ColorMap = "textures/skin/surface8.tga"; |
4 | } |
1 | textures/liquids/lavahellflat_400 |
2 | { |
3 | image u_ColorMap = "textures/liquids/lavahell.tga"; |
4 | #define LIGHTING_FULLBRIGHT |
5 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
По трубам, я так понимаю, ползать никто под ксашем не будет? Или можно самому написать шейдер? Если да, то как это будет выглядеть?
__________________
Хм, картинку забыл.
Добавлено 19-11-2019 в 20:28:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А покежь Renderer: Dynamic.
Нету ищо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как история повторяется циклически, так и ДМ прикручивает ку3 формат циклически к ксашу.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вам возможно будет интересно, но в этот раз для кутришного формата я использовал все сабраутины от первой кваки. Кроме конечно разжатия PVS, поскольку в кутри PVS и так несжатый
Всё подходит.
Добавлено 20-11-2019 в 12:28:
Сделал вчера предварительный тест производительности. Там где эта же карта в халфовском формате выдаёт 400 фпс, кутришная выдаёт 700, но судить пока рано - я к примеру не подключил еще физику, она вполне может сбить итоговый фпс. Впрочем причины понятны - те же патчи рисуются как стрипы. Конечно это будет быстрее чем в халфовском формате, где всё отдельными трианглами. Плюс в кутри и сами секвенции гораздо длиннее. Продолжаю исследование.
Добавлено 20-11-2019 в 12:44:
Вообще у меня есть вот какая идейка. Если я ЧАЭС вкомпилю как встроенную модель со всеми стрипами, а дерево само её рассечёт на квадраты 1024х1024. Видимость это конечно посчитать не поможет, но как минимум куллиться будет эффективнее. Ну это позже.
Для меня есть одна загадка - я не понимаю как в движках организованы лайтстили без какой-либо привязки к лайтстилю. Вот вроде бы говорят, что в сталкере этих лайтмап можно насчитать сколько угодно, хоть для 12-и положений солнца. Судя по всему это не учитывает остальные источники, лайтмапы просто дублируются для них. И в унреале есть подобная замута.
Надо будет с этим разобраться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну что же. Пожалуй пришла пора реально реализовать функционал кутришных шейдеров, не затрагивая код рендерера - только через новую скриптовую систему. Посмотрим что у меня получится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
И геометрический!
__________________
Вот вам две занятные картинки: Там где фпс выше - это кутришная оригинальная карта. там где ниже - эта же карта, скомпиленная в халфовский бсп. Особо обращаю ваше внимание на кол-во DIP.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Откуда такой дип? Ты не сортируешь что ли?
__________________
XaeroX сортирую, но для кутри сортировку не оптимизировал. Но как видишь - всё равно быстрее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
О чем это говорит?
Вот какую штуку я придумал. Тот формат записи, который есть сейчас, позволяет максимально подробно описать юниформы и текстурные юниты для шейдеров, но я подозреваю, что самим пользователям будет очень неудобно каждый раз такое прописывать. Это слишком общий формат записи, это для тех, кто будет создавать новые типы рендереров.
То есть каждый раз обозначать путь к текстуре таким образом:
image u_ColorMap = "<textures/<modelname>/<texname>"; |
image u_ColorMap = "textures/common/black.tga"; |
#keydef map <value>\ |
image u_ColorMap = "<value>"; |
map textures\common\black.tga |
#keydef map $lightmap\ |
image u_LightMap = "entity->$LightmapTexture"; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Можно провести аналогии с тем же С++. Там ведь тоже есть макросы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Скажи, а вот эту гадость с полупрозрачностью в новой системе удалось забороть?
__________________
http://www.moddb.com/mods/monorail-quest
Эту "гадость" еще ни одному человеку на планете забороть не удалось и едва ли это вообще возможно. Впрочем, я еще не занимался стёклами.
Добавлено 23-11-2019 в 19:57:
В кутри это бороли повертексным освещением, но тогда прощай тени на стёклах. Дилемма.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Трассировкой-то борют.
Тут для солидных тел не могут толком трассировку наладить, а ты на полупрозрачные замахнулся, очуметь можно.
Добавлено 24-11-2019 в 19:23:
Довольно сложная штука этот макро-язык получается. Но по другому никак, ведь мы фактически задаём все юниформы и текстурные юниты из скрипта, тут не выйдет отделаться упрощённой формой записи - полезут разные нехорошие ограничения. А писать каждый раз полное выражение очень утомительно. Так что макро-замена тут идеальный выход. Это всё работает по принципу один раз настроил и больше не лазишь. Надо - еще добавил.
Добавлено 24-11-2019 в 19:26:
Сам макро-язык включает в себя три ключевых слова.
enum - это для макросчетчиков, которые можно инкременировать прямо во время макроподстановки, например для слоёв ландшафта или стадий в кутришном шейдере.
#keydef - заменяет одно регулярное выражение на другое. Пример:
#keydef map <value>\ |
image u_ColorMap<unitNum> = "<value>"; |
#keydef map $lightmap\ |
image u_LightMap = "entity->$LightmapTexture"; |
materialName |
{ |
} |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот потихоньку ввожу в строй свои макросы. Вот текущие команды для замены в кутришных шейдерах:
1 | enum unitNum; |
2 | enum stageNumber; |
3 | enum texModCount; |
4 | enum deformCount; |
5 |
6 | // q3map keywords (just eliminate) |
7 | #keydef qer_editorimage <value> |
8 | #define q3map_noFog |
9 | #define q3map_globalTexture |
10 | #define q3map_nonplanar |
11 | #keydef q3map_shadeangle <a> |
12 | #keydef q3map_sunExt <a> <b> <c> <d> <e> <f> <g> <h> |
13 | #keydef q3map_skyLight <a> <b> |
14 |
15 | // surfaceparms, etc |
16 | #keydef surfaceparm <value> |
17 | #define nopicmip |
18 |
19 | // blendfunc replacements |
20 | #define GL_ZERO 0.0 |
21 | #define GL_ONE 1.0 |
22 | #define GL_SRC_COLOR 2.0 |
23 | #define GL_DST_COLOR 3.0 |
24 | #define GL_ONE_MINUS_SRC_COLOR 4.0 |
25 | #define GL_ONE_MINUS_DST_COLOR 5.0 |
26 | #define GL_SRC_ALPHA 6.0 |
27 | #define GL_DST_ALPHA 7.0 |
28 | #define GL_ONE_MINUS_SRC_ALPHA 8.0 |
29 | #define GL_ONE_MINUS_DST_ALPHA 9.0 |
30 | #define GL_ALPHA_SATURATE 10.0 // rare case |
31 |
32 | #keydef map <value>\ |
33 | image u_ColorMap<unitNum> = "<value>";\ |
34 | unitNum++; |
35 |
36 | #keydef map $lightmap\ |
37 | image u_ColorMap<unitNum> = "entity->$LightmapTexture";\ |
38 | unitNum++; |
39 |
40 | #keydef blendFunc <src> <dst>\ |
41 | vec2 u_BlendFunc<unitNum> = vec2( <src>, <dst> ); |
42 |
43 | #keydef {\ |
44 | addShaderDefine( SHADER_STAGE<stageNumber> ); |
45 |
46 | #keydef }\ |
47 | stageNumber++; |
vec2 u_BlendFunc2 = vec2( 6.0, 8.0 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А это всё куда-то потом коптилируется, или каждый запуск налиту читается?
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Заранее скомпиленные шейдеры вроде только в OpenGL 4.5 и новее поддерживаются. Обычно-то их компилят-линкуют-подключают при инициализации рендерера.
nemyax
А вот в д3д всегда можно было бинарник с игрой распространять.
__________________
1 | textures/moteof/walltrim2 |
2 | { |
3 | <ShaderState> |
4 | addShaderDefine( SHADER_STAGE0 ) |
5 | addShaderDefine( SHADER_STAGE1 ) |
6 | u_ColorMap0:-1 = *unused*; |
7 | u_ColorMap1:-1 = *unused*; |
8 | vec2 u_BlendFunc2; |
9 | } |
1 | textures/moteof/water_healing |
2 | { |
3 | <ShaderState> |
4 | addShaderDefine( APPLY_DEFORM_VERTS0 ) |
5 | addShaderDefine( SHADER_STAGE0 ) |
6 | addShaderDefine( APPLY_VERTEXCOLOR0 ) |
7 | addShaderDefine( APPLY_COLORWAVE0 ) |
8 | addShaderDefine( APPLY_TEXMOD_TRANSFORM0_0 ) |
9 | addShaderDefine( APPLY_TEXMOD_TURB0_1 ) |
10 | addShaderDefine( SHADER_STAGE1 ) |
11 | addShaderDefine( APPLY_VERTEXCOLOR1 ) |
12 | addShaderDefine( APPLY_COLORWAVE1 ) |
13 | addShaderDefine( APPLY_TEXMOD_STRETCH1_0 ) |
14 | addShaderDefine( APPLY_TEXMOD_SCROLL1_1 ) |
15 | addShaderDefine( SHADER_STAGE2 ) |
16 | addShaderDefine( APPLY_VERTEXCOLOR2 ) |
17 | addShaderDefine( APPLY_COLORWAVE2 ) |
18 | addShaderDefine( APPLY_TEXMOD_TURB2_0 ) |
19 | addShaderDefine( SHADER_STAGE3 ) |
20 | addShaderDefine( APPLY_VERTEXCOLOR3 ) |
21 | addShaderDefine( APPLY_TEXMOD_STRETCH3_0 ) |
22 | addShaderDefine( APPLY_TEXMOD_TRANSFORM3_1 ) |
23 | addShaderDefine( APPLY_TEXMOD_ROTATE3_2 ) |
24 | u_ColorMap0:-1 = *unused*; |
25 | u_ColorMap1:-1 = *unused*; |
26 | u_ColorMap2:-1 = *unused*; |
27 | u_ColorMap3:-1 = *unused*; |
28 | vec2 u_WaveDeformFunc0; |
29 | vec4 u_WaveDeformBase0; |
30 | vec2 u_BlendFunc1; |
31 | float u_rgbGenWaveFunc0; |
32 | vec4 u_rgbGenWaveParams0; |
33 | vec4 u_texModBase0_0; |
34 | vec2 u_texModTrans0_0; |
35 | vec4 u_texModTurb0_1; |
36 | vec2 u_BlendFunc2; |
37 | float u_rgbGenWaveFunc1; |
38 | vec4 u_rgbGenWaveParams1; |
39 | float u_texModWaveFunc1_0; |
40 | vec4 u_texModWaveParams1_0; |
41 | vec2 u_texModScroll1_1; |
42 | vec2 u_BlendFunc3; |
43 | float u_rgbGenWaveFunc2; |
44 | vec4 u_rgbGenWaveParams2; |
45 | vec4 u_texModTurb2_0; |
46 | vec2 u_BlendFunc4; |
47 | float u_texModWaveFunc3_0; |
48 | vec4 u_texModWaveParams3_0; |
49 | vec4 u_texModBase3_1; |
50 | vec2 u_texModTrans3_1; |
51 | float u_texModRotate3_2; |
52 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Немного причесал дебаг, ну вот примерно так выглядят входные параметры распарсенного кутришного шейдера.
1 | textures/base_light/proto_lightred2 |
2 | { |
3 | #define SHADER_STAGE0 |
4 | #define SHADER_STAGE1 |
5 | #define SHADER_STAGE2 |
6 | #define APPLY_COLORWAVE2 |
7 | u_ColorMap0 = entity->$LightmapTexture; |
8 | u_ColorMap1 = textures/base_light/proto_lightred.tga; |
9 | u_ColorMap2 = textures/base_light/proto_lightred.tga; |
10 | vec2 u_BlendFunc1 = vec2( 3, 0 ); |
11 | vec2 u_BlendFunc2 = vec2( 1, 1 ); |
12 | float u_rgbGenWaveFunc2 = 1; |
13 | vec4 u_rgbGenWaveParams2 = vec4( 0.5, 0.5, 0, 1 ); |
14 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Выглядит очень переусложнённо в сравнении с самими ку3шными скриптами.
Да, возможностей больше - но они никому и не нужны. Сам же всем рассказывал, что мигающие лампочки нужны только Жэке в моде, а остальным достаточно статичных диффузки и нормалки.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
1 | typedef enum |
2 | { |
3 | // types below are applied during model loading |
4 | LOC_MATDEF_DETAILMAP = 1, // path to detail texture from materials.def |
5 | LOC_GLOBAL_DEFAULT_IMAGE, |
6 | LOC_GLOBAL_PARTICLE_IMAGE, |
7 | LOC_GLOBAL_WHITE_IMAGE, |
8 | LOC_GLOBAL_GRAY_IMAGE, |
9 | LOC_GLOBAL_BLACK_IMAGE, |
10 | LOC_GLOBAL_FITNORM_IMAGE, |
11 | LOC_GLOBAL_WHITECUBE_IMAGE, |
12 | LOC_VARIABLE_PATH, |
13 | LOC_CONSTANT_PATH, |
14 | // types below are applied during rendering |
15 | LOC_GLOBAL_SKYBOX_IMAGE, |
16 | LOC_GLOBAL_SCREEN_COLOR, |
17 | LOC_GLOBAL_SCREEN_DEPTH, |
18 | LOC_ENTITY_LIGHTMAP, |
19 | LOC_ENTITY_DELUXMAP, |
20 | LOC_ENTITY_CUBEMAP0, |
21 | LOC_ENTITY_CUBEMAP1, |
22 | LOC_ENTITY_CINEMATIC, // cinematic texture |
23 | LOC_ENTITY_SUBVIEW, // reflection, portal, monitor etc |
24 | LOC_ENTITY_LAYERMAP, // terrain layers |
25 | LOC_LIGHT_SPOTLIGHT, // get spotlight texture from dlight |
26 | LOC_LIGHT_OMNILIGHT, |
27 | LOC_LIGHT_SHADOWMAP0, |
28 | LOC_LIGHT_SHADOWMAP1, |
29 | LOC_LIGHT_SHADOWMAP2, |
30 | LOC_LIGHT_SHADOWMAP3, |
31 | LOC_CONSOLE_TEXPATH // string or texturenum |
32 | } unitloc_t; |
1 | typedef enum |
2 | { |
3 | LOC_MATDEF_DETAILSCALE = 1, |
4 | LOC_MATDEF_SMOOTHNESS, |
5 | LOC_GLOBALS_GAMETIME, |
6 | LOC_GLOBALS_REALTIME, |
7 | LOC_GLOBALS_SCREENSIZE, |
8 | LOC_GLOBALS_SCREENSIZEINV, |
9 | LOC_GLOBALS_FARPLANE, |
10 | LOC_GLOBALS_LIGHTSTYLES, |
11 | LOC_GLOBALS_FOGPARAMS, |
12 | LOC_GLOBALS_AMBIENTFACTOR, |
13 | LOC_GLOBALS_DIFFUSEFACTOR, |
14 | LOC_GLOBALS_SUNREFRACTION, |
15 | LOC_GLOBALS_GAMMATABLE, |
16 | LOC_ENTITY_TRANSFORM, |
17 | LOC_ENTITY_BONEMATRIX, |
18 | LOC_ENTITY_BONEQUATERNION, |
19 | LOC_ENTITY_BONEPOSITION, |
20 | LOC_ENTITY_LIGHTSTYLES, |
21 | LOC_ENTITY_CONVEYOR, |
22 | LOC_ENTITY_RENDERCOLOR, |
23 | LOC_ENTITY_CUBELERPFACTOR, |
24 | LOC_ENTITY_BOUNDSCUBEMAP0, |
25 | LOC_ENTITY_BOUNDSCUBEMAP1, |
26 | LOC_ENTITY_ORIGINCUBEMAP0, |
27 | LOC_ENTITY_ORIGINCUBEMAP1, |
28 | LOC_ENTITY_CUBENUMMIPS0, |
29 | LOC_ENTITY_CUBENUMMIPS1, |
30 | LOC_ENTITY_SUBVIEWMATRIX, |
31 | LOC_ENTITY_VIEWFORWARD, |
32 | LOC_ENTITY_VIEWRIGHT, |
33 | LOC_ENTITY_VIEWUP, |
34 | LOC_ENTITY_VIEWORIGIN, |
35 | LOC_ENTITY_FRAMELERP, |
36 | LOC_ENTITY_SCALE, |
37 | LOC_LIGHT_SHADOWPARAMS, |
38 | LOC_LIGHT_SHADOWMATRIX, |
39 | LOC_LIGHT_DIRECTION, |
40 | LOC_LIGHT_COLOR, |
41 | LOC_LIGHT_ORIGIN, |
42 | LOC_LIGHT_MATRIX, |
43 | LOC_LPROBE_DIRECTION, |
44 | LOC_LPROBE_COLOR, |
45 | LOC_LPROBE_SHADEAMBIENT, |
46 | LOC_LPROBE_AMBIENTCUBE, |
47 | LOC_RENDER_VIEWORIGIN, |
48 | LOC_RENDER_VIEWRIGHT, |
49 | LOC_RENDER_CSMSPLITDIST, |
50 | LOC_RENDER_CSMTEXELSIZE, |
51 | LOC_CONSOLE_VARIABLE, |
52 | LOC_CONSTANT_VARIABLE, |
53 | } utype_t; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну это просто название такое. Так-то оно хранится персонально для каждого сурфейса.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
LOC_LIGHT_OMNILIGHT - это кастомный attenuation image?
А фильтрующая кувемапа где?
Добавлено 26-11-2019 в 17:28:
Ну в принципе да, по функционалу похоже на Волатилу. Поздравляю!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Первые опыты
Это уже нарисовано через новую систему. Пока еще не мигает и не ерзает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А какие идеи про анимацию шейдеров? Юниформ про аптайм движка или ещё как-нибудь?
та пока никаких идей, этож общая проблема.
Она в основном упирается в синтаксис скрипта, как красиво написать, что мы на этот юнит хотим навесить несколько текстур, которые будут сменяться через время? Ну вот для стандартного описания юнита
image = u_ColorMap = "textures/common/black.tga"; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
thambs приведи пример.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
image = u_ColorMap = ["textures/common/black.tga", "textures/common/white.tga"]; |
__________________
I tell you to enjoy life
Ладно, попозже к этой теме вернёмся. Может и норм.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
AntiPlayer Питон какой-то
Я наверное пойду по старому, проверенному пути, сделаю что-то типа функции addUnitLayer или addUnitFrame. Не люблю когда строка далеко уходит вправо, за границу экрана.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А переводы строк на что?
nemyax не каждую строку можно перевести.
Добавлено 27-11-2019 в 13:36:
А я тем временем без дела не сидел - подключил блендфунки, смешал текстуры со всех слоёв, реализовал деформацию вертексов, чтобы пидарасы ползали по трубам и сделал все виды генерации текстурных координат. И тут мне конечно пришлось столкнуться с ограничением моей системы. Нет, оно работает корректно, но пользователь там один момент уже не контролирует в полной мере. Впрочем я никогда не видел, чтобы это в ку3 хоть кто-то использовал, т.к. заведомо бессмыссленая операция.
Продолжаю работу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В петоне есть хорошее правило, что при открытой скобке переводы строк нещиток, пока не встретится закрытая.
То есть вот:
code:
image = u_ColorMap = [ "textures/common/black.tga", "textures/common/white.tga"];
__________________
I tell you to enjoy life
nemyax не нравится мне такой способ записи. Мне вообще петон не нравится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так юзеры-ж писать будут?
>приведи пример
Обычные звёздочки, знаки вопроса, [a-z] и [0-9] и на выходе список отсортированный в лексикографическом порядке. Мб вообще рэгэксп туда напрашивается?
>addUnitLayer или addUnitFrame
Главное чтоб не было нужно руками такое писать.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX
Я вот вижу ещё для них юзкейсы внутри скриптового языка вплане работы со строками: найти энтити по маске, загрузить какие-то ресурсы по маске (например, звуки и рандомно между ними переключаться вместо хардкода).
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот если брашевую геометрию триангулировать и сгенерить ей какую-то дерьмовую развёртку и атлас, это будет рисоваться заметно быстрее?
Я придумал, второе условие прозрачности можно повесить на cull disable.
Добавлено 27-11-2019 в 21:29:
В принципе тут какое дело - в ку3 любая полупрозрачная поверхность непременно будет иметь cull disable. Правда это же справедливо и для решёток, поэтому там выполняется дополнительное условие - чтобы блендинг нулевого юнита не был равен GL_ONE, GL_ZERO.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Бывает так, что рендерер все полигоны трактует как полупрозрачные, включая те, у которых opacity 1.0?
Рендерер не смотрит на блендфунки и opacity. У него главный критерий - отключённая запись в буффер глубины.
Добавлено 28-11-2019 в 09:24:
Подключил тем временем текс-моды, всё заерзало и закрутилось. Ну уже похоже на кутри. Остались rgbGen и alphaGen.
__________________
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-2019 в 16:22:
Вот же грёбанная задачка, из шейдера стейты не поменяешь, а рисовать всё с blendFunc( GL_ONE, GL_ONE ) - значит решётки будут полупрозрачными.
Добавлено 28-11-2019 в 18:57:
Практически завершил работу над шейдерами. Проблема с прозрачностью, увы, никуда не делась. Комбинированный материал со стадиями trans->solid навряд ли возможно нарисовать через стандартный блендфунк. Рази что через копию экрана.
Добавлено 28-11-2019 в 18:59:
А остальное всё работает, не хуже чем в ку3
Мигает, двигается, елозит, ползает по трубам и так далее.
Добавлено 28-11-2019 в 21:58:
Добавил анимацию текстур довольно оригинальным образом - каждый текс-юнит содержит в себе деномический массив путей к текстуре, по которым его можно будет поискать. Ну так я просто добавил классу каждого пути еще одну переменную - номер фрейма и всё. Теперь каждый кадр может искаться по разным путям, но суммарно их кол-во равно восьми, как в ку3.
В будущем слегка модифицируя этот механизм можно загружать и мультислойные текстуры, ну или что-то в этом духе. Просто они сольются в одну, а не останутся массивом. Так что в ку3 уже факелы заработали как надо
И всё это - на простом скрипте, движок про кутришные шейдеры даже не подозревает, единственное мне пришлось вывести дурацкое условие-проверку, что какого-то материала нет лайтмапы, а только повертексное, причём оно нужно для тех случаев, когда для материала с повертексным освещением поленились написать шейдер.
Осталась только эта грёбанная прозрачность, ну-да мне всё равно копирование экрана тестировать.
Добавлено 28-11-2019 в 22:01:
А, да, формат аним-кадров забыл показать
1 | image u_ColorMap<stageNum> = "<frame0>";\ |
2 | addUnitFrame( u_ColorMap<stageNum>, <frame1>, 1 );\ |
3 | addUnitFrame( u_ColorMap<stageNum>, <frame2>, 2 );\ |
4 | addUnitFrame( u_ColorMap<stageNum>, <frame3>, 3 );\ |
5 | addUnitFrame( u_ColorMap<stageNum>, <frame4>, 4 );\ |
6 | addUnitFrame( u_ColorMap<stageNum>, <frame5>, 5 );\ |
7 | addUnitFrame( u_ColorMap<stageNum>, <frame6>, 6 );\ |
8 | addUnitFrame( u_ColorMap<stageNum>, <frame7>, 7 );\ |
9 | setUnitFramerate( u_ColorMap<stageNum>, <fps> ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ухтыж, скажи, а вот таким способом можно будет аддитивно наложить рендер с монитора на диффузный материал?
__________________
http://www.moddb.com/mods/monorail-quest
1 | pass0 (GL_ONE, GL_ONE) + |
2 | pass1 (REPLACE) + |
3 | pass2 (GL_DST_COLOR, GL_ZERO) + |
4 | screen |
1 | pass0 (GL_ONE, GL_ONE) + |
2 | screen + |
3 | pass1 (REPLACE) + |
4 | pass2 (GL_DST_COLOR, GL_ZERO) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax как оказывается, ничего читабельнее Си-подобного синтаксиса нет.
__________________
Xash3D FWGS форк
nemyax
Ну сишный и плюсовый синтаксисы довольно всратые, хотя если убрать вездесущие точки с запятой перед переводом на следующую строку, лишние скобки и определения типов длиной в строку, то будет вполне читабельно.
__________________
http://www.moddb.com/mods/monorail-quest
a1batross
Выше уже было упомянуто, что будет нечто сиподобное. Вопрос только в том, на что конкретно будет похоже.
Добавлено 29-11-2019 в 16:44:
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Пример не пример, а в общем случае непонятно, считать перевод строки концом стейтмента или нет. В сях вот всё просто: не считать.
Ну чтожы. Как я и говорил кастомный бленд через копию экрана решил проблемы шейдеров, где на второй-третьей стадии снова идёт запись в буффер глубины. Осталось только разрулить проблемки с полупрозрачными сурфейсами в тумане.
Добавлено 30-11-2019 в 14:37:
Собсно, я не стал делать абсолютно все бленды через скринкопи, это достаточно дорого. Только вот эти сложные случаи, которые иначе не разрулить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Туманчег
Добавлено 30-11-2019 в 16:02:
Ну вообщем да, я тут провёл некоторые опыты, во всех случаях, когда у нас шейдер со сложным смешиванием (например все стадии имеют свой бленд-функ), то копия экрана прекрасно разруливает эту ситуацию и всё корректно блендится в один проход. Но таких случаев весьма мало, навскидку вспомнил только кольцо вокруг портала.
Так. Судя по всему старый механизм условий уже не удовлетворяет возросшим требованиям. Пора его обновить и расширить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Карты оригинальные кутрёвые или ты что-то с ними дополнительно делал?
#include "scripts\q3shaders.h" |
"name" |
{ |
} |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Автодетект конечно. Ну он пока не все варианты отрабатывает, я решил пересмотреть немного концепцию материалов и условий. У меня тут уже накопилось достаточно информации для размышления.
Не в том смысле, что я в тупик куда-то зашёл и дальше не получается. Просто появились идеи, как сделать еще лучше. Пока размышляю.
В рамках будущей концепции я хочу представить материал, просто как набор параметров для шейдера и для движка (некоторые подсказки).
Сейчас оно так и есть, но жёстко ограничено формой записи материала
"name" |
{ |
} |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Минутка забавного. В ку3 клибрашам почему-то не дали параметр nodraw и ксаш их конечно жы нарисовал. Надо бы их спрятать, но как?
Я бы конечо мог ввести какой-нибудь хитрый параметр, типа #ignore, но я решил себя поставить на место пользователя, который не может ничего добавить в движок. Вот как бы я поступил на его месте? Решение нашлось
#keydef surfaceparm clip\ |
alphaFunc( GL_NEVER, 0.0f ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
можно конечно, но помоему они и так наглядные.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Делаю рефакторинг системы материалов, в первую очередь надо нормальные условия сделать, предсказуемые для юзера. Ну и сам механизм немного поменяется. Я думаю теперь дефолтные материалы задавать с именем типа модели, ну вот так:
1 | mod_brush |
2 | { |
3 | // default params |
4 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пиши параллельно документацию по системе шейдеров и материалов.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Переписал систему материалов, теперь все бленды и прочее под полным контролем. Сказал бы мне кто раньше, что можно кутришные шейдеры описать простой автозаменой, я бы удивился и неповерил.
Вот вам файлик, для примера, который это делает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дописал скрипты для кутришных шейдеров. звучит конечно забавно, скрипты для скриптов. Ну я там даже некоторые оптимизации замутил, например удаление лишних стадий. Теперь надо небо сделать модное, со сменой времени суток, ну и не только. Какая же игра без скайбокса.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша так ты не скажешь, почему на кутришной карте фпс был в 3 раза выше, чем на хлбсп?
ncuxonaT позже скажу. У меня сейчас пока другие задачи, лоадер так толком и не доделат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С небом вот какая штука. Раз уж мы рисуем его из как кубическую карту из шейдера, то все вот эти древние ухищрения с проекцией текстурных координат просто идут лесом. Нам не нужно строить какие-то грёбаные виртуальные кубы в пространстве чтобы нарисовать скайбокс, мы в состоянии спроецировать кубемапу вообще на любой полигон.
Это сильно упрощает дело. Надо только придумать с облаками еще.
Можно ли им налету сгенерить координаты по полусфере.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Скажи, а система материалов позволяет/ит прописать gl_nearest заданному набору текстур?
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Во фрагментном шейдере же ступенек намутишь.
thambs на каждый юнит можно добавлять нужные текстурные флаги, в том числе и TF_NEAREST конечно. Можно эти флаги обвернуть в условие с кваром например. Т.е. в дополнение к gl_texture_nearest.
Добавлено 08-12-2019 в 14:00:
Прекрасно получилилось всё спроецировать на плоскость. Я вообще удивлён, что спустя столько лет, народ до сих пор копипастит эту херню с генерацией координат на кубе, сферы для облаков и прочее. Оно вообще не нужно, достаточно нарисовать просто полигон неба, как его поставил маппер и спроецировать туда скайбокс и облака. И помоему качество таких облаков даже выше, ведь полусфера имеет конечный шаг тесселяции, а тут у нас попиксельное совпадение. Второй несомненный плюс - небесная поверхность рисуется со включённой записью в буффер глубины, а значит сквозь нее не будет ничего просвечивать, значит плевать на порядок отрисовки.
Добавлено 08-12-2019 в 14:02:
Да и разумеется теперь задники грузятся в единую кубемапу, а не в отдельные шесть текстур. Фактически можно сказать, что я нарисовал небо, не модифицируя движок. Опять всё в скриптах и шейдере.
__________________
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-12-2019 в 19:06:
Остался у меня только autoSprite2. Ух и вредная пакость, вроде ерунда, а на GPU хрен переложишь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот кстати еще хрень какая с автоспрайтами. В идеале предполагается, что автоспрайт будет иметь всегда четыре вертекса. Но есть вот карта XPac_Bt (Black Town), так вот там вертексов произвольное кол-во. Ну и чтобы вы думали? Ку3 надрывается, про odd vertex count, но тем не менее всё исправно рисует. Я долго не мог одуплить почему. А потом дошло. Я жы генерю ему секвенцию как набор трианглов. А надо как набор квадов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В ку3-шных шейдерах была одна очень серъезная архитектурная проблема - шейдер на вход принимал не только имя, собсно, шейдера, но и номер лайтмапы. Причём, как вы догадываетесь, использование лайтмапы могло быть попросту отключено из самого шейдера. Дело тут вот в чём - повертексное освещение считалось компилятором для всех поверхностей. А вот лайтмапа кое-где скипалась, ну скажем миск-модели. То есть с лайтмапы на вертекс можно было переключиться всегда, а вот наоборот - нет. Но это полдела. Как вы понимаете, если уж шейдер объявлен пользователем, то там такие фокусы не проходят - прописал лайтмапу, значит будет лайтмапа. Или вертекс. Или всё вместе. А вот если шейдер был имплиситным - там начинались чудеса. Покроет дизайнер одной и той же текстурой стенку и модель какую-то, и генерируются для одного и того же материала два шейдера - с повертексным и с лайтмапным. Вторая проблема еще и в том, что шейдеры генерировались не для материала, а для сурфейса. Что в общем случае дольше. У себя я решил эту проблему достаточно просто - передал в юниформ номер страницы атласа. Тесселятор все чекает номер лайтмапы и останавливается, если он не совпал, а мы просто таким образом смотрим, раз -1 - значит повертексное. -2 - фуллбрайт ну или что-то в этом роде. Условие статичное, на производительность не влияет.
Добавлено 11-12-2019 в 22:02:
Вообще там много было весёлого. Например q3map2 зачем-то линкует сурфейсы бмоделей к лифам. Вот этого вот я вообще не понял. Может это конечно такие специальные лифы в общей куче, которые в дереве не участвуют. Ну знаете как построить фейковое дерево? Аллокнуть аутсайд ноду и к ней прилинковать лиф или вообще просто один лиф аллокнуть. Когда мы используем обход дерева это и не влияет, но я давно уже линейно обхожу лифы, поскольку это гораздо быстрее для отрисовки. Ну и видимо вот эти тоже задел.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Похоже мне удалось-таки преодолеть главный затык в написании нового движка. Если я засматривался в какой-то степени на кутришный формат уровней, меня преследовала мысль, что это придется тащить кутришные материалы, а мне бы этого совсем нехотелось. Теперь же, когда материалы описаны в скрипте, соответственно проблемы никакой нет, рендерер остался генеричным. Значит можно и дальше двигаться в этом направлении.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В халфе с точки зрения современной системы материалов, самая великая мерзость - вот эти рендермоды. Мало того, их еще и налиту переключать можно, что совсем уже за гранью. Для простейших материалов из одной диффузки это не имеет никакого значения. Но уже в ку3 эту тему дропнули.
С одной стороны - это просто такой способ задать прозрачность. С другой - одни и те же диффузки могут быть как прозрачными так и непрозрачными, вот в чём штука. И заранее это определить невозможно. Хранить по две копии материала для непрозрачных и прозрачных случаев - тоже глупость какая-то. Разве что в шейдер протащить эти рендермоды.
Но мне эта затея представляется небесспорной в том плане, что я возможно вообще дропну все эти старые материалы и рендермоды в плане их поддержки. Прозрачность регулировать из объекта - это пожалуйста, тут никаких проблем, но переключателя солид\транс точно быть не должно налиту. Впрочем можно провести любопытный эксперимент: прописать пресеты материалам исходя из их предназначения и поглядеть сколько будет мест, где это зафейлится. Стёкла, решётки там.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>переключателя солид\транс
А это вообще хоть где-то используется?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ксаш-тулзы кстати умеют конвертировать VTF->DDS без дополнительных операций.
Добавлено 13-12-2019 в 12:42:
Нет, ну вот скажем взять сталкер, там DDS-only и ничо, никто не жалуется.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
tga оставь, удобней с ним работать и его все вьюеры видят, а в dds уже финалку перегонять.
__________________
http://www.moddb.com/mods/monorail-quest
Кстати да, а джек то dds держит?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да должен поидее. Мне вот любопытно что никто BMP не любит, хотя он и в паинте открывается и превьюшки для него видны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, мне в любом случае из джека удобней работать с превьюхами, т.к. у них масштаб в основном 1тексель==1юнит.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Под аббревиатурой BMP же скрывается зоопарк форматов. Сложно такое надувательство любить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще странно видеть как в наше время, когда любая программа, умеющая открывать картинки, наверняка умеет еще и конвертировать целую тучу форматов, люди мучаются выбором формата для импорта.
Понятно, что когда люди сами рисуют текстуры, они это делают в программе типа фотошопа, и им не составит труда сохранить их в формате удобном для движка. Вся эта поддержка кучи форматов нужна только текстуроворам, которые воруют картинки из других игр, программ и интернета.
Движок конечно должен хранить текстуры в своем формате, это будет гораздо гибче, если ты вдруг решишь хранить в файлах текстур какие-либо еще данные, помимо собственно изображения. А импортировать/конвертировать надо из нескольких самых распространенных форматов типа PNG, BMP, TGA, JPG... Хотя я хочу посмотреть в глаза тому человеку который импортирует текстуры из JPG
ЗЫ. Дядя Миша
Кстати очень интересня тема, спасибо что решил завести блог, очень интересно следить за ходом социалистической мысли так сказать в прямом эфире!
Меня только мучает один вопрос... Я несколько лет не следил за твоей деятельностью и хорошо помню времена, когда ты писал исключительно на чистом Си. И я был шокирован, когда прочитал твои рассуждения о шаблонах и классах (да еще и абстрактных!) что стряслось?..
Кстати ты не думал выложить проект на гитхаб? Там мы могли бы напрямую наблюдать развитие движка, а также запиливать баг-репорты и пул-реквесты
Ладно, используя возможности новой системы (я её условно-абстрактно назвал словарь замен), накидал вот такую вот штуку:
1 | #keydef renderMode kRenderTransTexture\ |
2 | blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );\ |
3 | depthMask( GL_FALSE );\ |
4 | addShaderDefine( LIGHTING_FULLBRIGHT );\ |
5 | addShaderDefine( ADDITIVE ); |
1 | generic108 |
2 | { |
3 | renderMode kRenderTransTexture |
4 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша TGA, тем более его реализация в Ксаше, умеет RLE(или мы это сами запилили, я уже чот не помню) , а компрессию в BMP почти никто не реализует, хотя там есть соответствующий biCompression.
__________________
Xash3D FWGS форк
Там точто такой же RLE, но мне не попадалось сжатых BMP, это редкость.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Плюсы на венде ещё и в более шустрые бинарники компилятся, чем сишечка.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax половина конструкций, валидных с точки зрения языка не работает. Я специально гуглил те или иные примеры, которые должны работать корректно, но в шестёрке оно либо не компилится, либо падает.
И typeof какие-то идиотские имена порой возвращает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А чому ты clang не хочешь использовать?
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша
А я тебе говорил, возьми хотя бы дивятку =)
У меня в ей правда шаблонные методы не линковались, если определения были вынесены в .cpp. Если всё определяется при объявлении в заголовке, то ок. Не знаю, баг ли это или норма.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Мишав том-то и дело, что сжатый BMP настолько редкость, что его никто не поддерживает. Чего не сказать о тарге.
А я думал ты с шестёрки всё же ушёл на современную студию. %)
Добавлено 14-12-2019 в 06:43:
nemyax это не баг. Так и должно быть, это плюсы такие.
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | pcstr extension = "jpg"; |
2 | FREE_IMAGE_FORMAT format = FIF_JPEG; |
3 | if (strstr(Core.Params, "-ss_png")) |
4 | { |
5 | extension = "png"; |
6 | format = FIF_PNG; |
7 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
По мне так в любом случае удобнее, когда есть отдельная либа, которая умеет работать с картинками, и все кому нужно загрузить или сохранить картинку к ней обращаются.
Ладно. Щас форматы уровней\моделей в приоритете, точнее их разработка. К картинкам всегда можно вернуться. Кстати говоря, я удивлён, что ты мою тему обнаружил только сейчас.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подключил колоизацию к кутришным картам и моментально столкнулся с залипанием возле чётных сторон брашей. Как в 2008-й год вернулся.
Только тогда я вообще не понимал что происходит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А что происходит?
__________________
http://www.moddb.com/mods/monorail-quest
Починил кутришную колоизацию, добавил там эти оффсеты. А проверить очень просто - если коллизия лажает, то расстревалка пишет в консоль Unstick by <offset number>. Для игрока так-то почти незаметно.
Это без овербаунса.
Добавлено 15-12-2019 в 13:37:
Я же TraceWork из паранои заюзал, так что у меня изкаропки будет нормальная коллизия с ротатаблями
А вот с капсулой, к слову, так и не получилось. Уж не знаю, то ли у меня капсула слишком жирная, но игрок имеет тенденцию застревать в некоторых уголках, там где не застревает ббокс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Хулл игрока стало можно менять?
nemyax можно-можно.
Приступил к разработке компилятора уровней. Ну я там естественно тоже хочу все режимы описать функциями, а к привычному виду привести через словарик автозамен. Вообще я так прикинул, если выкинуть оттуда лишние флаги и контентсы, то может получиться вполне неплохой генеричный формат уровней. То есть скажем таких вещей как CONTENTS_WATER|CONTENTS_LAVA быть вообще не должно, подобные вещи пользователь должен в материале описывать. А в компиляторе просто подсказка, что этот браш ликвидный. Ну и всё в таком же духе.
Основная задача на текущий момент - научить его собирать халфовские карты, вы будете смеяться, но кутришные компиляторы дико фейлят от того, что прекрасно собиралось даже ZHLT, порою. Там планесы куда-то корёжит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А лайтмэпы по-хэлфовскому или по-кутришному будешь организовывать? Расскажи, плз, про овербаунсы и вообще как вся эта система работает.
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша Расскажи про чётные стороны брашей.
1 | int CBasePlayer :: ClipVelocity( const vec3 &in, const vec3 &normal, vec3 &out, float overbounce ) |
2 | { |
3 | float angle = normal.z; |
4 |
5 | int blocked = 0x00; // Assume unblocked. |
6 |
7 | if( angle > 0 ) SetBits( blocked, 0x01 ); // If the plane that is blocking us has a positive z component, then assume it's a floor. |
8 | if( angle == 0.0f ) SetBits( blocked, 0x02 ); // If the plane has no Z, it is vertical (wall/step) |
9 |
10 | // Determine how far along plane to slide based on incoming direction. |
11 | // Scale by overbounce factor. |
12 | float backoff = DotProduct( in, normal ) * overbounce; |
13 |
14 | for( int i = 0; i < 3; i++ ) |
15 | { |
16 | float change = normal[i] * backoff; |
17 | out[i] = in[i] - change; |
18 |
19 | // If out velocity is too small, zero it out. |
20 | if( out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON ) |
21 | out[i] = 0.0f; |
22 | } |
23 |
24 | // Return blocking flags. |
25 | return blocked; |
26 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Приступил к написанию компилятора уровней. Название придумал хорошее - makebsp. Надо его сперва перевести на нормальные вектора, матрицы и виндинги, устал уже везде писать VectorCopy; Я сперва планировал для него создать отдельную тему, но потом подумал, а что я собственно вам такого смогу про них рассказать? Это у халфы была на компиляторы достаточно богатая история. Для кутри всего две штуки их - q3map и q3map2. Не о чем писать особо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще q3map2 занимается удивительной глупостью. Вместо того чтобы в своё время имплементировать нормальный инклуд .map файлов в основную карту, юзерам предложили такое корявое решение: делаем карту-префаб, "компилируем" её в ase (по сути просто выкидываем структурные фейсы), затем этот ase вставляем в новый префаб, затем в новый и так у нас в итоге получается конечный префаб, сложно-составной. Минус подхода очевиден - если понадобится внести изменения в самую базовую частичку такого префаба - придётся перекомпиливать вообще всё заново, значит создавать какие-то кучи батников и что немаловажно - всё время следить за порядком их компиляции, иначе ерунда получится. Я еще в 18-м году рассудил, что это полная ерунда и в параноевские компиляторы замутил полноценный инклуд map-файлов. А теперь значит настала пора это и в сам ку3 внедрить
Добавлено 17-12-2019 в 22:32:
Хотя я кажется догадываюсь, почему этого не было сделано. У автора q3map2 были какие-то сложности с матрицами, он сам там писал в каментах благодарности, типа спасибо, что матрицы помогли настроить.
Ну а о том, чтобы корректно трансформировать брашы, видимо даже и речи не шло.
Добавлено 17-12-2019 в 23:05:
В q3map2 так и не порезали триангл-модели плоскостью тумана, ох жэсть какая. 19 лет прошло, а конь так и не валялся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Засела мне тут одна мысль в башку. Ведь турбулентность-завихрения, по идее можно реализовать в пиксельном шейдере безо всякого там субдивайда. Ну в софтварной кваке же его не было.
Добавлено 18-12-2019 в 12:58:
вообще конечно так посмотришь эти фантазии на тему форков - какой жы лютый мрак, они все тащут эту копипасту из первого-второго-третьего квейка, и конечно жы кутришные шейдеры. И всё это практически в неизменном виде, никаких попыток переосмыслить. В лучшем случае это будет копипаста из третьего дуум как в овердозе. Я ведь собственно, почему так долго раскочегаривался с XashNT - не хотел идти их путём. Зачем это нужно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Предсказания плюшевого пророка
Тогда еще, когда я только начинал строить свой движок, году примерно в 2007-м, как вы помните, я тогда задался целью всё построить на Dll Hell.
Ну чтобы значит эти дллки с унифицированными интерфейсами, чтобы всё грузилось так и эдак, в зависимости от того, какая часть движка их использует. И на геймдеве советовался с тогдашними опытными участниками, как мне лучше поступить. И вот один из них мне сказал, рано или поздно ты придёшь к тому, чтобы поместить всё в единый экзешник и не маяться этой дурью с библиотеками. Но я ему тогда конечно не очень поверил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ага, особенно моды и VGUI
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Если с другой стороны поглядеть, один разработчик — одна исполняшка. Идеальный баланс.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Не в случае ксаша. Ты собирал ксаш и ксашмод?
Я почему-то считаю, что юзеры вообще не хотят ничего кодить, абсолютно. Максимум скриптов понаписать. То есть вот взять даже монстров. Никто не хочет писать нового монстра. Нет, вы мне дайте такой скрипт, чтобы там можно было кастомизировать поведение базового и этого обычно достаточно. В этом конечно плане самые разнообразные монстры были пожалуй в первой кваке, одни кусают, другие мечом лупят, третие через пропасти прыгают, зомбей вообще убить невозможно. В халфе из всех монстров только барнакль так выделялся. Ну и может быть еще тентакли, но они скриптовые.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ассеты пишут в рассчёте на множественные продажы, хех.
Не для себя в основном. Этоже гораздо проще чем сделать целую игру и гадать выстрелит она или нет. А так сделал ассет и продавай себе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Отчасти
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну я бы с удовольствием вернулся к кодингу на ксаше, особенно с учётом последних изменений, когда будет стабильный билд. Я вообще всегда больше любил поковыряться в коде, чем рисовать текстурки и прочие ресурсы, поэтому много моих проектов так и загнулись - какая-никакая кодовая база была, а ресурсов нет. Вспомнить хотя бы сколько я тем запостил с различными фишками, типа аптечки с собой, фикс модельки в GUI, куфантомасу вот кваковскую физику приделали с распрыгом и дабл-джампом, тулово от первого лица, да и много чего
__________________
-Brain is dead-
KiQ в этом-то и проблема, что твое творчество не найдет выхода без ресурсов. Надо наоборот, пусть лучше не кодят, но чтобы игра получилась.
Хоть какая-нибудь. Я согласен даже на самую лучшую игру всех времён и народов. Даже на игру, которую мы заслужили вместе с тобой.
Добавлено 22-12-2019 в 21:38:
Вспомнил про X-Real, дай думаю скачаю, посмотрю, как оно. Я еще смутно припоминаю, что они там слегка модифицировали кутришный формат карт, но щас глянул - ничего подобного, всё родное. Но материалы - из Doom3.
Так что будет мне еще дополнительный стресс-тест для словарика - подключить дуумтришные материалы простой автозаменой терминов и регулярных выражений
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как выяснилось, в XreaL уже присутствуют guide, такие однострочные выражения, которые потом распахиваются во вполне полноценные описания.
Ну особой проблемы они не составили - я просто слегка доработал парсер, чтобы он мог учитывать не только автозамену внутри секции, но и снаружи её. Правда это получается как бы две стадии - на первой стадии материалы парсятся в память и происходит частичная автозамена, на случай вот таких вот гайдов. А уже полноценная делается когда материал реально запрошен из загрузчика моделей.
Впрочем у меня еще тут таблицы и регулярные выражения, надо подумать как бы это красиво оформить. Есть небольшая проблемка - в таблицах может быть сколько угодно элементов, а мой парсер регулярных выражений базируется на строгом соответствии кол-ва аргументов. Возможно надо ввести что-то типа VA, три точки или типа тово.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Разбираюсь с этой мешаниной, которую в XreaL натворили, скрестив кутришные шейдеры и дуумтришные материалы, обратил внимание вот на какой любопытный аспект. В ку3 шейдеры были генеричные - ты сам управлял какую стадию с какой смешать - парсер в это дело не вмешивался.
А здесь, ну начнём с того, что можно писать diffusemap, bumpmap и specularmap в любом порядке - пофиг, всё равно смешается правильно, лайтмапа вообще не указывается явно, она всегда подразумевается в режиме статичного освещения. Т.е. таким образом, несмотря на кажущуюся сложность этой системы, она даже более проста в переложении, поскольку оставляет куда меньше пространства для манёвра с точки зрения пользователя. Основная свобода там в задании этих условий динамических и регулярных выражений. Всё остальное нацелено на то, чтобы писать как можно короче.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
Xash3D FWGS форк
Я уже отказался от этой идеи поправде говоря. Мой парсер в состоянии заменять только целые строки, а таблицы зачастую идут с переносом, фактически мне надо будет детектировать блок текста с очень нечёткими условиями, плюнул и распарсил эти таблички как есть, в дуумтришном формате, к тому же, насколько я в курсе больше никто и никогда ничем подобным не занимался, так что их не бывает разных видов.
Но. Эти же va могут пригодится например для переноса регулярных выражений в юниформы, там-то всё на одной строчке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добавил дуумтришные регулярные выражения для записи в юниформы.
Ну там если честно, отличие от обычных регулярных выражений - это доступ к таблицам этим. Тут вот какое дело - несмотря на все успехи и достижения GPU-ускорителей, подобные таблицы хранить в них действительно накладно, потому, что как я понимаю, они куда-то там пытаются на стек поместится, и всё начинает дико тормозить на определённом железе. А иногда эти таблички очень даже нужны, да вот хотя бы лайтстили прописать.
Так что я их добавил. Теперь можно их значения в качестве константы пропускать в юниформ, причём писать практически как в GLSL.
Ну например:
vec2 u_MyScrollTexture = vec2( time * 0.03, sinTable[time * 0.6] + 0.5 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Похоже на доступ по индексу с неявным приведением. Тогда time это счётчик этих ваших тчинков штоле?
Кармак, когда эти таблички для doom3 делал, явно или неявно руководствовался поведением OpenGL. Интерполятор - часть настроек таблицы, а не модификатор доступа.
Добавлено 28-12-2019 в 11:10:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax ну что означает? Тоже самое что и в дуум3.
int tableIndex = (int)(cl.time * 0.6); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так путает же, наоборот. Я вот как взглянул, так о-жид-ал, что квадратные скобки от флоата между двумя точками линейно интерполируют.
__________________
http://www.moddb.com/mods/monorail-quest
Ну по умолчанию оно действительно интерполирует, но вовсе не потому что там float. Это в свойствах самой таблицы задается - интерполировать или нет. Если таблица интерполируемая, там достаточно задать просто 0 и 1 и этого достаточно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Идея с тремя точками отпадает и вот почему. Мой риплейсер позволяет один и тот же входной аргумент размножать на выход сколько угодно раз, если это потребуется. А когда мы задаем входные аргументы вот так
#keydef scroll ... , ...\ |
vec3 u_texMod<stageNum>_<texModCount> = vec3( <scroll>, <...>, <...> );\ |
texModCount++; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Помню в Fenyx Engine у меня тчинки лежали в long, а когда нужно было что-то типа time + 0.6 я флоат переводил в миллисекунды
__________________
-Brain is dead-
Ну чтожы закончил работу над поддержкой особенностей дуумтришных материалов. Теперь каждому юниформу можно задавать регулярное выражение вместо константы. Ну и однострочные материалы, по типу как в сталкере и метро теперь автоматически разворачиваются в нужный вид. А так же внедрена поддержка этих таблиц из дуум3. Ну кстати с табличками можно много чего интересного придумать, в том же XreaL например грозовое небо сделали, которое озаряют отсветы молний. Прикольно смотрится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Собрал bsp, компилю карты, геометрия в порядке, а туман превращает полигоны в кашу. Ну что такое! Опять эта хрень с разной точностью флоата у msvcrt\libc. Как жы мне всё это надоело...
Добавлено 05-01-2020 в 13:48:
Самая пакость начинается, когда приходится подключать сторонние либы, которые уже скомпилены в какой-то таргет и вот он не совпадает с основным приложением.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
дай скрин с туманом))
свой компилятор никогда не думал писать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Туман не такой, при котором бочком лучше видно?
nemyax это линейный
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я имею в виду, компилятор для С\++
Новая напасть. Вот эта карта.
Все стены почему-то з-файтят, даже если к ним применить дефолтный материал лайтмапа+диффузка. Взрыв мозга. Самое смешное, что если я своим текущим компилятором (который в разработке), собираю эту же карту из исходников - ничего не зфайтит. Но и под ванильной кутри ничего не зфайтит. Ну что за бред, вперые в жизни с таким сталкиваюсь.
Как будто там двойная геометрия. Но это еще не самое смешное.
Я сравнил статистику для свежеизготовленной и для оригинальной карты.
И вот по статистике выходит, что на моей, только что собранной в 2 раза больше сурфейсов чем на оригинале. Но з-файтит именно оригинал.
Ничего не понимаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша там на самом деле двойная геометрия, поверх обычной геометрии еще такие же патчи
ncuxonaT а чем ты это смотришь? Я в упор не вижу этого ни в исходнике, ни в ваерфрейме.
Добавлено 06-01-2020 в 17:22:
Думал-думал, как же это дерьмо проверить и придумал.
Всё очень просто. Все эти стены на самом деле сделаны кривыми безье.
То есть, если собирать оригинал-исходник с ключом -nocurves, то стенки просто исчезнут. Я так и поступил - действительно исчезли. Но патчи я не могу посмотреть проволокой, почему, потому что блин код удаляет коллинеарные строки, превращая патч в точто такой же полигон, как и в оригинале, у них же края совпадают. То есть я не увижу вот эту сетку у себя, и в ку3 не увижу - лишние вертексы удалены. Тогда я просто проигнорил патчи при загрузке - не стал их добавлять в VBO. Ну и что? Действительно стены остались на месте, а з-файтинг исчез. Теперь к вопросу откуда взялось это дерьмо. Это очень просто:
q3map_forceMeta |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я сделал конвертер q3bsp в obj, он патчи бьёт с заданным шагом.
1 | // we may have a nodraw surface, because they might still need to |
2 | // be around for movement clipping |
3 | if(s_worldData.shaders[LittleLong(ds->shaderNum)].surfaceFlags & SURF_NODRAW) |
4 | { |
5 | surf->data = &skipData; |
6 | return; |
7 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Приступил к разработке собственного формата BSP.
Здесь у нас некоторые взаимоисключающие требования, но я полагаю, что мне удасться их успешно разрешить. Халфовский формат я дропну, т.к. из-за большого кол-ва лифов и отсутствия стрипификации он на данный момент выступает ключевым тормозом в отрисовке мира. Даже не смотря на мою оптимизацию, о которой я упоминал - построить из видимого хулла визтри, сколлапсировав ноды. Да, непосредственно для BSP29\BSP30 это ОЧЕНЬ хорошая оптимизация, до которой не догадался абсолютно никто, кроме меня, она даёт бууст производительности от 10% до 500%. Но в сравнении с нативным q3bsp скорость отрисовки всё равно в пару раз меньше чем могла бы быть. Далее, если я планирую вставлять модельками куски уровня, ну тот же ЧАЭС из сталкера, очевидно было бы неплохо, если бы BSP посёк эту модельку ну хотя бы на аксиальные сектора 1024\1024, тогда появится возможность отсекать большие площади по фрустуму лифа, даже при условии, что никакой виздаты у нас нет. И разумеется тристрипы для подобных поверхностей. Теперь, собственно, что позитивного у нас осталось в халфовском формате, с чем не хотелось бы расставаться. Ну во первых, конечно жы, как я неоднократно говорил - это сверхбыстрая трасса. К счастью её можно построить прямо в компиляторе света, так что можно не хранить её в карте. Второй момент - вот эти вашы лайтстили. В ку3, как вы помните их не было, но Raven или кто там делал солдат у дачи их добавил в формат максимально неоптимальным образом. Не говоря уже о том, что значительно вырос размер файла, лайтстилей так и осталось ровно четыре штуки. Я хочу сделать систему без лимита на лайтстили. Если уж их реально добавлять.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Стрипификация не особенно актуальна на современном железе с жирным TnL кэшем. Если важно гонять индексы по шине - тогда лучше сделать их 16-битными, как в старые-добрые времена.
__________________
А в чем вообще фишка лайтстилей, зачем они нужны?
__________________
Мой сайт
Xash3D Modding Discord
SNMetamorph
Чтобы лампочки мигали и выключались.
__________________
А, пока не забыл. В качестве контейнера для карт я возьму WAD-файл, поэтому все лумпы будут поименованные, отпадает проблема с нумерацией версий, расположением лумпов и их кол-вом. Ну и бонусом можно будет из любого редактора вадов экспортить куски карты для дальнейшего изучения, а лайтмапы прям сразу в картинки сохранять, например.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Но тогда у тебя все будут спрашивать - where is all the data?
__________________
__________________
Мой сайт
Xash3D Modding Discord
XaeroX
Можно будет отвечать: I'll tell you for a WAD of cash.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подключил CSG к компилятору. Первый случай, когда у кутришного компилятора появился CSG
Ну правда на кутришных картах толку от него практически нет. На q3dm1 он смержил мне два каких-то браша, а на q3dm7 - три.
Его истинное предназначение - это конечно карты от халфы и кваки.
Между прочим мне здорово пригодились старые наработки. Я жы когда-то планировал заюзать кудвашный формат уровней для нового ксаша. Ну так дело было за малым - научить его жрать карты от халфы. Да не абы какие, а от Монорейл Квеста, чтобы быть точно уверенным, что оно соберётся.
И соответственно я там уделил большое внимание функции SplitBrush.
А она, что в ку2 что ку3 одинаковая. Ну вот и пригодилось
Теперь надо научить его парсить халфовский и кушный формат карт.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну что жы, реализовал рекурсивное вложение карт-префабов для моего нового кутришного компилятора, по аналогии с параноевскими тулзами.
Плюс в том, что можно выбирать поведение - вставлять либо оригинальные модельки, в формате .ase, либо исходники .map если они конечно есть.
С префабами в формате .map есть еще и тот плюс, что для них можно наладить пространство имён и вставлять не просто куски геометрии, а целые отлаженные системы скриптов, например. Эх, научить бы Джек показывать эти префабы
Ксероксу такое nepozubam, а у меня сорцев нету.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Круть, а bsp-шки так можно будет?
__________________
http://www.moddb.com/mods/monorail-quest
если определиться с пространством имён, то разницы никакой, что .map при компиляции, что .bsp при загрузке.
Но это очень важный вопрос, представить префаб как набор инпутов-аутпутов. Чтобы если их было много, нигде не пересекались имена, чтобы если часть префаба поехала на другой уровень это не вызвало там проблем, и так далее. Тут нужна целая концепция.
Добавлено 10-01-2020 в 19:51:
ЗЫ, сорс тоже может вкладывать эти префабы нерекурсивно ( 1 уровень вложения), вот надо посмотреть как там пространство имён разрулили.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Джек в основном на волатилу нацелен, там нет map-префабов, вот и nepozubam.
По-хорошему надо в Джеке сделать собственную систему префабов, но это пожжы.
Добавлено 11-01-2020 в 00:12:
__________________
Неисключено. Надо будет посмотреть как там сделано.
Добавлено 10-01-2020 в 21:38:
Надо еще вот какую штуку сделать. В разных компиляторах существуют разные виртуальные энтити, которые удаляются на этапе компиляции.
Ну самый известный пример это func_group наверное. Ну так вот надо вынести описание этих виртуальных энтить в текстовый файлик и там же простые операции, которые к ним следует применить.
Например - мувнуть брашы в мировую энтить, поставить всем контент-флаг DETAIL, и так далее. Там не так уж и много вариантов. В компиляторе это держать неудобно.
Добавлено 10-01-2020 в 21:41:
В идеале бы вообще сделать, чтобы компилятор читал FGD и там из него брал энтити. Но проблема в том, что во первых у меня нет своего редактора, а во вторых мне активно не нравится сам FGD-формат и я не хочу внедрять его поддержку.
Здесь конечно должна быть реплика с мест "пиши свой редактор". А у меня основная сложность в написании собственного редактора, в том, что я не могу освоить ни хаммер ни радиант. Вот и спрашивается, на что он будет похож?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
А должен быть на что-то похож? Так и получится очередная кубалка.
Не думал форкнуть кварк и переделать?
Crystallize я думал о многом, я думал о разном, смоля папироской во мгле!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
А почему при компиляции получается так много разбиений на открытых пространствах?
Это слабое место BSP подхода, или дело в компиляторах?
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Аддитивная геометрия там тоже, разумеется, была.
А вода создавалась через zone properties (это точечный актор) между zone portals.
__________________
XaeroX я уже очень смутно помню, была ли вода в UT99.
В первом унреале точно была, там у меня еще один Скарж утонул
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
Запрет на ручные сейвы, по-моему, уместен в игорях типа Borderlands (для тех, кому скучно). Миссии мелкие, терять нечего, при желании можно пофармиться и апнуться.
Либо надо как-то компенсировать игроку страдания от ампутации сейвов. Хотя бы как в риддиках и свежих вольфенштайнах, где накидывают здоровья с энной попытки пройти какую-нибудь комнатуху.
Добавлено 12-01-2020 в 16:04:
XaeroX
Кстати, как контрабандиста спасти?
nemyax
В самом конце последней миссии в Нью-Йорке сходить к нему и предупредить.
Правда, придётся напрячься, т.к. на улицах много солдат и ботов.
Добавлено 12-01-2020 в 20:14:
__________________
Crystallize
Ограничивающий объём по-любому как-то надо определить.
Добавлено 12-01-2020 в 16:16:
__________________
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чо-т я не понимаю. Для эффективного виза нужна лоуполи аксиальная геометрия, поэтому браши. Но тут приходит CSG и нарезает браши на каломассу с кучей лишних треугольников и корявостей от недостатка точности.
nemyax
Как аппроксимировать кубиками тетраэдр или пирамиду?
__________________
XaeroX
Если аксиально, то как-то так: https://i.imgur.com/xmwzByb.png
nemyax
Какое жуткое нагромождение вместо простейшего браша.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX
Ну декомпоз даст красотульку в этом случае. Но дядя Миша вон говорит, что это шышки и что надо аксиально.
Там смысл в чём: при надувании мелкие детали сами-собой растворяются.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтожы, настала пора самого интересного - собирать халфовские карты моим компилятором. Тут ведь идея в чём? Карта она так и остаётся прежней, со своими путями к текстурам. Но компилятор, вооружонный мощной системой материалов спокойно находит всё что ему нужно, причём пути указывает юзер.
Добавлено 12-01-2020 в 23:02:
ЧТобы было понятнее о чём речь, пусть вам Thambs расскажет, как он однажды попытался скомпилить свои карты под ку3 и писал всякие шейдеры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax я думаю идеальный дядемишин редактор это как Майнкрафт, только кубики не фиксированы а заданы размерами текстуры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша
У меня следующая бНОПНЯ, каким образом в компиляторе/игре определяется число субдивайдов в q3-патчах, возможно ли его вынести в необязательные параметры статика для удобства стыковки всяких труб и пр.?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нашёл жырный баг в SplitBrush, функцию скопировали из ку2 в ку3. В q3map2 она непофикшена, подозреваю и в волатиле тоже. В лёгких случаях приводит просто к утечке памяти. Ну а если над компилятором ведутся фундаментальные работы, ну вот как в моём случае, добавляются CSG и прочие михонизмы, тут-то всё гавно наружу и полезло.
Добавлено 13-01-2020 в 22:01:
Попробую китайскую формулу для выбора секущей в ку3. Интересно будет ли толк.
Добавлено 13-01-2020 в 22:46:
Только приступил - уже ляп нашёл, валидные размеры считаются только для корневной и впоследствии только для аксиальных нод. Для неаксиальных они равны родительской. Просто не стали заморачиваться.
Эффективное дерево так не построишь. Ну просто для ку3 на многие моменты забили.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize поищи по форуму тему о компиляторах с кастомным subdivide. Думаю, там.
XaeroX а ты только hlcsg и hlbsp тогда исправил?
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
расширение def смущает пользователя, лучше ini.
__________________
Crystallize
Чего тебя всё смущает какая-то иррунда?
Подключил CSG, пропали межводяные стенки
Правда надо еще подумать как его полутьшы встроить, чтобы ничего не паламать. Типа того жы тумана. Поидее из фейсов CSG можно строить улутьшенное дерево, т.е. более оптимальное.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax какая была предыдущая?
Crystallize
Ну скобки тебе не те были =)
В качестве временного решения, замена вадам будет следующая:
имя вада в поле "wad" у "worldspawn" это textures\wadname\
Это на время миграции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Халфовский CSG, как мы помним разбивал не просто проникающие, но соприкасающиеся брашы. Это было нужно для того дерева. Для кутришного, понятное дело, ни к чему. CSG для соприкасающихся брашей я оставил только для водички, естественно. Вообще там какой-то баг похоже, или невнимательность моя, в плане фильтрации контентсов. Ведь после работы брашевого CSG этот не должен продуцировать ничего лишнего.
Ну я еще поставлю тесты на специальных картах.
Кстати говоря, может у Тхамбса есть такие примеры фейла CSG, я жы знаю как он его любит.
Добавлено 15-01-2020 в 17:33:
Так, ну Сипульчер и Грендель с этим CSG собираются правильно, но там непонятно. В халфе из-за ограничений формата китаец ввёл иные правила, Eric W. в своих TyrUtils не смог с одной стороны добиться такой же эффективности, как китаец, но и правила у него слегка отличались. К примеру в VHLT запрещена вода детайлами. В TyrUtils - можно.
У китайца было понятие детайллевелов - т.е. более низкий левел жрёт те что левелом повыше. В TyrUtils вместо левелов было просто несколько энтить, func_detail, func_detail_wall и func_detail_illusionary, которые условно соответствуют левелам 1, 2, 3. То есть получается что detail_wall кромсает таких же и illusionary, но не трогает просто func_detail. В ку2, если не путаю, там наоборот было - структуральные брашы вообще не затрагивали детальные, а детальные соответственно структуральные, т.е. было как две непересекающихся группы. Поправьте меня, если я неправ.
Я могу просто завести приоритет детального уровня, если это востребовано.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Я тут еще подумал, что можно вывести глобальную настройку для регулировки степени агрессивности CSG.
Нулевой уровень - bypass
Первый уровень - взаимодействие только воды с водой и воды с солидами
Второй уровень - солиды с солидами, солиды с водой, вода с водой, но если брашы просто касаются друг друга (не пересекаются), то вычитания не происходит.
Третий уровень - поведение как в халфе, максимально агрессивное.
Ну и CSGBrush можно будет по желанию включать и выключать отдельно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Надо еще приделать мержинг фейсов. Слава богу эти фейсы не влияют на построение дерева, а значит их можно объединять и разъединять как угодно - дырок не будет.
Добавлено 16-01-2020 в 19:32:
Ну товарищи, теперь наступила полная красота!
Есть два регулятора - агрессивность CSG и агрессивность объединителя сурфейсов. Так что теперь можно настроить любой уровень разбиения-склеивания, и что особенно приятно - это не будет влиять на качество дерева. Хотя я посмотрю, может и такую опцыю тоже введу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну кстати говоря CSG очень сильно помогает увеличить фпс. Практически вдвое ему это удаётся. Но только в паре с мержилкой сурфейсов, разумеется.
Добавлено 17-01-2020 в 15:23:
На неотвиженном сипульчере на дохлой GT640 средний фпс в раёне 50.
Очуметь можно! На халфовском формате о такой оптимизации можно было только мечтать.
Добавлено 17-01-2020 в 15:25:
Для понимания пикантности ситуации - сипульчер, собранный ericw-тулзами, на QSpasm на этой же GT640 примерно и выдавал аналогичные 40-50 фпс.
С визом, разумеется И естественно там геометрия была в статичном VBO.
Добавлено 17-01-2020 в 16:51:
Становится всё интереснее. Пользуясь особенностями формата, я просто пропускал результаты работы CSG и merge на генерацию видимых фейсов, а дерево строил из оригинальных брашей. Но конечно жы мне, как и вам наверняка пришёл в голову простой вопрос, а что если построить оптимизированное дерево из того, что нам нарезал CSG? Построил. Размер дерева сократился на четверть! И это для кутри где дерево и так не великое. Я предполагаю, что карта скомпиленная с такими оптимизациями, даже в ванильной кутри будет рисоваться гораздо быстрее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то дошли руки и до встраиваемых в карту моделей.
Здесь я хочу уделить особое внимание их колоизации. В параное, как вы помните, я просто генерил микробраш из каждого треугольника в целом это работало. Примерно той же чертовщиной занимается и q3map2. Но это дополнительная нагрузка на код коллизии. Я планирую после генерации этих брашей объединять их вместе, до тех пор, пока они остаются конвексными. Так же вероятно пропущу через симплифкатор геометрии, но это попозже.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Если сделать уровень замкнутым мешом, как будешь поступать с вогнутыми участками, у которых с той стороны космос? Пол и потолок например.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нормалями плейнов наружу.
nemyax
Конвексный AABB это звучит так же впечатляюще, как "плоский треугольник".
Добавлено 19-01-2020 в 12:29:
__________________
XaeroX
Ну я имел в виду конвексный пааллелепипедский меш по ААББ, вы же пони.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | float f = 0.0f, f2 = 0.02f; |
2 |
3 | for( i = 0; i < 1000000; i++ ) |
4 | f += f2; |
5 | Msg( "float: %f\n", f ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize посмотреть что он напишет.
Добавлено 19-01-2020 в 22:43:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В калькуляторх fixedpoint юзается же.
__________________
http://www.moddb.com/mods/monorail-quest
Government-Man я не совместим с хаммероподобным редактором.
Да и в любом случае объем переделок сопоставим с написанием с нуля.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Надоел кварк?
Кварк не поймёт новую систему материалов, да и модельки по типу халфовских он рисовать никада не умел
Добавлено 20-01-2020 в 15:09:
Но в целом да, вот интерфейс у кварка идеальный, покрайней мере для меня. Компас опять жы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне интересно, кто из здешних сможет кварк юзать. Те кто юзал, всегда обычно плевались после этого, и забывали этого франкинштейна как страшный сон. По мне, решение крайне мягко говоря неудачное.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro в нём здорово скриптовать и скетчить энтити, ну и ещё - по идее - какие-нибудь туннели делать по рисунку.
В сорцах радианта на джитхабе есть папка regression_tests, я давно на нее обратил внимание. А в той папке - разные неудобные штуки. Ну типа копланарных планесов и прочего. И вот значит я все эти карты прогнал под своим компилятором чтобы проверить на наличие ошибок. Ошибки действительно нашлись, но совершенно не те, о которых я думал.
Первая бага приводила к бесконечному циклу с выбором аксиальной секущей на границе блока 1024х1024, ну помните я вам еще показывал, что построялка дерева делит bbox ноды, только если он аксисальный, так еще и напрямую сравнивает флоат с 1.0. Добавил там эпсилон маленький, ушла проблема. Вторая проблема как ни странно была связана с тем, что тестовая карта была расположена за пределами максимально допустимых границ карты, у меня там было +\-32768, а в ку3 +\-65536, из-за чего ни один браш не создался и кое-где начались вылеты - просто не было проверок на NULL.
Во всём остальном - идеально. Никаких битых полигонов, мерцающих точек и прочей гадости. Да потому что изначально надо было делать bsp на даблах, а не выделываться. Я вам больше скажу, там есть какая-то адская конструкция с плоскостями тоньше 1\8 юнита, так вот после компиляции эти стороны даже в экранный пиксель толком не помещаются - настолько они тонкие. Но никуда не пропадают.
Добавлено 21-01-2020 в 15:14:
Тестирую эти мета-сурфейсы из q3map2. Помоему хрень полнейшая.
Я-то думал она там будет стрипифицировать и триангулировать, хрен бы там. Там как-то так интересно получается, что на каждом этапе по чуть-чуть. Тут PicoModel убрал дубликаты, тут мета-сурфейсы что-то склеили, наконец оригинальный стрипификатор нагенерил индексы.
И что характерно - основная задача этих мета-сурфейсов, вовсе не то что я думал. В ку3 же размер буффера - тысяча вертексов. И вот оно режет сложные сурфейсы на более простые, размером в тысячу вертексов.
Ну капец. У меня-то нет никаких-таких ограничений. Это чисто для совместимости с кутри.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff
А как правильно, так что бы всё это плавно с горами состыковать и несколько уровней земли сделать?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, за дерево проекта редактору сразу плюс много в карму.
32х32 килоюнита это только прудик сделать
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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 напрудил?
Ничоси прудик. Там серьёзный подпрудный уровень поместится.
А какова между тем площадь Мытищ?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Думаю выложить вам тестовый билд, ну в первую очередь, чтобы вы смогли прицениться к новой системе материалов и сказать, насколько это удобно.
Интересно кому-нибудь?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Да, нужно, я бы потихоньку попробовал портировать свою карту и заодно наживую бы твои коптеляторы потестил.
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша
С моделек уже компилируешь полноценные уровни?
nemyax как несложно эти уровни компилировать с моделек, столь же сложно отобразить их в джеке, от коего нет сорцев. Хотя, он жы .ase понимает. Есть некоторая надежда.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax
А есть способ эти .ace из блендера по человечески экспортить?
__________________
http://www.moddb.com/mods/monorail-quest
Мне, товарищи, самое главное, чтобы новая система материалов была интуитивно понятной. В конце-концов она предполагает, что язык материалов каждый формирует сам для себя, как ему удобно.
Добавлено 22-01-2020 в 19:04:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пишу потихоньку мануал по новой системе материалов. Как закончу - выложу вам тестовый билд.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я таки дописал предварительную документацию по системе материалов, получилось 67 килобайт чистого текста. Надеюсь Thambs её сконвертит в pdf для удобочитаемости. И можно выкладывать тестовый билд.
Но есть обоснованные сомнения, что у народа будет свободное время и желание тестировать всё это дело.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша По объёму сравнимо с документацией на Кварк?
Я никогда не читал документацию на Кварк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Из всех свойств документации её объём имеет наименьшее значение.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro чекай
Ну што, встал перед очередным выбором. Отказаться от лайтмап совсем или оставить их опционально. Ваши мысли по поводу?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша зависит от того, не пострадают ли производительность и качество освещения. Какие будут в таком случае системные требования, чтобы бодро бегало в 100+ фпс в FullHD, с уровнем детализации как в П2, например? Про качество освещения: к сожалению, полную динамику в п2 (а я думаю, что именно к этому ты клонишь, собираясь отказаться от лайтмап) я видел только на скринах, т.к. к моменту её релиза моя производительная видюха приказала долго жить. На офисной затычке GT 220 это дело вообще работает неправильно с чёрными пятнами на полэкрана и выдаёт 3-5 фпс. Так вот, если минимальные требования будут на уровне GF 400-500, ИМХО, это норм.
Ну у меня GTX650. Подо что-то такое и буду ориентироваться, как под середину.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша напомни, плиз, какой квар в п2 включает полную динамику? И на какой версии игры она уже есть? Я забыл уже. Наверное, придётся качать версию 1.5. Ну или какая там доступна последняя.
Ku2zoff gl_deffered. А вообще не оффтопь. Создай тему в ветке паранои и там спрашивай.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Всё же с лайтмапами ИМХО индор интересней выглядит(непрямой свет и т.д.). Фулл динамик конечно тоже норм, но тогда для полумрака в помещениях хотя бы SSAO понадобится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Ну што, встал перед очередным выбором. Отказаться от лайтмап совсем или оставить их опционально. Ваши мысли по поводу?
Чет гибридное придётся мутить. Для радиосити хотябы.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша Поэтому да, с технической точки зрения динамика наверное удобней. Но тогда нужны шейдеры постобработки. Я не знаю как сделано в третьем ведьмаке - но освещение там очень приятное и почти везде динамика.
да я думаю в наше время уже вполне реально намутить фуллдинамик с подобием радиосити, чтобы пользователь уже не разобрал, где его обманули.
А смешанный режим всегда будет хуже, потому что в какой-то момент станет даже тормознее реалтайма, я уже говорил об этом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Здесь есть еще вот какое соображение. При полностью динамическом освещении, картинка будет заведомо освещена единым образом, независимо от типов объектов, что положительно скажется на её восприятии, даже если где-то индирект будет неслишком убедительный или вообще фейковый. Строго говоря, его ведь даже рад считает упрощённо.
Вот эти патчи, на которые разбивается поверхность, ну они в оригинале 64х64, в параное 128х128, это значит что индирект люксели имеют имено такой размер. При таком сверхнизком разрешении можно смело забыть про вторичные тени, например. И очень много вопросов как это увязать с моделями, где множество мелких треугольников. Я лично так и не понял, как этот вопрос грамотно разрешить. Так что уж оставим лайтмапы за бортом истории, есть параноя, я там довольно многое сделал в этом направлении.
Теперь займемся полностью динамическим освещением, посмотрим что тут можно оптимизировать.
Добавлено 13-02-2020 в 13:33:
В качестве индиректа, я в первую очередь попробую LPV, он должен неплохо сочетаться с BSP-уровнями. Его ведь делали фактически для самых обычных моделей с избыточными поверхностями, а тут у меня есть возможность определить, если какие-то ячейки сетки попали в солидную геометрию, например. Это поможет бороться с лайтликами.
Добавлено 13-02-2020 в 13:35:
Но еще до того как заняться индиректом мне предстоит финализировать новые компиляторы, теперь работа над ними значительно упрощается, т.к. их не придется готовить к лайтмапам. А потом надо сделать динамическое прямое освещение с хорошей производительностью. И тогда уже можно будет заняться индиректом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как быть с той рейтрейсовой ку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'
__________________
Мой сайт
Xash3D Modding Discord
У LPV, собственно главная проблема, характерная для любого индиректа - лайтблидинг. Ну так это и для лайтмап справедливо. Я думаю CSG разрешит эту проблему. Вообще любые техники непрямого освещения ориентируются на произвольные модели, у которых множество невидимых полигонов. Т.е. фактически на сырьё. И многие проблемы, которые присущи этим техникам, в первую очередь из-за отсутствия постобработки геометрии. Ну посмотрим, насколько это справедливо.
В целом моя идея, сделать такой фуллдинамик, чтобы пользователь не смог его визуально отличить от лайтмапы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Какие планируешь делать светильники? Directional, point, spot, area?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
LPV говно
ncuxonaT твои варианты?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в фуллдинамике игру света и тени можно реализовать - те же лучи солнца, но не как в кризисе(скринспейсовые), а из чистого неба - честные.
Дядя Миша если не лайтмапы, то лайтпробы. Статические или полудинамические как в дивижне.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT
Картинки с КСМ не видны ни у кого. По крайней мере у меня с мобилы не видны.
Ты лайтбейкер-то доделал? Последний раз когда мы его видели он страдал от детских болезней типа каши из лайтмап.
К слову, у спонзы размер 10х20 метров. Ты не пробовал демке большие сцены подсовывать, ту же свою ЧАЭС? Насколько хорошо алгоритм масштабируется?
Добавлено 14-02-2020 в 04:45:
Crystallize каша была на формате карт ксаша с настраиваемой плотностью лайтмапы. Лайтбейкер в процессе перехода на рейтрейсинг
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT обманул я тебя
Есть еще демка в инете: http://sauerbraten.org/lee/lpv.zip
спонзу брать тут https://github.com/jimmiebergmann/Sponza
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша к слову, вот еще о чем спросить хотел - будет ли поддержка многопоточности?
Lev поддержка ради поддержки?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Все современные процы завязаны на многопоточность, и софт без её поддержки будет тормозить из-за низкой частоты на ядро. Карочи твой софт просто будет крайне не эффективно использовать ресурсы процессора. Тоже самое и с x86 архитектурой, с её дебильным ограничением в 4гб оперативки.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro где ты такие шышки берёшь?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нашел еще кое-что интересное по теме
https://www.youtube.com/watch?v=dE6r0-MfyRI
__________________
Мой сайт
Xash3D Modding Discord
Какую проблему в данном случае должна решать поддержка многопоточности?
Ku2zoff
Не, ну можно рассовать в разные потоки I/O и рендеринг. Ну а ещё-то что?
__________________
Дядя Миша нет, при увеличении сложности сцены и вычислении на одном ядре в нынешние времена для сносной работы надо эток 3,6-4 Ггц на ядро. Это касается относительно новых процов. При многопоточности, с учётом того что твой двиг действительно не особо требовательный, можно получить высокий фреймрейт даже на старых низкочастотных четырёхядерниках с нормальной видяхой. Типо E5450 и 750Ti.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Есть условно две школы подхода к оптимизации. Старое поколение привыкло это делать алгоритмически, новое свято уверено, что всё можно распараллелить
Что мешает сочетать и то и другое?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | typedef struct |
2 | { |
3 | byte styles[MAXLIGHTMAPS]; |
4 | int lightofs; // -1 no lightdata |
5 | } dfacelight_t; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax как вариант.
Добавлено 15-02-2020 в 22:04:
Первые опыты. Это коллизия для планарных патчей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати в Tesseract по моим воспоминаниям реалтаймовый GI весьма шустро работал, но правда вот косяк с утечками света был. Сделал коробку без окон абсолютно, свет снаружи падал на крышу, и она изнутри светилась.
P.S. Нашел еще кое-что https://www.youtube.com/watch?v=fAsg_xNzhcQ
С руки на спонзе что-то проржался.
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Частные случаи я успешно превратил в еденичные брашы, а вот с общими конечно ерунда полная. Максимум что тут еще можно сделать без дополнительной аналитики - это найти полностью конвексные модели, но вероятность невелика, разве что на тестовых уровнях.
Надо завозить ConvexDecomposition.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
одного вполне достаточно. Для точечной трассы можно KD-tree потом построить. Ну это для GPU.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Начал разбираться с конвексной декомпозицией. Удивительно, но нашлось примерно ничего. Всё что есть - это реализация в составе буллита. Олдовый алгоритм, который, по чьему-то меткому выражению "надувает брашы" и два модерновых - HACD и VHACD. Второй создаёт облако точек, в силу чего для генерации хуллов из простейшей модельки может потреблять в пике до 300 мегабайт. Пока оставил его. А HACD должен работать. Подключил его к себе. Там запредельно идиотская имплементация векторов, ну да ладно.
Вроде бы скормил всё правильно, он работает и выдаёт мне серию хуллов, в каждом их которых по два треугольника
Ну я всю жизнь полагал, что для конвексного хулла надо ну хотя бы 4 треугольника. Но нет, вот упёрся и всегда выдаёт 2. Я тогда подумал, может эти треугольники надо смержить в единый браш - опять ничего подобного.
Чёрт его знает что за алгоритм такой. Главное в самом буллите его и не юзают.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Через тимплейты. Вообщем как я не маялся, она мне стабильно выдаёт хуллы по 2 треугольника. Но! Стоит чуть-чуть подкрутит Concavity, как всё волшебным образом меняется, оно даже начинает что-то там генерировать.
И из этой кашы даже получаются валидные хуллы временами.
Там кажется в основе алгоритма лежит забавное допущение, что можно генерировать слегка вогнутые мешы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По идее тебе даже простительны пересекающиеся хуллы. Может, это облегчает задачу. Не знаю, допускаются ли такие в физдвижках.
Дядя Миша ну на хлру же делали самотыкообразный столбик одним брашем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
VHACD работает, но во первых долго, а во вторых очень приблизительно.
Причём приблизительность, судя по всему напрямую зависит от кол-ва вокселей. Тепичный представитель нового подхода к программированию - долго-долго маслает, жрёт несколько ядер и выдаёт крайне приблизительный результат. Не нравится мне всё это.
Неаккуратные брашы - это продукт VHACD.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще говоря, дефолтный патч это работа через OpenCL. Но даже при максимальных настройках оно ведёт себя странновато.
Я бы не стал заострять на этом внимание, но по сути это вообще единственное, что я смог найти. Прикладываю демку, сами попробуйте.
Столик, кстати из буллита.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот коллизия 12 минут считалась. Ну это несеръезно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Обычную бсп-шинковку меша по фейсам можно приспособить для декомпозиции? Или это и есть олдовый алгоритм?
nemyax да я уже думал об этом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Прогнал конкавные мешы через BSP-дерево. Это далеко не такое простое занятие, как может показаться. Дерево, оно же не различает где пустота, а где солид, поэтому мы на выходе очевидно имеем нарубленное конвексное пространство. И из этой кашы нам надо вычленить наш исходный меш.
Простая фильтрация точек в дерево не спасёт - точности не хватает.
Моё решение - задвинуть исходные точки полигонов внутрь, примерно на ON_EPSILON * 2, тогда в большинстве случаев референсные лифы определяется правильно. Фейл обычно наступает в случае заострённых поверхностей, ну например на приложенной карте к грешному языку прилипло два лишних браша. Для наконечников тоже есть эта проблема, но поскольку наконечники являются wrapped convex меш, то для них вызывается другой алгоритм, без декомпозиции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax кутришное дерево не сохраняет фейсы, да и толку мне с тех фейсов? Мне же конвексные брашы нужны, а не фейсы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Есть понимание, как надо моделить, чтобы получалась хорошая разбрашовка?
nemyax это только для коллизии и по желанию дизайнера.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Утомил меня этот .ase в край. Более идиотского текстового формата я просто не видел. Там получается занятная тенденция, поскольку текстовый формат не является строгим, то каждый извращается как может.
На этом фоне .smd выглядит просто образцом стандартизации, хотя он тоже текстовый. Вот как раз потому что никакие вольности там недопустимы, даже пробелы и отступы должны совпадать. Так что финальная версия компилятора будет грузить именно .smd. А для асешек я конвертор напишу, ну оно не особо сильно нужно, скорее для обратной совместимости и тестирования.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Smd объединяет вершины с одинаковыми координатами в одну вершину, это не круто.
ncuxonaT
Сам по себе smd ничего токова не делает. Хочешь раздельные вершины — записывай туда раздельные индексы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT
На развесовку смотри. Совпадает — клеишь.
Дядя Миша информация об индивидуальных вершинах теряется при записи в smd. Бывает такое, что вершин одинаковые координаты, но они при этом принадлежат разным треугольникам. После экспорта в smd этого уже не восстановить, вершины сольются в одну, у треугольников появится общее ребро. TBN будет строиться криво, привет швы из дума 3.
Добавлено 25-02-2020 в 19:53:
nemyax из того, что развесовка совпадает, не следует, что это вершина одна. На неё можно смотреть, если типа целый объект предполагается разделять, и фрагменты привязаны к разным костям. Но в случае моделей с симметричной разверткой типа дум3 это не сработает.
1 | triangles |
2 | textures/moteof/walltrim2 |
3 | 0 -88.000000 112.000000 0.000000 0.000000 0.000000 -1.000000 6.745331 9.926242 |
4 | 0 -60.000000 84.000000 0.000000 0.000000 0.000000 -1.000000 6.745331 9.484300 |
5 | 0 -92.000000 104.000000 0.000000 0.000000 0.000000 -1.000000 6.997871 9.894674 |
6 | textures/moteof/walltrim2 |
7 | 0 -60.000000 84.000000 0.000000 0.000000 0.000000 -1.000000 6.745331 9.484300 |
8 | 0 -68.000000 80.000000 0.000000 0.000000 0.000000 -1.000000 6.997871 9.515867 |
9 | 0 -92.000000 104.000000 0.000000 0.000000 0.000000 -1.000000 6.997871 9.894674 |
1 | <путь к текстуре> |
2 | <номер кости> <x> <y> <z> <nx> <ny> <nz> <s> <t> |
3 | <номер кости> <x> <y> <z> <nx> <ny> <nz> <s> <t> |
4 | <номер кости> <x> <y> <z> <nx> <ny> <nz> <s> <t> |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша строки 4 и 7 - это одна вершина? Строки 5 и 9 - это одна вершина?
ncuxonaT ты как-то странно используешь слово "одна". Если все атрибуты совпадают, её можно расшарить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax тангент-вектор (красный на иллюстрации) должен лежать в касательной плоскости, то есть быть перпендикулярным нормали. Векторов в плоскости много, поэтому для стандартизации люди договорились считать тангент-вектор направленным в одну сторону с осью U на развертке. По одной вершине непонятно, куда направлена U, нужны соседние, поэтому тангент-вектора сначала считаются для треугольников, а потом уже для вершин берётся среднее значение от соприкасающихся треугольников.
Представь, что на третьей картинке используется развертка из двух зеркальных частей. То есть на левой половине вместо D7 D8 D1 будут отзеркаленные D4 D3 D2. Для правой половины тангент-вектор будет направлен вправо, для левой - влево. А в сумме выйдет ноль.
Дядя Миша а можно не расшарить. В SMD нет информации, какие вершины нужно шарить, а какие нет.
ncuxonaT
Ну так данные нормалей предоставляют тебе всю потребную информацию, чтобы находить общие рёбра и чтобы векторы не гасились. А ты как будто топишь за то, чтобы их наоборот можно было гасить в произвольных местах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax я не понимаю, что ты говоришь. Нормали кроме касательной плоскости ничего не дают.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT я вот еще думаю, если получившийся TBN прогнать через BFN-карту и сохранить их как char[3]. И по хорошему, когда снимаешь нормали с меша, их тоже перед записью в tga надо прогонять через BFN.
Добавлено 27-02-2020 в 10:46:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтожы, работа над компиляторами потихоньку движется к завершению.
Я правда не исключаю варианта, что мне придется всё же опять вернуться к лайтмапам (зависит от того, насколько хорошим будет деномическое освещение), поэтому сам формат пока оставлю кутришным, не буду его переделывать.
Осталось добавить статические декали и разобраться с генерацией клип-брашей для некоторых случаев.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так же начерно реализовал обещанную концепцию скриптовых компилерных энтить, вот пример для общеизвестного func_group
1 | "func_group" |
2 | { |
3 | movePrimitives( "classname", "worldspawn" ); |
4 | removeEntity(); |
5 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша что ты планируешь показать народу в качестве демки на новом движке? Идеи есть? Мб Monorail Quest, если Thambs согласится его портировать? Или p2? Всё это звучит и выглядит здорово, кабы не было похоже на очередной Generic Engine с кучей фич, продемонстрированных на нескольких перекомпиленных картах из других игр. С Xash3D такой ситуации не возникло, потому что ты завёл там совместимость с голдсорсом, и база того, во что можно погамать, получилась просто огромной.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добавил важную штуку - детальные сепараторы, которые не ликуют.
В ку2 такие были. Это детайлы которые остаются полноценной частью уровня, но при этом не участвуют в создании порталов для виза.
Естественно классические детайлы тоже никуда не делись, но теперь благодаря новой системе описания компиляторных энтить можно завести и такие и такие.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я еще вот что планирую сделать - подгрузку smd моделей для энтить.
Вот например у нас func_door который делают брашами, ну в крайнем случае патчами. А можно просто указать .smd модель ему и будет сразу дверь моделькой и с коллизией. И вагончик халфовский можно будет точно так же делать, да что угодно. Чтобы не заниматься дурной работой, когда дверь делается из клипбрашей и к ней аттачится визуальная часть.
А тут просто загрузил модельку, клипбрашы сами сгенерились.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А смд будет налиту компилиться в мдл или сразу как смд использоваться?
smd будет вставляться в карту
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил проверить оригинальный код текстурирования террайна (на его базе когда-то выросли параноевские ландшафты, но в параное попиксельные слои, а тут повертексные). Ну вообщем грасс_тест раскрасил, сижу жду.
Уже минут пять наверное. В стоке какой-то дико неоптимальный код.
В q3map2 алгоритм получше, но загрузчик текстуры альфа-мапы остался какой-то кастомный, в результате он почти никогда не может найти эту грёбаную текстуру. Поэтому и кутримапные ландшафты тоже никто и никогда не юзал. Юзеры они ведь как - если не сработало с первого раза забывают навсегда.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В эдж оф форевер и мирапиде магикан же оно было, там ещё в исходнике он вертексты специальными брашами помечал?
__________________
http://www.moddb.com/mods/monorail-quest
Досчитало. Семь минут бесполезной работы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вид сверху
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дэнди какое-то
Я помню вы всё собирались написать специальный редактор для этих ландшафтов, дошли руки у кого-нибудь?
Хех, по скрину можно все пиксели сосчитать. Я так понимаю там текстурка 64х64? Выглядит уродливо, надо какую нить сглаживалку сделать, чтобы убрать пиксельность.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
__________________
http://www.moddb.com/mods/monorail-quest
Переделал текстурирование, вроде стало повеселее
Добавлено 03-03-2020 в 15:14:
Ну и да, вместо семи минут теперь компилится 25 секунд.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Заменил один слой для наглядности. Впрочем что у этих ландшафтов, что у параноевских одна и та же проблема - юзеры не хотят редактировать ч\б карту вслепую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дело не в карте, а то что такой вид тераинов обычное баловство, не более. Ничего адекватного на них не сделать, вот хотябы даже ограничить горами карту как нибудь, чтобы она не обрывалась в небо, или каньон с обрывами. И при этом смотрелось вполне достойно. В лучшем случае можно сделать пару островков и натыкать туда моделей. Первый скрин мне понравился, видимо тут ещё конечная картина зависит от того какие текстуры подберешь.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT в ку3 все точки брашей снапятся к сетке. Если бы дело было в конечной точности, то этот простой трюк бы полностью исправил положение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в ку3 браши не нарезаются? Откуда там вообще тогда тжунки?
ncuxonaT ты точно правильно понимаешь их природу?
Дело не в том, нарезаются браши или нет и не в конечной точности флоата.
В первой кваке, к примеру все вертексы были снапнутые, да и сам софт-рендер работал на целочисленой математике, однако же от т-джунков это не спасало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша не точно. Я считал, что они добавляются на стыках, где вершина одного фейса попадает на ребро другого, чтобы не было щелей. Это неверно?
ncuxonaT добавляются они именно туда, но совсем не потому что нехватает точности флоата.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша почему же?
Хороший вопрос. Это как-то связано с принципами растеризации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну так я про то и говорил. Из-за конечной точности флоатов при растеризации получается так, что вершина не попадает на ребро, вылазит микрощель
ncuxonaT а если попадает, а щель всё равно есть?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша не должно быть такого. Да и как она может попасть. Были у тебя координаты вершин целые по сетке, на матрицу проекции умножил, вот уже и конечная точность флоатов, вершина с ребра убежала
ncuxonaT смелое допущение. В таком случае любая карта бы пестрела щелями. Но нет - они строго на определённых местах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ты сейчас о каких именно картах говоришь?
Я напомню, на первом плейстейшене вот как раз из-за недостаточной точнсти фиксированной точки полигоны реально дышали. Но щелей - не было. Догадаешься почему?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша потому что не было там тжинков, вершины у треугольников совпадали
Не, потому что оно плаваало всё вместе, синхронно. Точность-то нарушается сразу у всех вертексов. А тут иное.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша вместе плавают вершины. Вершина с ребром вместе не плавают. Было у тебя как слева. Вершины немного поплыли, и ребро убежало. Когда есть тжинк, он эту дырку прикрывает (потому что его вершины плавают вместе с остальными).
ncuxonaT ну ты же видел эти щели. Они не похожи на второй скрин. Они выглядят именно как тонкая линия.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну так не настолько же низкая точность. А на первой плойке так бы и было
Зачем компилятор вообще Т-джинки делает? Рёбра экономит?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ты одноглазый не читатель?
А я пока декали делаю )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
декаль без нормали, сама анализирует соседние сурфейсы и вычисляет оптимальную нормаль для проекции. Но я хз, будет ли такое востребовано.
Полностью ручные декали - это очевидно планарные патчи, которые юзер может "накладывать" как декали с точным контролем всех трансформаций.
А для постеров разумнее использовать классические infodecal как в халфе были. Поставил рядом со стеной, оно и забрызгало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Декаль-решётка на брашах и патчах. Не определюсь какую проекцию лучше оставить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вообщем-то и всё
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А демонические тени таким способом дорого?
Дядя Миша
А полноцветные декали удалось с туманом подружить?
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша
Как ты боришься с этим ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
nemyax там нет какого-то особенного способа. Линейный перебор всех поверхностей.
Добавлено 05-03-2020 в 10:04:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это параллельная проекция. Тебя же не удивляет, что тени солнца растягиваются точно так же?
Я же там еще и написал, что пока не определился с типом проекции.
Ну просто перспективную для декалей использовать как-то нелогично что ли.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем, что я решил с вадами. С одной стороны - полностью отказываться от них нельзя. По крайней мере на время переходного периода.
Во первых, чтобы редактор отображал какие-никакие, а всё же текстуры.
Потом редактор переобучим. Есть и второй момент - это поле "wad" в настройках. Туда обычно попадают имена использованых вадов. Так вот, поскольку большинство карт уже сделано таким образом, что вместо пути к текстурам там идёт только одно имя и нет никакой возможности это как-то автоматически преобразовать и разрулить, то я придумал вот какую штуку.
Сам движок вады конечно грузить не будет (на данный момент еще умеет, но скоро я их вырежу), но в системе материалов останется переменная <wadname>. Как она будет действовать?
При загрузке уровня поле "wad" будет прочитано и имена вадов сохранены в список. Затем, при поиске текстур в материалах, как вы помните можно задавать локации - где бы еще поискать текстуру.
Например - таким образом
addImageLocation( u_ColorMap, "textures/<wadname>/<texname>" ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Другими словами для движка и вад и директория это одно и то же
__________________
igroprom.d3.ru
Имя вада используется в качестве имени директории, да.
Избавиться от вадов не так-то просто, например в них хранятся шрифты. Надо разработать другой формат шрифтов теперь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Работаю над новым форматом шрифтов. Любопытно, что раньше я никогда не добирался до этого момента. Я конечно мог бы просто вытащить из вада старые шрифты, но они калечные, в них мало информации и ограничение на размер текстуры. В новых шрифтах я планирую сохранить больше всякой инфы про буквы, например размеры abc, а не только общую ширину.
А сам шрифт будет хранится в отдельной картинке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А почему для шрифтов просто не прикрутить .ttf?
__________________
Мой сайт
Xash3D Modding Discord
Дядя Миша
Надо всё таки что бы они хоть налету кешировались из вектора при смене разрешения. Сейчас же у всех мониторы весьма широко варьируются, фиксированным растром на всех не обойдёшься.
Добавлено 10-03-2020 в 16:44:
Дядя Миша
Скажи, а p2st умеют читать внешние текстуры из папки? Я вот никак не подготовлю себе новый тулчайн, так что бы можно было с одним и тем же исходником работать и для nt и для xt, без ретекстуринга...
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да не, я разобрался, там в другом дело было. Стек переполнялся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Я уважаю Баррета и всё что он делает, но рендеринг шрифтов - нетривиальная задачка.
Ну вот у него там примерчег:
fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb")); |
stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits! |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так-таки и "c:/windows"? Даже без попытки порезолвить %windir%?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так товарищи, а подскажите мне навскидку, как правильно выбирать point size шрифта в зависимости от разрешения экрана? Я пока придумал, разрешение поделить на 80 и получившееся число и будет нашим point size.
80 - это кол-во буков в консоли.
Добавлено 12-03-2020 в 13:19:
Конечно при разработке нового формата мне бы хотелось, чтобы визуально новые шрифты не слишком отличались от старых. Так например в халфе яркость шрифтов не 255, а 192 и у всех по дефолту есть обводка.
Первые результаты:
Старый шрифт
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
И новый. Джпипег цвета побил
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так сохраняй с минимальной компрессией в фотошопе, вообще хранить шрифты в жпеге крайне странная затея. Лучше уж тогда генерить из .ttf
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
Взял бы шрифт, где легко отличить I, l, 1. Например, Tahoma, Verdana, PT Sans.
Мне казалось, для консоли моноширинные шрифты используют
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да уж, непросто избавиться от вадов. Намертво они въелись.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне тут в голову пришла забавная мысль. Тот формат, который я разработал для шрифтов с таким же успехом можно использовать и для спрайтов и для внешних лайтмап, например, вообще для любых атласов.
Зачем там городить какой-то разный огород? Для всех единый удобный формат и вася-кот.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вообщем-то да, всё в эту схему укладывается и худ-спрайты и трава и партикл-фонты и импосторы. Таким образом в движке получится четыре типа объектов:
1. текстура
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'
Вот такой атлас получился.
Подаем на вход makespr для XashNT халфовский hud.txt. Он его читает, грузит с него все спрайты и объединяет их в атлас. Теперь у нас все элементы худа в одной текстуре. Можно так же просто подать на вход имя спрайта и он превратится в аналогичный атлас с внешним хидером.
Это для миграции с халф-лайфов. Для создания новых спрайтов надо просто наделать кадров и указать их на вход по маске. Ну возможны, конечно еще какие-то режимы работы, в будущем.
Добавлено 14-03-2020 в 19:53:
Между прочим поддерживаются поименованные кадры спрайтов. Этот хидер, который я разработал - это мета-контейнер на самом деле.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то дошли руки опробовать тот упаковщик атласа, котоым так восторгался Психопат. Ну это который строит подобие BSP-дерева из ректанглов. Опробывал, результат в аттаче. Можете сравнить с верхним.
И ярко видна вот эта тенденция оставить правый нижний угол пустым. Если бы это было в 3д, я бы конечно предложил порубать изначальный объем надвое, но это блин картинки, их нельзя так разрубать
Правда справедливости ради стоит отметить, что это единственный фейл упаковщика - на остальных картинках меньшего размера, он довольно неплохо справился. Впрочем единственная его заслуга - картинки лежат приятно глазу. Но не слишком эффективно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша эффективно-эффективно, больше влазит. А размер атласа перед упаковкой ты как выбираешь?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Давай для начала определимся - алгоритм "уголком" без сортировки работать не может, алгоритм Кармака обычно без нее и работает и как-то даже в голову сортировать не приходит. А вот сегодня я отсортировал и очень удивился, насколько стало эффективнее. Ты сортировал исходный массив в обоих случаях?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша сортировал, конечно. Без сортировки это было бы бесполезное сравнение.
Я вон выше привёл пример, как оно работает. А твоих примеров я что-то не вижу.
__________________
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-2020 в 15:08:
То что в bmp - 368х368 пикселей, алгоритм Кармака.
То, что в png - алгоритм "уголком" 476х472
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша уголок, 360х360
ncuxonaT реализация откуда?
Добавлено 15-03-2020 в 16:54:
И как ты сортировал ректанглы, покажи функцию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша отсюда https://blackpawn.com/texts/lightmaps/default.html
Сортировал по большей стороне кусортом
Добавлено 15-03-2020 в 17:08:
https://github.com/juj/RectangleBinPack
вот тут кстати сказано, что этот алгоритм устарел, и некий метод гильотины лучше
1 | static int SortRectangles( const CHudElem *a, const CHudElem *b ) |
2 | { |
3 | return b->w * b->h - a->w * a->h; |
4 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в твоем варианте это выглядело бы как
return max(b->w , b->h) - max(a->w , a->h); |
ncuxonaT благодарю, опробую и его тожы.
Добавлено 15-03-2020 в 19:59:
ncuxonaT не могу я твой код заставить работать правильно. Тот псевдокод содержит массу фактических ошибок, но то ладно.
Вот здесь вся хитрость:
(if we're just right, accept) |
if img fits perfectly in pnode->rect |
return pnode |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша прям равно. Там же дальше идёт разбиение, чтобы если было больше, то стало равно
Да я уже разобрался. Там эти - 1 были лишние. Из-за них ничерта не работало.
Добавлено 15-03-2020 в 20:28:
Ну так, вроде бы верно работает, hud_640 собрался в 360х356, что близко к твоему результату.
Добавлено 15-03-2020 в 20:29:
ага, вот в чём фишка. У тебя функция сортировки менее оптимальная, замени на мою - еще туже будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша сделал это за минуту до того, как ты написал)
впихнулось в 356х356
Добавлено 15-03-2020 в 20:40:
pic
Ну видимо для данного алгоритма предел. Дальше можно гильотину попробовать, но помоему она картинки вращает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша можно еще пихать в более прямоугольные атласы. Например, у меня упаковалось в 512х244, что аж на полтора процента меньше, чем 356х356
Поглядел я эту гильотину - бинарный сплиттер с эвристикой. Ну наверное еще лучше упакует, но уже нет смысла так заморачиваться.
Добавлено 16-03-2020 в 00:44:
Халфовский худ базируется сплошь и рядом на допущениях, что в hud.txt строчки идут таким специальным порядком, разумеется ни в какой документации об этом не было написано. Мало того - если строчки переставить особым образом - клиент вообще вылетит.
Добавлено 16-03-2020 в 00:46:
Например dmg_bio 640 перенести в конец списка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот это вот решение с халфовским hud.txt ооочень геморойное, если вдруг надо что-то куда-то перенести или изменить.
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хех, я помню в некоторых ситуациях можно было скормить спрайтовой энтитии модельку, и оно её корректно отображало. Не ломаешь ли ты функционал?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Движок грузит модельки по сигнатуре, а не по расширению. Другое дело, если энтить начнёт искать в своей модели какую-то инфу, типа анимаций, костей. Но в той же кваке это было приведено к единому интерфейсу, там всегда можно было заменять спрайты на модели и обратно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Работы потихоньку идут, переписываю меню. Как вы помните, над меню в своё время работали все кому ни лень. Там некоторый зоопарк сейчас.
Запилил красивую анимацию для нажатия кнопки. Теперь она не линейно подымается наверх, а по кубической безье-интерполяции и по трём контрольным точкам, как бы прыгает на своё место (ну типо как кутришные прыгалки), и одновременно превращается из надписи кнопки в надпись шапки. Я бы вам с удовольствием заснял видео или гифку, но я в этом абсолютно не соображаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну экранку сделай))
Ну вот такое оно, новое меню. Похоже на старое, но дьявол в деталях.
Шрифты теперь везде с перменной шириной буквы, есть ABC.
Раньше эта строка помещалась только с переносом.
Добавлено 24-03-2020 в 17:21:
А и кстати, этот диалоговый бокс теперь отдельный класс. Больше не надо мучиться, пытаясь его имплементировать в каждое меню и там массово снимать-выставлять флаги деактивации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пока не забыл - посоветуйте нормальный видеоформат. В 15-м году я начал возиться с теорой, и уж хрен бы с ним с невеликим качеством, но меня выбесило отсутствие нормальной навигации и проблемы с синхронизацией звука. С другой стороны, если какой-то модный формат потянет для поддержки либы на 10 мегабайт, то такое тоже не нужно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша из свободного только теора и vp8
vp8 это webM как я понимаю. https://www.webmproject.org/code/ - где тут кодер-декодер? libwebm?
Добавлено 25-03-2020 в 00:23:
Ну и да, он же только для видео. А звук сохранять в тот же огг?
Добавлено 25-03-2020 в 00:26:
Хм, а есть же уже VP9. И что немаловажно - там потдержка альфа-канала и дептчмапы. Наверное его надо юзать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша vp9 намного тяжелее кодируется/декодируется. Для звука огг ворбис или опус.
ncuxonaT ага, как раз читаю про этот опус.
Вообще в чём разница между VP8 и VP9 с тз потребителя?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С тз потребителя на моем компе фуллхд на пару мегабит жмётся vp8 со скоростью 12фпс, а vp9 со скоростью 4фпс.
У vp9 в большинстве случаев качество заметно лучше, но тем не менее иногда он сильно сливает.
В интернетах пишут, что есть быстрый декодер ffvp9, примерно сопоставимый по скорости с ffvp8.
https://yadi.sk/d/tXxr8oxuKYHdBA
Что VP8 что VP9 это внутренний формат чисто для видео. Звук по прежнему идёт отдельно. Значит опять проблема синхронизации при сикинге.
У этих форматов есть нормальная покадровая навигация? Или опять бинарным поиском? Что-то я там не заметил функций для прыжка.
Добавлено 25-03-2020 в 10:06:
А вот на хабре было сравнение: https://habr.com/ru/post/96888/
говорят vp8 адски долго кодирует, по сравнению с x264. Правда это было давно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну я как рассуждаю. Для чего в движке нужно видео в наше время?
1. показать логотип
2. внутри-игровые видео на текстуре
Теора худо-бедно справляется и с первым и со вторым. Плюс её в том, что к ней уже у меня написана имплементация, осталось только починить рассинхрон звука при сикинге, там какой-то бред на 0.3 секунды рассогласование идет. В 15-м году я так и не разобрался с этим. Я бы мог конечно выбрать новый кодек, VP8 или VP9, но сразу встаёт несколько вопросов:
1. чем в него кодировать? Для OGV у меня есть утилитка ffmpeg2theora. А чем собирать в webM со звуком я не имею ни малейшего понятия. То есть без звука наверное тем же ffmpeg, но мне-то со звуком надо. Есть ли какой-то общепринятый стандарт для webM со звуком?
2. Ну вот мы закодировали, какой у него будет контейнер? Ogg? Или нечто иное? Или он сам в себе контейнер? Теора спецом для огга делалась. Т.е. это формат из трёх частей - огг - контейнер, ворбис - звук, теора - видео. Как тут обстоят дела?
3. Долбаная навигация. Мне очень нравится как это сделано в том же ворбисе - раз и встал куда надо. Но то звук, а то видео. Спровидливозти ради на авишках со сжатым аудиоканалом я тоже какой-то рассинхрон ловил, так что это скорее проблема у меня, но как пользователю мне бы вот хотелось иметь вменяемый сикинг уже изкаропки. Неужели я хочу чего-то невозможного?
Кстати говоря в бинке должна быть навигация уже в API, почитай на сайте ихнем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем вот тепичный минус открытого софта - возьми кучу кирпичей и сам из них что-то сконструируй.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По кодекам, что насчёт всяких там Intel YUV, Intel Indeo, Lagarith?
Crystallize калечные они
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чем mp4 не устраивает?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro а он разве свободный?
Добавлено 26-03-2020 в 12:50:
Я несколько удивлён, если честно. MPEG была основана в 1990-м году ЕМНИП.
В плане сжатия аудио и видео за 30 лет были испробованы абсолютно все возможные варианты, ничего более там изобрести просто невозможно, да вообщем-то и не нужно. Так казалось бы - ну сделайте какой-то общеупотребимый стандарт и вася кот. Но нет, там попрежнему зоопарк.
H264, H265, VP8, VP9. Щас еще что-нибудь выдумают. Хотя все эти пляски идут вокруг одного и того же набора алгоритмов. Фурье, дельта, ряд Тейлора и арифметическое кодирование.
Добавлено 26-03-2020 в 12:50:
А ну и Хаффман еще, конечно жы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша тот же Хаффман разве не теоретически самое эффективное кодирование? Мол, принципиально другого и при этом эффективного не сделаешь.
__________________
Xash3D FWGS форк
Ну https://ru.wikipedia.org/wiki/%D0%9...%BD%D0%B8%D0%B5
Добавлено 27-03-2020 в 00:36:
Помните как Бабушкин предлагал взять большое число? )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Будущее меню сейвов. Каждая надпись в таблице - отдельная колонка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот как-то так.
Добавлено 27-03-2020 в 15:59:
Опять джипег цвета побил
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ты же вроде писал пакер джипега который не артефачит?
Crystallize да это форум ещё раз сжимает.
Дядя Миша
А шрифты с альфа-каналом и размером побольше можно будет сгенерить?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Эх, так нормального скриптового меню и не будет. Только захардкоженное.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Для скриптовых меню довольно много будет разных ограничений. Ну к примеру как делать условные кнопки, которые показываются не всегда?
Например кнопку консоли. Значит придётся городить целый язык, зачем это надо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я ж говорю, фреймворк в исходниках будет внутри пользовательского кода.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Для скриптовых меню довольно много будет разных ограничений. Ну к примеру как делать условные кнопки, которые показываются не всегда?
Например кнопку консоли. Значит придётся городить целый язык, зачем это надо.
Не думаю что там что то сложнее материалов или ентитей.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Если кому-нибудь интересно, как я работаю:
итак, вот у нас есть старое меню. Это меню, если кто забыл, взято из Quake 2 Evolved 0.40 и довольно серъезно адаптировано к стилю WON-меню.
Ну как адаптировано - структура его не менялась особо, костылей налепили всем миром, Крейзи Рашшен помогал его писать, Адамикс (царство ему небесное) и Альбатросс. Изначально это был код Кармака, который ребята из TeamBlur расширили и дополнили. И вот такая у нас исходная каша.
Очевидно что для перевода на кресты, надо создать объекты, но процессу в первую очередь мешает необходимость постоянно видеть конечный результат. Поэтому старое меню остается в неизменном виде, а рядом пишется новое. Максимально тупым способом - то что по смыслу можно инкапсулировать - инкапсулируется. А то что не очень - оформляется в виде костыля. Таким образом я уже сделал уже три менюшки - менюху сейвов, менюху выбора скилла и главное меню. Ну и заодно анимацию шапок. И MsgBox конечно жы. На этом этапе наиболее полно раскрываются недостатки выбранного подхода и попутно отмечается что и как надо переделать в будущем. Оно конечно выглядит неплохо, но встают разные вопросы - например как обновлять данные, если они изменились. Как перезагружать меню при входе-выходе. Как изменять его размеры, если поменяется разрешение. Наконец, неплохо бы предусмотреть возможность таскать окошки по экрану. Поэтому новое меню дописано уже не будет. Оно будет лишь использовано как источник для второй итерации. И вот здесь уже будет учтено абсолютно всё, что не было сделано для первой имплементации. Почему так получается? очень просто. Некоторые вещи, особенно если ты их пишешь впервые не создают у тебя в мозгу должного представления, это неизбежный процесс. Читать умные книги и общие советы бесполезно - это твой код и он организован определённым образом. То есть первая итерация восполняет недостающие фрагменты картины, а вторая уже пишется с учётом полного виденья. В плохих случаях итераций может быть более двух. К примеру скриптовая система для рендеринга получилась только с пятой попытки. Собственно здесь и возникает важное отличие - если программист недостаточно опытный или просто ленивый, он видит что реальный код уже не укладывается в придуманную им модель, но продолжит городить свои костыли, потому что переписывать лень.
Это имеет практическое значние в том случае, если у тебя почти всё уложилось кроме пары моментов. И ты точно знаешь что расширять ничего не придется. В противном случае подход должен быть итеративным и ничего страшного в этом нет.
Добавлено 28-03-2020 в 12:52:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, новые виджеты на порядок удобнее старых получились. Такие не грех и в скрипт зопехать
Добавлено 29-03-2020 в 14:36:
Для примера
1 | CMenuMain :: CMenuMain() |
2 | { |
3 | int x = UI_BUTTONS_OFFSET_X; |
4 | int y = CL_IsActive() ? 180 : 230; |
5 |
6 | // add background |
7 | new CBackground( this ); |
8 |
9 | // menu buttons |
10 | if( host->IsConsoleAllowed( )) |
11 | new CAnimButton( this, x, y, ID_CONSOLE, "Console" ); |
12 | y += UI_BUTTONS_OFFSET_Y; // advances y in anyway |
13 |
14 | if( CL_IsActive( )) |
15 | { |
16 | new CAnimButton( this, x, y, ID_RESUME, "Resume Game", IDS_MAIN_RETURN ); |
17 | y += UI_BUTTONS_OFFSET_Y; |
18 | } |
19 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>ID_CONSOLE
>ID_RESUME
Удобно.
__________________
Xash3D FWGS форк
Дядя Миша а за new потом самому подчищать в деструкторе, или автоматом делается при выгрузке либы меню? И потом, так и не пойму, если и так есть конвертор шрифтов из ttf, то почему бы не грузить из деномически прямо из движка? Все шрифты после загрузки кэшировать и потом переюзать, по типу setFont(CFontFactory->getFont("Arial.ttf", 20, FLAG_BOLD));
__________________
-Brain is dead-
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
По вадам, если еще не писал, расскажу как обстоят дела.
Итак, как вы наверное уже поняли - вадов в XashNT больше не будет. Но остаётся открытым вопрос - создана целая куча карт, где текстуры прописаны как имя без пути. Что же с ними делать? Сидеть в блокноте выполнять автозамену на каждую текстуру, меняя её имя на имя с путём?
Это дико неудобно. В движке останется поддержка механизма загрузки таких текстур в виде двух элементов. Первое - это конечно поле "wad" в ворлдспавне. Отсюда движок и другие утилиты смогут узнать список использованных вадов. Точнее говоря, в новых условиях, это уже не имена вадов, а неймспейсы. Эти неймспейсы подгружаются в особую переменную <wadname>. А уж как использовать эту переменную - это полностью дело юзера.
В дефолтном шаблоне загрузки материалов для уровня можно задать вот такую строчку:
addImageLocation( u_ColorMap, "textures/<wadname>/<texname>" ); |
addImageLocation( u_ColorMap, "textures/common/<texname>" ); |
addImageLocation( u_ColorMap, "textures/<mapname>/<texname>" ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Вечно вас куда то в крайности уносит.
Дядя Миша
Ну ты перерисуй хотя бы половину дефолтных виндовых шрифтов в битмапу, чтобы хватило всем. Но на деле это просто халтура, которая сваливается на плечи художников, которых нет. Плюс - огромные проблемы с локализацией, и кастомизацией, где под каждый эффект надо хранить свою картинку, как анимации кнопок в WON меню.
Я понимаю если бы это для пиксельной игры делалось, где графика заточена под олдскульность, пиксельность и тайлы. Тогда да, битмапа решает.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
XaeroX а можешь показать разницу?
XaeroX
А вот кстати интересно, распространяется ли шрифтовая лицензия на растеризованные битмапы? Если я растеризую шрифт из винды или макоси, могу ли я включить его в коммерческий проект?
Government-Man
Насколько я понял, не распространяется на системные шрифты. Насчет остальных - зависит от лицензии конкретного шрифта.
__________________
Government-Man
Вроде распространяется, но это не точно. Как написал Ксерокс, в зависимости от лицензии каждого конкретного шрифта.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
Проблемы с масштабированием это ещё один минус ваших битмап. Если просто всё растягивать, шрифты преавратятся в мыльное говно. Тут либо собирать битмапы налету, либо заранее нагенерировать их под разное разрешение.
Тоже касается всяких кнопочек, которые бы желательно перегнать в SVG. А всякие свечения уже реализовывать программно. Кстати, может и битмаповые шрифты в нём хранить? Как компромисный вариант.
Вроде все эти вещи уже давно реализовал в своём порте наш дорогой друг Альбатрос, но вы по прежнему где то застряли в 2001м.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Есть такое мнение (у автора Overgrowth, например), что нечего возиться с битмапами и атласами, а нужно просто рисовать весь текст фритайпом и забыть про проблемы с масштабированием и прочим
ncuxonaT
Ну вот ты поиграешь в PW и посмотришь как выглядят там растровые шрифты, растеризованные на маке. А потом возьмешь программку vfont из SDK, сделаешь свой, подставишь его в игру и сравнишь.
У меня, увы, под рукой нет картинки для четкого сравнения.
Добавлено 01-04-2020 в 02:21:
__________________
ncuxonaT
Тогда придется вместе с игрой распространять и сами шрифты в векторном формате, а я не уверен, что лицензия на системные шрифты это позволяет.
Я свой выбор уже сделал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а, это мне уже промыли мозги корпоративизмом?
__________________
http://www.moddb.com/mods/monorail-quest
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
ДМ считает что всё что нужно уже давно написал Кармак, а все остальные занимаются изобретением велосипедов. Потому нафиг вообще эти либы?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша бэкпорты в Xash3D будут?
Ku2zoff NT в разработке с 12-го года. До 19-го было очень много бэкпортов, в частности XashXT - суть один большой бэкпорт. Больше не будет.
Добавлено 02-04-2020 в 11:57:
Дело в том, что меня уже очень сильно ограничивает эта обратная совместимость, на фундаментальном уровне. Нет уже никакого смысла заниматься бэкпортами. Народу показываешь какой-нибудь рейтрейсинг в параное, а он спрашивает - а почему там вады?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то выкрутил настройки, чёб джипег не портил цвета.
Это уже виджеты второй итерации. Семпотично?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Этот скроллист уже полностью ведёт себя как виндовый контрол - скроллбар не уезжает куда-то вверх или вниз, когда на него кликаешь мышью, двигается не рывками, а плавно, не отстает, при выборе элемента, список не съезжает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Меню это уже использует механизм шрифтов из NT.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну тады ой. Разве что сорцы откроешь, а ребята из FWGS адаптируют.
Ku2zoff на кой тебе меню в ксаш-моде? Ты же под халфу делаешь.
Добавлено 03-04-2020 в 16:47:
Сегодня столкнулся с забавной вещью. Новое меню открывает LoadGame с заметным лагом. Виджетовое. А старое на условных итемах (это просто названия классов), не логало абсолютно. Сперва я думал - соберу в релизе - перестанет. Собрал, логает. Надо думаю, отпрофилировать. А там жеж таблица собирается из маленьких окошек с текстом и каждое такое окошко грузит шрифт заново. Посмотрел - да, именно так, логают эти окошки. Удивился. Шрифт должен браться из кэша, откуда лаг? А потом понял.
Загрузчик шрифтов использует нечёткую логику. Ему можно указать PointSize, Bold, Italic и он попробует это найти на диске. А если не найдёт - будет искать максимально похожее. Таким образом я не могу просматривать список уже загруженных шрифтов - я сперва должен на диске поискать при любом абсолютно раскладе. И вот каждый вызов FS_Search и даёт тот самый ощутимый лаг. Закэшировал сами списки поиска.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff я наврядли буду заниматься чем-то, что продвигает идею битмапных шрифтов.
__________________
Xash3D FWGS форк
Сделал раскошные слайдеры, прямо как покража на автомате.
Ничуть не хужы виндовых, весь функционал присутствует.
Собсно эти вот скроллисты и его слайдеры - это самый сложный элемент меню, с ним было больше всего возни. Из элментов у меня еще остались чекбоксы, спин-контролы, строка для редактирования и обычные слайдеры-ползунки. Ну это думаю быстро, оно элементарное, из единственного элемента состоит. А скролллист, тут целая куча элементов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Законченный вид сейв-меню
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Будущее Audio-меню. Сделал чек-боксы. С новыми виджетами создание меню стало чертовски быстрым. Для сишного меню, даже если там половина - копипаста, приходилось часа два сидеть и всё проверять. А если там еще и диалог был нужен, так вообще. А теперь это несколько минут.
Основное время отнимает создание новых контролсов. Теперь вот слайдеры надо делать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а вот эти кнопочки Закрыть/Свернуть так и будут висеть данью традицыи? Помню когда меню ковырял их убрал в первую очередь
__________________
-Brain is dead-
На текстуре под них даже место нарисовано. Пусть будут.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот кстати говоря, про концепцию. В основе старого ксаша лежала концепция "работоспособность любой ценой". Т.е. от движка можно было отрывать части, не давать ему ресурсов и он всё равно пытался остаться в рабочем режиме, ругаясь в консоль. Практика показала, что этот подход не слишком удачный. Ну потому что юзер вообще абсолютно не читает, что в консоли написано, ему плевать. Его пока битой по морде не огреешь - он ничерта не заметит. Так что я отошёл от этой концепции. Если чего-то нет - проще остановиться с ошибкой. Ну не везде конечно, но и суррогатами пытаться подменить тоже смысла нет. То есть скажем, если нету текстуры травы - с ошибкой останавливаться глупо, юзер и так увидит что травы нету.
А если не хватает чего-то серъезного, то всё - стоп машина.
Новая концепция - оправдывать интуитивные ожидания юзера. Документацию обычно никто не читает, исследование происходит путём комбинирования. Значит надо по возможности стремиться свести кол-во мёртвых кейсов к нулю. Это тоже непростая задачка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не-не, движок не будет навязывать юзеру стиль работы. Кто хочет - с краешку ковыряет, кто хочет - полноценно работает.
Добавлено 08-04-2020 в 23:02:
Я вот давно заметил, приложение из себя может представлять полную ерунду, но если оно красиво оформлено - к нему на порядок повышается доверие. По этой же причине никто не воспринимает консольные тулзы всеръез. Выверт сознания.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Щас бы игровые 3д движки делать консольными.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
http://www.moddb.com/mods/monorail-quest
thambs у тебя странные представления о красоте )
Добавлено 09-04-2020 в 11:28:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
У q3map2 или у демомпилятора какого-то была классная фича, когда обработку карты можно запустить через контекстное меню Винды, выбрав "Отправить..." и висящую там ссылку на компилятор. Больше я такого нигде не видел.
Crystallize
В Send To можно впердолить любую программу, принимающую путь файла как безымянный аргумент.
Ну вообщем-то да. SendTo - это вообще такая папка в моих документах.
берёшь и добавляешь туда что надо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax Дядя Миша впендюрить можно, но я думаю дело всё-таки в готовности самой программы принять ссылку на карту переданную таким образом? Это как с ксашем, он не запускает карты через виндовое "открыть с помощью...".
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --started-from-file --playlist-enqueue "%1" |
"C:\Games\Xash3D\xash.exe" +map "%1" |
__________________
Мой сайт
Xash3D Modding Discord
Тест возможностей новых виджетов
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша увидел минимальные системные требования халфы, вспомнил, прослезился
__________________
-Brain is dead-
У меня на работе воляется ретро-системник, PIII-733. Так вот посл. версия ксаша на ём бегала шустрее халфы,но не сказать, чтобы прям фонтан.
Страшто представить каково было играть на PI-133, учитывая что на ём даже квейк логал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дык, поставь старую версию хл. Последняя версия хочет 1,6 минимум, а вот релизная версия и на первом пне могла пойти.
__________________
Tiger! Tiger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
Папка мода уже закодирована в пути к карте. Кстати NT умеет так загружаться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Про интерфейсы взаимодействия немного расскажу. В халфе это была основная головная боль, потому что между пользовательской дллкой и движком формировался-набирался некий уникальный интерфейс, и вот что в нём было - то и доступно пользователю. А если тот, кто формировал этот интерфейс о чём-то забывал, то всё, жопа. Или бывало так, что в интерфейс всё-таки добавлялись недостающие функции приходилось мучительно проверять их наличие по версиям, размеру апи и прочей глупости. Это дико неудобно, не говоря уже о том, что для каждой новой библиотеки надо было набивать этот интерфейс заново. Я отказался от этой порочной практики и ввёл таблицу интерфейсов. Таблицы поименованные, в имени дополнительно содержится и номер версии интерфейса. Таким образом для каждой новой пользовательской библиотеки одновременно доступен весь набор функций, достаточно просто её позвать. В обратную сторону это тоже работает, но как правило от пользовательской библиотеки достаточно одной-единственной таблицы экспорта. Но можно сделать и несколько.
То есть, все движковые функции, доступные на клиенте, будут доступны и на сервере и в меню тоже. Ну а если понадобится расширить какой-то интерфейс без потери бинарной совместимости, то от базового достаточно объявить наследный класс, добавить в него недостающие функции и дать ему новое имя в табличке. И всё, совместимость не теряется ни при каких обстоятельствах. Ну а если всё же случится беда, будет виндовая ошибка Pure Virtual Function Call или что-то вроде этого, вместо загадочного вылета по 0x000005, который мог означать вообще всё что угодно.
Добавлено 13-04-2020 в 13:02:
А, вот еще какой любопытный момент. Вот это физическое разделение таблиц экспорта в принципе позволяет сливать несколько пользовательских библиотек в одну, сохраняя разделение кода. Ну скажем клиент и сервер.
Оба в одной дллке, память не пересекается, но иногда, если очень-очень надо, они могут напрямую друг-другу что-то модифицировать, например в сингл-плеере. В халфе, где было именно 2 изолированные дллки такое не прокатит, народ порою шёл на грязные хаки - грузил из hl.dll client.dll, искал там торчащий наружу экспорт и по нему брал какую-то информацию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А в сорсе видел как сделано? Там каждой подсистеме при инициализации передается функция, возвращающая интерфейсы по имени. Таким образом подсистему вообще не волнует, где и как интерфейс реализован - она лишь проверяет его наличие. И еще каждая дллка экспортит такую функцию - она возвращает интерфейсы реализованные в этой дллке.
Забавно, у меня тут недавно возникла аналогичная проблема. Вообще, я стараюсь избегать использования длл - модульность на бинарном уровне как правило бывает не нужна, но тут мне понадобилась отдельная длл.
Поскольку экзешник и длл собираются отдельно, нужно было обеспечить какую-то систему версионирования. Требований к системе у меня было только два:
1. Система должна понимать, что существуют обратно совместимые интерфейсы - если в интерфейс добавилась новая функция, то старый клиент все еще может использовать новый интерфейс также как он использовал старый.
2. Система должна быть удобной для использования во время активной разработки, когда в интерфейс постоянно добавляются новые функции, а старые иногда меняются или удаляются.
Вариантов у меня было два: абстрактные классы (они же "интерфейсы") и структуры с указателями на функции - как в хл.
Соответствие абстрактных классов п.1 для меня так и осталось загадкой. В теории они ему не соответствуют - конпилятор имеет право расположить указатели в vtable так как ему удобно. А вот как обстоит дело на практике я так и не понял. Вроде как MSVC распологает их в порядке объявления и вроде как я даже где-то когда-то видел код который этот факт использовал. Но тут встает другая проблема - клиент как-то должен узнать, что поддерживаются обе версии интерфейса. Сорс (см. пред. ссылку) для этого предлагает экспозить интерфейс два раза. Для сорса это не проблема - движок уже достаточно взрослый и интерфейсы в нем меняются нечасто. Но в развивающемся коде это приведет к тому, что этих версий придется поддерживать целый список, а это противоречит п.2.
В итоге я остановился на структурах с указателями. Порядок работы следующий:
1. Новые функции добавляются в конец структуры - больше ничего делать не нужно.
2. При поломке совместимости версия увеличивается на 1.
Запрашивая интерфейс, клиент передает номер версии и размер своей структуры. Если номер версии отличается, значит интерфейс не совместим - возвращаем false. Далее, если размер интерфейса на клиенте больше, значит у клиента более новая версия - возвращаем false. Если все в порядке - копируем столько байт структуры сколько запросил клиент (у него может быть более старая версия).
Еще в моей реализации клиент вызывает все интерфейсные функции через врапперы, имя которых соответствует именам функций, реализованных в длл. Это позволило реализовать статическую сборку, при которой вместо длл используется либ и никаких интерфейсов вообще не используется - все вызовы осуществляются напрямую.
Статическую сборку я использую для финального билда.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
virtual void LoadGame( char const *pSaveFileName ) = 0; |
virtual void LoadLevel( char const *pMapName, bool background ) = 0; |
virtual void ChangeLevel( char const *pNewLevel, char const *pLandmarkName, bool background ) = 0; |
1 | virtual bool SpawnServer( const char *mapname ) = 0; |
2 | virtual void ExecuteLoadLevel( const char *mapname ) = 0; |
3 | virtual void ExecuteLoadGame( const char *mapname ) = 0; |
4 | virtual void ExecuteChangeLevel( bool loadfromsavedgame, const char *mapname, const char *startspot ) = 0; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Может и не туда пишу, но поиск по форуму не пашет, поэтому спрошу здесь.
Кто редактировал XashMod_v062_JH1.fgd?
Подключил этот фгд, пропало несколько фгд, оказалось зачем-то снесли переменную targetx, а сам этот таргет так и остался в энтитях, плюс по-моему зачем-то триггер автосейва был продублирован (или это в другой версии фгд ксаша было...).
__________________
Tiger! Tiger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
Flash создай тему в ветке ксаш-мода по обсуждению FGD. Потому что постоянно по нему вопросы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так товарищи. По скриншотам вот какие у меня соображения назрели. На данный момент, как вы знаете есть два основных типа скриншотов.
команды scrshot и snapshot. Первая сохраняет скрины в папку мода\scrshots
Вторая - в корень игры. Я поймал себя на мысли, что первой командой за много лет не пользовался вообще никогда, она просто не нужна.
А у второй есть существенный недостаток - поскольку она работает через стандартную систему экзекции буффера, невозможно сделать скриншот в меню, а в консоли приходится вручную вбивать команду. Всё это дико неудобно. Поэтому я решил сделать так: повесить действие команды snapshot на кнопку Print Screen. А для эмуляции привычного функционала - писать его в буффер при зажатом альте. Думаю это будет наилучшим решением.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Зопили скриншоты в jpg/png.
__________________
http://www.moddb.com/mods/monorail-quest
Лаг будет на таком скриншоте. Да и не хочется тащить джипегу только ради сейва скриншотов. Ну посмотрим, может STB возьму.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
>Лаг будет на таком скриншоте.
Перекодировку/запись в отдельный тред?
>STB
Ух какая интересная штука. Спасибо за наводку.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
int st = (s * 32768); |
float s = st * (1.0f/32768.0f); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша это ты из головы написал сейчас. Вот как оно написано, при текстуре 1024х точность будет 1/32 пикселя, тогда как у халффлота точность на большей части была бы 1 пиксель.
Можешь показать весь кусок кода?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша давай-ка повежливее, что за фамильярности. К размеру текстуры я привязываюсь только чтобы как-то измерить ошибку точности. Текстурные координаты в мдл хранятся в знаковых или беззнаковых шортах? Почему ты умножаешь на 32768, если диапазон знакового шорт от -32768 до 32767? В любом случае это вряд ли сильно влияет на сдвиг.
А Кармак в ку2 хранил st вообще в двух вариантах.
Запилил поддержку рескейла шрифтов. Еще вчера я надеялся, что вот эти вот настройки можно было как-то задать при создании шрифта, но раз нет, так нет. Слева картинки, созданные ФиЭктро, справа - шрифт, с подогнанным скейлом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Там не блюр, а свечение вроде как.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
-Brain is dead-
code:
float half short half_err short_err 0,900000 0,899902 0,899991 0,000098 0,000009 0,900100 0,899902 0,900113 0,000198 0,000013 0,900200 0,900391 0,900204 0,000191 0,000004 0,900300 0,900391 0,900296 0,000091 0,000004 0,900400 0,900391 0,900388 0,000009 0,000012 0,900500 0,900391 0,900510 0,000109 0,000010 0,900600 0,900391 0,900601 0,000209 0,000001 0,900700 0,900879 0,900693 0,000179 0,000007 0,900800 0,900879 0,900815 0,000079 0,000015 0,900900 0,900879 0,900906 0,000021 0,000006 0,901000 0,900879 0,900998 0,000121 0,000002 0,901100 0,900879 0,901090 0,000221 0,000010 0,901200 0,901367 0,901212 0,000167 0,000012 0,901300 0,901367 0,901303 0,000067 0,000003 0,901400 0,901367 0,901395 0,000033 0,000005 0,901500 0,901367 0,901486 0,000133 0,000014 0,901600 0,901367 0,901608 0,000233 0,000008 0,901700 0,901855 0,901700 0,000155 0,000000 0,901800 0,901855 0,901791 0,000055 0,000009 0,901900 0,901855 0,901914 0,000045 0,000014 0,902000 0,901855 0,902005 0,000145 0,000005
ncuxonaT
Ты чего злой такой?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro почему злой? http://lurkmore.to/%D0%A8%D1%80%D0%...%B2%D0%BD%D0%BE
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а я говорил не про рендеринг шрифтов, а загрузку ttf динамически в движок вместо стороннего конвертертирования По сути тот же конвертер, только налиту, логично же, что если и так тянуть STB, добавить такую возможность
__________________
-Brain is dead-
Дядя Миша ты шрифт в атлас отрисовываешь виндовыми методами? Там хинтинг отключается?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как это? Рисовать виндовыми средствами шрифты боясь что они иначе будут выглядеть на макоси.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ncuxonaT
На первой ШГ, читать больно!
__________________
http://www.moddb.com/mods/monorail-quest
thambs на второй ШГ, шрифт сам на себя не похож
ncuxonaT
Второй ШГ, но хотя бы читается, а на первой мыло.
__________________
http://www.moddb.com/mods/monorail-quest
thambs ну так старый фритайп, в новом видать лучше
ncuxonaT
Но в игре в любом случае такие мелкие шрифты делать нельзя.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Слева картинка, справа реалтайм. Главное подобрать цвет и степень размытия. Теперь осталось шапки перевести на шрифты.
Добавлено 16-04-2020 в 18:52:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати, нашёл тут забавную либу для ttf, пишут, что скомаиленный код умещается в 3kb https://github.com/mcufont/mcufont
__________________
-Brain is dead-
KiQ
Он ж фритайп требует, или это только для тестов?
Добавлено 16-04-2020 в 22:37:
А тесты у меня заваливает. Видимо, таки в бубунте фритайп патченный на предмет более менее приемлемого рендера шрифтов.
__________________
http://www.moddb.com/mods/monorail-quest
Вроде как там собственный рендерер с антиалиасом.
Но все эти маленькие штуки на коленке не обеспечивают приемлимого качества. Там в аннотации написано - для микроконтроллеров. А куда микроконтроллеры обычно выводят текст? На двухстрочный монохромный ЖК-экранчик. Там многие косяки и артефакты просто неактуальны.
Добавлено 17-04-2020 в 10:17:
Слева pointSize 46, справа 21. Оба варианта апскейлены в какой-то степени (не замерял в какой именно). С точки зрения унификации кода второй вариант предпочтительнее, т.к. он использует тот же самый шрифт, что и для подсветки кнопок, при наведении мыши. Но как видите, из-за большого скейла уже лезут артефакты с соседней буквы.
Добавлено 17-04-2020 в 10:26:
Впрочем нет, это не из-за скейла. Это из-за блура кое-где оффсеты не соблюдены были. Исправил.
Добавлено 17-04-2020 в 11:18:
Шапки
Есть отличия конечно, но на FFP идеального соответствия добиться проблематично. Да наверное и не особенно нужно. Главное что теперь можно писать любую надпись.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша на четвертой картинке шапка выглядит весьма жутко, да и в принципе ( а на второй еще жутче). В том прямоугольнике, куда вмещается надпись нужна альфа-маска с горизонтальным (а точнее цилиндрическим) градиентом. В Фотожопе это легко делается, но и тут можно алгоритм подобрать
Добавлено 18-04-2020 в 08:22:
Через модуль номера строки пикселей вычислить прогрессию и назначить альфу. Я просто сейчас слишком бухой чтобы формулу сходу накидать)
Добавлено 18-04-2020 в 08:36:
Дядя Миша или не добавлять блюр изначально в атлас, а делать его динамически при отрисовке как постэффект
Добавлено 18-04-2020 в 09:07:
Типа того
Добавлено 18-04-2020 в 09:19:
Я к тому, что просто оффсетами это не поправишь. Я с этим столкнулся, когда в своем 2D движке делал освещение шейдерами, когда обрезка делается прямоугольником и захватывает еще соседние области. То есть тут нужна маска или в целом размывать уже после отрисовки шрифта как постэффект
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Было-стало:
Спин-контролы еще не написаны, поэтому на новом меню нет такого элемента.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
У меня всё больше крепнет ощущение, что на крестах можно писать только итеративно. Но итеративность находится в серъезном противоречии с комнадной работой. Отсюда и говнокод. Все эти книжки по эффективному программированию бесполезно читать - после каждой итерации код становится лучше и лучше, с учётом его реального использования. При условии конечно, что до оптимального состояния его будет использовать только один человек. Судя по всему к этой итеративности стремятся и движкописатели, получая негодование коммунити - в новой версии опять всё изломали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Новый вариант нравится больше, наконец избавился от этих уродских ку3шных шрифтов, правда поля с текстом съехали...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Куда съехали?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
С центра, вон текст в поле для ввода и текст в кнопке, есть рамка и текст не по центру.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так я и не хотел, чтобы он был по центру.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот кстати говоря. Это уже считается кернингом или надо их еще ближе двигать?
Хотя это те значения, которые вернул GetCharABCwidths.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Если я правильно понял, что извлекает GetCharABCwidths, то нет, это не кернинг. Для кернинга нужно брать значения кернинговых пар и двигать в соответствии с ними (необязательно ближе). А что это за шрифт?
Sans Serif же.
Добавлено 21-04-2020 в 18:37:
Ну так кернинговые пары, это по идее и есть A\C. для каждой буквы. B - это ширина видимой части.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это не совсем кернинг, это обычные метрики, но их в любом случае необходимо учитывать.
Кернинговые пары, это когда задействовано пара символов. Чтобы их извлечь, нужно уже уметь парсить формат файла шрифта и вытаскиывать из него данные о кернинге и считать расстояние именно между двумя символами. В принципе, это есть уже в 100500 раз упомянутом freetype2, см. документация. В винде само собой тоже есть.
ИМХО, мы не типографисты, поэтому того что сделал Дядя Миша достаточно для GUI, тем более игрового. Тем более Дядя Миша заранее считает метрики и атласы с глифами. Да, можно и скопировать информацию о кернинге и записать его в своём формате шрифтов, но стоит ли оно того? В принципе, с учётом просто метрик символы уже должны быть пропорционально размещены относительно друг друга.
__________________
Xash3D FWGS форк
Нет, A и C - это то что называется side bearings, то есть расстояния от краев (которые могут быть отрицательными)
Кернинговые пары - это пары символов, для которых заданы дополнительные смещения относительно друг друга
Добавлено 21-04-2020 в 19:26:
В microsoft sans serif (если это он) кернинговых пар нету.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а кернинговые пары не для всех возможных пар делают, только для нужных, типа AV, AT. В каком-нибудь Ариале 3400 глифов, но только 900 кернинговых пар.
Да, я понял.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нет, это новая фича, раньшы небыло.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну кстати по длительному размышлению я принял решение всё же оставить лайтмапы. Но - внешние, в таких же атласах, как и шрифты. Мало ли, может быть пригодятся для чего-нибудь. К примеру тени там хранить. Ну вообщем механизм разумнее оставить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
И еще вот какой момент. Я планирую вынести в GameUI системную консоль, чат и механизм обработки кнопок - движку они не нужны, не тот уровень абстракции. К тому же консолька сможет использовать те же виджеты, что и меню. Есть еще планы и игровой худ вынести туда же, но посмотрим.
В самом движке, следовательно останется только логгирование в текстовый файл. Ну и системная консоль, конечно тожы никуда не денется. Думаю это будет оптимальный вариант. Народ всё мечтал замутить окошки как в сорсе, теперь предоставится такая возможность - это всё будет в пользовательской части.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Знаете, мне в голову пришла парадоксальная мысль. В финальной итерации XashNT будет во многом похож на Unity. Не по принципу, но по духу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Что же в таком разе удержит людей от перехода на Юнити?
__________________
__________________
http://www.moddb.com/mods/monorail-quest
XaeroX совместимостью c Windows XP конечно!
И гарантией что там не будет блевотных постфильтров.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
GZDoom форк ZDoom (discontinued) с поддержкой современного железа. Есть ещё ветка LZDoom, рассчитанная на устаревшее железо.
Cybermax я в курсе что такое GZDoom, но не заметил за ним ничего особенного. А что заметил - то описал в ветке по разработке римейка дуума. В частности рейтрейсед GPU-тени на базе BSP-дерева, прям как у меня. Правда там оно почему-то очень сильно тормозит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот этот вот маленький хинт на удивление всю душу вымотал. Ну ладно бы, они на каждом шагу попадались, но он сука единственный на всё меню, и я конечно в этом плане ничего не готовил и не предусматривал.
Добавлено 30-04-2020 в 23:26:
Кстати, решил вот почитать про Unity в википедии, а там пишут, что он дико тормозной из-за сишарпа. Но сишарп он вообще неспешный, это общеизвестно. Зато весь такой безопастный. И вот у меня вопрос, а вы любите сишарп? Пишете public static final void?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша обычный popup же. Си шарп не люблю, как и дотнет в принципе, а яву люблю, еще для мобилок на ней писал, ну даже когда еще тока зарегался здеся
__________________
-Brain is dead-
Дядя Миша
А чем ключ отличается от кнопки?
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Ключ на клавиатуре, кнопка на мыши.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
thambs наверное всё-таки не ключ а клавиша.
Все очень просто: keys на computer keyboard
и mouse buttons на мышке.
Вообщем на данный момент идеология следующая: ядро движка не должно содержать внутри себя никаких константных путей. Вообще. В идеале конечно. На практике что-то обязательно придётся прописать, например gameinfo.txt будет читаться из движка, но это некритично, т.к. его можно бесконечно расширять, прозрачно для самого движка, он хранит его параметры как набор кей-валуев.
Всё что потенциально пользователь захочет поменять - выносится в пользовательские библиотеки и\или скрипты. На данный момент я планирую две пользовательских библиотеки со следующим наполнением:
GameUI.dll - основное меню, внутри-игровой худ, клиентская консоль, чат, менеджер кнопок. Вообщем 2Д-стафф.
progs.dll - интеракция с объектами, эдикты-энтить, механизм приёма и передачи дельта-состояний (прозрачен для движка, он просто отправляет и принимает пакеты), формирование вида от каждой энтити (возможность задать ref_viewpass) актуально, когда мы смотрим от лица той или иной энтити\мониторов\зеркал\камер (ну ладно, зеркала в движке это делают).
Единственное что при таком подходе повисает в воздухе - это usercmd. С одной стороны его бы неплохо было иметь в progs.dll, с другой - это нарушает тиеричность, да и кнопки, я напоминаю - в GameUI.dll. Физически кнопки конечно разделены на игровые состояния и обычные, вообщем там дальше уже по факту будет видно.
По идее этих двух пользовательских библиотек будет достаточно чтобы сделать абсолютно любую игру, хоть однопользовательскую, хоть многопользовательскую, хоть 2д, хоть 3д. Вообщем всё что угодно.
Если какие-то элементы нам не нужны - например сеть, мы просто их не используем. Точно так же и с сейврестором и чейнджлевелом, он может быть абсолютно любым, он находится полностью в пользовательской части. Поверх этого можно прикрутить скрипт-машину, шарп куси, да хоть яву, кому што нравится. Соответственно то, к чему пользователь не будет иметь доступа (закрыто в ядре).
1. сеть (только на уровне доставки и отправки пакетов)
2. системные средства - окошки, системная консоль, ввод\вывод, подключение графических библиотек, прочий бакэнд
3. файловая (на уровне пользователя только основные функции для работы внутри папки игры).
4. система консольных комманд и переменных (можно создавать свои, логику работы этих скриптов менять нельзя).
5. форматы трёхмерные - жестко определены, самостоятельно новых нельзя добавить
6. форматы двухмерные - жестко определены (текстуры)
7. форматы видео, звука - аналогично.
8. звуковой движок - можно отправлять звуки и музыку на воспроизведение, фундаментально вмешаться в его работу нельзя.
9. некоторые отладочные средства, жестко зашитые в самом движке (напримеры атласы текстур, лайтмап, дебаг-экраны)
10. менеджер шрифтов.
11. рендерер, но с оговоркой, что конвейер полностью программируемый и прозрачный, с возможностью создания собственного языка описания материалов, равно как и возможностью выбора типа рендеринга на пользовательском скриптовом уровне - можно будет сочетать динамику и статику в любых комбинациях, делать отложку и форвард по желанию, добавлять любые пост-процессы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Код для предиктинга не собирается в двух вариантах как GoldSrc/Source, а один в progs.datprogs.dll? Это очень здорово. Впрочем, вспоминаю, что ты про это уже писал...
__________________
Xash3D FWGS форк
В предиктинге самое главное что? Инкапсулировать тайм-машину, чтобы можно было откатывать стейты индиффирентно.
Оно не столько сложное, сколько жручее в плане памяти, да.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С меню я управился, можно и приступать к рендереру, но сперва имплементирую лайтмапы, раз обещал. Они могут пригодится для разных вариантов, например тени - лайтмапой, свет деномический или Dual Lightmapping этот про который я рассказывал в своём обзоре, как резкие зубцы теней взяли и чуть-чуть сгладили Ну и лайтмаппер визлайт-матрицу мне построит для фуллдинамики. Вообщем лишним не будет.
Но под кутришный формат считать лайтмапы уже нет смысла, под эти страницы 128х128. Лайтмапы должны быть внешними в нормальных текстурах. Следовательно пришло время разработать и новый формат BSP.
Он не будет фундаментально отличаться от кутришного, но лишь в том аспекте, что кутришный формат почти генеричный, вертексы-индексы, дерево. Надо только выкинуть это идиотское разделение на брашы-патчи-флаеры, оно вообще не нужно. Я лучше туда сохраню варианты STRIP-режима. TRILIST, TRISTRIP вот это всё. А брашы остануться для коллизии.
Как вы помните, я нагенерил колоизационных брашей и для патчей и вообще для всякого. Так что план работ следующий:
1. имплементация нового формата уровней
2. лайтмаппер (лайтбейкер?)
3. новый рендерер с поддержкой динамического освещения
Ну тут сложно сказать - новый, он же кастомный, на скриптах. Надо вынести наружу возможности манипуляции с FBO, MRT и подключением нужных шейдеров в определённых точках. Т.е. возможность скриптования конвейера. Правда этому мешает тот факт, что мне бы неплохо иметь униформные модели с унифицированными VBO-мешами. Так что вероятно будут еще разработаны форматы для моделей, травки-муравки, импосторов, спрайтов (ну это понятно на базе шрифтов).
Вообщем самая такая визуально-наглядная часть работы. Вероятно будут скриншоты.
Добавлено 03-05-2020 в 14:53:
Когда всё вышеперечисленное будет сделано, работы останется относительно немного - сеть и игровые объекты (скриптование?).
Всё остальное уже готово. Но и занять оно может порядочно времени - может до конца года, я не знаю. Очень уж велик объем работы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А почему формат кутри, а скажем не думтри?
В Д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'
Название давно зарезервировано - calcrad.
Вообще с лайтмапами по хорошему давно уже надо разобраться, т.к. оно в первой кваке устроено уже никто не запекает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почитал я тут новость про Уинджин и комментарии пользователей:
https://gamedev.ru/industry/forum/?id=251515
Всё-таки товарищи, какая же пропасть лежит между пониманием и осознанием. Для программиста понять, что какая-то ерунда, которая лично для него вообще не заслуживает даже секунды внимания, для его пользователей может явиться непреодолимым препятствием, ставящим под угрозу выход всего проекта - может не хватить даже всей жизни. На этом уже погорел Крайтек, кстати.
Я сейчас попробую сделать очень громкое и весьма пафосное заявление, которое конечно не соответствует моему положению и уровню, прямо как тогда в 2004-м, ведь мало кто верил, что Xash3D будет действительно написан. Но это всё баловство по сути. Хотя бы потому, что никому никому ничем не обязан. А NT как изначально проект с упором на коммерческий сегмент, это другой расклад абсолютно. И вот знаете, по прочтении той темы, у меня окончательно сформировалось то, что зрело подспудно все эти годы и я наконец-то смог его окончательно сформулировать. Что же самое главное для игрового движка?
1. Несмотря ни на что, любой пользователь работавший со святой троицей назовёт вам массу недостатков любого из них. Т.е. возможность оттягать маленький кусочек рынка по прежнему сохраняется даже в 2020-м году.
2. Самое главное, ну впрочем как и много где - это работа с людьми, отношение. Пусть там чего-то нехватает или недоделато. Важно, понимание оперативной поддержки и личного участия в пользовательских проблемах. Пусть даже физически это и не всегда возможно. И вот за отношение люди готовы простить техническое несовершеноство отдельных подсистем и выдать проекту
3. Кредит доверия. По умолчанию он есть у любой новой вещи, но так же быстро убывает или наоборот растёт. Но в любом случае в момент входа на рынок он не должен быть нулевым, иначе со входа всё и в помойку.
4. Техническое. Даже в 2020-м году, даже при наличии рейтрейсинга, вменяемых алгоритмов реалтайм радиосити, удобных для разработчика так толком и не появилось. Возможно это именна та точка приложения, которая позволит мне приобрести изначальный кредит доверия аудитории. Тем более что мне и самому эта тема весьма интересна.
Ну а теперь, то самое пафосное заявление: если моему будущему проекты и суждено стать коммерчески успешным, то я вам обещаю и торжественно клянусь, никогда не забивать на проблемы реальных пользователей, хотя соблазн порой весьма велик.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дядя Миша а есть ограничение на количество игроков по сети? То что называется массовый мультиплеер, может?
Cybermax я этими вопросами не занимался, но можно иметь несколько сетевых моделей. Там как, если RPG игроков дохрена, но синхронизационные пакеты могут идти несколько раз в минуту. И классическая шутерная модель - игроков 32 штуки, но и пакеты идут 30-100 раз в секунду.
Добавлено 04-05-2020 в 20:16:
Кстати вот еще важный момент - разработчикам весьма важно иметь возможность допилить то, чего изначально не было. Скажем тот же VR подключить. И дело тут вовсе не в открытости\закрытости сорцев.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, по предварительным результатам опроса, да и по общим соображениями, я вижу, что в первую очередь надо направить усилия на внедрение динамической системы окклюзии, т.е. избавится от предрасчётов PVS, которые могут занимать сколько угодно времени. Вероятно в дальнейшем я избавлюсь и от BSP, но пока что это некритично, сборка карты занимает несколько секунд, ну максимум - пару минут на каком-нибудь сепульчере. Но динамический окклюдинг нужен обязательно, виз слишком часто не справляется.
Добавлено 05-05-2020 в 14:09:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А какие методы ты знаешь эффективного отсечения невидимой игроку геометрии в реальном времени? Например вот знаю фрустум, и LODы (хотя это не совсем отсечение, но в каком то смысле), но не более.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro я ж написал - софтварный рендеринг в Z-буффер. Окклюедеры рендерятся на CPU, чтобы не было лага с получением данных.
Рендер этот довольно простой, там же не надо накладывать текстуры, только растеризация небольшого числа прямоугольников, плюс сам буффер малого разрешения. Ну и желательно его векторизовать, но это я по рассказам, не по опыту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне что-то всё таки кажется, что ни XashNT, ни волатила никому не будут интересны собственно как инструмент для разработки игр, по крайней мере в рамках HLFX. Хотя и сам очень надеюсь что так не случится. Но, всё-таки людям проще влиться туда, где уже есть некоторый набор ресурсов, документации/видеоуроков/статей, примеров игр откуда даже что-то можно стянуть к себе в проект.
__________________
Мой сайт
Xash3D Modding Discord
Погудели-пообсуждали и возвращаемся к работе. Итак, как же нам обойтись без виза. Сперва попробуем самый тупой метод - будем считать портал флоу налету. Это может оказаться довольно дорого, но попробуем.
Сохранил порталы в карту, вот так они выглядят. Да вы наверное и без меня знаете.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще как можно видеть - там же заведомо избыточные порталы получаются. Ну такой уж результат авто-порталлизации.
Надо будет их смержить потом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В сорсе бы такие вещи делали детайлами. Кстати инструмент визуализации порталов классная штука.
Не знаю, может глупость сморожу, но что если отсекать ненужное не по геометрии, а по грубой Octree копии модели?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Создал обратные порталы, так наверное более наглядно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Есть еще вот какое соображение. Все Кармаковские компиляторы (и д3 не исключение), генерят скорее избыточное кол-во порталов, чуть ли не для отсечения каждого полигона. То есть порталы на дверных проёмах в этом кол-ве тоже присутствуют в обязательном порядке. Надо просто найти удовлетворяющие нашим требованиям и использовать их. А остальные проигнорировать. Крытерий очевидно один - портал всеми своими рёбрами должен касаться реальной геометрии.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да уж, не так-то просто расставить эти виз-порталы автоматически.
Но я пока еще не теряю надежды.
Добавлено 07-05-2020 в 22:44:
текущая реализация имеет тенденцию ставить авто-порталы в двух случаях:
1. в дверных проёмах (ну собсно, как и нужно)
2. декоративных углублениях, типа всяких ниш (в чём нет никакого смысла).
Отличить нормальный проход от ниши практически невозможно. Увы.
Добавлено 07-05-2020 в 22:52:
Вероятно я просто начал не с того. Надо сперва оценить эффективность отрисовки сгруппированной по материалам карты, разбитой по материалам.
Взять тот же сипульчер. Там примерно 700 тыщ вертексов, 150 тысяч полигонов (треугольников триста-четыреста тысяч) и 252 текстуры (материала). В принципе для любой современной видеокарты это тьху. Это у нас в идеале 252 дипа (по материалам). Там безо всякого виза фпс должен быть приличным. Но это касается только рендеринга, естественно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize когда будешь свой движок писать - именно так и сделай Это штука будет покруче чем LithTech.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну то есть конечно не вглубь портала а наоборот, наружу.
Кстати у порталов есть такое свойство как PYR?
__________________
-Brain is dead-
Ну чтож, поскольку я не знаю что такое PYR, давайте я вам лучше поясню, чем я сейчас занимаюсь (как продолжение к верхнему посту).
Я уже неоднократно говорил, что основная проблема брашей - это их неприспособленность к рендерингу видеокартой. Из-за проекционного наложения текстурных координат их проблематично клеить в шареные треугольники, но даже если бы это и было возможным, наступает другая проблема - как эффективно отсекать видимость? На базе портального октри-рендерера, но это обычно предполагает аксиальное разбиение на кубические сектора, что уже само по себе очень неудобно. Есть еще HOM (он кстати использовался в сталкере) - дизайнер ставит сферы видимости и вкладывает их друг в друга. Тоже не слишком удобный подход. И как правило всё это базируется на необязательности иметь замкнутую геометрию. Но дело в том, что в настоящее время геометрию замкнуть куда легче чем во времена создания первокваки - просто делаем скайбокс и всё.
Но при таком подходе, как вы понимаете уже виз начинает сходить с ума, обрабатывая бессмысленную информацию. При том, что виз весьма удобная штука, в том числе и для AI-монстров, да и для сетевой оптимизации.
Проблема виза заключается в его дикой избыточности для современных подходов. Когда он помогал отсечь несколько лишних полигонов, чтобы их не пришлось рисовать софтварному рендереру, это всегда было хорошо. В ку3, оставив виз практически прежним, детализацию предложили делать встраиваемыми моделями, которые на виз не влияли и время компиляции не увеличивали, но в то же время рисовались за один вызов, если были видны. Это несколько исправило положение, но всё равно по современным меркам (т.е. где-то с 2007-го года), было явно недостаточным. Doom3 со своим подходом время сильно опередил, больше скажу, этот подход практически идеально ложится на все части старой архитектуры, снимая практически все проблемы и не добавляя новых. Ну вот кроме потребности расставлять эти виз порталы, но за это будет еще отдельный разговор. Ксерокс, мне вон рассказал, что в том же унреале их с самого начала надо было расставлять. Этож не окклюдеры, которые поставишь и гадай будет от него толк или не будет. Так вот.
Как шла эволюция виза?
1. первый квейк - визблоки намертво привязаны к лифам. Один визблок = один лиф. В лифе от одного до 256 полигонов (кажется в старых компиляторах был стековый массив с ограничением именно на столько, впрочем могу напутать). Теоретически в одном лифе конечно могла быть и вся карта, но это редкий случай, а на ку1 помоему совсем невозможный.
Соответственно если из позиции игрока нам этот лиф не виден. то не видны и все его полигоны.
2. второй квейк - над лифами появилась надстройка в виде кластеров и арий. Кластеры там были ну не точто бы сильно нужны, скорее как индексация для PVS и PHS, чтобы не хранить по два оффсета на сурфейс.
Но было и другое преимущество - мы получили возможность давать разным лифам один и тот же кластер, делать PVS более толстым по желанию. Что в свою очередь позволяло имплементировать детайл-брашы, которые занимали разные лифы, но у которых был один и тот же кластер. Виз считал видимость именно по кластерам, т.е. детайлы не замедляли скорость рассчёта. В принципе можно было обойтись и без кластеров в формате структур, но тогда бы пришлось сохранять эту информацию куда-то еще (что, собственно и сделал китаец в VHLT). Т.е. с ними код становится более удобным и читаемым, но нарушает бинарную совместимость.
3. третий квейк. Здесь арии получили специальный разделитель - ареапортал браш, а двери не надо было линковать со специальной энтитью или искать этот ареапортал по номеру, как было в ку2. Здесь эту задачу разрешили очень изящным образом - ареапортал-браш на самом деле не занимался выключением видимости, он просто делил одну арию на две. А дверь при вызове LinkEdict, просто искала в прикасающихся лифах их принадлежность разным ариям и соответственно могла их соединять и разъединять. Т.е. потенциал был заложен уже тогда, но использовался лишь для дверей. Основное отсечение всё равно происходило по классическому PVS, но зато в Q3 появилась возможность вставки произвольных моделей на карту, которые не влияли на построение видимости и рисовались за один вызов (если на них был один шейдер). Всё это повторюсь было еще актуальным для intermediate mode, когда выбора качать или не качать вертексы через шину каждый кадр у нас еще не стояло. А в 99-м году такого выбора разумеется не было, VBO появился в емнип в 2002-м году, долгое время устаканивался, из-за чего его боялись юзать вплоть до 2006-го года. Или если быть точным, даже не то чтобы боялись, ну просто смысл VBO в абсолютном отсутствии обновлений. А все необходимые действия надо выполнять в шейдерах. Если же обновлять сам VBO, то производительность даже ниже чем с бегинами (при соответствующих объемах данных). Я об этом в своё время писал и негодовал. Плюс еще и шейдеры, в момент их появления были сильно ограничены в возможностях, модели 1.0 и 1.1 использовать невозможно в принципе, разве что для туторов "как сделать развевающийся флаг на Cg". Собсно реальное использование началось именно с модели 1.2 (поэтому вы можете так часто видеть в GLSL-шейдерах прагму #version 120). Причём в отличие от того же DX, уже с этой версии большинства возможностей хватало для реализации очень и очень многого. А чего нехватало - можно было подключить расширением.
4. Doom3. У Кармака была прямая телепатическая связь с производителями видеокарт, поэтому то, что массово начали использовать с выходом кризисов-сталкеров, он мог внедрять уже в 2003-м году, не боясь, что это не сработает. И вполне естественно затачивал форматы хранения под это дело. К тому же в самом D3 положение усугублялось тем, что отложку на тот момент не потянул ни один компьютер (да и в железе еще ничего такого не было реализовано), т.е. нас ожидал овердрав по отрисовке источников динамического света. В 2003-м году. До 16 лайтов на сурфейс. Еще и с конямитенями. Вообще ужас. При таких вводных, рисовать по треугольничку и всё это прокачивать каждый раз по шине смертоубийство. Собственно, Кармак уже тогда сделал прицел на VBO. Но брашевая геометрия, повторюсь для этого не особенно годилась. И виз по своей природе не очень-то этому способствовал, но сам виз было желательно сохранить, он ведь удобный и надёжный. Но скорее всего не было и желания фундаментально менять принципы, на которых фактически держалось уже не одно поколение движков и которые себя весьма хорошо зарекомендовали, плюс у дизайнеров уже выработались определённые правила работы. Всё это накладывало свой отпечаток. Итак, что же было сделано?
(продолжение следует)
Добавлено 08-05-2020 в 14:55:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не знаю, обращали ли вы внимание, но уже в ку3 дефолтное описание хинта превратилось вот в это
1 | textures/common/hint |
2 | { |
3 | qer_nocarve |
4 | qer_trans 0.30 |
5 | surfaceparm skip |
6 | } |
1 | textures/common/skip |
2 | { |
3 | qer_nocarve |
4 | qer_trans 0.40 |
5 | //surfaceparm nodraw |
6 | //surfaceparm nonsolid |
7 | surfaceparm skip |
8 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax именно.
Crystallize портал это портал, причём тут углы? Портал это окошко такое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну портал же может быть ориентирован? Вообще надо бы мне накидать на досуге портальный рендер, а то что-то я так до конца так и не въехал в их концепцию, а через практику оно приходит...
__________________
-Brain is dead-
Дядя Миша
Скажи, а портал может только в одну сторону просматриваться в целях оптимизации?
__________________
http://www.moddb.com/mods/monorail-quest
thambs думаю через него пропускается луч из взгляда игрока, соответственно как ты собираешься просматривать в обе стороны?
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Нормаль это не ориентация.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отрицательный браш в кварке - это просто браш с приоритетом. Т.е. CSG всегда знает что вычитается из чего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Продолжим. Здесь пожалуй уместно сделать небольшое историческое отступление. Так любопытно получилось, что в первом дууме и в третьем - по одному компиляторы и принципы построения уровня в чём-то схожи. Там - секторы, тут арии. И там и там они могут быть какой угодно формы, неконвексные. Это же свойство активно используется для распространения звуковых волн в игре. Правда на этом сходство как бы и кончается.
В первом дууме секторы - это геометрия с одинаковой высотой пола и потолка. Любой алгоритм ведь строится на допущениях, как только они перестают отвечать нашим требованиям - всё рушится. Естествено что в квейке мы уже не могли разделять пространство на секторы с разной высотой пола, можете себе представить сколько было бы секторов в таком случае. В принципе надо признать, что PVS, он изначально делался именно под уровни первого квейка и именно в контексте этих зловещих колидоров он работал оптимально. Уже в ку2 с этим начались проблемы, в ку3 пришлось довольно многое поменять, а в д3 и вовсе отказаться от такого подхода. Итак, в д3 фактически произошёл возврат к секторам, но на качественно новом уровне. Сектор\ария это выделенный пользователем кусок уровня, который рисуется за один раз. Ничего страшного при этом не происходит - невидимые части отсекаются на видеокарте. С одной стороны такой подход может резко влиять на фпс при смене секторов (вспомним недавние жалобы на Волатилу, что открытие дверей резко роняет фпс), с другой стороны - это целиком и полностью контролируется пользователем, в отличие от тех же хинтбрашей, которые лишь подсказки доброй воли. Т.е. пользователь может поделить уровень на куски таким образом, чтобы каждый новый кусок попавший в видимость не слишком сильно ронял фпс. Опять таки на открытом пространстве не придётся ждать бесполезную работу по обсчёту видимости.
Как же устроены эти арии? В сущности они уже были во втором квейке, да. Но! Всё это время они использовались как надстройка над обычным PVS. Сам виз их игнорировал кстати. Это был просто еще один слой абстракции - такой толстый-претолстый пвс, который мог выключить разом из видимости целую область. По команде от закрытой двери. Но обычный PVS работал классическим образом - всё так же отсекая по одному-два полигончика где-нибудь там. То есть херово работал, если честно. Виз очень сильно завязан на разбиение деревом, а дерево строится не учитывая вообще никакой виз, его больше волнует конвексность пространства. Можно сортировать плоскости по аксиальности, делать эти разрубы каждые 1024 юнита, но факт остается фактом - добавление нового маленького брашика, может полностью перебалансировать вашу систему виз. Но из-за высокой дискретности разбиения пространства это в сущности мало кто замечал. Чтобы добится большей предиктабельности вот как раз и ввели эти хинты. Только они все равно не гарантируют ничего по сути. Фактически они работают как виз порталы с негарантированным результатом. Может станет лучше, а может и не станет. Вообщем на сегодняшний день это действительно несеръезно. Но повторюсь, PVS как концепция дико удобен, от него очень нехочется отказываться.
Чтоже было сделано в D3. Простая и в то же время гениальная вещь. Как я говорил, у нас было три слоя абстракции - сперва видимость считалась по лифам. Потом по кластерам и наконец по ариям. В ку1 были только лифы. В ку2 добавились кластеры для игнорирования детайл-брашей (но при этом детайл-брашы не были детальными - они не текли (т.е. из них можно было делать уровень), они разбивали другие браши) и арии для выключения дверей. В ку3 концепцию еще более углубили - теперь ареапорталы стали такими же брашами и появилась возможность их расставлять для блокирования видимости. Ну или хотя бы просто для группировки объектах в разных ариях. Но не было сделано самого главного - видимые сурфейсы никак не были привязаны к этим самым ариям. Связь была очень условная, особено в ку3 где полигоны могли одновременно принадлежать нескольким лифам, а лифы в свою очередь - разным ариям. То есть не было вот этой чёткости, когда мы могли рисовать одну арию и точно знать, что всё, что к ней относится - больше ни к чему не принадлежит. Что же для этого надо сделать? Ну очевидно покромсать геометрию по кромкам самой арии? А как это сделать, ария это больше виртуальное понятие - номер в ноде. Плюс у нас геометрия и так уже покромсана BSP-деревом.
И вот тут начинается самое любопытное. Во первых, дерево, где ноды принадлежат разным ариям позволяет очень точно раскромсать уровень на арии ПРОИЗВОЛЬНОЙ ФОРМЫ. Причём эта самая форма задается лишь расставленными порталами. Не надо, как в иных движках заключать её в браши-объемы, достаточно лишь ограничить порталами. К тому же FloodAreas отследит, было ли реальное разделение на несколько арий, ну если вы к примеру поставили ареапортал в чистом поле. Но важный момент - геометрия кромсается вся, не только брашы, но и патчи и тримодели. Впрочем это можно запретить (в том же D3 флаг discrete например для автоспрайтов или зеркал). После того как всё покромсано соответствующими нодами - начинается самое любопытное. Геометрия начинает склеиваться обратно в большие батчи по типу материала.
Таким образом, каждая ария у нас представляет некоторый аналог студиомодели с точки зрения отрисовки - удалены лишние треугольники, всё стрипифицировано и сгруппировано по материалам, а поскольку в одной арии возможно не так уж и много материалов, то и соответственно батчей тоже немного. Правда сам механизм определения видимости чуть тяжелее, чем классический кушный. Но это компенсируется лёгкостью отрисовки. Есть и еще один неочевидный плюс такого подхода. Теперь при помощи таких порталов очень легко задавать туманные области. Ограничиваем вход-выход, их может быть сколько угодно. Если это небольшое углубление - ставим портал, вот вам и вода с туманчегом. Ну или просто вода. Сам виз в его классическом представлении тоже остается, но строится он уже на учете пользовательских ареапорталов и арий. А поскольку их смешное кол-во (в тоже д3 в среднем штук 40-50), считается такой виз от силы 5-10 милисекунд. Становится возможным включить его прямо внутри BSP (а в д3 оно вообще при загрузки карты считалось каждый раз, но это глупость конечно).
Вообщем это весьма перспективный и не утративший своей актуальности подход. Он ведь позволяет эффективно рассчитать и течение света сквозь порталы в реалтайме. И решить эту проклятую проблему с солнцем, которую кстати не решили в сталкере и не факт что решили в метро. Вот возьмем сталкеровский НИИ Агпропром. Там есть такой спуск потземлю. В оригинале его сделали отдельным уровне. В LostAlpha сделали частью общей карты, но когда ты спускаешься вниз, то прямо видно как гаснет солнце. Очевидно они не смогли эффективно отделить верх от низа. С системой порталов это вообще не представляет никакой проблемы. На входе в подземелье ставим один портал, на выходе - другой. Между порталами - шахта с лестницей. Дальше солнце просто определяет видимость - оно может осветить условно арию 0 (аутдор), немного арию 1 (шахту с лестницей) ну и собственно всё - до подземелья лучи уже не добивают. К тому же мы можем эффективно оптимизировать и аутдоры тоже, причём в автоматическом режиме - здесь нам на помощь приходит то самое авторазбиение на квадраты в BSP. Лепим эти арии, каждые 1024 юнита. Ну и дальше ограничиваем видимость либо туманом либо классически по фрустуму.
(продолжение следует)
Добавлено 09-05-2020 в 15:34:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Останецца две утилиты для коптиляции?
__________________
http://www.moddb.com/mods/monorail-quest
thambs типа того. Но насчёт лайтмаппера я пока не знаю, он вероятно будет необязательным. Сделать его надо просто для референса, чтобы сравнивать запечённое освещение с реалтаймом.
Добавлено 09-05-2020 в 18:48:
Вообще BSP компилятор будет очень эпичным. Вероятно ни в одном движке больше не будет такого тяжёлого препроцессинга геометрии как у меня.
CSG по брашам, CSG по сурфейсам, разрезание по дереву, разрезание по ариям, склеивание всего обратно с выкидыванием лишних ребёр, глобальный т-джунк. Но при всём при этом, вероятность выпадения полигонов будет минимальной или вовсе отсутствовать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize лайтбейкеру плевать на формат, он может хоть чёрту лайтмапу посчитать. Если конвертировать чёрта в obj.
Давайте всё же в порядке очерёдности. Сейчас надо получить максимальный прирост производительности даже без PVS. У меня прогресс шёл следующим образом:
1. Новый движок с халфовским форматом (3%..5%) просто из-за отсутствия всякого мусора совместимости и видоизменённому игровому циклу.
2. Построение оптимизирующего виз-три для халфовского формата (10%..%400) к производительности.
3. переход на кутришный формат (200%..%600) к производительности.
Теперь вот финальная стадия оптимизации. Ну посмотрим. Старые форматы никуда не делись, будет с чем сравнивать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Опробовал дуумтришные оптимизации-триаунгуляции. Ну что можно сказать?
Навскидку - очень неплохо. На том же сипульчере 180 тысяч полигонов собралось в 2500 сурфейсов. Фпс даже безо всякого виза - порядка 250.
И это при том, что там сейчас переходной период, я вообще себе смутно представляю что там рендерится, а что отсекается, я просто отправил эти батчи как MST_TRIANGLE. С другой стороны нельзя прямо сказать, что этот код показывает чудеса оптимизации. Ну что-то там удаляет конечно, факт.
Но всё равно имхо многовато треугольников остается. Зато здесь т-джунктион с хэшем - быстро работает. Сипульчер компилился 5-минут.
Вообще там код с явными ляпами, к примеру идёт прямое сравнение флоатов. Из-за чего постоянно лезут тучи варнингов. Заменил на эпсилоны - почти все ошибки исчезли. Странно это всё, как они с таким кодом вообще свой дуум собирали. Ну да ладно, смысл есть, а это главное.
Конечно там еще весьма много возни предстоит, как это всё запеределать и увязать с текущим форматом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А нельзя делать прямое сравнение флоатов, если они получены явным образом? Ну то есть не в результате математических операций.
В том-то и дело, что там в коде идёт сравнение с результатом дотпродукта, а не с прямой записью констант. Даже при условии, что мы действуем в 2д пространстве это откровенно стрёмный кейс. Я вообще удивился как оно работало. Потом вспомнил - у меня же компилятор на даблах. Переключил на флоаты - действительно ошибок стало кратно меньше. Ну это не дело.
Там главное даже камент есть, что неплохо бы заюзать хэширование.
Добавлено 10-05-2020 в 22:26:
Полностью заткнул все ошибки и предупреждения. Что для этого потребовалось сделать?
1. переключиться в режим одинарной точности (перекомпилить)
2. поскольку оптимизация происходит в 2D и использует построение ортогонального базиса - надо непременно юзать ту функцию, которую использовали в D3. MakeNormalVectors. Они все "типа правильные", но код потом намертво привязывается к конкретной реализации и глючит с другой.
3. мало этого - в MakeNormalVectors пришлось еще и заюзать табличный InvSqrt. И вот только тогда все ошибки исчезли. Ну что можно сказать? Зашибись! Отличный оптимизатор.
Добавлено 10-05-2020 в 22:31:
В D3 вообще много такой табличной математики для флоатов. Неудивительно что они не боялись их сравнивать напрямую кое-где.
Добавлено 10-05-2020 в 23:36:
На домашнем компе сепульчер сразу стартанул под 650 фпс
напомню что предидущий рекорд был 420. И это еще на толком не отстроенной системе, я чёрт знает что там рисуется сейчас. Виз-то старый.
Добавлено 10-05-2020 в 23:41:
Вон он, весь сепульчер в кадре. ~350 тысяч полигонов. Я ж говорил, что это должно быть быстро.
Добавлено 10-05-2020 в 23:43:
Так это еще индексы по шине качаются.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Тут выяснился один недостаток нового подхода, я думаю вы уже догадались в чём он заключается. В ку3 детайлы не карвились по границам дерева, они просто добавлялись в карту в любом случае. И были видны из какого-то лифа. Здесь же идёт строгое обрезание по секущей плоскости ноды. Иногда (не часто), маппер намеренно располагает детайл ЗА ограничивающим брашем (ну например этот браш невидимый). В ку3 этот детайл бы добавился в уровень в любом случае, а здесь получается, так что невидимая геометрия BSP попросту отрезает его, сама карта при этом, естественно собирается без утечек, но визуально на месте этих патчей-моделей остаются дыры, причём, поскольку мапперы еще и любят их точно совмещать, их отрезание сильно зависит например от режима точности. В одинарном режиме отсекает практически всё, в двойном - ну кое-что.
Т.е. добавление просто считает, что детайл попал в солидную ноду.
Взять вот карту Сока для примера, Focal Point. У него там солидные структуры по бокам лестниц и прямо на них же положены планарные детальные ромбовидные патчи. Патчи там очевидно потому, что брашы такие формы проблематично текстурировать, в радианте не было таких инструментов вроде. И вот оно лежит точно на ноде и отсекается.
Надо подумать как лучше разрешать подобные ситуации.
Добавлено 13-05-2020 в 14:26:
Принял такое решение: если детальный полигон лежит точно на секущей плоскости ноды - делаем его копию и пускаем обе копии дальше вниз по дереву. Одна копия наверняка попадёт в солидный лиф и будет уничтожена, вторая попадёт в валидную арию. Но даже если каким-то чудом в видимый лист попадут обе копии - лишнюю уничтожит оптимизатор.
Но детайлы не должны уничтожаться никоим образом. И уж тем более не должны зависеть от точности эпсилона.
Добавлено 13-05-2020 в 14:36:
1 | if( keepon && !counts[SIDE_FRONT] && !counts[SIDE_BACK] ) |
2 | { |
3 | if( fnormal ) |
4 | { |
5 | // put front face in front node, and back face in back node. |
6 | if( DotProduct( fnormal, normal ) > NORMAL_EPSILON ) // usually near 1.0 or -1.0 |
7 | *front = in; |
8 | else *back = in; |
9 | } |
10 | else |
11 | { |
12 | vec_t sum = 0.0; |
13 | for( i = 0; i < in->numpoints; i++) |
14 | { |
15 | dot = DotProduct( in->p[i], normal ); |
16 | dot -= dist; |
17 | sum += dot; |
18 | } |
19 |
20 | if( sum > NORMAL_EPSILON ) |
21 | *front = in; |
22 | else *back = in; |
23 | } |
24 | return; |
25 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Можешь скрины сделать? По тексту не понятен конкретный брашевый кейс.
__________________
http://www.moddb.com/mods/monorail-quest
Это просто ошибка в логике. ChopWindingInPlace к примеру не уничтожает виндинг, лежащий на плоскости независимо от того, находится ли он чуть-чуть за или чуть-чуть перед ней. Ну просто потому что мы в этом случае вступаем на очень зыбкую почву, когда наши предположения целиком завязаны на точность вещественных. Такой код не будет нормально работать уже.
Добавлено 13-05-2020 в 14:49:
Вот скрины
Там где на первом скриншоте дырка - на самом деле большой нулл-браш от пола и до потолка, типа колонны (вы можете скачать исходник этой карты у Сока на сайте и сами посмотреть). Верхняя и нижная часть идут под углом градусов в 8, поэтому не отсекаются. Средняя часть, видимая на втором скриншоте - никакой не браш, это планарный патч, который тут заюзали. скорее всего чтобы легче было текстурировать. А коллизия обеспечивается вот как раз этим невидимым брашем. Плюс наверное эти патчи еще и в мета-сурфсы превратили, я уже не помню. Ну вот. И получается, что этот невидимый браш создаёт плоскость у ноды. И патч ложится точно на него. И естественно отсекается, как попавший в солид-арию за плоскостью ноды. Чего, естественно быть не должно.
Добавлено 13-05-2020 в 15:00:
ЗЫ. У Кармака в D3 более изящное решение - проверить куда смотрит нормаль секущей и сравнить с текущим виндингом. И уже в зависимости от этого положить спереди или сзади. Здесь в чём плюс - мы уже не завязаны на точность. Смотрим только на знак дотпродукта.
Добавлено 13-05-2020 в 15:13:
Это вот тот самый случай, про который я и говорю - если задача в принципе не решается в одном измерении\подходе, ну значит надо поменять сам подход.
1 | vec_t sum = 0.0; |
2 | for( i = 0; i < in->numpoints; i++) |
3 | { |
4 | dot = DotProduct( in->p[i], normal ); |
5 | dot -= dist; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, ну чтожы. Похоже я нашёл идеальный подход для создания каких угодно уровней. Который не устареет в будущем, у которого виз не будет считать часами, на базе которого можно реализовать те самые миллионы полигонов в кадре без особых тормозов. И при всём при этом - он по прежнему привычен для классического маппинга брашами. Но позволит делать весь уровень моделями или там террайнами.
Так что теперь основная задача: финализация формата уровней.
Потом можно будет заняться освещением.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Слева оптимизированная сетка, справа неоптимизированная.
Я специально выбрал такой ракус, потому что во первых эта оптимизация влияет на вертексные цвета, во вторых в ней по идее есть смысл только при использовании полного иссечения всех треугольников по дереву, а не просто расталкивание их по границам арий. Правда в чём смысл этого полного иссечения, я честно говоря так и не понял. Сначала всё разрежем, потом склеим обратно, кое-где рёбра свапнутся. А самая мякотка в том, что без оптимизации этой - фпс даже немного выше
Может в самом D3 это для теневых объемов как-то использовалось, не знаю.
Впрочем есть еще вариант без полного иссечения по дереву, но с оптимизацией. Надо будет еще его опробовать
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
thambs очевидно они не склеились.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, а сработает ли такой вариант: в коде кастомного рендера XashXT сделать копию бсп дерева конкретно для отрисовки, а потом его оптимизировать тем подходом какой ты использовал, еще когда только начинал работу над рендерером в XashNT? Ведь поскольку код рендерера целиком можно менять, то вроде бы как не обязательно придерживаться именно бинарной совместимости, и можно немножко доугой вариант дерева впихнуть, с которым оптимизации будут работать. Возможно ли такое реализовать, или же все таки есть какие-то фундаментальные различия, которыми нельзя пренебречь?
__________________
Мой сайт
Xash3D Modding Discord
Сработать-то оно сработает, но особой пользы не принесёт. Точнее принесёт её меньше чем могло бы. Потому что это же дерево крайне желательно использовать не только для отрисовки, но и для проверки видимости на сервере. Там дикие тормоза просто из-за целой кучи этих накопленных лифов, оно идёт по хеадноде, дерево большое. Т.е. надо и на сервере тоже такое дерево. Ну можно наверное заморочиться, но я этим заниматься точно не буду. Могу код дать, но вас жы в больничку увезут с воспалением мозга.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Так я открытым текстом говорю - тормоза на сервере, что тут понимать-то?
Ты на рыбалку? Да нет, я на рыбалку.
Добавлено 17-05-2020 в 12:09:
Я уже писал, но повторюсь. Вот возьмем тот же сипульчер. Пять тысяч энтить. Дерево со всеми оптимизациями - примерно 11 тысяч нодов и лифов.
Сервер обрабатывает каждую энтить. Ищет лифы, из которых её видно. В кваке статичный массив для каждой энтити на 16 лифов, в халфе 48. Но из-за детальных нодов, там получается зачастую, что этих самых лифов на каждую энтить приходится от 50 до 400. А как устроен механизм определения видимости, если кол-во лифов превышено? Идёт по хеадноде рекурсия. Для дерева в 11 тысяч нодов. И так - для каждой видимой энтити из этих пяти тысяч. Там можно вообще рендеринг кадра отключить - фпс не подымется выше 150. И это мы не учитываем физику, к примеру, почти всё время сжирает это определение видимости. То что должно помогать в ускорении превратилось в ключевой тормоз - слишком подробное дерево.
Добавлено 17-05-2020 в 12:14:
ЗЫ. Нагнал я вам. 10 тысяч лифов - это для кутри, где детальные ноды заведомо выброшены из дерева. В халфовском\кушном формате, там за 65 тысяч нодов и лифов. Из-за чего кстати её не в состоянии загрузить Darkplaces. Он же "для ускорения" распаковывает виздату.
Ну вот и давайте посчитаем. 65000 х 65000 = 4225000000 поделить на 8, получается 503 мегабайта бесполезно занятой памяти. Но в сипульчере не ровно 65к лифов, там больше. Корочи оно вылетает с Out of memory, причём это не исправить заменой short на int. Там в архитектуре интересное допущение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ужосы какие
__________________
-Brain is dead-
Наконец руки дошли и до портального тумана. В ку3 туман был видимо прикручен в самый последний момент, поэтому технология имела ряд оговорок и была очень неудобна в использовании. Во первый туман надо было задавать строго аксиальным брашем, во вторых у него могла быть только одна видимая сторона. Конечно эту информацию о тумане надо как-то сохранять в VBO, что уже само по себе не фонтан. Ради какого-то тумана занимать столько места в вертексе. Переход на новую технологию даёт более генеричную информацию, по сути мы вообще не храним туман явным образом, только портальный шейдер, если он конечно не был помечен как невидимый. Единственное отличие от кутришного тумана для дизайнера - видимую сторону надо всегда задавать явным образом. Потому что это всё же портал, а не иллюзия объема. На скринах не туман, как может показаться, а дебажная визуализация порталов для тумана (разумеется эту информацию можно будет использовать и для видимости и для AI). Проволка показывает, что плоскость портала разрезала всё - и уровень и модельку на стене. Кутришный туман резал только брашы и немножко патчи, но дизайнеры знали, что патч он мог с лёгкостью превратить в кусок говна, поэтому старались не вкладывать их в туман
Добавлено 18-05-2020 в 23:08:
Ну чтож, имплементация тумана прошла успешно. Вообще на этих порталах можно столько интересных штук придумать. Ну зато код избавился от спецификации этого тумана. Теперь туман реализуется при помощи видимого ареапортала с настройками тумана. Надо еще будет затестить комнатку с множественными выходами.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Область со впуклостями возможно заполнить, или она должна быть конвексной?
__________________
http://www.moddb.com/mods/monorail-quest
Когда доделаю - будет можно. Туман очень классное средство визуализации заполнения областей видимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Очень предварительный тест портального тумана
Волатила так не умеет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Обрезается он как то резко
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
Почему не умеет? Туман как туман. Такой даже в хлфх 0.6 был, я в ретро-скриншотах показывал.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Покажи, пожалуйста, скриншот, как выглядит туман, если несколько входов в этот цилиндр.
__________________
и если сам цилиндр туман
XaeroX ну как доделаю обязательно покажу.
Добавлено 19-05-2020 в 19:58:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
туман должен быть обязательно ограничен чем-то как вода в банке?
Дядя Миша
Что значит, тумана нет? Туман затуманивает то, что внутри или позади. Ему не обязательно иметь стенки, по идее.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Правильно делаешь, гони такие мысли. Я прекрасно понимаю, как "работает" туман. Поэтому и пытаюсь тебя наставить на правильный путь, вместо вот этого отрицалова "коронавирус не опасен, земля плоская, тумана нет".
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В данном случае я говорил не о ку3шном тумане, который рисуется на объектах и соответственно, не может затуманить то, что не в объёме, а о реальном тумане, как в природе. IRL туман это капли жидкости, которые рассеивают свет, и они могут занимать какой-то объём. Даже цилиндр - правда, не очень долго, т.к. туман может растекаться, как жидкость, что нетрудно наблюдать в природе, например, в горах по утрам.
Такой туман можно сделать в скринспейсе, в волатиле тикет давно висит, но я не добрался, т.к. пока для нужд PW хватает обычного ку3шного.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну это уже не будет туман в форме цилиндра, это будет затуманенный браш, а такой туман на поверхности всегда выглядит как говно и непохоже на туман. Ладно проехали.
Собсно скриншоты, для понимания сути портального рендеринга:
Area 0:
Area 1:
Final Result
Можно так же и физику привязать к сектору, но пока такая задача не стоит.
Добавлено 19-05-2020 в 23:32:
На входе в домик стоит areaportal браш. Ну я думаю, это и так понятно.
Народ мне долгие годы доказывал что он хочет и может расставлять разные там хинты для оптимизации, так что я полагаю это не сильная заморочка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А можно как в дуумоподобных движках умещать большие пространства внутри маленьких?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ну вот это и достигается отключением тех или иных порталов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А как быть с объектами внутри?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
Всё это уже было в движке 1998 года (Unreal), порталы эти, комнаты в комнате. Даже у Борескова (кажется) была книжка "как написать портальный рендерер". Ты бы лучше что-нибудь эдакое показал, вот та же комната с туманом, где есть несколько точек входа в него, и всё это правильно работает.
__________________
Сделали бы trigger_fog брашевый, тем более триггеры не влияют на утечку при компиле - просто поместить нужную комнату в браш от двери до двери - вот и туман
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот трёхдырковый туман. Единственный момент - я поленился проверить чему равна его плоскость, какому из трёх порталов, по хорошему у такого тумана планес вообще надо занулять, но они типа в одну сторону смотрят, так что фиг с ними уже, потом занулю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А можно таким образом половину коробки сделать с туманом, а вторую нет?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
-Brain is dead-
Чому туман в "а" плотнее, чем в "b"?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А как насчёт гуя? С инвентарём и записками. И кастомными эхфектами на весь экран, чб, инверсия, *любая подгруженная картинка\анимация*.
__________________
Tiger! Tiger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
Дядя Миша
Как настройки арей задаются?
__________________
http://www.moddb.com/mods/monorail-quest
thambs какие именно настройки? У арий нет никаких настроек, у них только номер. Ария это больше виртуальное понятие, она не существует, так же, как и туман.
Добавлено 20-05-2020 в 22:18:
Я вот думаю, может их в сектора переимновать. Будет ассоциация, не с хэви металлом, а с панк-роком.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Да, сектора термин знакомый и рассовый.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
-Brain is dead-
Склеил порталы обратно, туманчег стал более корректным. Но повторюсь, там жы нет какого-то специального механизма, который бы выбирал при загрузке ближайшую плоскость тумана для вертекса. Сделать несложно, но как-нибудь потом.
Добавлено 20-05-2020 в 23:41:
Сейчас он фактически приклеился к средней плоскости. А надо каждому вертексу выбрать, какая плоскость для него ближе. Впрочем кутришный туман - повертексный, табличный, его надо сделать попиксельным, но повторюсь, всё это дело десятое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax
Ну не, не обязательно, достаточно многозначный термин. Вот например есть Sector C, Sector D, Sector B, а так же Sector A, Sector E и Sector F.
__________________
http://www.moddb.com/mods/monorail-quest
И правый сектор еще
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот объемный множественный туман в рамках одной арии. Выглядит конечно диковато, особенно извнутри, но это потому, что код был изначально рассчитан на одну видимую плоскость, надо переписать GLSL.
Добавлено 21-05-2020 в 14:10:
Добавлено 21-05-2020 в 14:09:
Ну вот туман, предложенный ФиЭктрой, один выход заткнут красным порталом-туманом, второй жолтым.
При кутришном повертексном наложении, очевидно, лучше оно выглядеть не будет. Впрочем это не главное. Главное то, что корректно отрабатывает видимость порталов и кол-во арий поддаётся контролю. При дуумтришном подходе была велика вероятность, что если вот такую штуку заткнуть двумя порталами, то внутри она еще поделится на две арии, т.е. это вообще не то, чего бы ожидал дизайнер.
Добавлено 21-05-2020 в 14:13:
Так это еще полбеды, если бы она поделилась чётко посередине. Но она же делится "как нода ляжет". Но кстати говоря, это подход налагает и дополнительные ограничения - теперь кроме обычной утечки есть и утечка ареапорталов. И их тоже надо подгонять вплотную, чтоб никакого зазора не было. Впрочем, я думаю это всё равно лучше - один раз подогнать, чем каждый раз часами ждать пока отработает виз.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отлично! А покажи ту фишку с отключаемыми зонами, для имитации комнаты "большей внутри чем снаружи". Ещё интересно, а вектор гравитации в них изменять можно?
Вот видос для вдохновения, хотя здесь оно фейковое, использует самые обычные порталы и копии комнат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro скидывать ДМ-у видео для вдохновения на юнете - моветон, чтоли, не знаю...
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша таки выпиливается поддержка физикса? Жаль, а я кокраз GTX1650 прикупил
__________________
-Brain is dead-
Я никогда и не говорил, что планирую использовать сторонний физический движок в XashNT. Что значит выпиливается?
Добавлено 21-05-2020 в 18:52:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В сорсе оказывается допущен ужастный баг, из-за которого вся эта затея с ареапорталами смысла почти не имеет. Отсюда же растут и многочисленные проблемы с разбиением воды, которая то исчезает, то появляется кусками, ну знаете. Дело в том, что ареапортал тоже разбивает геометрию штатно, подобно обычной секущей плоскости, но фишка-то в том, что он не должен этого делать случайным образом! А в сорсе у ареапортал-брашей нет абсолютно никакого приоритета в разбиении. Должно быть так: сперва дерево разбивается в штатном режиме. Потом, когда подходящих плоскостей уже не осталось - используется финальная секущая ареапортала. Только в этом случае сектора нарезаются правильно.
__________________
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-05-2020 в 12:56:
Вообще с этими ареапорталами прямо целое искусство, не так-то просто их расставлять, да. Ну ничего, будет вам новый скилл.
Добавлено 22-05-2020 в 14:30:
Забавная вещь выяснилась. Оказывается кластер-порталы для ботов идеально годятся на роль ареапорталов. А вот хинты - не очень.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша да, в домике на coast03 окна и двери затянуты ареапорталами, и солнце почему-то через окна не светит.
Неисключено. да
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Да это для ботоф какая-то подсказка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize сами брашы на уже готовых картах расставлены как надо. Я про это.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Похоже дуумтришные оптимизации треугольников придётся выбросить.
Ну или полностью переписать, они абсолютно не годятся для моих задач.
И вот почему - оптимизация происходит в 2д пространстве, т.е. на общей плоскости. Ну нетрудно догадаться, что такое справедливо только для брашей. А для вставленных моделей он просто формирует десятки тысяч цепочек с одним треугольником внутри. Причём уже просто на копирование этих цепочек уходит адски много времени без цели и смысла. В самом D3 это понимали, поэтому перестали включать статические модели в общую геометрию на этапе компиляции - их рендерер грузил, что тоже небыстро.
Но для параметрических поверхностей специализированная оптимизация справляется куда лучше общей. Для брашей это соответственно CSG, Merge и ClipSidesIntoTree. Для патчей RemoveLinearColumnsRows и StitchPatches.
Для моделей - простая индексация вертексов. Ну и собсно всё, переставлять эджы там нет никакого смысла, тем более я заметил, что после этой оптимизации FPS наоборот даже немного падает. Точно так же нет и смысла резать треугольники строго по дереву для full carve - это уже CSG делает. Так что от оптимизатора требуется единственная вещь - рассортировать треугольники по нужным ариям, разрезая его, когда он попадает точно на границу двух арий.
Вот так забавно получается, что код из D3 использоваться не будет - только некоторые идеи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Концепция в том, чтобы рисовать сразу весь сектор целиком. В секторе мешы отсортированы по материалам. Сколько материалов - столько и мешей.
То есть получается любопытная ситуация в кадре треугольников в десятки раз больше, а фпс - выше. Но разбиение на сектора выполняет левел-дизайнер. Я в этом проблемы абсолютно не вижу - ареапортальный браш ставится один раз в дверном проёме и маппер точно знает, что в этом месте карта будет поделена на два сектора, в отличие от хинта, который может и не помочь. Причём он бы скорее всего и так бы туда этот хинт залепил, ну просто другой текстурой покрасит. Я вот вообще заметил, что народ очень любит оптимизировать вручную. Ну так надо дать им в этом больше возможности. Всего каких-то пять лет назад я считал совершенно иначе.
Ну вот вы видите Волатилу, построенную на этих принципах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
thambs вообще без проблем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот какую интересную фигню я заметил. Использование nvtristrip УМЕНЬШАЕТ фпс, вместо того, чтобы его увеличивать.
Пробовал менять размер кэша, играться с параметрами, итог всегда один. Простая индексация вертексов даёт лучший результат, нежели индексы, пропущенные через nvstristrip.
Вот примерчег:
Слева стриптнутая геометрия (рисуется через GL_TRIANGLE_STRIP), справа обычный лист, рисуется через GL_TRIANGLES. Если кто не понял, поясню, strip-режим позволяет экономить индексы, в отличие от листа. Правда это же осложняет и простейшие операции, поэтому на правой картинке поликаунт неверный, он совпадает с левой, но его нельзя посчитать, просто поделив индексы на 3. Поэтому он там неверный. То есть вот такая ситуация.
Может быть дело в том, что я использую glMultiDrawElementsBaseVertex, а для классических режимов будет прирост? Интересное кино.
Добавлено 24-05-2020 в 13:50:
Поигрался с SetCacheSize, наилучший результат получается при подстановке значения 1024 - фпс возрастает до 650. Но всё равно он меньше чем без использования NvTriStrip. И да, с таким размером кэша кратно увеличивается время работы. Без него карта собирается 9 секунд, а с ним - минуту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша возможно зависит от итераций обхода вертексов, при стрипе еще операция возвращения в исходный вертекс или типа того
__________________
-Brain is dead-
Просто все эти оптимизаторы были актуальны в эпоху третьих гефорсов. Их давно пора сдать на свалку истории. Современному железу эти пляски не нужны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша на овердроу не проверял? может, nvtristrip делает такие стрипы, что овердроу сильно большой.
ncuxonaT откуда там овердраву взяться? Ты уверен что правильно понимаешь значение этого термина?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша вроде бы уверен.
Вот скрины из презентации оптимизатора мешей AMD Tootle. Сортировкой кластеров они здорово понижают овердроу.
У тебя горы не выпуклые, овердроу по-любому присутствует.
Для включённого Z-Test понятия overdraw бессмысленно.
Это если дракончик полупрозрачный и замкнутый, там да. Наблюдатель не будет его наблюдать извнутри. А что ты с горами сделаешь?
Добавлено 25-05-2020 в 00:11:
И вообще у меня к AMD-шным разработкам крайнее недоверие. Я еще не забыл ихний TrueForm.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ты бы хоть отвечал так чтобы у вас была дискуссия которую можно читать, а не "ой, всё!", нам же тоже интересно
Отремонтировал декали. В декалях ведь главное что? Чтобы они накладывались и на мир и на энтить одновременно. В халфе меня это всегда бесило.
У этих декалей есть еще один плюс - они переживают сейв\рестор. Ну потому что наносятся компилятором. Это скажем так, нечто вроде infodecal, но если без имени для активации - очевидно их может нанести сам компилятор. Ну примерно как лампочки без имени. Тот же принцип.
Алгоритм нанесения совпадает, так что разобрать какие декали нанёс компилятор, а какие движок невозможно.
Добавлено 25-05-2020 в 09:39:
А. Им теперь углы указывать обязательно, в отличие от халфовских. Ну то есть они конечно пытаются найти средневзвешенную нормаль, но на полисупе порой такая ерунда получается.
Добавлено 25-05-2020 в 10:00:
Поглядел я этот AMD Tootle. В комплекте идут замкнутые мешы, ну естественно. Как предлагается отремонтировать уровень, когда игрок находится внутри меша и может смотреть на треугольники в любом порядке? Вот в кваке с софтрендером, там дерево их правильно сортировало с любой точки зрения. Поэтому там был нулевой овердрав.
А сейчас по факту их дешевле одним дроколом нарисовать, чем пытаться отсортировать по кирпичику. Хотя конечно никто не запрещает.
Добавлено 25-05-2020 в 10:01:
А, он еще и с рейтрейсером, ну вообще чудесно. Это сразу втопку. Даже объяснять лень.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Овердрав солидных объектов смысла не имеет. Да ты почитай тему на геймдеве, я создал вчера. Там народ пишет, что давно уже разницы нет.
Есть и более ранние темы с аналогичным выводом.
Я не вижу смысла в этой сортировке в первую очередь потому, что она значительно замедлит компиляцию, практически ничего не дав взамен.
Потому что, если я рисовал скажем 20к, а нарисую 40к - и то фпс почти не просядет, а ты хочешь чтобы от этой оптимизации был эффект?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С видимой геометрией пока что всё, теперь колоизация.
Какие варианты есть вообще в принципе?
Самый очевидный - коллизия по сурфейсам. Этого я пока что делать не хочу. С одной стороны оно не требует какой-то предварительной подготовки геометрии, с другой подобная коллизия не слишком надёжна и тяжела в рассчётах. Но конечно можно будет потом попробовать и такую коллизию.
Городить какие-то специальные ускоряющие структуры, BVH, BIH или Kd-tree, я пока что тоже не планирую. Обойдемся уже имеющимся BSP. Опять-таки потом можно будет сравнить, благо BSP самый сложный из всех в построении. Остальные деревья можно строить налиту, резать ничего не надо. Ну и в качестве примитивов для коллизии я планирую по прежнему использовать брашы. Тот баг с залипанием у нечётных сторон я успешно исправил, но дело даже не в этом. У брашей есть важные плюсы:
1. конвексные структуры быстры в детектировании пересечений
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'
Тут в ксашмоде такая штука, что trigger_hurt с отрицательным уроном лечит игрока лишь до ста процентов, а func_door с отрицательным уроном - лечит до бесконечности. Также такая штука, что сигнал от кнопки игрока через keycatcher и сигнал от триггер мультипла отличаются и например, фанк_пуш реагирует на них по разному. Такие мелочи сильно влияют на логику и могут вовсе сломать её, если их не знать.
Будут ли подобные вещи исправлены в NT?
__________________
Killing Floor: Horzine Outbreak
Подобные вещи к движку отношения не имеют
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Ну и в качестве примитивов для коллизии я планирую по прежнему использовать брашы.
т.е. об уровнях модельками можно позабыть?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Но ведь к движку ведь будет и ксашмод, нет? Или мод нужно будет самому писать? А я то не кодер. В этом случае мне проще остаться на старом ксаше, для которого есть мод. Голый двиг то мне зачем? Смысла нет.
__________________
Killing Floor: Horzine Outbreak
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С одной стороны хорошо, но с другой - если ксашмод не будет развиваться, адаптироваться, то тоже профита для мапперов не особо много будет.
__________________
Killing Floor: Horzine Outbreak
Переписываю, да.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Оказывается народ из патчей сооружает целые замкнутые конструкции, расставляя их особым образом. Я-то привык полагать, что вот сделали патч, вогнули - получилась арка внутрь. А наружу, соответственно всё заполнено солидом. Так вот нет, они снаружи лепят еще один патч, который образует наружную часть этой арки. Ну хорошо, при моем подходе к коллоизиации, мне достаточно несложно учесть такие групповые конструкции и построить для них солидные структуры. Потому что когда строишь без учета этих групп, они друг-друга перекрывают и получается монолитная стенка вместо арки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Что мутил с движком в прошедший месяц?
Совсем не до кодинга было. Даже не прикасался.
Напомню, текущая задача - работа над компиляторами, разработка нового формата уровней, на данный момент - колоизация патчей, потом моделей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Просто по группам сортировка была во первых изначально неверная, это я исправил, а во вторых, она больше для устранения краков. Если из таких групп генерить коллижен-брашы, там слишком много солидного строительного материала, при построении дерева. Ладно бы эти патчи все торчали наружу уровня, но так далеко не всегда бывает. Поэтому я остановился вот на каком варианте. Строю группы (которые касаются друг-друга контрольными точками), дальше сортирую список по объему каждого патча и проверяю, какие еще патчи попадают в этот объем и одновременно принадлежат этой же группе (т.е. гарантированно соприкасаются друг с другом), группы при этом получаются довольно мелкими (3-5 патчей), но зато результаты построения дерева из них всегда правильные. Так, к примеру удобно делать эти обналичники из трёх патчей (внутри, снаружи и фронтальная поверхность). А если бы я каждый из этих трёх патчей превратил в браш отдельно, то они бы просто превратились сплошной солид, вместо арки. Причём это не везде происходит и зависит от стиля маппера. В ку3 к примеру такие арки никто не делал, и там проблемы не было.
Добавлено 25-06-2020 в 14:56:
Собсно, весь этот огород из-за того, что патчи двухмерны по своей природе и кутри для них соответственно строит двухмерную коллизию, а дизайнеры пытаются её как-то запечатать такими же патчами сверху и снизу.
И при генерации брашей надо учитывать все три патча как единую конструкцию. Необязательно их конечно три, может быть и больше и меньше.
Добавлено 25-06-2020 в 15:05:
Приложил карту для наглядности. фанк_группы - это вот как раз результат работы автоматической группировки. Из такой группы строится маленькое BSP-дерево, которое уже создаёт коллоизационные брашы для патча.
Но там несколько режимов работы, не всегда оптимально использовать дерево.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Про виз немного расскажу. Почему его алгоритм не менялся с незапамятных времён и в принципе подходит для любых вариаций на тему. Виз, как вы помните, не имеет дела с деревом. Он имеет дело с некоторыми замкнутыми примитивами, которые соеденены между собой порталами. Сам примитив может быть как конвексный, так и не очень. Важно чтобы он был полностью замкнутый - это проверяется еще на этапе построения BSP. Если мы оперируем лифами для первой кваки - примитив очевидно будет конвексный.
Для простоты представим его как аксиальный, некоторые стороны будут порталами. Каждый портал имеет две стороны, или точнее говоря - является проходом между двумя лифами. Portal flow - это поток, который идёт точно по размерам портала. Допустим в соседнем лифе напротив портала - солидная стена (для виза это выглядит просто как отсутствие портала на противоположной стенке), а портал находится под углом 90 градусов (коридор повернул). Тогда этот лиф помечается как видимый, а вот уже следующий за ним - невидимый. Впрочем там проверка конечно более сложная, т.к. учитывается видимость для позиции, а не для направленного взгляда (а для порталов видимость оптимально считать именно через попадание во фрустум, но их блин слишком много в классических форматах от Кармака, чтобы налиту это делать, хотя в Darkplaces есть реализация такого подхода). Плюс в том, что видимость считается полностью автоматически. Минус - в том, что дерево строится исходя из минимального кол-ва разбиений, поэтому отсечение видимости порой выглядит очень странно. Чтобы хоть как-то это исправить ввели хинт-брашы, которые заставляют сделать разрез. Прикол в том, что мы не гарантируем, что получившаяся нарезка сделает именно то, что нам надо, это хорошо работает только на самой простейшей геометрии. Да и народ, зачастую не в курсе, что хинты увеличивают кол-во полигонов. А когда это понимают - отказываются от их использования.
Ну так вот - в ку2 уже, когда были введены детальные брашы, чтобы заставить виз работать быстрее, лифы объединили в кластеры. Это очень просто - те порталы, которые находятся между двумя такими лифами уничтожаются, а остальные принадлежат одному кластеру. Кластер по идее уже может быть неконвексным. Принцип работы виза не поменялся.
Ну и наконец то, что я делаю сейчас - вместо кластеров арии, которые задает левел-дизайнер ручной расстановкой порталов. Хотя в некоторым смысле это регресс, т.к. предполагает ручную работу, но на самом деле он практически неощутим. На те же самые места, куда предполагается расставить порталы, дизайнер бы точно так же влепил хинт-брашы. Причём результат от их использования был бы гораздо менее очевиден.
А тут работает простое правило - если человек видит результат своих усилий, ему это проделывать совсем несложно.
Ну и сам рассчёт виза при таком подходе не может занимать больше секунды даже на самых слабых машинах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
makebsp практически готов и я им очень доволен. Карты собирает очень быстро, формат достаточно абстрактный (к примеру компилятор не заглядывает в контентсы примитивов и вообще там мало встроенных параметров), а все компиляторные энтити вынесены в скрипт и дизайнер может наделать своих, какие ему надобны. Пример:
1 | // any entity passed through this commands first |
2 | "default" |
3 | { |
4 | // rename keys to default |
5 | renameKey( "modelscale", "scale" ); |
6 | renameKey( "modelscale_vec", "scale" ); |
7 |
8 | if( angle ) |
9 | { |
10 | // support quake legacy |
11 | convertYawAngle( "angle", "angles" ); |
12 | removeKey( "angle" ); |
13 | } |
14 |
15 | // load entity transformation (may be identity) |
16 | loadTransform( "origin", "angles", "scale" ); |
17 |
18 | // any entity from embedded level should be gone structural brushes |
19 | if( embedded_level == true ) |
20 | removeBrushes( C_STRUCTURAL ); |
21 | } |
22 |
23 | // Q3Map2 internal entity |
24 | "_skybox" |
25 | { |
26 | setKeyValue( "skybox", "1" ); |
27 | renameKey( "_scale", "scale" ); |
28 | } |
29 |
30 | "func_group" |
31 | { |
32 | loadIndexMap( "alphamap", "shader", "layers" ); |
33 | movePrimitives( "classname", "worldspawn" ); |
34 | removeEntity(); |
35 | } |
36 |
37 | "func_detail" |
38 | { |
39 | addCompileFlags( C_DETAIL|C_TRANSLUCENT ); |
40 | movePrimitives( "classname", "worldspawn" ); |
41 | removeEntity(); |
42 | } |
43 |
44 | "misc_model" |
45 | { |
46 | includeModel( "model" ); |
47 | // includeMap( "model" ); |
48 | addCompileFlags( C_DETAIL ); |
49 |
50 | // loading indexmap right after model including |
51 | loadIndexMap( "alphamap", "shader", "layers" ); |
52 | transformModel( "self" ); |
53 |
54 | if( target ) movePrimitives( "targetname", "target" ); |
55 | else movePrimitives( "classname", "worldspawn" ); |
56 |
57 | removeEntity(); |
58 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ты порталы вообще не зови порталами, люди скажут "да ну возиться и т.д.". Просто скажи что хинт-браши теперь обязательны.
Это что получается, теперь после компиляции вся карта целиком рисоваться будет, если эти браши не поставить?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А зачем БСП тогда вообще нужен? Загружай напрямую obj какой нибудь.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Он же удаляет внешние полигоны
Ну в obj тоже нет внешних полигонов, если ты их специально не сделаешь.
>> Portal Flow первичный делается через него, создаются площади, наконец индексация пространства для коллизии и для поиска параметров.
Подобные вещи вроде ты делал при первом запуске карты для физики
>> Собсно, это и есть самая сложная задача - построить такую развертку, которая бы учитывала текущие шареные вертексы, удалить из нее внутренние рёбра.
Ну вот с моделькой бы такой проблемы не было, любая сгенерированная развертка не эффективна с точки зрения оптимизации и даёт очень противоречивые результаты.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну и да, пока не забыл, давайте уже окончательно разжую как виз работает, чтобы больше не возвращаться к этой теме.
Итак, у нас есть некоторая геометрия (важно, чтобы она была полностью замкнутой). Мы к ней применяем BSP-разбиение и получаем ту же самую геометрию, которая кое-где рассечена секущими плоскостями. И у нас теперь есть лифы. Для ку1\хл, лифы конвексные, для ку3 - произвольные.
Но это не важно. Теперь мы для наших лифов строим порталы. Порталы строятся очень просто - как вы знаете, если взять браш точно по размерам дерева и рассечь его всеми плоскостями дерева (но разумеется соблюдая очередность сечения от корневой ноды к лифу), то те обломки брашей, которые дойдут до лифа - превратятся в точное подобие тех брашей, которые изначально сокрыты в дереве (часть видимых полигонов браша содержится уже в самом лифе). С порталами мы поступаем аналогично - создаём геганцкий портал размером с дерево (под размером "с дерево" я имею в виду tree->mins, tree->maxs, т.е. bbox всех полигонов, которые в него включены) и сечём их нодами. Портал после рассечения удаляется и заменяется на два. А там еще на два ну и так, пока не дойдем до лифа. Некоторая сложность тут в том, что во первых нам не нужны порталы в нодах, поэтому когда портал делится надвое секущей ноды, он перемещается в детей ноды, а из секущей ноды - удаляется, во вторых порталов же обычно две штуки - прямой и обратный. Впрочем, кмк, Кармак написал этот код в 95-м штоли году и он с тех пор ничуть не менялся, может быть поэтому он сложноват для понимания. Ну не суть.
Да, единственный момент уточню, в функции MakeNodePortal каждый портал клиппится при помощи соседей, что может ввести в заблуждение. Но не будем забывать, что соседней портал - это просто такая же секущая от соседней ноды, т.е. абсолютно тот же принцип, что и с созданием брашей, но даже проще, потому что портал это плоскость, а браш всё-таки должен получиться замкнутый.
Так вот. Теперь у нас есть лиф с порталами. Тут важно понять вот какую вещь, для простоты будем оперировать исключительно конвексными лифами в виде кубега. Вот у нас кубег и все шесть его сторон покрыты порталами. Что это значит? Это значит, что из этого лифа можно видеть в шесть разных направлений. Но представим, что этот лиф в углу комнаты, и соответственного у три стороны - видимые поверхности, а еше три - порталы. А теперь представим что лиф у нас очень жирный и занимает весь тупик, откуда только один выход (вполне реальная ситуация). И у него пять солидных сторон, а шестая - портал.
А теперь, собственно то фундаментальное понятие\допущение, на котором и работает виз. Поскольку у нас пять сторон солидных, то мы можем видеть только по направлении из шестой стороны-портала. И, как вы понимаете, мы никоим образом не можем заглянуть за все эти стороны.
Ну потому что наш портал из лифа не висит в ваккуме, а надёжно прилинкован еще к одному точно такому же лифу. А из того лифа допустим смотрят уже три портала и так далее. Вот почему и важно поддерживать замкнутость уровня, чтобы всё это не вытекло обратно на само-себя. Правда дырка в одном месте далеко не всегда приводит к общим утечкам, так что порой даже карты с дырками вполне нормально выглядят. Но как минимум с них не получится удалить наружные полигоны. Кстати наружные полигоны тоже удаляются очень просто - у нас есть глобальный аутсайд лиф (нулевой), который находится снаружи уровня.
То есть это как бы гигантский такой браш, который покрывает всю карту. Но если на карте нет утечек, то мы соответственно не сможем на него выйти изнутри. Внутренности определяются по наличию точечных энтить внутри карты, к слову. Другого способа нет. Поэтому если вы создали где-то пустую комнатку без единой энтити, то компилятор вам выдаст сообщение: no entities in open -- no filling или что-то в таком духе.
Те лифы, к которым не удалось добраться сквозь порталы, помечаются как внешние, мы можем их удалить из дерева вместе со всем, что к ним прилинковано.
Но вернёмся к нашим лифам. Поскольку для определения видимости нам достаточно держать в уме только знание о том, что там где нету порталов - там непроходимая стена, то и соответственно нет и никакой необходимости использовать для работы виза реальную геометрию.
Поэтому .prt файл содержит только список лифов (ну или кластеров или арий, не суть важно), к которым прилинкованы эти порталы. Виз, осуществляется в два прохода (просто для оптимизации и ускорения).
Сперва делается очень грубая прикидка, результаты которой сохраняются в карту в режиме -fast. Потом, по результатам этой прикидки порталы сортируются таким образом, чтобы в начале списка были порталы с наименьшим кол-вом потенциально видимых лифов, а в конце - с наибольшим. Это сокращает общее время рассчёта, но время рассчёта, как вы знаете из-за этого очень быстрое вначале и замедляется в конце.
Можете отключить сортировку порталов, будет более равномерно, но в целом медленее (-nosort в большинстве компиляторов). Смысл этой оптимизации в том, чтобы к моменту, когда мы добрались до рассчёта порталов, из которых потенциально видно очень много - все остальные были уже рассчитаны и мы могли использовать эту информацию, руководствуясь принципом парности - если из B не видно A, значит из A не видно B. Проще говоря мы исключаем двойную работу.
Ну и наконец остаётся, собственно просчитать видимость одного портала из другого. Это очень простая и быстрая операция, если бы не долбанный комбинаторный взрыв, когда кол-во проверок растёт в геометрической прогрессии. Собсно суть проверки - убедиться в том, какие из порталов попадают в окошко видимости нашего портала. Фишка тут в том, что поскольку видимость потенциальная, мы не можем использовать угол зрения, фрустум и так далее. Поэтому для портала, попавшего в наше поле зрения производится максимум обрезание по одной из плоскостей исходного портала. И вот этот уже кусочек (ну или целый, если весь попал), делает точно такую же проверку на видимость соседа. И если он больше ничего не увидел - здесь видимость для исходного портала и заканчивается. Ну а потом, когда вся портальная видимость проссчитана мы просто конвертируем портальную видимость в видимость лифов\кластеров\арий. Это очень простая операция. Смотрим какому лифу принадлежит портал и для него, соответственно выставляем биты тех порталов, которые принадлежат к соответствующим лифам.
Собственно портальные методы отсечения - вешь широко известная, но её обычно применяют в реалтайме, сделать предрассчёты придумал именно Кармак. Когда порталов не очень много, можно использовать куда более эффективное отсечение по фрустуму, собственно в Doom3 так и сделано. Но и в Darkplaces баловались чем-то подобным, хотя там польза от такого метода может опасно приблизиться по времени к скорости отрисовки и куллинг потеряет всякий смысл. Но это делалось для неотвиженных карт
__________________
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-07-2020 в 17:02:
Больше скажу. PortalFlow по фрустуму работает лучше связки Frustum+PVS.
Добавлено 03-07-2020 в 19:15:
Эх, в компиляторе света опять целая куча скучной подготовительной работы
Сурфейсы загрузить, дерево построить, векторы посчитать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize ну я вам и предлагал когда-то написать такой декомпилятор. Народ отказался.
Добавлено 03-07-2020 в 21:17:
Там в принципе восстанавливается всё. Ну кроме конечно внешних сторон брашей, но кому они нужны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В построении лайтмап для треугольника, наиболее важный момент, конечно, это не строить лайтмапы, для, собственно, треугольников, а попытаться объединить как минимум пару треугольников в квадрат. Почему - понятно, если аллокать лайтмапу для треугольника, во первых будет перерасход места в атласе, во вторых, мы не сможем корректно записать для какого-то из шареных вертексов координаты лайтмапы - они же не совпадут, как вы понимаете. Да и общая скорость отрисовки ухудшается. В параное я такое сделал просто для теста, т.к. на тот момент впервые с этим столкнулся, всё же лайтмапы на моделях более сложный кейс, нежели на аксиальных квадратных плоскостях. Итак, в первую очередь, еще до, непосредственно, освещения и отрисовки, нам предстоит найти все смежные треугольники.
Эти треугольники могут лежать на одной плоскости, а могут и не лежать, это зависит от того, какая нормаль у вертексов. Если нормали разные, то вертексы продублируются и эти треугольники уже не станут смежными.
Почему мы не можем накладывать лайтмапы на такие треугольники надеюсь тоже понятно. Если нет - поясню. Вот типичная комнатка, у которой стены покрыты одной текстурой и образуют замкнутый квадрат. Как это спроецировать над лайтмапу? Ну очевидно, что никак, задача не имеет чёткого решения. Через тяжёлый матан можно найти один из допустимых вариантов, но я не люблю с таким связываться, т.к. подобные вещи никогда не сходятся к точному решению. Если задача нерешается при одних условиях, значит условия надо менять.
Итак, как же нам найти смежные треугольники? Самый простой способ - через текстурные векторы. Если у треугольника они совпадают, значит они все принадлежат одной площади. Заодно это исключает и вышеописанный случай с комнаткой. Следующий шаг - найти adjacent-рёбра. Хм. Приымыкающие, очевидно. Это можно сделать рекурсивно, через матрицу примыканий. И сформировать из них группы. В принципе этого можно и не делать, но тогда, если у нас где-то будет разрыв между треугольниками, на лайтмапе очевидно останется неиспользованное место, которое, тем не менее будет просчитано с освещением.
К слову сказать вышеописанный подход я уже опробовал и результатами остался доволен, например, он мне автоматически собрал в одну группу ландшафт на карте shaderlab_terrain. В оригинальном q3map2 требовалось в шейдере явно указывать, что это треугольники, принадлежащие одной группе, потому что к ним применено авто-текстурирование.
Вообще в лайтмаппере вот такие вот побочные вещи отнимают больше всего времени.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT на CSM ты скрины выкладывал, вспоминай. Это кажется был скрин с грасс_теста.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша вот же грасс тест, без нормальных нормалей запеклось всё треугольниками, а замазывание швов только сделало переходы плавнее
https://csm.dev/threads/novye-kompi...603/post-939327
https://csm.dev/threads/lightbaker3...434/post-941138
ncuxonaT
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот я сделал локальную трассу в пределах группы и опустил точки в места их пересечения с плоскостями.
ЗЫ. Надеюсь вам всё это интересно, а то пишу-пишу, никто не камментит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Что такое нон-планарная поверхность? Это патч? Процедурно генерируемая хейтмэпа?
__________________
http://www.moddb.com/mods/monorail-quest
thambs это у которой полигоны лежат не на одной плоскости.
Ну вот эти горы на картинке фактически - один меш, рисуются за один вызов, все треугольник пошарены друг с другом. Реально наложить одну лайтмапу на все разом. Это наилучшее решение проблемы швов и пятен.
Добавлено 05-07-2020 в 18:39:
Да, грасс_тест поидее тоже превратится в одну сплошную поверхность, но я его давно уже не собирал, надо будет проверить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это автоматически объединяется?
__________________
http://www.moddb.com/mods/monorail-quest
thambs если вертексы шареные, то да.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro
Почему на скринах оно полосатое? И планируется ли решить вопрос бензиновых разводов на лайтмапах?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro если ты про то когда яркой лампочке диапазона не хватает то это в компиляторе решается в три строчки.
Добавлено 06-07-2020 в 16:20:
но на самом деле я такие разводы жёлтые вижу у реальных лампочек.
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 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 а, так это просто RGB24 точности нехватает. Ну я планирую лайтмапы сохранять в DDS, в том числе и в халфы\флоаты по необходимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Самое мерзкое - заниматься вот этими подготовительными работами.
Уже и лайтмапу сохранил, теперь её надо осветить, значит распарсить источники света и выполнить простейшее освещение. Ну пока без теней.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro
Покажите хоть картинку с разводами этими
ncuxonaT
Любая тёмная комната освещаемая только с помощью радиосити, либо большая комната, освещаемая маленькой лампочкой. На лайтмапе будут видны красные и зелёные разводы, хотя сама лампочка белая.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ncuxonaT
https://www.vogons.org/download/fil...26824&mode=view
Добавлено 06-07-2020 в 21:25:
Китаец сделал на это фикс в версии 31.
FiEctro может, у тебя монитор не откалиброван?
На правом столбце равномерно серый градиент, или разбитый на разные цвета?
Crystallize видимо, китаец решил, что лучше ограничивать. Но мне такие равномерные залысины не нравились, поэтому в лайтбейкере это сделано через тонмаппинг.
ncuxonaT создай уже тему и выложи аттач с лайтбейкером.
Crystallize он на КСМе выложен, а новых версий не было еще
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT да я и на КСМ его не видел.
ncuxonaT Crystallize я вам не мешаю?
Осталось написать только фазу собирания света и можно рефакторить то, что получилось.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro
ncuxonaT полная чертовщина с твоей картинкой. Открываешь в браузере - там одни цвета. Открываешь в AcdSea - там другие цвета. И только в паинте правая колонка чернобелая. Но! Если двигать картинку вверх-вниз, то да, просвечиваются цвета, мерцают.
Добавлено 06-07-2020 в 20:38:
Кажется понял. Паинт же не ресемплит картинку, отсюда и цвета.
Добавлено 06-07-2020 в 23:09:
Первый результат. Без теней.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Вот тут на небе https://hlfx.ru/forum/attachment.ph...=&postid=195396 точки -- они какую-то функцию выполняют?
__________________
http://www.moddb.com/mods/monorail-quest
thambs никакую абсолютно. Я забыл их убрать для небесных плоскостей на тот момент.
Фейковые тени через корейский рандом. На рассчёт ушло 10 секунд в сингл-треде
Завтра уже трассу прикручу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сама лайтмапа, если кому интересно.
Добавлено 06-07-2020 в 23:45:
Корейский рандом, это вотакое
1 | int TestLine( const vec3 &start, const vec3 &end, bool indirect ) |
2 | { |
3 | if( indirect ) |
4 | { |
5 | if( COM_RandomLong( 0, 10 ) == 0 ) |
6 | return CONTENTS_SKY; |
7 | return CONTENTS_EMPTY; |
8 | } |
9 | return CONTENTS_SKY; |
10 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
10 секунд на фейковый директлайт? Блендер с реалтайм рендером, радиосити и материалами в разы быстрее работает
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro в Блендере развёртки ручные и все текстуры в одном атласе наверное а тут всё автоматом и текстуры кусками.
Дядя Миша ты будешь в NT делать те самые триггеры которые срабатывают на любой скорости объекта?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Мне вот интересно, а возможно будет выгрузить карту в меш, запечь для неё лайтмапу в блендере и заменить ту что сделал компилятор? Или там всётаки порядок хранения различается? Заложи возможность генерации геометрии не только в bsp но и какой нибудь obj, только треугольники подчисти
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пытаюсь тут разобраться с параметрами компиляции для q3map2.
Почти половина настроек - какие-то голимые фейки, нигде нету серъезного подхода. Вот скажем китаец заморочился, построил небесную полусферу с нормалями и по ней делает небесный радиосити. Что делает q3map2?
Ну правильно, создаёт кучу солнц-лампочек с заданным шагом для симуляции того же эффекта, а потом получившееся дерьмо пытается сгладить фильтром.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT погляди исходники VHLT, хорошая штука. Выпускает лучи по полу-сфере и проверяет, ушёл ли луч в небо или нет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в чем разница между пустить в небо 1000 лучей и пустить лучи от 1000 солнц?
ncuxonaT правда не понимаешь? От одного солнца ты лучи собираешь в строго определённые точки, от множества солнц и получается множество теней, которые потом заглаживаются фильтром и выглядят как говно.
Множество солнц можно использовать, как некоторые мапперы, для достижения эффекта солнечного света, приходящего со всех сторон.
Была парочка карт в таком сюрреалистичном стиле.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша правда, не понимаю. При большом количество солнц это множество теней размывается, и заглаживать их уже ни к чему. И если лучи пускать в разные стороны - будет то же самое. Если лучей мало, и их направления совпадают для всех люкселей, станут видны отдельные тени. Если направления лучей варьировать для каждого люкселя - будет шум. Чем больше лучей, тем меньше шума или отдельные тени сильнее размоются.
Решил проверить обновлённый STB_DXT (они там какие ошибки исправили).
Результат в аттаче, файлы названы, согласно режимам качества STB, squish референсный (макс качество).
Разница в скорости. squish без SS2 сжимает эту картинку 41 секунду. squish с SSE2 делает тоже самое за 2.2 секунды. STB при любом уровне качества тратит 0.05 секунд. Это вообще хороший пример того, что грамотная оптимизация работает лучше тупого использования новых инструкций.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Бензиновые разводы возникают на этапе конвертирования Lightvalues из вещественного в unsigned char. Надо будет уделить этому вопросу внимание.
Построил группировку треугольников по смежным рёбрам и сглаживание нормалей. Пора делать рейтрейсер, а то фейковые тени уже надоели.
Добавлено 09-07-2020 в 01:24:
Кстати, надо будет добавить такую фишку, как множественное небо с разным светом от него. Меня это всегда бесило, что на карте может быть только одно небо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я когда игрался с VRAD, просто брал коэффициент превышения VectorMaximum() над 255 и уменьшал весь вектор во столько раз.
Не факт, что ренормализация цвета вообще корректная операция. Может её и нельзя делать. Для единичного цвета - можно, а для целой лайтмапы не знаю. Может надо найти вообще со всех лайтмап пиковое значение и поделить все луксели на него. А когда это делается локально, вот и получаются бензиновые разводы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для чего вообще нужна эта ренормализация цвета? Я думал лайтмапы пишутся в сыром виде.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro ну допустим в ХЛ2 лайтмапы во флоатах, которые перед записью в карту конвертятся в четыре числа: rgb24 и степень. А в ХЛ1 они просто зачем-то обрезаются порогом 196 или 232 у ДМ, это вроде чтобы работало на Вуду, но хз если честно. И тут как повезёт, если какой-то компонент до обрезания был сильнее других то он обрежется сильно, а другие намного слабее или не обрежутся вообще. И у этого люкселя скакнёт насыщенность которая суть разница значений разных каналов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вы щас как будто тонмаппинг изобретаете
На самом деле здесь масса вариантов как исправить эту ситуацию.
1. Можно, как я уже сказал найти пиковое значение света для всех страниц атласа, сохранить его, ну например в ворлдспавн, предварительно умножив на него все значения света. Это в некотором смысле даст такой же эффект, как и BestFitNormals - сдвигаем значения диапазона, оставляя его границы нетронутыми. А потом просто умножить в шейдере каждый пиксель лайтмапы на это значение и получим почти HDR.
2. Сохранить лайтмапы в RGBe как в сорсе. Четвертый байт отводится под экспоненту. Минус в том, что скорее всего этот формат не имеет никакой аппаратной поддержки, его не сожмёшь в DXT и он занимает больше места, а я бы может четвертый байт хотел под тени заюзать.
3. сохранить лайтмапы в half-float. Они займут еще больше места, но зато это будет HDR.
4. вообще не хранить лайтмапы, хранить только тени, свет рассчитывать деномически в шейдере и умножать на запечённые тени (насколько я знаю, впервые такой подход был опробован еще в Сталкере, думаете как там смена дня и ночи на лайтмапах сделана? Вот именно так). В Юнити тоже есть такой механизм, насчёт UE не знаю. Но скорее всего да.
В принципе можно осуществить поддержку всех вариантов. ну или отобрать самые интересные на пленуме ЦК.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro разверни свою мысль
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну зачем рендерить с большим цветовым диапазоном, чтобы потом его обрезать? Почему нельзя отрендерить сразу в нужном качестве?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Какой еще световой диапазон?
Ты на карту поставил лампочку и задал ей яркость 300. Очевидно 300 уже не влезает в границы байта. Но за счёт формулы затухания до сурфейса доходят меньшие значения. Но не от одной лампочки, а от разных. Они складываются. Где-то обязательно будет больше 255. Ты никак на этот процесс не повлияешь. Можно привязать эти настройки к физически корректным формулам, но проблема никуда не исчезнет.
__________________
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-07-2020 в 18:26:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT если пиковое значение не превысило 255, зачем его записывать?
Прикрутил рейтрейсер, гауссом пока не гладил.
Считалось это две минуты с половой на одном потоке, долговато конечно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Там скраю карты шов?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ох, ладно, по пойдем по порядку
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мораль не совсем очевидна. Т.е. параметрические лампочки вместо честных формул это хорошо (по крайней мере в контексте прицела на GPU) а параметрические солнца вместо трейсов до скайдома это плохо?
ncuxonaT
https://csm.dev/attachments/test_dyn_0000-jpg.120083/
Вот тут слева очень хорошо эти разводы видны
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro ну там ещё и гамма выкручена
Ну вот, теперь, когда первые результаты получены, можно спокойно заняться рефакторингом. В первую очередь надо правильно распарсить все типы лампочек.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Визуализировал кусочки атласа.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Что кодируют цвета?
__________________
http://www.moddb.com/mods/monorail-quest
сурфейсы на которые ляжет один блок лайтмапы. Там где разноцветные треугольнички - дело плохо, прямо как в параное.
Собсно, наложение двухмерной лайтмапы на трёхмерную геометрию это и есть самый важный момент любого лайтмаппера. Свет посчитать-то тьху, по стандартным формулам, трассу ускорить вообщем-то тоже реально.
Но вот грамотно спроецировать полигоны на плоскость - задача не из лёгких.
Если мы конечно не собираемся следовать порочному принципу один треугольник = одна лайтмапа. Это и швы и изыбточность самих лайтмап, ничего хорошего. В идеале бы конечно наложить всю карту на одну лайтмапу, но так всё равно не получится по куче причин.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А какие способы знаешь по оптимизации трассы?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, ну чтожы, лайтмапы я построил, выглядят уже неплохо, невалидных точек исчезающе мало. Но есть чёрные пятна. Пятна, как нетрудно догадаться, берутся из неправильной нормали, например точка находится точно на стыке треугольников. В халфе приходилось заниматься преборазованием из одного текстурного пространства в другое, чтобы найти interface normal, к счастье мне всё это не потребуется. Достаточно построить глобальный triangle neighbors. Кстати из-за этих же нормалей и швы кое-где проглядывают, но тут конечно надо следить. Одно дело - черное пятно и совсем другое - шов между двумя сурфейсами.
Дело в том, что в карту должны попасть именно корректно сглаженные нормали, иначе на спекуляре тоже швы будут.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Немножко скриншотов:
На финальной картинке ничего не видно, но мне надо добиться идеала на голой лайтмапе. Буду строить соседей для треугольников, искать шареную нормаль, она как раз от всех этих пятен и швов помогает. Гораздо лучше чем все эти чистилки и замазывалки.
Добавлено 12-07-2020 в 20:04:
Легенда:
синие поверхности - это те, которым в материале указано использовать повертексное освещение.
Зелёные квадратики - это инвалидные точки, которые так и не смогли найти валидное положение. Прошу заметить, что кваки обычно хаатычно дёргают позицию во все стороны, проверяя солидность лифа, а я этого еще не делал.
Добавлено 12-07-2020 в 20:11:
А, да, сетку жеж забыл показать
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Овербрайты-то планируются?
__________________
-Brain is dead-
Дядя Миша
Что понимается под "валидным положением"? Алсо, а лайт-текстуры тоже светят точками, или там какое-то хитрое интегрирование?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не, сглаживание нормалей не помогает, а почему, потому что возможна дублицированная геометрия - в ку3 CSG-то не было, к примеру. У меня он допустим есть, но отключаемый. И получается, балка идёт до угла, в углу такой прикладок, 45 градусов. И вот на его краю, соответственно нипочём не сгладишь - там же под ним нет ребра, просто плоскость. Да и мелкие треугольники, там тоже ничего хорошего. Трипланарная проекция идёт лесом, с ней кашы не сваришь. LSCM слишком сложный в реализации и тяжелый в работе. Но есть и более другие варианты.
Добавлено 14-07-2020 в 13:40:
Кстати, напомните, что вы там просили, какую возможность оставить?
Запекать лайтмапу прямо в блендере? Технически это возможно, но выглядеть будет дико, потому что в блендере одни лайтформулы, а у меня в компиляторе совершенно другие. Хотя если речь идёт о запекании лайтмапы для всего уровня, то да, это может представлять некоторый интерес, но опять таки - блендер не нагенерит информации для реалтайм лайтинга.
Добавлено 14-07-2020 в 13:44:
Впрочем с моей текущей системой материалов у движка нет единой концепции рендеринга - реалтайм\предрассчитанное. Наоборот предполагается, что её выберет сам пользователь. Кому-то важен реалтайм, а кому-то по душе мягкий свет запечённого освещения. Но кстати возможность переключения между лайтмапами и реалтаймом - это тоже на совести пользователя. В движке нет никакого мультирендеринга, там абстрактный конвейер, с возможностью переключения на лету между разными патчами. Сами патчи, тоже разуумется пользователь пишет - в скрипте, в шейдерах. Можно вообще сделать чисто повертексное освещение, такую стилизацию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я думаю можно провести эксперимент. Если будет меш с нормальной развёрткой. Было бы интересно пособирать карту чисто из моделей с -nocsg, как минимум загрузить оригинальный меш спонзы, вот только как быть с детектором дырок? Компилятор же видит модели просто как точечный объект? В общем не очень понятна какая должна быть система миграции геометрии .map -> csg -> .obj -> .bsp? Хотелось бы увидеть твоё видение как это всё должно работать. В целом .obj если не ошибаюсь поддерживает объекты, можно прямо в 3д пакете расставлять лампочки и энтитии, вот правда я не очень понимаю в каком виде у них хранятся свойства.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
nemyax
Зачем скрещивать ежа с ужом, если можно использовать каждый софт для того, что он делает хорошо? 3д-пакет - для редактирования геометрии, а игровой редактор - для расстановки лампочек и энтить.
Government-Man
Затем, что в триде-редакторе имеются средства для привязки и автопривязки энтитей к конкретной геометрии. И тебе не надо скакать между хорошо делающими свою работу софтами, чтобы туда-сюда подгонять.
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Частный случай непошаренного ребра.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax может они имели в виду орбиту?
Добавлено 14-07-2020 в 16:56:
Кстати да, в сталкере Instant Radiosity, как и в халфе. А вы думали, чего на статике такая приятная картинка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> я блендер не знаю. Поэтому и спрашиваю совета у товарищей.
Это скорее .obj, впрочем если хочешь какой то другой фомат, там .blend или .fbx говори, сохраню их.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Есть вариант полностью отказаться от брашей, но это очень неудобно, потому что брашами хорошо задавать объем сложной формы - воду, триггеры. Собсно, для этого они по большей части и нужны. Ну и примитивную невидимую геометрию для генерации порталов. Но это уже по желанию.
Можно в самом движке сделать xash.exe -editmode где ты просто загружаешь модель или map файл на проект сцены ( scene.xsh например ), и задаёшь объектам которые уже расставлены в 3д редакторе параметры прямо в этом моде, там же ты сразу можешь протестировать поведение твоих дверей, триггеров и т.д. , расставить лампочки, монстров, инфоплеер старт и теже самые триггеры. Задать дерево объектов парент системы, подцепить скрипты и т.д.
Пишешь в консоли buildmap *mapname*, движок сворачивается, запускает компилятор который компилирует всё это дело в bsp, запускает движок и включает твою карту уже в игровом режиме. Вроде как примерно так анрил энджин и работает.
В случае с map можно ещё и импортировать сразу значения этих объектов. И те кто любят кубать по старинке, ничего не надо будет делать дополнительно, они просто загружают карту на сцену и компилируют. Только у них ещё появится возможность протестировать все энтитии прямо в движке не компилируя карту. И здесь ещё один плюс! Можно будет редактировать эти объекты на уже откомпилированной чужой карте без исходников, либо вообще загрузить любую другую карту из первой халфы или кваки как меш, импортировать объекты и заново скомпилить под новый движок!
Для очень мелких дырок кстати можно сделать fill gaps чтобы их компилятор автоматически затыкал. Странно что в халфовских компиляторах этого так и не сделали.
Так же и главное меню игры можно сделать отдельным БСП с заскриптованными кнопочками и камерой.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
-Brain is dead-
KiQ а чем тебе не нравится вместо главного меню карта на которой можно взаимодействовать с всякими объектами, кнопочки всякие нажимать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А зачем нормали вообще сглаживать, да ещё и по материалам? Я всегда считал что это свойство задаётся для вертексов меша. В сорсовском хаммере вроде даже смутч группы были для этого, как в 3д максе.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
чтоб освещение было гладкое
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://slideplayer.com/slide/4462806/
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Какой-то овердоз формул
__________________
-Brain is dead-
https://hlfx.ru/forum/showthread.ph...5767#post195767
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну для лайтмапы допускается большое количество швов, вплоть до того чтобы каждый полигон был отдельным островком на развертке. Плюс сама геометрия редко когда имеет сложную искривлённую геометрию.
Для обычной же UV того же человека, или какого нибудь шамблёра критично чтобы количество швов было минимально, так ещё и текстура там сходилась пиксель в пиксель. Я конечно понимаю что большинство моделеров просто нарежут её на кучу маленьких кусочков, и это будет правильно. Но в моём случае ещё необходимо произвести запекание в текстуру не только геометрии, но и партиклей (всякие мех и волосы которые рендер запекания в текстуру не поддерживает), и вот тут уже количество этих кусочков сильно влияют на качество модели. Отказ от кусочков же приводит к куда большим дефектам при авторазвертке, то её перекашивает на какой то произвольный угол, то пляшет плотность самой сетки, когда голова у человека размером с кулак и такое я встречаю довольно на многих моделях.
И я был готов мириться с любым дерьмом, но то что в абсолютно любом развертывальщике развертка накладывается сама на себя, это уже какой то позор. Неужели так трудно определить дистанцию вертексов между собой чтобы они не перекрывались? И по сути все пакеты используют одни и те-же алгоритмы, с одними и теми же дефектами, отлчие состоит только в дополнительном инструментарии. С чёртовой развесовкой таже песня, состоящая чуть более чем полностью из плясок с бубном.
Когда разберусь с этими бедами, мне вручат медальку "почётный шаман мира 3д"
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так товарищи. Вероятно в этом году увидит свет первая публичная версия, которая в дальнейшем будет обновляться, сохраняя совместимость.
Чтобы народ мог реагировать на разные крэшы и вылеты, а так же вносить свои предложения, в некоторой степени определяя дальнейшую судьбу развития.
Что мне осталось сделать до первого такого релиза:
1. дописать лайтмаппер до боле-мене вменяемого состояния (в аттаче картинка, как он сейчас работает).
2. разработать новый формат моделей (форматы спрайтов\шрифтов уже созданы).
3. в рендерере фундаментальная система проходов, контролируемых пользователем, возможность написать отложку или любую мульти-пасс систему, вообще не затрагивая код. Мне абсолютно не улыбается это делать, потому что рендеринг это эксперименты на 90% и каждый раз лезть в код и что-то там перекомпиливать дико неудобно. В принципе рендерер, как вы знаете уже процентов на 70 именно так устроен, но проходы он пока что не поддерживает и нет связи между различными таргетами. Т.е. можно написать какой угодно однопроходной рендерер, а вот скажем зеркала или динамические источники света подключить пока не получится, вот этот функционал и надо реализовать. И потом уже спокойно в скриптах экспериментировать со всякими моделями непрямого освещения, хоть LPV, хоть рейтрейс.
4. плагин для Джека с поддержкой нового формата моделей и материалов.
Вот собсно, эти четыре момента - они основные, если я успею за полгода.
Это не значит, конечно, что движок уже готов на 100%, это значит, что получившийся продукт можно будет изучать, осваивать и потихоньку портировать на него свои наработки, как с дальним прицелом, так и для проверки на прочность конструкции.
Добавлено 25-07-2020 в 13:55:
Аттач забыл
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А карты модели делать можно будет? И в каком формате им кормить модели?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вы таки будете удивлены, но даже обычный линейный свет во всех трёх кваках немного различался, ниже скриншоты.
Quake 1:
angle = (1.0 - 0.5) + 0.5 * angle; |
add = (light->photons - dist) * angle; |
add = max( add, 0.0 ); |
add = (light->photons - dist) * angle; |
add = max( add, 0.0 ); |
add = light->photons * 0.9375 - dist * angle; |
add = max( add, 0.0 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сделай ещё ХДР лайтмапы как в Лост коасте
У Психопата имхо самое красивое освещение получилось, остальное какое то кривое гамно, которое ещё не те цвета что выставил маппер рисует.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ИМХО ку3шный вариант самый паршивый, видите вот это уродливое белое пятно по центру с чёткими гранями? Оно занимает практически всё освещаемое пространство, когда на первых двух вариантах хоть это пятно по прежнему и присутствует, но переход уже не такой жёсткий, и мапперам нет необходимости увеличивать радиус этого уродства.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я полностью согласен с FiEctro в обратную сторону. Вариант в ку3 самый корректный и красиво выглядящий, разумеется, при правильных радиусах и при наличии радиосити (которой в ку3мапе нет, но могла бы быть).
Проблема в том, что он напрямую не совместим с халфовской моделью. Но и это поправимо, в принципе. В vmap я сделал поддержку обеих моделей, ну вы помните, я показывал халфовские карты под волатилой.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну если формулы одинаковые, какая разница где считать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для квадратичного радиуса затухания обычные значения света подходят мало. Ну вообщем-то, как это имеет место быть для area light, вы же обращали внимание, что там значения идут от нескольких тысяч.
В Quake3 любое значение точечного лайта умножается на 7500. Не знаю почему именно 7500.
В халфе, как мы помним квадрат самого себя делится на 10 и опять умножается на себя. Таким образом.
Для халфы:
Интенсивность 100.
l1 = 100 * 100 / 10;
intensity *= l1; // 100 * 1000
Результат 100 000 едениц умножить на DLIGHT_SCALE 2.0 (по умолчанию директ в халфе умножается на 2). Т.е. 200 000
Для Quake 3
Интенсивность 100.
intensity = 100 * 7500;
Результат 750 000 едениц.
В 3.75 раз выше.
Добавлено 27-07-2020 в 12:38:
Слева халфа, Справа ку3
Добавлено 27-07-2020 в 12:55:
В халфе экспоненциальная функция получается. Потому что при яркости 200, халфа уже даст 1 600 000, а ку3 1 500 000 соответственно.
При значении 300, 5 400 000 и 2 250 000.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
Наконец-то удалось как следует протестировать альтернативный упаковщик "уголком", за который так топил наш друг.
В обычных условиях оценить эффективность затруднительно, это надо считать неиспользованные пиксели, причём на одном и том же наборе данных, а тут никогда не угадаешь. Но вчера у меня появилось одно очень простое соображение. Вот у нас есть глобальный список лайтмап-кусочков, которые должны быть упакованы в атласы. Как мы обычно делаем в таком случае? Мы их пакуем-пакуем-пакуем, а если AllocBlock вернул false, то атлас считается заполненным, но ведь это в корне неверно! Это всего лишь означает, что в атласе уже нет места для этого конкретного куска. Он слишком большой. Но вероятно есть места для меньших кусков? Алгоритм реализуется очень просто - мы каждый раз пытаемся добавить в очередную страницу атласа все имеющиеся у нас кусочки лайтмап (разумеется помечая уже добавленные). Если AllocBlock нас послал - мы просто пропускаем этот кусочек и пытаемся добавить еще какой-нибудь. И так, пока не пробежим весь список. Разумеется он отсортирован от большого к малому.
И вот на таких вводных, я наконец-то получил чистые условия. Уголок действительно пакует эффективнее, т.к. он вообще не оставляет дыр при таком подходе. На той же q3dm1 я получил 5 идеально заполненных лайтмап без единого свободного пикселя. И шестую - заполненную процентов на 30. С Кармаковским алгоритмом я получил шесть неидеально заполненных лайтмап и седьмую, слегка начатую.
Но тут еще конечно вопрос, почему сам алгоритм оставляет довольно большие дыры в некоторых местах. Скорее всего особенность работы by design. Потому что, как я понял, для упаковщиков 70% успеха - это грамотная сортировка и подача. То есть всё свелось к тому, может ли алгоритм теоретически обеспечить 100% заполнение или нет. Да не случайным образом, а выдавая стабильные результаты. Ну вот пять полностью заполненных страниц вполне меня убедили в этом.
Полагаю это и есть самый валидный тест упаковщиков.
ЗЫ. картинки прикладываю, правда на данный момент их поровну, но дырки в заполненных атласах на кармаковском алгоритме видны невооруженным глазом, причём уже нельзя сказать "ну он их так расположил".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А вот ту формул(ы) освещения, она вкомпилена будет, или её можно будет задать/выбрать в конфиге?
__________________
http://www.moddb.com/mods/monorail-quest
1 | "light" |
2 | { |
3 | if( target ) setupNormal( "target", "origin" ); |
4 |
5 | if( light ) |
6 | { |
7 | // Quake1, Quake2, Quake3 light definition |
8 | setupIntensity( "_color", "light", 300.0 ); |
9 |
10 | if( "targetname" == false && "spawnflags" == 1 ) |
11 | { |
12 | // linear lighting |
13 | scaleIntensity( "self", 0.9375, 1.0, 1.0 ); |
14 | setupAttenuation( 0.0, 1.0, 0.0 ); |
15 | } |
16 | else |
17 | { |
18 | // quadratic lighting |
19 | scaleIntensity( "self", 7500.0, 1.0, 1.0 ); |
20 | setupAttenuation( 1.0, 0.0, 0.0 ); |
21 | } |
22 | } |
23 |
24 | if( _light ) |
25 | { |
26 | // GoldSource light definition |
27 | setupIntensity( "_light", "_light", 300.0 ); |
28 | scaleIntensity( "self", "self", "self", 0.1 ); // scaled cubic |
29 | setupAttenuation( 1.0, 0.0, 0.0 ); // quadratic, linear, constant |
30 | } |
31 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Выработал неплохой алгоритм для относительно бесшовного наложения лайтмап на поверхность. Неидеально конечно, но тут два момента.
1. алгоритм предиктабельный. Т.е. полигоны, которые не группируются всегда одни и те же, на всех копиях геометрии, случайные пятна исключены.
2. существует возможность кастомного объединения групп по заданным углам. Ну типа как в q3map2 была настройка q3map_lightmapAxis. Например, с её помощью я весь потолок на спонзе объеденил в группу и он стал гладеньким без единого шва.
3. для пачтей развёртка лайтмапы генерируется на базе её сетки. которая всегда двухмерна, а следовательно идеально раскладывается в UV.
Собсно, проблема какого рода осталась, причём абсолютно везде. Эти швы невозможно уничтожить в принципе. Допустим у нас есть круглая колонна.
Пусть это будет патч, т.е. идеальное разложение на UV. Ну и что? Она всё равно не замкнута в 2D. В месте соприкасания потенциально будет шов. Ведь в 2д не замкнёшь поверхность саму на себя нипочём. В случае автоматической генерации всё еще грустнее. Такая колонна разобъется на 4 кусочка, соответственно XY в 4 стороны. Ей можно назначить кастомный угол разбиения, но тогда она превратится в кольцо на лайтмапе, т.е. будет искажение поверхности. Получается, что на высокой колонне будут растянутые люксели. Впрочем это общие проблемы развёрток, тут ничего особо не поделаешь.
Добавлено 31-07-2020 в 00:15:
Скриншоты
Всё что вы видите - это набор треугольников, здесь нет никаких квадов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На спонзе тени на полу поломались.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это полигоны огня тень отбрасывают.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На арках у основании над столбом к слову тоже какая то дичь происходит, причём видно прямо что цвет лайтмапы на полигоне радикально отличается от всех остальных его соседей, что аж швы вылазят. Компилятор запекает свет до того как нарезал лайтмапу на кусочки или после? И можно скриншоты с высоким разрешением лайтмапы? Какой алгоритм составления UV карт там (до того как он их пакует)?.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Snap to nearest axial
Не удалось найти в гугле.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro
Кстати, к вопросу о достоверности.
Слева p2st с тремя баунсами. Справа ку3 фейковый, небесная поверхность - один большой излучающий полигон.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так второе это просто эмбиент.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Тени конечно ужас, вот про них я и говорил с ними что-то будет делаться в NT?
Дядя Миша
Отчего на первом такая странная интерполяция?
__________________
http://www.moddb.com/mods/monorail-quest
Баунсов справа нету?
Кстати, я после ковыряния в сорцах VRAD так понял что если в коде радиосити домножать не на Patch1 а на Patch2 то будет освещение как в Сорсе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А точка соответствующая люкселю локализована в его центре, или он пускает несколько пространственно-разнесённых лучей и сворачивает результат с соответствующим ядром?
__________________
http://www.moddb.com/mods/monorail-quest
thambs ни то ни другое. PTPFF там. Впрочем есть некоторые параметрические трюки, позволяющие обойтись и без него. Из простых способов мне понравился кламп дистанции луча на sqrt( area ).
Поясню. Любая формула затухания света так или иначе базируется на дистанции от люкселя до оригина источника. Чем точка ближе, тем, очевидно выше яркость. Ну вот если полигон к источнику света максимально близко, то получается пятно. С этим легко бороться, ограничив минимальную дистанцию луча на некоторое значение. Для субдивайд-ареалайтом оптимальный кламп на sqrt( area ); Конечно PTPFF даёт куда более приятный результат.
Ссылка: https://www.youtube.com/watch?v=VKlg5sI_pxI
а то опять начнете "не гуглится".
Решил я тут посравнивать как q3map2 выходит из сложных ситуаций. Ну например, как эту чёртову колонну осветить без швов. Набрал все известные мне мантры - q3map_lightmapAxis y, q3map_lightmapMergable, q3map_shadeAngle 179 и q3map_forceMeta.
То что получилось - на левом скрине. Потом этот же шейдер сунул своему компилятору. Результат на правом скрине. Фактически сработала только одна команда: "q3map_lightmapAxis y" остальные мало на что влияют в данном случае, а для моего компилятора часть команд это вообще заглушки, они не требуются.
Добавлено 02-08-2020 в 00:49:
Дырки на тенях это edge rendering, не обращайте внимания.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Судя по всему эта задачка с наложением лайтмап вообще не имет однозначного решения. Потому что даже в UE4 пользователю на выбор предлагается несколько вариантов. Таким образом дефолтный вариант должен лишь обеспечивать приемлимый уровень качества. Да, на лайтмапе будут кое-где швы в неудобных местах, но если хочется довести до идеала, придётся немного подшаманить. Само шаманство обычно заключается в некоторых подсказках компилятору, то есть речь не идёт о ретопологии и прочих жутких вещах. А то я как-то читал статью про наложении лайтмап в уече.
Вот эту кажется: https://docs.unrealengine.com/en-US...ping/index.html
Добавлено 02-08-2020 в 13:31:
А впрочем, чего я туплю? Вон он этот уеч в открытом доступе, надо посмотреть как там сделано. Среди методов и алгоритмов которые известны разработчику неплохо бы еще и понимать, какие из этих методов используются в продакшене, а не только восторгаться абстрактными демками как наш друг.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Без адекватной развёртки бесшовную лайтмапу нормально не построить, я сам в юнити с этим столкнулся. А адекватную развёртку можно сделать только ручками, я задавался этим вопросом в соседней теме. Ни один алгоритм не даст приемлимого качества, всегда надо будет допиливать ручками.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я думаю сделать три-четыре варианта для лайтмапных развёрток.
1. орто-проекция. Используется по дефолту для брашей и моделей. На брашах практически всегда даёт идеальный результат из-за простой геометрии. К тому же надо понимать, что используемая техника - это не совсем то, что было в кваках, она сложнее, там идёт группировка сурфейсов под допустимыми углами. Так же можно задать единый кастомный угол ортопроекции и получить совсем сглаженный меш, но лайтмапу может и растянуть.
2. UV на основе регулярной сетки. Этот метод идеально подходит для параметрических поверхностей, типа кривых безье, которые представляют собой двухмерную сетку. А раз сетка двухмерная, то у нас уже фактически готовая развертка. На данный момент она неотключаемая для патчей, но потом я введу кастомизацию.
3. пользовательский способ: генерация развёртки на основе текстурных UV с проверкой на самопересечения. Ну собсно, как в UE4.
4. пользовательский способ, двухпроходной. Генерация развёртки на основе ковариантной матрицы (ортопроекция), а затем на базе этой развёртки LSCM генерирует боле-мене приличную.
5. пользователь ручками создаёт развёртку для лайтмапы.
Думаю этих вариантов достаточно для удовлетворения всех условий и ситуаций.
Добавлено 02-08-2020 в 15:51:
И в связи с этим, очевидно встаёт вопрос, какой из форматов поддерживает множественные UV? Потому что smd такое не умеет, а следовательно негодится.
Добавлено 02-08-2020 в 15:54:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro а изображать ту же круглую колонну при помощи квадратных вокселей это намного лучше?
Crystallize
Как координата вокселя соотносится с координатами на поверхности?
__________________
http://www.moddb.com/mods/monorail-quest
ну да это я уже чисто про геометрию
FiEctro ты предлагаешь в принципе отказаться от моделей брашей и развёрток? А то может ты имеешь в виду воксели в смысле трехмерного массива из лайтпроб, лайтгрид из ку3.
Crystallize
Ничего я не предлагаю.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ещё glTF по идее держит не менее двух UV-наборов.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вот что я хотел отметить. Когда только-только начинаешь программировать - никаких проверок ни на что не делаешь. Ессно оно вылетает при каждом удобном случае. Когда ты уже набрался достаточно опыта - лепишь эти чёртовы проверки везде, даже там где по смыслу они не особо нужны. И тем самым просто загоняешь проблему еще глубже. Чтобы её потом было невозможно отдебажить. По хорошему код должен работать таким образом, чтобы не допускать появления невалидных данных в принципе.
А если допустил, значит это нештатная ситуация. Поэтому если где-то вылетает - не надо там ставить проверку. Надо разобраться как там вообще появились невалидные данные. Т.е. ошибка где-то вообще в другом месте.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ты же сам понимаешь что не бывает идеальных алгоритмов. Везде приходится идти на уступки и компромисы. С теми же развертками, какой то метод работает в одних случаях лучше, а какой то в других лучше чем этот.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В UE3 не было. Вообще за такое руки надо отрывать. Один из самых мерзких антипаттернов. Вообще в UE3 довольно много антипаттернов, навскидку.
Как в четвертом не знаю, сорцы не дают без регистрации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Инстансинг
Ну вот и встала в полный рост проблема. Я еще, когда над параноей работал, прекрасно это понимал, собсно куча одинаковых моделей на карте - это очень плохо во всех отношения. Это не только избыточные данные на диске, но и видеопамяти. Ну хорошо, на грасстесте от силы древеьев мало, ёлочи и той штук 30 не наберётся. А если я захочу ТЛез32? Сосны, поляно, медвед. 65 тысяч килоёлок. Сколько такая карта будет весить?
Одна ёлка занимает полтора мегабайта. Значит карта из уникальных ёлок будет весить 122 гигабайта. То есть вообще не вариант. И да, 65 тысяч килоёлок, это ТЛез16 всего-то навсего. Инстансинг, напомню хранить только то, что отличается. Матрица трансформации и освещение. С динамикой вопросов нет. Как быть со статикой? С лайтмапой на самом деле очень просто - надо завести в описании модели оффсет до реального места в атласе и номер страницы. А вот повертексное так уж не запишешь.
Но я так рассуждаю - если уж на модели есть лайтмапа, то и фиг с ним, с повертексным-то. К тому же возможность встроить модель внутрь карты, никуда не исчезнет, она тоже останется.
Но сделать инстансинг - полдела. Мне еще предстоит работать промежуточный бинарный формат кэшированных моделей. Объясню почему. Генерация лайтмапы, равно как и построение конвексного хулла - весьма небыстрое дело. Есть резон построить это один раз, сохранить в кэш, а в дальнейшем просто брать при компиляции эту модельку из кэша. Ну или вообще хранить снаружи, чтобы не усложнять. Или использовать оба варианта. Возможно что промежуточный бинарный формат станет одним из основных неанимированных форматов мешей для движка. Как оптимальнее - станет понятно уже по факт имплементации.
В принципе в параное есть зачатки такого кэша, она создаёт файлы .TBN и .CLIP видели наверное.
Добавлено 08-08-2020 в 00:11:
Вообще до смешного доходит. makebsp трудился над грасс-тестом две с половиной минуты. Знаете чем он занимался? Генерил текстурные координаты персонально для каждой одинаковой ёлки. В сумме 0.3-0.5 секунд, но и ёлочи тоже порядочно ведь на карте.
dolight строил KD-tree для эффективной трассировки 22 секунды.
А собственно рассчёт освещения длился 13 секунд. Лайтмапа, к слову немаленькая, 1024х1024. Чёрные треугольники - это не артефакты, они просто развернуты в сторону от солнца. Вообщем узкое место совсем не там, где его можно было-бы ожидать.
ЗЫ. лайтмапа пропорциональная, форум не пускает.
Добавлено 08-08-2020 в 00:16:
Вообще видно наглядно, как все старые "проверенные" технологии из 90-х отваливаются, когда речь заходит о получении боле-менее достойной картинки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Поскольку разработка движка ведётся примерно так же, как выполняется программный код, это меня приводит порою к очень далёкому отклонению от изначальной цели. Ну скажем, решил я разработать новый формат шрифтов. А где шрифты - там и спрайты. Значит надо переписать худ и меню, чтобы оно использовало новые картинки. Вот и разработка рендерера (эксперименты с динамическим освещением). вполне логично пришла к тому, что неплохо бы иметь референс в качестве лайтмапы, а где лайтмаппер, там и новый формат уровней, а в новом формате уровней неплохо бы предусмотреть возможность embedded-моделей - ну это, чтобы не дублировать их, а хранить одну копию только. Но поскольку для этих моделей неплохо бы предусмотреть какой-то промежуточный кэш, потому что вычисление координат лайтмапы, сглаживание нормалей, рассчёт конвекс-меша, всё это, очевидно занимает какое-то время, лучше сделать кэш. Но какой смысл лепить для кэша какие-то искуственные форматы? Лучше уж сразу его сделать чем-то типа студиомодели, чтобы его можно было использовать и так и эдак. Но всё равно, поскольку этот формат встраивается в карту, логично обеспечить сходность структур, чтобы всё совпадало. И тут я прихожу к мысли, что разделение на уровни и модели - излишне. У них весьма много общего - коллизия, BSP-дерево, сурфейсы, вертексы (у вертексов хранится либо повертексное освещение, либо номера костей), сурфейсы. Ну вообщем отличия только в том, что у BSP есть виздата с порталами, а у моделек - кости. Вполне логично объединить всё это в общий формат с чанками. Получим доброкачественный комбинаторный взрыв, возможности которого по настоящему смогут раскрыть только будущие пользователи движка.
Опять же не придется городить разные просмотровщики для моделей и уровней. Но есть и еще один важный момент - у моделей, как известно есть анимации, а у брашей их нет. Но и тут всё довольно удачно складывается - дело в том, что хранить анимации в модели неудобно и сейчас так уже практически никто не делает. Вместо этого используется банк анимаций. Наделал человек персонажей, к примеру. Они все разные, но у них один и тот же скелет. Какой смысл вкомпиливать эти анимации в каждую модель заново, дублируя? Никакого. Банк анимаций будет строится автоматически, при компиляции каждой новой модельки, если конечно они в нее добавлены. Доступные анимации будут находиться тоже автоматически, по сравнению скелетов. У скелета должны совпасть кол-во костей, имена костей и их иерархия. Ну можно еще конечно позицию-вращение проверять, но это пусть Nemyax скажет, важно это или нет.
Добавлено 08-08-2020 в 15:00:
Мне тут кстати забавная мысль пришла в голову. Для таких объединённых форматов можно будет использовать именованные аттачменты на уровнях, в качестве каких-то точек-локаций, которые не будут жрать эдикты. Ведь очень же часто возникает ситуация, когда надо указать точку, под которую отводится целая энтить. Ну там спавн телепорта или инфо_плеер_старт.
А тут аттачменты. Можно будет сделать сквозной поиск через энтити и такие вот точки в особых случаях. Патч-корнеры всякие так можно хранить.
Или спавнеры тех же эмбеддед моделей, если мы не хотим, чтобы они занимали эдикт. Опять таки энтити в движке доступны весьма условно, а вот такие точки - всегда.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Интересно, несколько таких 'моделей' можно будет собрать в единый префаб/сущность/контейнер?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ничего не понял, но напомнило мне то что я описывал тут
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Слева p2st честный радиосити. Справа - фейковые баксплэши. Яркость немного не совпадает, да, потом подкручу.
Ну это так, навскидку.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Пол и стены пересвечены, а потолок чёрный.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сегодня важный день
Готовность движка достигла 50%-ной отметки. Я намеренно опускаю все прошлые попытки и эксперименты, к которым я так или иначе возвращался на протяжении прошедших десяти лет. Частично об этом можно почитать в этой теме.
Скажу только лишь, что изначально мы с Ксероксом рассуждали примерно в одном направлении - GoldSource отличный движок, но многое в нём устарело, мешает груз совместимости со устаревшими форматами, в частности текстурами в вадах. Надо просто взять и отрезать всё лишнее и получится совершенно свой, простой и удобный движок. Я отказался от этой идеи еще в 2016-м году, а Ксер проследовал по этому пути до контса и у него получилась Волатила. Насколько эта концепция удачна - судить пользователям. А я решил двигаться дальше, рассудив, что на движке неплохо бы делать игры, с детализацией уровня сталкера, метро и тому подобного. Ну то есть там не должно быть технологий, которые при сильном наполнении, наоборот, начинают тормозить разработку и отрисовку. Путь, этот, как вы понимаете, был непростым и небыстрым. Часть технологий была обкатана еще на рендерере второй паранои. Разработка движка фактически началась с первого марта 2019-го года, продолжалась месяц, потом была стопнута, поскольку мне необходимо было выпустить финальные ревизионные билды для Xash3D, XashXT и P2.
Всё это отняло три месяца - апрель, май и июнь. Собственно полноценная работа началась вот с этого момента.
Т.е. движок в разработке уже 13 месяцев. Очевидно мне понадобится еще столько же времени, чтобы выпустить первую публичную пре-альфу (разумеется промежуточные версии будут доступны раньше). Давайте посмотрим, что было сделано за это время и что только предстоит еще сделать:
1. Движок полностью переписан на С++
2. Новая концепция пользовательской части (client.dll больше не будет)
3. Разработана новая уникальная система материалов без строгого языка их описания и с возможностью для пользователя, создавать абсолютно любой рендерер, не затрагивая, собственно движок (признаться этот момент волновал меня больше всего).
4. Разработана концепция единого формата хранения моделей\уровней\спрайтов, где каждый из типов потенциально наследует свойства соседа, если это вдруг понадобится и обладает широчайшими возможностями по встраиванию одних моделей в другие.
5. Разработан новый формат для хранения 2D-графики - шрифты, элементы меню, худа.
6. Полностью переписано меню, появилась возможность формирования собственных меню из скрипта.
7. компиляторы уровней и статического освещения. С учётом вышенаписанного - высокополигональные модели не должны замедлять компиляцию.
8. Новый рендерер с data-driven архитектурой.
9. Очень сильно переписана игровая часть движка, в плане архитектуры и концепции, но сами энтити пока что остались прежние.
Теперь, что еще осталось сделать в будущих 50%.
1. финализация единого формата хранения геометрии. Тут еще довольно много работы на самом деле, т.к. необходимо всё это корректно увязать в любых комбинациях, но к этому предрасполагает сам структура его организации. Надо просто быть внимательным.
2. финализация компилятора освещения, добавить радиосити, возможно сделать опционально запекание сферических гауссовых лайтмап или любой другой модерновой техники, благо формат позволяет добавить практически любой алгоритм такого плана за считанные часы.
3. финализация рендерера - добавление недостающих элементов, мультипроходности, мультирендеринга в текстуру и вывод контроля за этим в пользовательскую часть. Дополнение и расширение концепции.
4. Физика. Ну главным образом конечно коллизия. Коллизия будет построена еще на этапе компиляции. Солвер в сущности уже не так важен. Да и не возлагаю я на эту физику каких-то особых надежд, ну пусть бочки катаются, а персонажы ставят ноги точно на поверхность.
Потом можно будет постепенно добавить еще каких-то глупостей.
5. Организация пользовательской части. Ну скорее всего будет вынесена в скрипт-машину, чтобы избавить пользователя от общения с языками общего назначения. Этот момент пока еще не продуман толком.
6. Сеть. Частично завязано на скрипт-машину, т.к. в ней будут хранится описания полей, которые передаются по сути. Аналогично и предиктинг удобнее реализовывать, опираясь на мета-информацию. Бакэнд менять смысла нет.
7. Универсальный МешВьювер. Здесь проще, т.к. формат единый.
8. Собственный редактор уровней\окружения. Поправде говоря этот пункт выпадает за время разработки движка и идёт отдельной задачей. Так что вместо него будет на первое время просто плагин к Джеку.
Так же следует отметить, что движок отличает сверхвысокая совместимость со всеми старыми играми, под которые вы так любили кубать - ку1, ку2, ку3, хл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'
Дядя Миша
Ох, интригует. Таки надеюсь, что во второй половине осени смогу вернуться к работе и перенести свои наработки на NT.
__________________
http://www.moddb.com/mods/monorail-quest
>> Скажу только лишь, что изначально мы с Ксероксом рассуждали примерно в одном направлении - GoldSource отличный движок, но многое в нём устарело, мешает груз совместимости со устаревшими форматами, в частности текстурами в вадах. Надо просто взять и отрезать всё лишнее и получится совершенно свой, простой и удобный движок. Я отказался от этой идеи еще в 2016-м году, а Ксер проследовал по этому пути до контса и у него получилась Волатила. Насколько эта концепция удачна - судить пользователям.
Я не раз предлагал разбить ядро на модули. Чтобы он поддерживал как старый ксаш так и новый. И переключаться между ними так же как между модами, и позволять пользователям писать свои (например форки). Само ядро не должно быть ориентировано ни на какие форматы или игровой код.
Всё остальное пользовательские модули, которые можно ложить прямо в корень ксаша ввиде дллок:
xash.dll, xashnt.dll, albatrosfork.dll, beiskaarja.dll
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Материалы то понятно, а что с другими форматами делать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Интересно. Надеюсь, первые рабочие сборки можно будет потрогать довольно рано
__________________
Killing Floor: Horzine Outbreak
FiEctro формат будет свой. У всякого движка свой формат. Если движок поддерживает только чужие форматы, это не движок, а вьювер.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нету там ничего общего, да это и неважно. Разные идеологии.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да ктож теперь знает? Я помню в википедии было написано...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Буржуям можно давать линк на эту тему?
Crystallize кому именно?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дошли наконец-то руки немного уделить времени. Ну и естественно - надо скомпилить ЧАЭС. Потому что, если движок не сможет переваривать такие локации и делать это достаточно быстро - под сомнение ставится целесообразность его разработки. Итак, с матами, перекурами, превышениями лимита памяти, но я всё-таки это скомпилил.
1 | BuildKDTree: 57.549385 secs |
2 | CullLights: |
3 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.76 secs) |
4 | 80542 lights culled |
5 | DirectLighting: |
6 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (13.27 secs) |
7 | 4480438 total traces casted, 3140144 luxels illuminated |
8 | total lightmap pages 71 |
9 | CreateLightmapPages: 121.817964 secs |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Побегал по нему?
Рано еще бегать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что на динамике?)
__________________
-Brain is dead-
Фпс абсолютно не радует. Какие-то жалкие 700 тысяч полигонов без света, без лайтмапы. Надо оптимизировать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это всё одним куском рисуется, или там виз?
__________________
http://www.moddb.com/mods/monorail-quest
Одним куском. Но фпс ниже некуда. Здесь должно быть около тысячи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чего тут у вас нового?
Да вообщем-то ничего. Пока нет времени на разработку.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я уже говорил, что материалы состоят из нескольких частей и дефолтная часть имеет название по типу модели. С пересмотром концепции это утратило актуальность. Связка должна быть по формату описания вертекса, а сам формат вертекса будет плавающий, свободный.
Добавлено 28-08-2020 в 22:39:
Пока я тут изучал, как эффективнее внедрить этот механизм, мне в голову пришла одна идея, естественным образом дополняющая мою систему материалов. Поясню. На данный момент, механизм является Data-Driven процентов на 80. Что это значит? А это значит, к примеру, что если у нас в шейдере объявлен какой либо юниформ, но при этом не используется, то после компиляции шейдера, его локация будет равна -1. И в списке внешних данных он попросту не появится - т.е. эти данные не будут подготовлены движком и как следствие - не будут отнимать время на бесполезные рассчёты. На первый взгляд это бесполезная оптимизация, если речь идёт о каком-нибудь юниформ-векторе. Но скажем, когда мы передаём кости - это уже ощутимо. Но это распространяется и на текстуры! Если шейдер не использует какой-то текстурный юнит, его текстура просто не будет загружена. То есть уже экономия текстурной памяти. Аналогично надо сделать и с VBO-массивом. Он будет формироваться при загрузке динамически. Это финальный штрих по полному управлению видеопамятью из шейдера. Причём для этого используется встроенные средства GLSL.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Видимо разработка NT проходит под девизом "Se vogliamo che tutto rimanga come è, bisogna che tutto cambi"
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, судя по всему, пора переходить на октодерево. BSP вообще не справляется, да мне он по сути и не нужен.
Единственное, что от него полезное использовалось - в паре с генерацией порталов - обрезание наружних невидимых полигонов. Но народ давно их вручную красит, так что не имеет никакого значения.
Заодно и наличие\отсутствие дырок не будет влиять на процесс сборки.
К тому же октри всегда строится налиту, его незачем хранить в карте.
И это будет универсальное единое дерево, как для мобов, так и для статики.
В квейках приходилось поверх лепить еще одну абстракцию, что было неудобно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему именно октодерево, а не BVH? По тестам, BVH работает быстрее, а весит меньше
https://pdfs.semanticscholar.org/e0...b3f863ed6ea.pdf
ncuxonaT может и BVH. Посмотрим. Еще BIH есть, напоминаю.
Добавлено 08-09-2020 в 18:53:
Crystallize в "большом" геймдеве тоже все удаляют невидимые полики, а тех кто не удаляет - бьют по рукам малой сапёрной лопаткой.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша речь не про большой-маленький геймдев а про ручую-автоматическую работу.
Помоему все брашы и мешы по дефолту окрашены в nodraw, а дизайнер уже текстурит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша кубают люди не с текстурой нодрав. Я сразу как есть кубал. Это только сорсовцы везде пихают свою оранжевую или серую клетчатую текстуру по дефолту. Это часть их культуры. ©
Оказывается AABB-tree это частный случай BVH.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Ну это какраз очень правильная культура. Как всё покрасишь — так остальное в нодрав.
__________________
http://www.moddb.com/mods/monorail-quest
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
BVH можно вообще без стека
Добавлено 09-09-2020 в 13:30:
А вообще, перееду я всё-таки в телегу. Комментить особо нечего, а за прогрессом следить - самое то. Ну и хоть посмотрю сколько там будет подписчиков.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ссылку бы
__________________
-Brain is dead-
KiQ на что?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша мне кажется KiQ про твой ТГ. Если в подписи поставить ссылку на него, народ будет подписываться, мне думается.
Дядя Миша на телеграмм)
__________________
-Brain is dead-
В телеграм я пока не пишу, естественно выложу ссылку.
Итак, дальнейшая работа над декомпилятором уровней сталкера продолжена быть не может. Почему? Очень просто. Вопрос и раньше вставал, но теперь уже без вариантов - надо заняться коллизией.
Нет нормального механизма. Собственно вариантов коллижен-детектора в природе существует два штуки: полигональный и конвексный. Я не рассматриваю случаи столкновения сфера vs бокс, сфера vs цилиндр, так как речь, естественно, о коллижен детекторе произвольной геометрии.
Полигональный - это конкавный детектор, т.е. геометрия может быть произвольной формы. Конвексный работает только с выпуклыми телами, а невыпуклые тела разбиваются на выпуклые (декомпозиция). Частным случаем конвексного детектора являются и нашы брашы. Просто в большом геймдеве их брашами давно никто не называет, ну конвексный объект и всё.
С брашами преимущество было в том, что дизайнер заранее строил уровень из конвексных объектов. Но в подходе к генерации брашей заложена мина - их качество очень сильно привязано к точности вещественных чисел. А точность вещественного падает (экспоненциально?) при удалении от центра (нуля). Вальва в сорсе даже замутила такой хак, что все брашы перед созданием сурфейсов принудительно перемещались в центр, а потом возвращались обратно - для большей точности результатов. Но это конечно так себе выход - ошибки всё равно накапливаются. Именно поэтому кстати BSP\CSG и работают с двойной точностью вещественного, уж слишком видна разница. Но зато с такими объектами очень просто реализуется коллизия - минимум операций, всегда предсказуемые результаты. Собственно, когда встал этот вопрос - как коллидить с объектами произвольной формы, Кармак из каждого полигончика сделал такой тонкий браш.
Но с оговорками. Во первых это было сделано только для параметрических поверхностей - т.е. патчей. Которым можно регулировать уровень разбиения и таким образом создавать более грубое приближение. Но уже для вставляемых на карту моделей делать что-то подобное он отказался (в ку3 кстати где-то было коммент на эту тему в исходниках, слишком много полигонов). Впрочем тогда и компутеры были слабже. Так-то подход неплох в целом. Например я использовал его в XashXT генерируя брашы налиту и каждый кадр для физических объектов. Разумеется, тех объектов, которые мне сделал PhysX из полигональных.
А там действовало жесткое ограничение - максимум 256 полигонов на твёрдое тело. К тому же брашы генерились только непосредственно перед коллизией (когда монстр\игрок оказывался слишком близко от тела и не перестраивались, если его положение не менялось, поэтому оно практически не тормозило). Именно поэтому мне многие говорили, что в XashXT очень приятное взаимодействие игрока с физтелами - его как буто реально чувствуешь, а не проваливаешься в него или оно улетает куда-то от малейшего прикосновения. Но в целом такая схема оправдана быть не может. Всё же слишком много операций. В Параное-2 я пошёл еще дальше, физикса там уже не было (Элбер сказал, что на физику ему плевать, но рагдолл бы не помешал). Там я этот подход переписал на качественно новый уровень, ввёл хэширование плоскостей и другие ускоряющие операции. Да и сами брашы коллизий сохранил в кэш, чтобы не строить его каждый раз при загрузке уровня. Но и всё равно, генерация таких вот брашей для той же ЧАЭС занимала порядка получаса, а плоскостей получалось около 10 миллионов
Происходило это потому, что каждый такой браш, полученный из полигончика создаёт дополнительно вовсе не четыре стороны, как может показаться (для треугольника). Дело в том, что сам механизм трассировки плотно завязан на аксиальность плоскостей. Иными словами брашы, повёрнутые на любой угол, отличный от 90 градусов нормально коллидить не будут. По крайней мере с оригинальным кодом от Кармака. Потому что вокруг каждого браша должен быть во первых описывающий его объем AABB который всегда аксиальный (из него кстати для любого браша можно узнать его AABB - первые шесть сторон всегда аксиальны и отсортированы в едином порядке, это справедливо и для ку2 и для ку3). Второй момент заключается в том, что на проблемные места - острые углы, добавляются бевелы - скосы. Чтобы трасса не застряла в этом проблемном угле. Игрок это никак не ощущает на самом деле. Для него наоборот физика очень мягкая и предсказуемая. Но как вы понимаете, таким образом, у нас во первых каждый браш должен состоять минимум из шести сторон. А бывает и до 32-х, причём реальный полигон там только один, четыре закрывающих, еще парочка аксиальных, остальное бевелы.
Т.е. нетрудно догадаться, сколько места займет такая вот коллизия, даже несмотря на отсутствие в данных вертексов и тот факт, что там нет дублирующихся данных. На этот вопрос очень легко ответить - для той же ЧАЭС коллизия, построенная таким вот образом весила порядка 80 мегабайт. Сталкеровский оригинальный cform - 20 мегабайт. Да и строился он наверняка быстрее, хотя я и не проверял.
Так что в принципе превращать полигоны в брашы - не очень хорошая идея, когда у вас этих полигонов слишком много. Есть более экономный вариант, как вы понимаете. Для этого нам надо превратить нашы полигоны в конвексные брашы. Т.е. не каждый полигончик превратить в отдельный браш. А выполнить конвексную декомпозицию. Из-за чего кол-во брашей в такой коллизии падает в десятки раз, а качество коллизии - наоборот только возрастает. Т.е. на первый взгляд сплошные плюсы.
Но не всё так просто. Во первых нам надо еще построить конвексный хулл для нашего объекта. Хулл можно построить двумя способами - собственно декомпозицией, voxel-based аппроксимацией и вписанием объекта.
Последний вариант - самый простой. Мы просто берём минимальный нулевой объем и добавляем в него новую точку, а умный алгоритм из этого облака точек уже сам создаёт конвексный хулл (это кстати к вопросу, почему физ.движки не требуют полигоны, а именно точки для создания конвексных хуллов). Алгоритм простейший, скорость работы высокая. На выходе что-то очень конвексное. Если этот объект динамический и размерами меньше игрока, то пофиг. Если это статическая геометрия, ну скажем домик деревянный с интерьером, метод очевидно не конает - внутрь зайти будет невозможно. Остаётся декомпозиция. Можно декомпозировать через BSP-дерево, т.к. любой объект, пропущенный сквозь него становится конвексным. А потом мы просто берём полученные конвексные брашы и мержим их друг с другом, пока это возможно. Я использую этот подход для патчей и он себя неплохо зарекомендовал. Для произвольного набора треугольников ситуация сильно хуже. Нет никакой возможность различить где реальная геометрия, а где остатки от исходного браша, иссечённого деревом. Дерево можно строить и наоборот - добавлением, но там получается строго обратная проблема - часть брашей исчезает. В реальном игровом уровне такой проблемы не стоит, т.к. дерево сечёт изначально конвексные объемы. Так что метод рабочий, но да, не слишком надёжный для большого полигонажа. Опять таки он из плоскостей делает объемные штуки, что не всегда удобно. Про VHACD распространяться не хочу - очень долго и очень затратно по памяти. Воксели вообще много жрут, это понятно. Но какую-нибудь сраную модельку, которую BSP декомпозирует за полсекунды, воксельное дерево может считать до полуминуты. Так что этот вариант я не рассматриваю.
Ну и наконец вариант третий - полигональный детектор. Плюс в том, что нам не надо переводить наши полигоны в какие-то принципиально иные сущности - т.е. мы реально трейсим геометрию. Так же геометрию очень легко симплифицировать через тот же Progressive Mesh, например (собственно в Сталкере так и сделано). Но есть у такого подхода два минуса. Во первых, поскольку мы трейсим реально полигон, за ним нет никакого объема (ну в крайнем случае там будет солидный лиф, если мы поместили всё это в BSP-дерево). Поэтому из-за каких погрешностей вещественных очень легко получить результат когда объект пролетает насквозь или застревает в текстурах, ну понятно. Второй минус вытекает из первого - невозможно таким образом сделать нахождение в среде, типа воды или кислоты. В Doom3 где коллизия полигональная задачу решили при помощи брашей. Т.е. браши там остались только для тестирования на нахождение внутри геометрии, в том числе - внутри воды.
Так что вот такие варианты.
Добавлено 10-09-2020 в 15:43:
Итак, исходя из вышесказанного, кокова кота выбы выбрали? что тут можно сделать? У полигональной трассы, не говоря уже тяжёлый алгоритм, собственно трассировки, присутствует некоторая избыточность. Т.е. эти данные в любом случае займут довольно много места, именно поэтому коллоизационные поверхности симплифицируют. Пытаться построить из произвольной модели конвексную декомпозицию - занятие, скорее всего довольно-таки долгое. Особенно если моделей много и они сложные.
И да, чаще всего это всё равно будет приближение. Превращать каждый полигончик в отдельный браш - это очень быстро, но влечёт за собой большие расходы памяти. Но есть один метод. На самом деле - все вот эти скосы и аксиальные планесы, точнее код, который их добавляет к брашу, обладает одной примечательной особенностью, над который вообще мало кто задумывается, а именно - ему плевать на замкнутость браша! Ему плевать на то, сколько у браша сторон. Для нас как бы самое важное - это построить виндинг, а для нормального браша это реализуется только путём взаимного обрезания сторон, как вы понимаете. Но мы рассмотрим вырожденный случай - браш из одного полигона. Прикол в том, что этому брашу бевелы и ограничивающее пространство добавляются точно так же как и настоящему брашу. Это не голословное утверждение - в параное именно такой подход и используется. Т.е. если бы я там делал из полигонов настоящие тонкие брашы, можете не сомневаться, там на ЧАЭС было бы не 10 миллионов плоскостей, а все 40. Второй момент - таким полигонам вовсе необязательно состоять непременно из трёх точек. Проще говоря, там может быть сколько угодно сторон. Главное чтобы он продолжал оставаться конвексным. Это в свою очередь открывает широкие возможности по оптимизации исходной геометрии, поскольку брашы фактически строятся из полигонов, без добавления лишнего. Плюсы такого подхода:
1. не надо ничего глобально переписывать, изменения минимальны
2. надёжность такой коллизии полностью идентична обычным брашам, причём, алгоритм даже не знает что перед ним какие-то полигоны
3. поскольку полигон двухмерен, его легче оптимизировать, наконец можно строить брашы из группы аксиальных полигонов, которые примерно направлены в одну сторону, независимо от того, сколько их там, бевелов будет добавлено кратно меньше, чем если бы мы попытались сделать браш из каждого полигончика. Строго говоря, такая конструкция уже вообще не является брашем с точки зрения редактора или дизайнера. А вот с точки зрения коллижен детектора - очень даже является.
4. униформное хранение данных. Плоскости индексированы, а у сами плоскостей дополнительно индексированы нормали. Т.е. при разумном подходе можно очень сильно сократить данные.
5. скорость работы. Даже при тех десяти миллионов полигонах, помещенных в простейшее AABB-дерево, коллизия на ЧАЭС была довольно таки надёжной и быстрой. А ведь можно было сделать на порядок умнее.
6. Наконец никто не мешает пропустить набор треугольников через дециматор и получить на выходе упрощенную копию. К слову сказать - дециматоры тоже очень быстро работают, это весьма простая операция.
Но конечно надо будет затестировать различные варианты и посмотреть, какие лучше годяцца.
Учитывая вышесказанное, как вы уже догадались, я в первую очередь попытаюсь дожать именно коллизию по полигоно-брашам. И если результат меня устроит (ну скажем общий объем данных коллизии будет меньше чем в сталкере), то тогда уже можно будет рассмотреть вопрос об используемом дереве.
В заключение хочу сказать пару слов о том, почему я иногда выбираю те или иные решения. На самом деле, я не ставлю себе догмы, что BSP устарел и его надо срочно дропнуть и не особо оглядываюсь на другие проекты, ну типа в сталкере октри, значит и мне тоже надо. В первую очередь, я всегда пытаюсь выжать максимум из уже имеющейся технологии, сделать что-то такое, чего возможно еще никто не делал.
Это интересно. А пихать в движок всего подряд по принципу - на дворе 2020й год, нам срочно нужны воксели - не очень.
Добавлено 10-09-2020 в 15:46:
И да, я очень люблю униформный подход, он потенциально обеспечивает будущие возможности, о которыхна момент разработки никто не задумывается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Звучит заманчиво. Ну мне везде заманчиво, где не надо кубать.
В сталкере геометрия для коллизий считалась автоматически для целой карты?
ncuxonaT сам формат cform я еще не разбирал, но визуально он выглядит как сплошная полигональная геометрия. А уж из скольких кусков он состоит и как эти куски помещены в дерево, я не смотрел.
У превращения полигонов в браши есть главный минус - такая дата много весит. Во всём остальном сплошные плюсы. То есть задача - симплифицировать эту геометрию. Но ведь для полигональной коллизии это тоже нужно. Значит в любом случае этим займусь.
Добавлено 10-09-2020 в 17:22:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот что мне удалось выяснить. Основных алгоритмов существует две штуки.
Quadric Error Metrics (QEM) от Мишеля Гарланда. Имплементация называется qSlim, была впервые выпущена в 1998-м году, а в 2006-м её автор устроился в NVidia, где вероятно пребывает и по сей день. Но это это не точно.
Вот страничка https://mgarland.org/software/qslim20.html
Собствено именно эту реализацию использует XRay. Алгоритм хороший, но при пороговых значениях полигонов начинает быстро терять детали. Зато в оригинальной имплементации масса всяческих настроек и обратная связь, отслеживания пороговой деградации меша. Ну то есть, когда кол-во полигонов снижается до критического уровня и он перестаёт сохранять свою форму в рамках заданной погрешности.
Второй вариант Progressive Mesh от Stan Melax. Это тоже известный чувак в геймдеве. Вот его страничка http://www.melax.com, алгоритма там уже нет, но насколько я понял, он так и называется по имени автора - Melax.
У него есть git где всё это и выложено: https://github.com/melax/sandbox
Имплементация PM называется bunnylod, именно её я когда-то использовал для симплификации мешей в VHLT CB для ускорения трассировки. Впрочем я не проверил тогда результат визуально, так что возможно где-то ошибся - в тенях частенько бывали дыры.
Его алгоритм на порядок проще и даёт гораздо более устойчивые варианты при слишком низком поликаунте, там где QEM уже обсирается.
Но нет никаких настроек. На git обновлённая версия алгоритма, оригинальную можно найти например здесь: https://github.com/dougbinks/BunnyLOD И кстати, автор убрал ссылку, но сам файл лежит на прежнем месте: http://www.melax.com/bunnylod.zip
У самого Стэна так же есть множество любопытных вещей, которые занимали нашы умы в начале нулевых, в частности - геомод на BSP-дереве (sandbox\testbsp, sandbox\testbool), на сайте есть уже откомпиленное. Вы же всё спрашивали за геомод, ну вот.
Теперь надо выбрать между этими двумя алгоритмами или использовать оба. Тут вот какой еще важный момент - вертекс можно перемещать без особых проблем, нормально можно рассчитать заново, но это не касается координат текстуры и лайтмапы.
Добавлено 11-09-2020 в 12:36:
То что касается меша коллизии, здесь как бы ответ однозначен - надо симплифицировать по максимуму. Качество коллизии от этого только вырастает. А вот насчёт видимой геометрии - тут всё не так однозначно.
Помните я говорил, что лоды в наше время не имеют определяющего значения, потому что главная нагрузка идёт на пиксельный конвейер, а он в свою очередь эффективно лодируется мипами? На 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'
В телеге появились каменты! Так что все условия созданы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дядя Миша
У тебя есть канал? Или только открываешь?
__________________
Killing Floor: Horzine Outbreak
Канал есть, но там чертовщина какая-то творится. Я там еще ничего не написал, а на него уже 3 человека подписано
очуметь можно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так на будущее подписываются. Я тоже подпишусь, только ссылки не видно что-то.
__________________
Мой мод на Xash
Дядя Миша
А ссылку на канал где нойти-то?
__________________
http://www.moddb.com/mods/monorail-quest
Так в том-то и дело, что нигде
Я её никому не давал и ничего там не писал. А у меня уже три подписчика.
Наверное товарищи Маёры
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша перебрал варианты unclemike, anklemike, xash3d, zveryuga. Не нашёл.
кто на Angel Lanta был?
Дядя Миша
Ну эти трое самые догадливые, береги их!
nemyax буду беречь, особенно если учесть, что третий - это я.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ради интереса сконвертил карты из мода RavenKeep в формат, понятный XashNT. Надо сказать мой оптимизатор дерева и тут прекрасно управился.
source 156985 nodes, optimized tree 5392 nodes |
source 100835 leafs, optimized tree 3352 leafs |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот вся эта замута с ConvexDecomposition и т.д. это случайно не та же самая компиляция моделей в браши с которой я бегал раньше?
Я не слежу кто с чем бегает, и тем более что он имеет в виду на самом деле.
Convex Decomposition - это разложение произвольного тела на выпуклые.
Можно каждый треугольник превратить в браш, это самый тупой и неоптимальный метод. Но зато и самый надёжный. Именно так я поступил в p2st, он умеет из ase-моделей создавать брашы. И из патчей тоже.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нашёл немного времени, дай думаю распарсю level.cform.
Там коллизия. Взял Кордон для этого дела (ну я вообщем пока с ним экспериментирую). 20 мегабайт оно весит и там миллион триста тысяч индексированных вертексов. И это только коллизия.
Но если я правильно понял - там вообще вся коллизия. Т.е. для каждой ёлки-метёлки отдельная копия. Щас пытаюсь эту коллизию скомпилить в видимый уровень. Нормалей нет, текс-кордов нет (сделал автогенерацию), боюсь даже представить что из этого выйдет. Скорее всего out of memory.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
thambs сталкеровские уровни.
Физ. движки практически все работают в абсолютном пространстве, из-за чего исключают дубликаты. То есть, если я, наставил на карту 100500 ёлок, у каждой будет своя уникальная коллизия. Несмотря на то, что они статики.
Впрочем в ку3 такая же схема. Но я еще при работе над параноей придумал как это корректно обойти. Там основная сложность не просто в трансформации трассы в локальное пространство. Её еще надо повернуть корректно. И с этим есть некоторые сложности.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подгрузил так же уникальные модельки. Которые на карте присутствуют в единственном экземпляре. Overview кордона:
Вот эти квадратные дырки по моему разумению потом будут заполняться какими-то повторяющимися объектами. Ну то попозже.
Наконец-то можно полетать над кордоном. И оценить его размеры. В сталкере меня всегда бесило отсутствие ноклипа.
Обратите внимание, что внутренности домов видны, а наружная часть - нет. Это не баг отрисовки. Просто наружные коробки домов - это повторяющася модель, которая везде одинаковая, а вот внутри уже уникальная обстановка. Я эти модели просто еще не грузил. У них есть своё местоположение, угол ориентации.
Видеокарта на работе GT640, оптимизации здесь никакой нет, что вижу то рисую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
На кордоне - десять тысяч кусочков моделей. Я в этой карте собрал около трёх тысяч.
Вот еще какая мысль мне в голову пришла, кстати Ксер и тебе тоже советую поэкспериментировать. BSP при построении, проверяет размер ноды на максимально допустимый. И если он превышает 1024 юнита, то делает дополнительный разруб. Но как она его делает?! Просто берёт плоскость с этим отступом в 1024 юнита. А что если эту часть дерева строить по классическому AABB-разбиению? Тогда у нас уровень до определённых размеров будет делиться точно поровну. В моём понимании это хорошо способствует пространственной балансировке дерева и выравнивает время доступа к нему.
1 | int SelectPartition( tree_t *tree, node_t *node, bface_t *list ) |
2 | { |
3 | if( tree->blocksize > 0 ) |
4 | { |
5 | dvec3 halfSize = dvec3( node->bounds[1] - node->bounds[0] ) * 0.5; |
6 | dvec3 normal; |
7 | double dist; |
8 | #if 0 |
9 | if( halfSize.x > tree->blocksize || halfSize.y > tree->blocksize || halfSize.z > tree->blocksize ) |
10 | { |
11 | int axis; |
12 |
13 | if( halfSize.x >= halfSize.y && halfSize.x >= halfSize.z ) |
14 | axis = PLANE_X; |
15 | else if( halfSize.y >= halfSize.x && halfSize.y >= halfSize.z ) |
16 | axis = PLANE_Y; |
17 | else axis = PLANE_Z; |
18 |
19 | normal = dvec3( 0.0 ); |
20 | normal[axis] = 1.0; |
21 | dist = ( node->bounds[1][axis] + node->bounds[0][axis] ) * 0.5; |
22 |
23 | return FindHashPlane( dplane( normal, dist )); |
24 | } |
25 | #else |
26 | // if it is crossing a 1k block boundary, force a split |
27 | for( int i = 0; i < tree->blockdimensions; i++ ) |
28 | { |
29 | if( halfSize[i] > tree->blocksize ) |
30 | dist = tree->blocksize * ( floor( ( node->bounds[0][i] + halfSize[i] ) / tree->blocksize ) + 1.0 ); |
31 | else dist = tree->blocksize * ( floor( node->bounds[0][i] / tree->blocksize ) + 1.0 ); |
32 |
33 | if( dist > ( node->bounds[0][i] + 1.0 ) && dist < ( node->bounds[1][i] - 1.0 )) |
34 | { |
35 | normal = dvec3( 0.0 ); |
36 | normal[i] = 1.0; |
37 | return FindHashPlane( dplane( normal, dist )); |
38 | } |
39 | } |
40 | #endif |
41 | } |
42 |
43 | if( tree->optimized ) |
44 | return SelectPartitionVL( node, list ); |
45 | return SelectPartitionQ3( node, list ); |
46 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что насчет лимитов всяких? Не получится ли так, что если чел захочет сделать опенворлд, он уткнется тупо в лимиты чего-нибудь и у него получится в лучшем случае просто пустой мир?
__________________
Killing Floor: Horzine Outbreak
У меня такой же вопрос. В ксаше я обратил внимание, что если поставить 30 солдат модельками как env_static, фпс не проседает, а если 30 реальных - то сильно падает. Это из-за их кода или бсп-дерева? Не совсем понимаю, как это работает.
__________________
Мой мод на Xash
KorteZZ лимитов в новом ксаше особо нету. Лимиты только в аппаратном обеспечении.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Есть планы по выносу AI в отдельный поток?
__________________
http://www.moddb.com/mods/monorail-quest
Есть планы по оптимизации, а не по выносу.
Добавлено 03-11-2020 в 16:04:
Мне сейчас надо определиться с типом коллизии, вот оно что.
Представлять каждый треугольник в виде плоскости со скосами, довольно эффективно в плане скорости работы, но занимает чудовищно много места.
На какой-нибудь ЧАЭС легко может быть 10-15 миллионов плоскостей.
А ведь она по современным меркам довольно таки лоу-поли.
Впрочем там вылезает еще одна проблемка. У видеокарт оказывается, существует лимит на максимальный размер VBO - обычно миллион вертексов.
Самое поганое, что и на индексы точно такой же лимит - 1 миллион.
Это немного нелогично, к тому же превышение лимита далеко не всегда приводит к каким-то последствиям, на моих карточках.
Так что придётся еще и геометрию разбивать на небольшие батчи.
Наверное сделаю куски по 65 киловертексов с локальными оффсетами, чёб индексы хранить в 16-битном диапазоне.
Но повторюсь, главная задача, это определиться с коллизией. Коллизия будет по треугольникам, но надо решить с какими фигурами. Можно сделать просто triangle vs bbox. Можно как в третьем дууме - набирать произвольные простенькие фигуры из конечного числа вертексов - обычно 32-64. В том же физиксе лимит на активное тело - 256 вертексов, но как правило это даже избыточно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А в сталкере разве нет упрощенной модели геометрии для коллизии? Может строить/подгружать из 3д пакета её в компиляторе моделей, как это делает сорс?
__________________
Ржака
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так почему бы не использовать сталкеровские методы обработки коллизии для сталкеровских моделей? Они тоже медленные?
__________________
Ржака
Да нет никаких "сталкеровских" методов.
Загрузил недостающие части ландшафта. Обратите внимание на поликаунт.
На машинках почему-то текстуры съехали, на всех. Но я пока не разбирался.
Ну вот, прекрасная сцена для тестирования и оптимизации отрисовки и коллизии. Ну и для оптимального хранения данных тоже. Разумеется, я потом буду тестировать и другие сцены, вероятно и из эксодуса, надо получить вменяемую производительность.
Но тут конечно без вариантов - точного ответа нет. Только тестировать и сравнивать. Лоды проверю, размеры батчей, оптимальные размеры VBO, помощь дерева в отрисовке, и так далее.
Это вот как раз такой тип сцены, что нихрена не спрячешь и не укроешь, всё как на ладони.
Добавлено 05-11-2020 в 18:35:
По сути с этой сценой даже мой компилятор не справляется - ему не хватает памяти, выручает только ключ /3Gb в boot.ini
Предвидя советы "ну почему бы не сделать как в сталкере", напоминаю, что новый движок должен уметь как активно использовать полностью брашевые карты, так и полностью полигональные. Т.е. задачка несколько сложнее, чем представляется на первый взгляд.
Нет, не в оптимизации, конечно дело. А в выборе наилучших методов.
А чтобы что-то выбрать, надо многое протестить. Это время.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне уже больше нравится то что на скриншутах, чем в оригинале. Интересно что будет с эксодусом, учитывая что не играл в Метро.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему коллизия по треугольникам? Ты хочешь строить какую-то единую структуру для всей карты со всеми елками?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Еще одну забавную вещь обнаружил. Фрустум использует коллижен три для определения пересечений видимости и отсечения невидимых, нет не полигонов, скорее всего целых моделей, аппроксимированных до ббокса.
Вместо запроса OQ. Впрочем такой подход, предполагает геометрию, оптимизированную особым образом и не слишком вяжется с брашевыми уровнями. Тут скорее надо чтобы уровень был разбит на достаточно большие куски.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дома Noesis окончательно сломался, вылетает при запуске, ничо не помогает.
Но на работе воркает, я его запустил и проанализировал кусочки террайна от сталкеровской карты. И вот что выяснилось - сплиттер вообще не анализирует геометрию на предмет пространственной принадлежности.
Он скорее смотрит, чтобы у вертексов не было соседей. Т.е. эти куски, на которые разбит ландшафт могут проходить через всю карту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил опробывать BVH-деревья для трассировки. Я хронически путаюсь с терминологии, поэтому до сих пор забываю, AAAB это подмножество BVH или наоборот. Ну да ладно. Вообщем деревья строго аксиальные.
Сталкер не имеет собственной подсистемы коллизии и юзает стороннюю, точнее связку ODE + OPCODE. Вот здесь конечно нейминг вводит в лютое заблуждение. Потому что OPCODE воспринимается как целое слово - операционный код для процессора\виртуальной машины. Хотя на деле это аббревиатурко от OPtimized COllision DEtection. Была такая библиотека, в начале нулевых. А еще до нее была библиотека RAPID, которую OPCODE, со слов автора превосходила в большинстве случаев минимум в 2 раза.
Ну и вот значит сталкер её использует для коллизии. Точнее первоначально её использует сам ODE для симуляции твёрдых тел. А сталкер использует именно как коллизию, в двух кейсах, понятно - точечная трасса и трасса ббоксом для всяких игровых ситуаций. Точечная трасса, луч, так же используется для лайтмаппера. А я, напомню, заюзал вальвовское KD-tree, переписав его на FPU. И в целом был доволен до поры, так сказать. до времени. Но выяснилась неприятная вещь. Оно адски долго строится, если полигонов много. На сталкеровских картах это может занимать несколько минут. Второй момент, как вы уже наверное, догадались, был связан с тем, что я хотел уйти от коллизии по плоскостям и мне для этого понадобилась новая структура организации данных.
Ну в данном случае OPCODE был просто первый, кто под руку подвернулся. Там в принципе хорошая кастомизация по выбору секущей, можно поэкспериментировать. Сам OPCODE предлагает кроме построения дерева еще и саму коллизию, но сталкер использует собственные методы, ну впрочем как и я. Итак, я заимплементировал это дерево самостоятельно, чёб не тащить целую либу ради такой ерунды и провёл предварительные тесты. Для тестов использовал карту shaderlab_terrain, там гигантская моделька гор, хоть и довольно низкополигональная. Результаты:
Вальвовское KD-tree
1 | tree size: 1.12 Mb |
2 | KDTree::Build: 2.152100 secs |
3 | CullLights: |
4 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.00 secs) |
5 | 0 lights culled |
6 | DirectLighting: |
7 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (1.98 secs) |
8 | 269960 total traces casted, 16641 luxels illuminated |
9 | total lightmap pages 1 |
10 | CreateLightmapPages: 0.014445 secs |
11 | writing maps\shaderlab_terrain.bsp |
12 | active memory 0 bytes, peak memory 10.08 Mb |
13 | active strings 52 |
14 | 4 seconds elapsed |
1 | tree size: 576.28 Kb |
2 | BVHTree::Build: 0.053519 secs |
3 | CullLights: |
4 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.00 secs) |
5 | 0 lights culled |
6 | DirectLighting: |
7 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (1.89 secs) |
8 | 269960 total traces casted, 16641 luxels illuminated |
9 | total lightmap pages 1 |
10 | CreateLightmapPages: 0.014780 secs |
11 | writing maps\shaderlab_terrain.bsp |
12 | active memory 0 bytes, peak memory 10.08 Mb |
13 | active strings 52 |
14 | 2 seconds elapsed |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
1 | KDTree::Build: 2.661017 secs |
2 | CullLights: |
3 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs) |
4 | 83840 lights culled |
5 | DirectLighting: |
6 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (7.07 secs) |
7 | 6015939 total traces casted, 107628 luxels illuminated |
8 | total lightmap pages 4 |
9 | CreateLightmapPages: 0.131742 secs |
10 | writing maps\gwdm2_.bsp |
11 | active memory 0 bytes, peak memory 10.08 Mb |
12 | active strings 199 |
13 | 10 seconds elapsed |
1 | tree size: 1.06 Mb |
2 | BVHTree::Build: 0.105040 secs |
3 | CullLights: |
4 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs) |
5 | 83758 lights culled |
6 | DirectLighting: |
7 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (207.33 secs) |
8 | 6080349 total traces casted, 108040 luxels illuminated |
9 | total lightmap pages 4 |
10 | CreateLightmapPages: 0.130558 secs |
11 | writing maps\gwdm2_.bsp |
12 | active memory 0 bytes, peak memory 10.08 Mb |
13 | active strings 199 |
14 | 3 minutes, 27 seconds elapsed |
1 | tree size: 1.06 Mb |
2 | BVHTree::Build: 0.104811 secs |
3 | CullLights: |
4 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs) |
5 | 84818 lights culled |
6 | DirectLighting: |
7 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (85.37 secs) |
8 | 6077427 total traces casted, 108036 luxels illuminated |
9 | total lightmap pages 4 |
10 | CreateLightmapPages: 0.135933 secs |
11 | writing maps\gwdm2_.bsp |
12 | active memory 0 bytes, peak memory 10.08 Mb |
13 | active strings 199 |
14 | 1 minute, 25 seconds elapsed |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так как ты дерево-то строишь?
http://www.codercorner.com/Opcode.zip
там несколько вариантов построения. Но я не ощутил между ними особенной разницы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну не надо код, расскажи алгоритм словами
ncuxonaT ты не знаешь как строится AABB-tree?
Перебором всех треугольников, входящих в заданный объем, выбирается один из аксиальных углов. Нода разбивается на два узла. Каждая нода хранит ровно один примитив в конце разбиения. Поэтому можно заранее высчитать кол-во нод в дереве. Плохо то, что алгоритм просмотра рекурсивный и не поддается какой-либо оптимизации.
А у KD-tree вальвовского есть два важных момента. Во первых разбиение дерева оценивает даже не кол-во полигонов в узле, а кол-во операций, которые потребуются для трассировки этого узла. Т.е. стоимость сплита в опкодах. А во вторых сама трасса нерекурсивная, она просто перебирает в цикле ноды. Из-за этого производительность такая хорошая.
В любой трассе рекурсия это самое слабое место, самый главный удар по производительности.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Стоит ли ждать эдакого на твой обычную дату в декабре?
Пока особо хвастаться нечем. По крайней мере по моим меркам.
Добавлено 14-11-2020 в 16:47:
Ну вообщем полная жопа. Сталкеровский рейтрейсер критически не годится для рассчёта лайтмап по своему быстродействию. Неудивительно, что они неделями ждали результата.
Добавлено 14-11-2020 в 16:48:
Посчитал свет на testers_mp_pool. Вальвовский рейтрейсер управился за 19 секунд, а сталкеровский считал 5 минут 9 секунд.
Добавлено 14-11-2020 в 16:50:
Справедливости ради отмечу, что оба рейтрейсера используют идентичный алгоритм пересечения луча с треугольником, который дополнительно оптимизирован путём предрасчётов некоторых значений и которого, разумеется не было в самом сталкере. Так что там вероятно, это время рассчётов было бы еще больше.
Добавлено 14-11-2020 в 17:04:
Вот вы говорите, релиз к привычной дате.
Чем тут хвастаться? фпс ниже плинтуса, коллизию вообще страшно включать. Единственное достижение - лайтмапа всего 7 минут считается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша знаю, но хотел узнать детали, например, по какому принципу выбирается, где разбивать ноду.
Я потом вероятно опробую еще какие-нибудь деревья.
Но в данном случае мною двигало любопытство - узнать насколько в сталкере эффективная трассировка лучей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша реализацию сам писал, а идеи алгоритма брал отсюда http://www.ray-tracing.ru/articles184.html и отсюда https://cs.uwaterloo.ca/~thachisu/tdf2015.pdf
В принципе, в первой ссылке всё есть. Единственное что, они почему-то в бесстековом траверсе не учитывают, что если найдено пересечение с треугольником, то можно пропускать узлы, которые дальше этого пересечения. А в варианте со стеком учитывают.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша там написано, что нельзя остановить поиск после нахождения первого пересечения, и это верно.
А я говорю, что если нашел пересечение, то дальше имеет смысл проходить только те узлы, расстояние до которых меньше или равно расстоянию до найденного пересечения.
Обнаружил вот какую любопытную вещь: те исходники X-Ray, что валяются в общем доступе и на гитхабе - фейковые. Нет, ну из них конечно можно собрать икс-рей и он наверное даже будет работать с оригинальными ресами сталкера, но это не те исходники, которые были изначально.
Я уже не помню где я их урвал, но там есть капитальное отличие - компиляторы не лежат в папке utils. Если бы на этом всё и заканчивалось, то какая разница. Но там есть такие файлы, которые в общеизвестных исходниках просто отсутствуют. Например там есть рассчёт PVS. И тесселяция. Всё это не было использовано на тот момент, но еще сохранялось в коде.
Добавлено 17-11-2020 в 10:50:
А впрочем нашёл. В саб-репозитории лежат тоже:
https://github.com/OpenXRay/xray/tree/master/trunk
Версия 1.0
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хвастаться пока еще рано, но уже что-то приличное начинает получаться.
И фпс высокий.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я уже много раз объяснял, что в NT нет никакого рендерера по дефолту.
Пользоваель сам себе строит абсолютно любой рендерер. Хоть как в метре, хоть как в халфе. И довольно быстро, надо всего лишь написать шейдеры и придумать собственный язык описания материалов. Ну или использовать уже существующий, например как в ку3.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Я не знаю как в Юнити. Но помоему там масса ограничений на эти пользовательские шейдеры плюс обязательно идут встроенные, которые нельзя менять.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А этими вашими шейдерами можно разрушаемость сделать как в Frostbite?
__________________
ㅤ
Не помню, говорил я или нет, в Англии есть такая поговорка:
чтобы всё осталось по прежнему, всё должно измениться.
Это как нельзя более отвечает концепции нового Ксаша. Тот же Элбер, помню сокрушался, что да, визуально новые движки выдают отличную картинку, но как же неудобно под них что-то делать. В отсутствие брашей и прочих мелких, досадных ограничений. То есть народу всегда нравилось делать карты таким подходом, который когда-то предложил Кармак.
Опять таки, многим принципиально нравится кубать. Современный движок предполагает, как правило что-то одно. Или кубать или моделить.
Теоретически там браши могут быть, как в Годоте или UE (даже в CE), но они не годятся для создания серъезных конструкций.
Я хочу попытаться найти баланс в таком подходе. Чтобы можно было и кубать как раньше, делая гигантские уровни брашами, и точно так же набивать уровни моделями, как в метро или сталкере.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
В каком формате на карту ставятся структурные модели?
__________________
http://www.moddb.com/mods/monorail-quest
thambs та в любом текстовом. В smd например. Впрочем mdl тоже поддерживается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем товарищи, имею сказать следующее. Нормалям, полученным из текстовой модельки доверять вообще нельзя. Там полное дерьмо порой бывает, а кто-то вообще не заморачивается и пишет туда мусор.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
О каких текстовых моделях речь?
obj, ase, smd и всё в таком духе. Их конверторы очень часто пишут разные моделлеры на питоне и макс-скрипте и оно не всегда валидное.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша текстовость не при чем. В 3дмаксе всратая система нормалей - есть группы сглаживания, а есть явные нормали. Сложно понять, какие из них используются в данный момент, и какие будут экспортированы. В одном из плагинов экспорта в smd можно выбрать экспорт явных нормалей, но тогда нужно перед экспортом кидать на меш модификатор Edit Normals, чтобы эти явные нормали у модели были и соответствовали тому, что видно во вьюпорте. В любом случае, всегда надо проверять, что вышло.
А плагин экспорта в obj в 3дмаксе сломан, начиная с 2017 версии, - вершины экспортируются в мировом пространстве, а нормали в локальном.
Текстовость как раз даже очень причём. Бинарные форматы как правило записываются пограммистами, которые хоть что-то там проверяют. А текстовые парсят все кому не лень. Даже если накосячат - пофиг, парсер проглотит.
Добавлено 22-11-2020 в 18:24:
Короче нафиг эти нормали из исходников. Лучше я их сам посчитаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Всратые нормали моделист может и в бинарный формат закинуть.
__________________
-Brain is dead-
ncuxonaT
А можно их у деревца стрелочками визуализировать, как расположены на краях плэйна?
__________________
http://www.moddb.com/mods/monorail-quest
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот товарищи, какая мерзкая штука получается.
Если сгруппировать сурфейсы по блокам, по которым на каждый блок приходится один ректангл лайтмапы, то этих блоков получается адское кол-во. Значит каждый блок - это один сурфейс. На маленьких всяких картах, типа кутришных еще трепимо. Но если взять к примеру сталкеровскую, там ужос-ужос. Под 200000 сурфейсов. Рендерить 20000 тысяч сурфейсов очень тяжко, даже если ничего не рисовать - всё время уйдет просто на их группировку и отправку на рендеринг. Оптимальное кол-во блоков - 3-4 тысячи на всю карту, в каждом блоке, от 100 до 6000 полигонов.
Ну примерно. В самом сталкере сделано как. Там сперва рассчитывается атлас для лайтмапы и занимаются места в этом атласе. Полученный атлас, очевидно назначается целому ряду сурфейсов. Потом эти сурфейсы мержатся обратно, поскольку больше нет причин держать их разделёнными.
Но есть проблема. При таком подходе плотность люкселей должна быть заранее посчитана на этапе компиляции BSP. То есть чтобы изменить разрешение лайтмапы придётся заново пересчитывать всю карту. Одним только светом не отделаешься.
В сталкере там еще хлеще, там свет всегда считается вместе с остальным, как я понял, свет можно пересчитать потом, но для первой компиляции он считается всегда.
Добавлено 23-11-2020 в 18:27:
Впрочем, я тут погуглил, всё еще интереснее. Компилер света считает освещение для детайлов. Для всякой там травы и мелких кустиков.
А основное освещение отключить вообще не вариант.
Т.е. каждая компиляция принудительно считает освещение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>каждая компиляция принудительно считает освещение
Неделю?
__________________
http://www.moddb.com/mods/monorail-quest
Ну я уже выше писал, что да, там довольно небыстрый рейтрейсер.
Раз в 40-50 медленней моего. Там где мой за 30 секунд управляется, оригинальный может считать минут 8.
Добавлено 23-11-2020 в 18:40:
И еще оригинальный код построения лайтгруп дико медленный, он рекурсивный. Надо его на стек переписать. Там блин он эти группы будет дольше искать, чем считать саму лайтмапу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Помоему да, там лайтматрица формируется в bsp.
Добавлено 24-11-2020 в 22:15:
Ну как-то так. Это testers_mp_factory. Проблема остаётся - здесь 76 тысяч сурфейсов - по кол-ву лайтмапгруп. Когда лайтмапа посчитана - они уже не нужны и можно эти группы объеденить обратно. Но компилятор света такими полномочиями не обладает. А даже если бы обладал - свет можно было бы посчитать только один раз, после чего требовалась бы полная перекомпиляция уровня. Не думаю что это кого-то обрадует.
Проблема конечно решаемая, но я пока думаю как лучше сделать.
Можно эти группы сохранить прямо в вертексы. Размер карты конечно вырастет. Можно попробовать сразу выделить место в атласе, но это проблемно - как потом считать плотность в юнитах, как реконструировать группы из атласа. Не факт что это вообще возможно. Буду думать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
что такое лайтмапгруппа?
группа треугольников, которую можно спроецировать на плоскость.
К примеру террайн = 1 лайтмапгруппа.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем без затиралки швов не обойтись.
Даже в идеальном случае, когда развертка полностью разматывается вокруг колонны, мы получаем минимум 1 шов.
Там по идее на границе шва надо просто сделать билинейку и всё.
Добавлено 26-11-2020 в 19:06:
Набросал простенькую удалялку швов, но не всё так просто.
На картинке видно, в первую очередь, ну там кое-где пропущенные пиксели, ошибка округления. Это мелочь.
А вот колонна, на которой эти швы и лезут в первую очередь, как видите здесь сами координаты плохо расположены. Надо отцентровать люксели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сколько жы времени на бакэнд уходит, это очуметь можно.
Щас вот надо нормальный менеджер моделей написать, там до сих пор какие-то разроненные функции по типу кутришных. Оно мне досталось в наследство и я до последнего момента тянул, не хотел это говно трогать.
Но всё равно придется написать нормальную имплементацию.
Побочным эффектом можно будет создать всякие конветоры моделей из одного формата в другой. Т.е. такая же либа будет, как для изображений.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ждать SMD 2.0? Кстати, почему такое низкое разрешение у лайтмапы?
Может быть сделать возможность его регулировать внутри порталов? Например в индоре - более мелкое, а для ландшафтов, соответственно мягкое крупное
__________________
-Brain is dead-
Я сделаю бинарный промежуточный формат для хранения моделей.
И может быть я ему даже дам расширение .csm
Cached Static Mesh.
Добавлено 28-11-2020 в 14:00:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот кстати вопрос. В сталкере на статике тени меняются в зависимости от положения солнца? В лост альфе 1.4007 утром смешно видеть тени от деревьев в противоположную от солнца сторону.
Дык можно же распаковать ресурсы и посмотреть на лайтмапы.
Лайтмапа там запечена только для одного направления солнца.
Кто-то говорил, что можно запечь для произвольного кол-ва направлений, но я насчёт этого пока не интерисовался.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В сталкере, если вы изучали его лайтмапы, должны были отметить одну забавную особенность. Очень много кусков лайтмап повернуты под произвольным углом, отличным от 90 градусов. Это не касается механизма упаковки в атлас, это результат работы Orbitrary Ortho-Projection (оригинальный камент из кода XRay). Там в чём суть - полигоны группируются по нормали, следя, чтобы сумма этих нормалей не превысила некоторый угол, обычно 89 градусов. Результирующая нормаль частенько получается под произвольным углом, а вместе с нею и лайтмапа. Я отказался от этой схемы довольно быстро, использую своё изобретение, которое я назвал hashed lightmap axis. Идея в том, что для любого полигона можно найти максимально близкую аксиальную нормаль. Всего таких нормалей может быть шесть шутк - по сторонам куба. Это же автоматически повышает и плотность упаковки и исключает ситуации, с цилиндрической проекцией, например для колонны или цилиндра будет создано четыре лайтгруппы.
Правда между ними останутся швы, но при сталкеровском подходе они ведь тоже никуда не денутся. Еще и лайтмапу перекосит на какой-то угол.
Добавлено 30-11-2020 в 12:24:
ncuxonaT ты своим упаковщиком "уголком" когда-нибудь пробывал упаковать достаточно большие атласы? Ну скажем 1024х1024?
И не один, а штук 10. И сколько времени это у тебя заняло.
Потому что моя реализация какая-то адски медленная получилась.
Начиная с размера 512х512 она может маслать несколько минут.
До смешного доходит - освещение считается быстрее, чем упаковка в лайтмапу. Но если страница менее 512, то всё быстро.
Добавлено 30-11-2020 в 12:25:
Да вот пример
1 | DirectLighting: |
2 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (833.86 secs) |
3 | 173028152 total traces casted, 8122516 luxels illuminated |
4 | total lightmap pages 20 |
5 | CreateLightmapPages: 817.050387 secs |
6 | writing maps\testers_mp_railroad.bsp |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
На последнем шоте странные потемнения по краям полигонов, так и должно быть?
__________________
http://www.moddb.com/mods/monorail-quest
Дядя Миша скорость наверное зависит от количества элементов, а не от разрешения. Проверил, мой изначальный алгоритм уголком уложил 25к элементов в атлас 4096х4096 за 6 секунд. Оптимизированная более уродская версия алгоритма справилась за 1 секунду.
У тебя точно упаковка медленная? В CreateLightmapPages помимо неё ничего не входит? Может, не атлас долго составляется, а освещение в него долго записывается?
25 тысяч элементов и у меня быстро. А вот когда 130 тысяч - уже долго.
Добавлено 30-11-2020 в 17:52:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
130 тысяч на страницу атласа 1024х1024? 3х3 пикселя куски? Из которых 8 пикселей - это бордюр? Такая себя развертка.
150к в атлас 8к у меня упаковались за 5 минут обычным и 45 секунд оптимизированным.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
http://www.moddb.com/mods/monorail-quest
Я рёбра не рендерю, чёб быстрее было. Так-то оно уберётся.
Ну вот пожалуйста. 200 тысяч кусочков на пять лайтмап 1024х1024 добавлялось полчиса, этожы ачуметь можно! Точнее даже в четыре лайтмапы, т.к. в пятой ландшафт.
Добавлено 30-11-2020 в 19:04:
Спровидливозти ради, это на работе, тут комп древний, кора дуба.
Добавлено 30-11-2020 в 19:06:
Ландшафт. Даже от провадов тени есть
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в одну большую страницу будет собираться быстрее или медленнее, чем в несколько маленьких?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нравится это кому-нибудь или нет, но я таки запилил простейший промежуточный бинарный формат для хранения вертексов-треугольников и назвал его CSM, что можно расшифровать как Computed Static Mesh, Compiled Static Mesh или Cached Static Mesh. Но любители конспирологии должны увидеть здесь отслыку к cs-mapping. Не будем им мешать.
И сегодня я наконец-то понял, как же мне смержить сурфейсы обратно в большие куски, не растеряв связи с группами. Причём информации придётся сохранить минимально. Нам не надо хранить информацию для каждого вертекса, нам не надо хранить информацию для каждого треугольника, нам не надо хранить информацию для каждой рендер-группы. Всё что надо сделать - это просто сохранить информацию о ректангле в специальный файлик описания шрифтов, формат которого я разработал этой весной.
Я предполагал, что мне это пригодится, поэтому формат заранее включает в себя разные типы данных: шрифты (описание букв), спрайты (центровка кадра) именованные кадры (для худ-картинок) и наконец лайтмапы.
Там можно сохранить ректангл и размер в world-units. Сами ректанглы записываются в особый файлик сопровождения шрифтов - по одному файлу на каждую лайтмапу. Каждый ректангл - это лайтгруппа. То есть когда мы грузим треугольники геометрии - мы просто напросто ищем в какой из ректанглов попал этот треугольник. Пересечение bbox и tri. В двухмерном пространстве. Задачка решается простым перебором, но здорово ускоряется при помощи AABB дерева. Или двухмерного хэша, но по памяти дерево тут быстрее. И вот таким вот образом нам не надо хранить эту информацию больше нигде. Треугольники обратно собираются в группы, используя минимум информации. Записывать координаты в лайтмапу обратно не нужно - это делается уже в BSP.
Единственный минус подхода - плотность лайтмапы можно будет отрегулировать только в BSP. Впрочем оно почти везде так. И в кутри и в сорсе. А для террейна плотность автоматически считается.
К тому же, пользователь всегда может удалить эти описания шрифтов, сделав перекомпиляцию света невозможной.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да их бесполезно портить, компилятор их всё равно игнорит.
Дам конечно. Там оч. простой формат, вертексы, фейсы и всё.
Добавлено 02-12-2020 в 14:13:
Лиманск из Чистого Неба
И конечно машина времени, в оригинале я её так и не нашёл.
4 часа освещение считалось. Наверное из-за того, что домов слишком много. У луча много препятствий.
Добавлено 02-12-2020 в 14:16:
Следует особо отметить, что в данный момент компилятор работает по максимально негативному сценарию - каждое деревце, каждый пропс копируется и вставляется в карту заново. Из-за чего Лост-Альфовские карты, например, могут занимать до полугигабайта по размерам. Но для меня главное, что сам компилятор это выдерживает и прекрасно укладывается в 32-х битные лимиты по памяти. Уж если он такое издевательство выносит, то без дубликатов - тем более. Но это всё потом. У меня итеративная разработка.
Добавлено 02-12-2020 в 16:56:
Остались у меня две самые сложные задачи.
1. переделать механизм лайтгрупп на новую систему, о которой я написал выше. Наполовину уже сделано, т.е. bsp переписал, остался рад.
2. сделать мульти-референс модели, чтобы не дублировать геометрию. Очень много мелочей придётся учесть, это утомляет.
Опять же с коллизией вопрос в воздухе подвешен, я ею так и не занимался.
Но к счастью коллизия не затрагивает визуальную часть. Там надо будет изучить варианты. Я просто предполагаю, что если строить прямо по-хорошему конвексные хуллы, это и вправду займёт около недели. Очень тяжёлая операция.
Добавлено 02-12-2020 в 17:03:
Во, я вспомнил в чём цымес. В BSP будет введён ключ -onlylights, чтобы можно было обновлять только лампочки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Тебе не кажется, что ты переусложняешь?
ncuxonaT переусложняю что именно?
Добавлено 02-12-2020 в 19:22:
Всё что я перечислил - обязательные вещи. Без мержинга лайтмап, фпс ниже плинтуса. Без мульти-референса моделей чудовищный размер уровня, без коллизии игрок постоянно проваливается в скайбокс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
То, что про мержинг лайтмап. Я не очень понял, что с чем объединяется. Вся геометрия разбивается на лайтгруппы, которым соответствуют отдельные куски на лайтмапе, так? Потом эти лайтгруппы объединяются в большие куски, чтобы рендерить их одним дипом?
Почему нельзя хранить эти куски как субмеши с указанием номера страницы лайтмапы? И текстурные координаты для обычных текстур и для лайтмапы.
1 | // 16 bytes here |
2 | struct ref_lightgroup |
3 | { |
4 | uint32_t container; // gcontainer index |
5 | uint32_t firstelem; // gcontainer->firstelem + firstelem |
6 | uint32_t numelems; // for( uint32_t i = gcontainer[container].firstelem + firstelem; i < numelems; i++ ) |
7 | int32_t lightGroup; |
8 | }; |
9 |
10 | // 4 bytes here |
11 | struct ref_group_bounds |
12 | { |
13 | hvec2 bounds; // изначальные баундсы для каждой лайтгруппы, чтобы можно было восстановить истинный |
14 | // размер. Места в атласе выделяются в makebsp |
15 | }; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ты себя ведёшь как маленький ребёнок, который на улице увидел говно и обрадовался - говно-говно, смотрите кто-то насрал, ну и дела! © Дядя Миша
лиса.забирать.сыр.кусочек = ворона.уронить.сыр.кусочек( 1шт ); © FiEctro
Дядя Миша лайтгруппы нужны только раду? Но развертку под лайтмапу создает бсп?
Raid скрипты slide normal thief или noors normal thief для 3дмакса проецируют и переносят нормали с одного объекта на другой. Создаешь вокруг дерева сферу или полусферу, выбираешь её как источник нормалей, крону дерева выбираешь как таргет и переносишь.
https://gamebanana.com/tuts/12231
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша как сложно с вашим радом. Тогда да, наверное, способ со хранением прямоугольников проще. Еще можно было бы искать по соприкасающимся ребрам на развертке. В таком случае лайтгруппы могли бы быть невыпуклыми. В смысле не надо было бы под лайтгруппу отдавать целый прямоугольник.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Переделал концепцию, как описано выше. Стало на порядок удобнее.
Во первых, реконструкция групп - очень быстрая, пару секунд буквально.
Во вторых, с учётом сделанных изменений, лайтмаппер вообще не модифицирует BSP, ему это просто не нужно. Только сами лайтмапы.
Правда остаётся еще вопрос с повертексным освещением, но прежде чем его решить, надо придумать что делать с дубликатами. Как им накладывать лайтмапу, как повертексное. Причём этот момент вообще самый сложный, надо очень многое продумать. Как это всё рисовать, как выполнять коллизию.
Добавлено 05-12-2020 в 13:37:
Единственное, с чем я лажанулся в своей концепции - исходил из того, что в атласе не может быть более 65к кусочков. А тут лайтмапы.
Не, ну для шрифтов и картинок худа это условие полностью выполнялось.
Хидер менять - это заново все шрифты и худ пересобирать. Ох, блин.
Добавлено 05-12-2020 в 13:37:
Ну да ладно, пособираю статистику, как часто происходит это превышение.
Добавлено 05-12-2020 в 14:25:
Что еще любопытно - я полагал что уменьшение размера вертекса хорошо уменьшит конечный размер BSP-файла. Но по факту снижение произошло всего на 1/6. Все эти дубликаты дают такой чудовищный размер.
Впрочем я неплохо оптимизировал компилятор по потреблению памяти и даже с таким негативным сценарием он отлично справляется, среднее потребление всего 700 мегабайт на сталкеровских картах.
Так я уже и лост-альфовские пробую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT кстати ты был частично прав, действительно запись кусков в лайтмапу занимает часть времени от построения атласа. 56 страниц 1024х1024 писались почти 2 минуты.
Добавлено 06-12-2020 в 11:16:
И да, я ради интереса перекроил этот механизм, выделил память под ноды одним большим куском. Сразу под все ноды. Кусок лайтмапы с бордюром занимает 3х3 пикселя, страница 1024х1024, значит выделяем (width / 3)* (height / 3) + 1 (корневая нода), около 17 мегабайт. Ну не фатально.
И время построения вообще не поменялось. Как было пару минут так и осталось. Значит рекурсия всё убивает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Разобрался как в сталкере устроено освещение. Вообщем для солнца лайтмапа в явном виде не хранится. Оно и понятно, нужна смена времени суток. Хранится hemisperical lighting и теневая карта. Hemispherical годится для любого времени суток, а вот теневая карта, увы только для одного направления. Впрочем, я думаю, можно рассчитать тени для всех положений солнца. Освещение по полусфере получается от виртуальных hemi-источников. В q3map2 была настройка q3map_skyLight, вот это оно и есть.
Просто генерятся лайты с равномерным распределением в несколько сторон, по окружности, симулируя непрямой свет. Если на ландшафте, допустим стоял какой-нибудь столб, то на лайтмапе прямо видно эти нечёткие тени от разных направлений и их можно посчитать. Чем больше равномерно распределённых таких источников, тем более качественной получается hemi-лайтмапа. Ну и в шейдере всё это смешивается - цвет от солнца (деномический), умножить на теневую карт плюс индирект + амбиент.
Для точечных лайтов хранится просто RGB-мапа с запечённым индиректом.
Этот же подход объясняет как при такой угробищной схеме построения атласа практически не видно швов. Индирект равномерный и его переходы не видны. Прямой свет накладывается попиксельно. А тени редко попадают в стрёмные места. Остаётся еще свет в помещениях, но там во первых VPLS для радиосити, а во вторых, в большинстве помещений - пусто. Голые стены и немного предметов. Так что заметить швы нереально. Но мне конечно такой способ построения атласа не годится. У Микрософта есть UVAtlas какой-то, он раньше был частью DXSDK, но они апублековали сорцы. И вот все кто юзал DX с незапамятных времен его использовали для генерации. Помоему это одна из первых имплементаций LSCM (статья от 2002-го года). Конечно это занимает порядочно времени, но с другой стороны - это всё равно сохранится в статик-мешах моего формата. Так что пофиг. Один раз посчитать и всё.
А для брашей можно и мои hashed LM axis юзать, они хорошо спровляются.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ncuxonaT напомни как твоя затиралка швов работает.
Всю тему пересмотрел - не могу найти упоминания.
Единственное что нашёл, это про какой-то уровень качества, по дефолту равный 100.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша https://www.sebastiansylvan.com/pos...esTextureSeams/
Единственное что, направление градиента нужно сбрасывать периодически. Я в ConjugateGradientOptimize на каждой 10 итерации ставлю beta = 0.0;
Дядя Миша
Эти сталкеровские карты как-то делятся (на сектора?) или это всё один огромный кусок геометрии?
__________________
http://www.moddb.com/mods/monorail-quest
ncuxonaT я делал немного по другому. Просто находил соседние эджы и биинтерполировал их люксели. А эджы находил вообще перебором, но поскольку меш индексированный, это было достаточно быстро. Но есть большая проблема. Для брашей это работает плохо из-за T-Junc.
А градиенты вообще можно применять изолировано.
Но использовать Conjugate Gradient Solver мне как-то в голову не пришло.
Да дело вообще не в солверах, я уверен. Дело в том, что я вероятно не понимаю истинной природы швов этих. К тому жы там как минимум два варианта может быть - несовпадение цветов люкселей и несовпадение их оригинов. И вторая проблема куда серъезнее. Вот у нас допустим пятно света. Переходит на два полигона. И на втором люксели сдвинуты относительно первых на половинку. Ну и всё - пятно со швом. И это уже никакими градиентами не поправишь.
Кстати, непомню кто, но кто-то авторитетный говорил - пофиг на повороты лайтмапы, главное чтобы не было швов. То есть, если у нас лайтмапа повернута даже на 45 градусов, то это ок. Но я не согласен. Повернутые люксели тоже выглядят как говно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хех, ну чтож я оказался прав. Солверу критически важны входные данные.
Иными словами, если подать ему на вход уже существующую параметризацию в виду текстурных координат, то и на выходе мы получим ну примерно такие же текстурные координаты, только в профиль.
То есть впустую потратим время. Решение заключается в том, чтобы убрать из вертексов текстурные и лайтмапные координаты и перенести их в структуру фейса. Тогда мы сможем абсолютно точно подсчитать кол-во уникальных вертексов, сгенерить абстрактную проекцию в качестве начальной параметризации (просто выберем какой-нибудь произвольный угол или короткую сторону ббокс, это вообще плевать, солвер сам растянет квадраты правильно), и подать это на вход. И вот тогда у нас получится что-то нормальное. Вот такой симпатичный лёва у меня тепреь получился.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Корочи хрень полная этот LSCM. Я на какой-то демке на гитхабе находил в качестве примера картинку, где LSCM ловко наложил текстуру на лицо.
Так вот подтверждаю - для морд раскладку он генерирует действительно просто идеально, лучше не придумаешь. В остальном у него ровно те же самые проблемы. Если будет цилиндрический объект - тут же настанет жопа.
Пример - та же самая морда с рогами. Морда отлично, рога вытянулись в острые треугольники. Его конечно можно и дальше ограничивать, например по углу от базовой нормали или по реальным текскордам, но тут мы столкнёмся с той же самой траблой - если так ограничивать, то LSCM и вовсе не нужен, я обычной трипланаркой управлюсь. Но в том-то и смысл, что вот у нас к примеру раковина и хочется для нее иметь нормальную развертку.
Так ладно раковина, а если к примеру унитаз? Это ж вообще капец!
Есть еще геодезическая проекция, она используется, например для проекции нашей и так уже плоской земли на другую плоскость.
Вот вероятно мне надо копать в эту сторону. Тем более, как я понял, что его мелкософт юзает для своего UVAtlas из D3DTools. Я конечно позавчера ковырнул его сорцы, но там тихий ужас. Надо найти какое-то чистое решение - примерчег.
Добавлено 08-12-2020 в 18:35:
Я чёт совсем забыл, что в комплекте с OpenNL идт демонстрационные модельки для теста LSCM. А щас глянул - все модельки, это чьи-то морды.
пять моделей разных морд. Зашибись вообщем. И разумеется ни у одной морды нету рогов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Рога взрезают вдоль и обводят у основания, и только тогда лскмизируют.
Изучал этот микрософтовский UVAtlas. Углубился. Во первых там тоже нет серебряной пули. Он пытается сперва сделать тривиальную параметризацию. Потом планарную. Потом строит геодезическую изомапу.
Потом внимание! проверяет, не является ли тело цилиндром или бараньим рогом. И тут внимание! вызывает для параметризации цилиндра чертову функцию, которая просто делит его на два куска. Я это как увидел, у меня уж руки опустились... А бараний рог сверху проецируется, в круг.
Полное дерьмо. Из этого следует нехитрый вывод - изомапа с замкнутыми объектами тоже не дружит. И второй вывод - надо к каждому типу объекта свой подход. Иначе просто никак.
То есть вот я нашёл тут гитхаб чувачка который занимался параметризацией. Дипломная работа у него штоле:
https://github.com/alecjacobson/geo...arameterization
так вот там просто до чёрта вариантов. Спрашивается, если бы было ультимативное решение, ктобы всё это тестировал и изобретал?
Добавлено 08-12-2020 в 21:58:
Мало этого. Там еще и общий метод состоит из:
Landmark Merging by geodesic distance
если не прокатит, то
LSCM
далее
Barycentric parametrization
spectral clustering
и наконец если не прокатит - разбить по фейсово.
Добавлено 08-12-2020 в 21:59:
А я ещ думал, да чтож либа такая громадная, да чому там столько кода.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а ты думал, почему люди руками до сих пор развертку делают?
ncuxonaT я думал они щас нейросеть обучают
Вообщем еще немного покопаюсь с этим и чувствую что вернусь к исходному варианту - строить из текстурной развёртки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, кажется я кое-что понял. Мне необходимо посчитать халф-эджы и boundaries. Может и LSCM нормально заработает.
Вобще складывается ощущение, что это тема нормально нигде не разобрана, есть только отдельные статьи, а общего обзора, сравнения и принципов нету.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вышел новый Unigine и в него добавили лайтмаппер. Я помню, как Запрягаев в своё время орал - никаких лайтмап, только динамика. А как его ушли, так сразу и добавили. Интересное кино.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Поясни один момент. Если карта собрана из smd, то она обязательно должна лежать внутри брашевого скайбокса, или же замкнутый smd сам по себе может сформировать уровень без ликов?
__________________
http://www.moddb.com/mods/monorail-quest
внутри скайбокса да.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут на геймдеве спросил, можно ли нейронку приспособить для редукции одного измерения, но народ скатил тему во флейм.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чем дальше я лезу в дебри этого микрософтовского параметризатора, тем больше укрепляется впечатление, что это какое-то адовое дерьмо.
Ну вот судите сами. Первое, что он пытается сделать - это надежда на то, что поверхность - один сурфейс и её можно параметризовать абстрактным треугольником или что-то вроде этого. Следующая проверка - что это нечто вроде плоскости. Идеальный кейс на самом-то деле. Тут не надо никакого СЛАУ, тривиальная проекция всегда даёт отличный результат.
Собственно единственный кейс, который всегда даёт что-то валидное с минимальными усилиями. Ну и дальше он, прямо как в сталкере пытается вычесть нормаль из первого случайно выбранного фейса с остальными нормалями (собсно единственное отличие как раз таки в том, что он вычитает, а не складывает). Если по результатам такого вычитания длина нормали опасно приблизилась к нулю (т.е. меш завернулся сам на себя, по типу цилиндра), то ой-ой, нам это не годится, стоп работа. Однако прикол в том, что планарная параметризация особенно с учётом выполненной подготовительной работы, по разделению на субмешы, раздельные потом по границам, вероятность того, что такое наложение окончится фейлом, ну процентов может быть 10-15. Как раз вот для всяких там цилиндров или лонгхорнов. Проще говоря - для меша, который совсем на себя завернулся.
Ну есть конечно еще одно условие - чтобы не было нулевой площади у треугольников, но это ведь вырожденный случай.
То есть меня не покидает ощущение, что все эти eigen И решение слау там чисто для галочки и охватывают какие-то совсем уж узкоспециальные мешы, которые к тому же еще и детектируются особым образом. А на большинство ложиться обычная планарка. Просто я до последнего в это не хотел верить. Но сейчас ради интереса всё же проверю. И посмотрим.
Добавлено 14-12-2020 в 13:01:
PS. для тех кто в танке поясню - параметризация цилиндра это наипростейшая операция, вообще без матана, единственная сложность - это убедиться, что перед нами реально цилиндр.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
"eigen"?
https://ru.wikipedia.org/wiki/Eigen
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ещё вопрос. Скажи, возможно ли в рамках одной карты иметь несколько 3d-скаев, которые рендрятся в зависимости от локации в зависимости от локации?
__________________
http://www.moddb.com/mods/monorail-quest
В новом ксаше нету 3д-скаев. Я пока не трогал этот вопрос. Но технически сложностей нету.
Добавлено 15-12-2020 в 10:35:
Вообщем я дропнул эти эксперименты с микрософтовским параметризатором. Ужасно мутный и тошнотворный код, никогда еще такого не видел. Обычно я в любом незнакомом коде спустя час изучения уже могу выделить ключевые моменты и понять принцип работы. Здесь это сделать невозможно, потому что на каждой стадии алгоритм проваливается дальше и дальше и даже когда он завершил работу нельзя сказать, что там на выходе уже какой-то корректный результат, потом еще идут пост-процессы, мержинг и замазывание, то есть понять, что даёт наибольший вклад решительно невозможно. Это видимо современный стиль программирования. Может быть оно там на всех этапах выглядит как дерьмо, но в конце эти кусочки объединяются, сглаживаются и конечный результат уже на что-то похож. Но там нет главного алгоритма. Там нельзя сказать, что 90% параметризации осуществляется через какую-то функцию, а некоторые специальные случаи - отдельно. Нихрена подобного. Там минимум пять или шесть вариантов и на каждом этапе оценивается качество построения. Плюс для геодезической изомапы надо рассчитать vertex importance и они не придумали ничего умнее, как сделать это через построение progessive mesh, что само по себе довольно тяжелая операция, но самое интересное - это учесть, что чаще всего в атлас попадают вообще какие-то незамкнутые конструкции с одной границей, для которой считать PM на мой взгляд вообще бессмысленно. Но предполагается что для таких кусочков параметризация будет выполнена типа раньше - на этапе планарной параметризации. Самое смешное, что изомапа тоже может сфейлить и следующий этап - барицентрическая параметризация, но перед этим будет проверка на цилиндр. Я опробовал барицентрическую отдельно - ну это просто несеръезно. Не зря её в Thekla Atlas дропнули.
Кстати LSCM они там сразу выключили по умолчанию. Видимо он не оправдал надежд даже по их меркам.
Я всё больше склоняюсь к тому, что надо просто создавать атлас из текстурных координат. Это самый простой и надёжный путь. Причём с тем подходом, который использую я, не имеет даже значения тот факт, что текстура может быть наложена с повторами. Потому что тексели конвертируются в мировые юниты, а потом ремапятся к реальному размеру атласа. Этот же механизм позволяет заранее кэшировать меши без реальной привязки к сэмпл-сайзу. То есть, когда в материале он меняется, меш не надо пересчитывать заново. Ну и самый важный момент - юзер контролирует качество лайтмапы при таком подходе. Очевидно, если шов на текстуре, то шов на лайтмапе заметить уже невозможно.
Добавлено 15-12-2020 в 10:38:
И кстати. Я в своё время был очень удивлён насколько пользователи готовы самостоятельно всё исправлять и улучшать, не полагаясь на движок. Они просили лишь вменяемые инструменты контроля, чтобы не пришлось это делать через хитрозакрученную задницу.
Добавлено 15-12-2020 в 13:16:
Ну да ладно. Пора возвращаться к основной задаче, из-за которой я не могу двигаться дальше - сделать поддержку MU-моделей. В Волатиле её кстати нет, из-за чего невозможно сделать ТЛез32. В Сталкере, как мы пару дней назад выяснили в соответствующей теме MU-модели могут освещаться только повертексно. Шареная геометрия + массивы цвета. Я понятия не имею как они при рендеринге объединяются, никогда с подобной задачей просто не сталкивался. И если честно, не хочу и пробывать. Я хочу сохранить цвета вертексов в лайтмапу, а брать их через VTF. Надеюсь, что он у всех потдерживается, начиная с GF6600. Потому что я точно помню, что смотрел его демки именно на этой карточке. Плюсов много - структура повертексного располагает теми же данными, что и попиксельное (т.к. на вертекс обычно приходится меньше данных, чтобы он сам не распух), здесь это неактуально. Не надо городить какие-то дополнительные массивы опять же. Из минусов боюсь только, что VTF будет недостаточно быстрым. Ну это я проверю. Так же предстоит понять, как именно модельки должны превращаться в MU. Не то по запросу юзера, не то автоматически.
Но тут вот какое соображение. В сталкере это автоматически провоцировало повертексное освещение, т.е. экономя на переиспользовании мы лишались лайтмапы. У меня этого не будет, поэтому я думаю, можно сделать автоматически, подсчётом референсов. Если референсов больше одного - это MU.
В лайтмаппере трассу придётся перестроить с учётом новых реалий. Это уже будет сложносоставная трасса из AABB и локальных Kd-tree. Но кстати она должна напорядок быстрее строиться и занимать гораздо меньшы места. А вот удержится ли её производительность на уровне чистого KD-tree тут уж хз. Будем надеяться, что да.
Ну и в шейдер придётся пропустить параметр смещения в лайтмапе от референса (для всей модели или для визгруппы). Опять жы интересный вопрос, как набивать цвета вертексов в лайтмапу. Если линией, то явно не хватит её длины. Значит где-то надо будет сделать перенос. Ну или скажем извлечь корень из числа вертексов и это будет стороной квадрата с люкселями для вертексов. Что-то такое. Впрочем повертексного у меня пока что нету.
Добавлено 15-12-2020 в 13:31:
Любая реализация начинается с концепции. Я бы мог принять за концепцию, что любая MU-модель доступна только для мира, а для саб-моделей они дублируются, но это не слишком прозрачно.
Эти модельки по идее должны глобально шариться между любыми энтитями.
Это будет более разумный подход. К тому же их можно отпроцессить заранее, еще до того, как будет построено дерево для мира.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут озаботился важнейшим вопросом - решил узнать сколько же деревьев в настоящем лесу. И вот данные колеблются от 600 до 4000 на гектар.
А минимальный - полгектара, т.е. 50х50 метров, но это несеръезно конечно.
Возмьмем нормальный лес, ну скажем 100 квадратных километров, это десять тысяч гектар. Таким образом в подобном лесу может расти 40 миллионов деревьев. Вот это настоящий ТЛез32.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Внедрил поддержку MU-моделей на две трети. А почему на две - в компилятор, в движок, осталось в лайтмаппер сделать. Вес карт очень резко упал. Теперь он не превышает 90 мегабайт даже на картах из LostAlpha.
Причём судя по всему он даже меньше чем оригинальная геометрия (но правда у меня пока еще нет лодов). Скажем la23_oldroad с копированием геометрии весила 550 мегабайт , а с MU-моделями - всего 78 мегабайт.
Удивительно как маленькие модельки, вставленные на карту много раз так сильно раздувают конечный размер. Бонусом упало потребление памяти для компиляции. Раньше оно могло достигать почти двух гигабайт, т.е. впритык, теперь - непревышает 400-500 мегабайт, что даже меньше чем у p2st.
Правда FPS всё же сильно падает, если смотреть из одного края карты на другой. Так что нужны лоды. А потом - писать конвертор уровней из метро эксодус. И вот ежели новый ксаш прожует тамошние карты, можно сказать, что всё удалось.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша слушай, ты проверь сам, конечно, но похоже, что считать TBN в шейдере - это дохлый номер. Тангенты получаются граненые, и ничего с этим не сделать. Ортогонализация помогает не сильно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Очень непростая это штука - лайтмапы для инстанс-моделей.
Во первых рассчитать динмически размер страницы - почти нерешаемая задача, поскольку размер блока для инстанса может превысить размер подсчитаной страницы для статичной геометрии. Обычно это вылезает на картах-коробках, но теоретически может везде вылезти.
Второй момент - лайтмапа не скейлится в зависимости от размеров объекта, она всегда единичного размера. Это можно поправить введя индивидуальный скейл для координат лайтмапы, но я чот слабо себе представляю, можно ли эти координаты прямо вот так вот скейлить, как бы они просто не уехали нахрен. К тому же как спроецировать трёхмерный скейл на двухмерный тоже непонятно. Ну можно взять какое-то среднее число конечно.
Добавлено 19-12-2020 в 14:39:
А и да, самое мерзопакостное. Разбиение KD-tree на локальные суб-деревья роняет производительность трассы как минимум вдвое.
То есть я эти дерева сую в AABB-три и уже по нему передвигаюсь.
на первый взгляд это могло бы наоборот ускорить дело, но не всё так просто.
Мы должны проверить каждое такое локальное субдерево на предмет того, что трасса в него упёрлась. Мы не можем попасть в первое и остановиться. Да и если честно, это не сильно влияет на производительность.
К тому же результаты освещения для единой модели и для инстансов у меня отличаются. Не сильно, но кое-где вылезают косячки. У меня есть одна идея, как обратно эти инстансы налету построить в единое дерево, получится компромисс между потреблением памяти и скоростью работы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, сработал мой хитрый план, построил единое дерево для всех инстансов, потребление памяти всё равно меньше, чем при старом подходе, поскольку вертексы не дублируются. Правда в фейс пришлось сохранить их позиции, чтобы не трансформировать при каждом обращении, без этого построение дерева по времени вырастало вдвое. Размер фейса был 64 байта + 36 байт на позиции = 100. Но изначально, неоптимизированный размер фейса в предидущей итерации был вообще 114 байт, так что можно сказать - да, действительно удалось сэкономить. Ну а размер вертексного буффера так и остался маленьким за счёт инстансов. У некоторых карт к примеру из-за дубликатов вес достигал 550 мегабайт, в оптимизированной версии 70-90 мегабайт. Т.е. как минимум здесь потребление упало в несколько раз. Из плюсов - удалось сохранить время постройки дерева на прежнем уровне, а время рассчёта освещения, помоему даже сократилось процентов на 15, но я хз почему, подозреваю, что там что-то неправильно считается. Ну это потом уже разберусь. Главное что оптимальный подход найден. Второй любопытный момент относится к скейлу лайтмапы в зависимости от скейла конечного меша. Если координаты были построены текстурных, то они естественно сохранены в .CSM-модельку и для таких кэшированных мешей скейл геометрии на карте не влияет на разрешение лайтмапы. Ни для дублирования, ни для инстансов. Так что можно сказать, в этом плане отличий не будет.
Скачал сорцы UE4 на предмет изучения. Там lightmass тоже юзает KD-tree. Видимо это самый оптимальный вариант, другие деревья заведомо медленее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Опробывал переупаковщик атласов из UE4. Полное разочарование.
В документации зато как красиво. Вообщем первое что становится понятно из кода - эта штука не дружит с отраженными развертками. Она их видит, но сделать не может ничего. Объединяет обратно тоже из рук вон плохо, поскольку разъединение как раз и происходит на зеркальной развертке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну нет худа без добра, из уешной реализации я вынес для себя две очень важных вещи. Во первых - механизм трансляции мирового скейла в текстурный, что нужно для придания правильной пропорции. На самом деле, где бы я еще нашёл эту формулу, подобные вещи не валяются на каждом углу. Сама формула довольно несложная, но я лично хрен бы догадался.
Оставлю здесь, может кому-то понадобится
UVLength.x = length( edgeUV2.y * edge1 - edgeUV1.y * edge2 ); |
UVLength.y = length( -edgeUV2.x * edge1 + edgeUV1.x * edge2 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
UVLength.x = length( edgeUV2.y * edge1 - edgeUV1.y * edge2 ); |
UVLength.y = length( -edgeUV2.x * edge1 + edgeUV1.x * edge2 ); |
Я почти управился с развертками, буду использовать комбинированный подход. В большинстве случаев это будет подготовленная развертка из текстурных координат как в UE. А для планарных поверхностей - трипланарная проекция. Надо только определиться какие треугольники лучше параметризовать через текстурные координаты, а какие через проекцию. Трипланарка сфейлить не может, но надо оценить оптимальность результатов, завязанную на множество параметров, на качество освещения, наличия швов и общий размер атласа.
К тому жы у меня на освещении лезут какие-то подозрительные белые точки в некоторых местах, главное раньше их не было вроде.
Когда с этим управлюсь, останется только прикрутить прогрессивные мешы и радиосити. Ну и полностью всё отладить и взапроверить.
Добавлено 22-12-2020 в 11:19:
Слева направо:
1. без рендеринга ребёр
2. ребра рендрятся, используя нормаль треугольника ( как в сталкере )
3. ребра пытаются получить сглаженную нормаль, а если нет, то используют нормаль треугольника
4. ребра используют только сглаженную нормаль, полученную через барицентрические координаты UV-лайтмапы
5. ребра используют только сглаженную нормаль, полученную через барицентрические координаты мировой позиции (в P2 аналогично)
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На последних скриншотах балка на потолке лучше всего выглядит. Только вот шов посреди арки видно на всех скриншотах, на первом его меньше всего видно.
Различия в освещении между полной геометрией (когда каждая моделька вставляется по месту) и инстансами (когда хранится один эталонный набор).
Как видите есть небольшая разница. Черт его знает почему так. Ну тени еще ладно, а вот то, что мелкие кусты немного по разному осветились, это я вообще хз. Я не могу это забороть. Наверное потеря точности при трансформации. Может быть этих различий не будет если увеличить разрешение лайтмапы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Неудивительно отчего в халфе такое освещение всратое.
Оно там сначала клипается, а уже потом умножается на гамму.
Чёрт его знает как оно после этого выходит за границы Byte.
Главное и у меня в P2St точно так же. Я этот момент вообще не трогал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Но на гамму нужно не умножать, а возводить в степень
ncuxonaT ну я выразился немного некорректно. Я про последовательность действий.
Опробовал VTF для симуляции повертексного освещения. Ну как я и предполагал - всё сработало отлично. На ландшафте, понятное дело, всё превратилось в пятна, на ёлках-соснах в целом без особых изменений.
Но есть два момента. Во первых фпс упал почти на 1/8. Т.е. было 800 фпс, стало 700. Может быть это GT640 не слишком любит VTF.
Второй важный момент - повертексное тут не решит ничего, потому что для лайтмапы и для вертекса, во всяком случае на граничных точках, считаются те же самые позиции, те же самые нормали и та же самая окклюзия.
То есть повертексное само по себе тут разве что уберёт швы на лайтмапе, а больше от него толку не будет. А на деревьях нам надо рассчитать нормали по полусфере или взять какой-то зазор у источника света, ну халф-ламберт или что-то такое. Но с нормалями вообще тяжко. Они как правило невалидные все, мусор. Редко-редко когда попадется модель с исправными.
Я полагаю, чем генерить для листвы эти хитрые нормали, проще в материал дать подсказку. Ну то потом.
Добавлено 23-12-2020 в 19:15:
Набрался хабразде и решил повторить подвиг Элбера - собрать объединённую ЧАЭС из двух карт. Но, т.к. редакторами я не владею, решил пообъединять их в блокноте, посмотрел и понял, что это довольно-таки просто сделать. Пропсы на двух картах не пересекаются, а значит можно смело добавлять их в одну. Террайн взял тот, что поподробнее, проблема только в статик меше, то что есть в одном - отсутствует в другом.
Добавил сразу оба, а в компилятор ввёл проверку на дублирующуюся геометрию. Чтобы он мне просто повыкидывал лишние полигоны с этого же места. И это таки сработало! Собралась такая карта, весит 132 мегабайта.
Причём потребление компилятора во время работы не превысило даже 1 гигабайт, а ведь это пожалуй самая гигантская карта из всех, даже в лост-альфе нет такого ужоса. Всё прекрасно скомпилилось, правда свет я не считал еще.
Добавлено 23-12-2020 в 20:48:
Кстати, к вопросу о швах. Вот пример шва:
Кажется что всё ужасно. Но давайте включим диффузку.
А если посмотреть с другого ракурса, становится понятна и причина:
Там не просто шов, там еще и выступ. Конечно в идеале даже этого быть не должно, но уже вполне юзабельно.
Добавлено 23-12-2020 в 20:50:
Основная причина этих швов - неравномерность и сдвиги люксельной сетки.
Если мне удасться решить эту задачку, швов вообще не будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот, если кому-то интересно, как выглядит повертексное через VTF
Добавлено 24-12-2020 в 09:57:
Способ хорош тем, что имея лайтмапу мы всегда сможем превратить её в повертексное освещение, например для маскировки швов на маленьких моделях. А вот наоборот уже хрена. Поэтому предпочтительнее считать и хранить лайтмапу вообще для всего, а повертексное не считать вовсе.
Тем более что, я вообще не планирую хранить значения освещённости в самих вертексах, я не представляю как это грамотно сделать для инстанс-моделей. В параное, как вы помните, при загрузке из оригинальной модели и массива повертексного освещения, налиту создавался дубликат, отчего потребление видеопамяти зашкаливало. Вероятно есть какие-то средства, чтобы объединять налету два массива. Скорее всего если массивы сгруппированы по атрибутам. Массив вертексов, массив текстурных координат, массив цветов. Вот в таком раскладе это работает. Но я не планирую так делать, это устаревший подход.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подшаманил мержинг сурфейсов, теперь ЧАЭС собирается 20 минут вместо часа. Причём 16 минут - это построение атласа. Очень уж этот уголок тормозной даже удивительно. Надо бы с этим что-то сделать.
Но тут двояко. Любой модный прогрессивный алгоритм с эвристикой чую будет работать еще дольше, сталкеровское попиксельное построение атласа вообще дико медленное, вот и фиг знает что его делать.
Добавлено 24-12-2020 в 13:58:
Кстати у меня тут есть одна любопытная идейка насчёт Кармаковского алгоритма, надо будет проверить.
Добавлено 24-12-2020 в 14:00:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize ты про edge-detection совсем ничего не слышал?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А чего это скрины такие мелкие? Даешь FHD!
__________________
Killing Floor: Horzine Outbreak
Внедрил прогрессив-мешы. Спорная штука. Во первых она почти не поддаётся контролю. На параметры реагирует слабо. Во вторых, она сама решает насколько меш может быть симплифицирован, вот на одних прямо втрое получается, а на других - дай бог чтобы на 20%.
Не угадаешь. От топологии вероятно зависит. В некоторых случаях вообще полный фейл, т.е. работа проделана, а симплификации - нет.
Но результат в целом очень деликатный. Одно скользящее окно удаляет из исходного меша 1 вертекс, поэтому заметить деградацию с расстоянием игроку невозможно в принципе, как бы он не присматривался. Другое дело, что в среднем такие лоды снижают поликаунт ну максимум на треть, даже не вдвое. Ну я еще потыкаю, может сделаю алгоритм более агрессивным.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати, вот какая еще мысль мне пришла в голову. Для MU-моделей можно использовать ковариантную проекцию лайтмапы, она пытается из облака точек вычленить уникальную нормаль проекции, даже если объект замкнут сам на себя. Т.е. сфейлить она не может никогда. Но такая проекция обычно бывает очень растянута. Но для MU-моделей, которые в большинстве своём ёлки-метёлки, это даже лучше, т.к. будет чем-то напоминать повертексное освещение, только с большим разрешением. Ну и естественно - никаких швов. Впрочем. наверное там лучше завести переключатели всякие в материале.
Добавлено 26-12-2020 в 13:34:
Опробовал. Ну да, ковариантная проекция на MU-моделях выглядит очень растянуто, освещение перезатекает аж назад на дерево, но зато нету швов.
И очень-очень похоже на повертексное.
Я думаю надо сделать вот как. По дефолту - пусть остается ковариантная.
А если юзер прямо создал крутую текстурную развертку, из которой не стыдно строить лайтмапу, то можно переключиться на нее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
nemyax без самопересечений, без дегенеративных UV-островков.
Добавлено 26-12-2020 в 19:34:
ну чтож, финальный штрих - радиосити.
В данном случае надо просто наспавнить вторичных аналитических источников света от поинтлайтов. Ну можно и от лайтспотов тоже.
А потом эти лайты будут участвовать в общем процессе освещения.
Т.е. свет посчитается сразу как прямой, так и отражённый, не надо будет ничего там вымучивать в несколько проходов.
Добавлено 26-12-2020 в 21:26:
Кстати, насчёт завершения истории с прогрессив-мешами.
У меня тут, собственно, было два варианта. Bunnylod от Stan Melax, ну вы его все видели. И jmspmesh от Jeff Somers. второй - это вьювер с четырьмя самыми известными методами - QEM, QEM weighted by area, реализация от Stan Melax и shortest path (не знаю кто автор).
QEM и QEM weighted by area представлены так же библиотекой qSlim.
Пока я совал этому вьюверу модельки, идущие с ним в комплекте - всё было хорошо. Даже отлично. Но как только я переконвертил сталкеровские модельки и начал совать их - тут же начался тихий ужос. Оно вообще не в состоянии их адекватно обработать. Так что SWPM от Tom Forsyth, которую юзает сталкер - наименьшее зло. Да, оно симлифицирует до определённого порога. Но модель хотя бы не превращается в кашу на произвольном уровне симплификации.
Добавлено 26-12-2020 в 22:40:
Кстати. Shortest Edge, это нечто навроде метода от Stan Melax, только еще проще - без учёта курватуры. Как говорится, уже тупее некуда - выкидывается самое короткое ребро. Там вообще математики нет, если не считать VectorLength. Я этот метод опробывал тоже, слегка доработав реализации BunnyLod. И знаете - мне понравилось. И даже очень.
Добавлено 26-12-2020 в 22:52:
Минималка, 30% от исходного меша. Если ниже, то там уже полная дигродацыя начинается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот, сляпал на скорую руку некоторое подобие радиосити.
Пусть пока хоть такое будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Честно говоря, толку от этих лодов примерно никакого, увы. Максимум, на который они способны без видимой деградации, это примерно половина от оригинального поликаунта, но часть секторов вообще нет смысла упрощать, они и так довольно простые, хотя их и много. То есть складывается идиотская ситуация, допустим взгляд с крайней точки карты, в кадре 4.5 миллиона треугольников. Включаем лоды, поликаунт падает до 3.6 миллионов. Ну и что? Фпс подымается максимум на 1-2. Он же экспоненциально падает. Импосторы могли бы поправить дело, но пока не хочется с ними связываться.
Добавлено 29-12-2020 в 10:53:
И вообще, я по прежнему придерживаюсь мнения, что основная нагрузка идёт на фрагментный шейдер, т.е. если его подменить, ну скажем заливкой одним цветом, то фпс сразу вырастет прилично. Надо будет чистый тест устроить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я про Control вообще впервые слышу. Но повторюсь, щас основная нагрузка идёт на фрагментный шейдер и это мало чем можно оптимизировать на самом деле. Только упрощать вычисления.
Если бы прогрессивные лоды снижали поликаунт прогрессивно, от них бы действительно был толк. Но чудес не бывает. Нельзя из модели в 10000 полигонов сделать модель в 300 полигонов, чтобы она при этом не превратилась в полное дерьмо. То есть можно, конечно, но ручками.
А это значит, что под эти модели будет идти свой набор вертексов, значит под лоды придётся заново перерасчитывать лайтмапу, плюс даже при таком подходе, вовсе не факт, что они прямо здорово выровняют фпс. Наилучший подход, мне представляется, это хитрый программный растеризатор для окклюжена, но эта штука сама по себе может быть довольно тормозной на самом-то деле. Тут конечно двояко. Отрендерить один канал глубины в текстуру 320х200 - это мегабыстро. Рендерить можно прямо через рейтрейсинг, чтобы не заморачиваться матрицами проекции. Проблема в том, что перекрытие будет посчитано при таком подходе очень и очень приблизительно. И будут нужны еще доп. условия, чтобы не отсечь лишнего. А это значит, что часть работы была проделана впустую. И вот где-то есть оптимальная точка балансировки, когда от всего этого механизма есть польза, причём не факт, что это константа.
Добавлено 29-12-2020 в 15:04:
Давайте напишу немного про очевидные трудности, связанные с внедрением лайтстилей и о том, почему их (трудностей) не было в старых кваках.
Итак. Лайтмапу можно хранить двумя способами:
1. одномерный массив точек, и отсылки к каждому геометрическому примитиву, обычно простой поверхности.
2. предрассчитанный 2D атлас, отсылка через UV-координаты.
Первый способ позволяет строить лайтмапу какой угодно размерности, контролируя сколько лайтстилей получит каждый сурфейс (от четырёх, до нуля), второй, очевидно этого не позволяет. Как минимум потому, что построение атласа вообще не учитывает сколько там будет лампочек и какой вклад они внесут в освещение. Частично этому мешает тот факт, что атлас строится задолго до рассчёта освещения, но главным образом - что в атласе освещение считается не для отдельно взятого полигона, а для целой их группы. Причём объединение в сурфейсов в группу для наложения на нее единого куска лайтмапы имеет вполне конкретный смысл - отсутствие швов. Есть и второе соображение - сейчас вся геометрия в треугольниках. Если для каждого треугольника выделять свой кусок лайтмапы, получим двойной перерасход люкселей. Впрочем, если кто-то полагает, что этот способ всё же имеет право на жизнь - во второй параное именно этот подход и реализован. Каждый треугольничек освещается отдельно, занимает отдельный кусочек лайтмапы и освещение радует дикой грязью, где уже невозможно отличить шов от ошибки взятия нормали по фонгу. Корректных способов это разрулить попросту не существует. Только объединять в группу. В кваке, где всё было параллельно и попендикулярно, а сурфейсы квадратными, это не имело никакого значения, вообщем-то И то, как вы помните китаец приложил немало усилий, чтобы сгладить эти чёртовы швы между смежными поверхностями. Но если вы думаете, что его алгоритм - панацея, то спешу вас разочаровать. Я конвертил некоторые модели в брашы и пытался их компилить в p2st. Террайны, колонны (не витые, просто круглые). Результат был еще хуже, чем работал просто мой лайтмаппер по треугольникам. Там вообще дикий ужос. Китайский сглаживатель хорошо себя чувствует только с аксиальными рёбрами, судя по всему. Но даже если каким-то чудом допустить, что мы эти лайтмапы просчитали для каждой квад-пары (которой может вообще не быть в большинстве случаев) и получили такие симпатичные одномерные лайтмапы, прилинкованные к сейфейсам, это всего лишь означает, что эти сурфейсов получилось несколько сотен тысяч на более-менее приличной карте. Если рисовать их так - фпс умрёт, просто по факту перебора поверхностей, даже не отрисовки. Если их мержить при загрузке налету, неизвестно сколько это займет времени. Причём, как вы понимаете, чем больше карта, тем больше времени. Сделать это после рассчёта света тоже нельзя - тогда свет второй раз уже не посчитаешь.
Но даже, повторюсь, если на всё это наплевать и всё таки сделать именно так, то есть пример второй паранои перед глазами. Там есть лайтмапы на моделях и там есть лайтстили. Качество освещения вы видели. А если нет, то всегда можете заценить. Сорцы открыты, можете брать и пытаться это дело улучшить. Навряд ли это вообще возможно. К тому же, повторюсь, при таком подходе почти всегда дикий перерасход лайтмапы получается.
Я бы мог и другие причины назвать, но и этих достаточно. Особо подчеркну, что по отдельности они не кажутся какими-то фатальными, но когда всё это собирается вместе и сталкивается с практикой, начинается тихий ужос. Но конечно, если у кого-то есть достаточно свободного времени, он вполне может доказать, что и это подход имеет право на жизнь. Второй вариант - атласы предрассчитаны заранее. Мы не можем выделять здесь какие-то группы. Но зато мы можем выделять слои-каналы.
Ведь у нас в текстуре целых четыре канала RGBA. Можно отвести каждый канал под монохромный цвет. Таким образом убивается сразу джва зайца.
И лайтстили как бы сохранены и в то же время размер лайтмапы не вырос.
Но с цветным освещением придётся уже попрощаться. Нечто подобное используется в UE4 насколько я знаю. Но что делать, если цветное освещение хочется? Можно попробовать использовать технику, которую Humus назвал Modern Lightmapping. Когда в каналы сохраняется только тень, а свет считается динамически. Частично этот подход использовался и в сталкере, для смены времени суток, например. Минус в том, что всё равно придется заводить лайтмапу под индирект-освещение, если оно у нас есть. Правда и тут есть варианты - использовать индирект только для солнца, а обычным лайтам его не давать. В конце-концов в ку3 индиректа не было и ничего, не фатально. Причём по большому счёту его не было даже в q3map2 - по дефолту он выключен. Вы можете попробовать его включить, но тогда рассчёт света из 2 минут превратиться в пару часов или около того. Поэтому его всё равно никто не юзал.
Варианты с сохранением различной информации в лайтмапу, я естественно опробую, плюс тут еще и в том, что на одной и той же странице, но в разных участках могут быть сохранены совершенно разные лайтстили. Наконец можно цвет лампочки передавать в шейдер, а в канале держать только карту интенсивности. Такой подход тоже вполне себе имеет право на жизнь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сделал лайтмаппер прогрессивным. Как только страница посчитана, она тут же сохраняется на диск. Т.е. даже если лайтмаппер вылетел с нехваткой памяти, то всё равно часть света посчиталась и будет доступна.
Теоретически можно будет еще замутить досчёт, если допустим страницы по дате новее чем карта, ну то потом как-нибудь.
Добавлено 29-12-2020 в 21:20:
И еще раз оптимизировал потребление памяти. Лес из Лост Альфы не тянет даже на ТЭЛез16, там всего-навсего 22 тысячи деревьев. Но в целом довольно солидно смотрится. Я там даже заблудился однажды.
Но даже для освещения всех этих ёлок-метёлок надо около 2 гигабайт памяти. Можно попробовать сделать GPU-лайтмаппер, благо его архитектура идеально для этого подходит, но пока не знаю.
В будущем году можно будет попробовать.
Добавлено 29-12-2020 в 21:25:
Я себе к слову довольно смутно представляю, как работает GPU-солвер.
Тому шо, если у нас к примеру индирект от солнца - ну скажем 200 источников, это чтож, надо 200 шадов-мап нагенерить? А потом разом их применить? Нет, ну можно конечно итеративно, я видел, они в основном именно так и работают, но этот комбинаторный взрыв ИМХО сводит на нет все преимущества от использования GPU.
ncuxonaT напомни как ты действуешь. И сколько видеопамяти это потребляет.
Добавлено 29-12-2020 в 21:27:
Продолжая рассуждать - я бы мог к примеру KD-Tree засунуть в текстуру и тогда бы на GPU вместо шадовмап так бы всё считал в сингл-проходе, красотищща, но беда в том, что на больших картах Kd-tree само по себе строится до 15 минут.
Добавлено 29-12-2020 в 23:18:
Внимание на поликаунт. Вот это лоды в идеальном случае. Было 8 миллионов, стало пять. ну и что? Фпс не поменялся. Для GTX650 одинаково тяжело.
Добавлено 29-12-2020 в 23:19:
А экспоненциально снижать поликаунт не в состоянии ни одна лод-система.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша под индиректом от солнца подразумевается свет от неба? Ну да, много шадовмап. Так старый лайтбейкер работал, только от неба шадовмап было не 200, а 1000 по умолчанию. А для какого-нибудь арканоса, где через маленькие окошки освещается большая карта, шадовмап нужно было не меньше 10000. И да, рендерилось оно итеративно с накоплением.
Но шадовмапы дают лики и акне, поэтому новый лайтбейкер перешел на рейтресинг. Он медленнее, но надежнее.
Сколько оно занимает места, давай посчитаем.
На каждый треугольник 3 вершины, вершины лежат в двух RGBA32F текстурах в виде (pos.x, pos.y, pos.z, uv.x) (norm.x, norm.y, norm.z, uv.y). Итого 32 байта на вершину и 96 байтов на треугольник.
В дереве 2N - 1 узлов, каждый узел это ббокс (RGB32F x2) и ссылки на двух детей (RGBA16 x6). X6, потому что сейчас я использую метод Хачисуки (https://cs.uwaterloo.ca/~thachisu/) с 6 деревьями. Значит, на узел 72 байта.
В сумме на треугольник 240 байт.
Если стоит задача экономии памяти, то можно выкинуть 5 деревьев, использовать индексы, а нормали хранить в RGB16. И, если допустить, что количество вершин в среднем равно количеству треугольников, то выйдет порядка 70 байтов не треугольник.
Добавлено 30-12-2020 в 07:09:
Ты деревья по-одному рисуешь? Инстансинг нельзя использовать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добил полное сохранение стейта лайтмаппера и сделал его умным.
Теперь он сам определяет, что от него хотят - продолжить освещение с текущей страницы или заново всё переосветить. KD-три тоже сохранил, очень уж долго оно рассчитывается на некоторых картах.
Но вообще я вот что заметил - то что считает мой лайтмаппер обычно не считает никто. Я уже молчу про то, что на той же лост-альфе большинство объектов отправлено на повертексное освещение. Но там и скейл подкручен. И естественно MU-модели имеют только повертексное. В результате, там где у меня 150 страниц 1024х1024, в лостальфе - всего-навсего шесть. Конечно это не значит, что надо непременно идти таким долгим путём. Но в рамках тестирования предельной нагрузки на компиляторы - это вполне себе ок. Уж если он такое выдерживает, то и ваши эксперименты тоже выдержит. А я не думаю, что у кого-то хватит терпения делать такие гигантские карты, как в лост-альфе.
Еще бы метрошные карты проверить, но я чёт так и не нашёл конвертора.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну штож, пора бы уже сделать колоизацию для триангловых моделей.
Без колоизации можно только летать ноклипом или бродить по скайбоксу.
Какие варианты тут есть?
Ну например, можно подключить физикс. Правда его в некоторых местах неудобно сопрягать с игровым кодом. Аналогично с Ньютоном.
С физ.движками вообще расклад такой - придётся выбросить оригинальную трассу. С одной стороны - не могу сказать, чтобы я был особенно против, но меня пугает один момент, с которым обычно сталкиваешься, пытаясь использовать сторонние библиотеки - на определённом наборе данных это начинает или дико тормозить или глючить или вообще вылетает. Вы вероятно не в курсе, но в ксаш-моде есть парочка хаков на этот счёт. Я уже не помню, то ли новодекс, то ли уже физикс вылетали при попытке запечь геометрию одной из халфовских карт. А сорцев на тот момент и не было.
Но вылет-то ладно, если есть сорцы, поправимо. А если тупить начнёт?
Сперва, как и говорил уже когда-то, попробую нагенерить брашей из каждого полигончика, предварительно их симплифицировав. Метод тупой, не особо оптимальный, но можно будет построить им дополнительное дерево. У такого подхода есть один плюс - пересечение AABB, с таким вот брашем из треугольника, считать в десятки раз быстрее, нежели честную коллизию Tri vs AABB. Но за это придётся заплатить увеличенным кол-вом данных. Там у нас, строго говоря, пусть даже неиндексированный треугольник - это три вертекса, 36 байт.
Если из него генерить браш - это минимум шесть сторон, если нам повизёт и он окажется лежать на одной из аксиальных осей. Шесть сторон - это шесть плоскостей. Одна плоскость - 16 байт. 96 минимально. Но. Нам еще нужны бевелы. Без них толку не будет. А вот бевелов может быть довольно-таки много. До 30 штук, в среднем - те же шесть. Правда есть один лайфхак. Если треугольник неаксиальный, нам вовсе необязательно непременно добивать его полноценного браша - достаточно одних бевелов. Так что в теории их может быть не шесть, а меньше. К тому же, учитывая, что мы имеем дело именно с брашами, нам вовсе необязательно превращать в них треугольники. Можно сперва бъеднить все треугольники в конвексные фигуры, по максимуму. Сколько бы их там ни было - это всё равно будет одна плоскость. Так что в некоторых случаях выигрыш просто очевиден. Для ландшафта, например. Другой конечно вопрос - насколько всё это будет оптимально. Ну вот и проверим.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, брашевые извращения, походу отпадают. Оно работает и коллизия гладкая, но занимает чертовски много места, просто охренеть сколько.
Вес плоскостей может в 2-3 раза превышать вес видимой геометрии.
Конечно для коллизии геометрию можно и нужно симплифицировать, но всё равно это не выход. Для кордона эти плоскости уже весят сопоставимо со всем остальным. И это только для террайна и статик-моделей.
Причём скомпилить карту, при использовании полноценных брашей (не односторонних) я уже не могу - памяти не хватает. А если бы хватило, вес бы увеличился еще на столько же. Это просто нерационально.
Смысл любой оптимизации, в том и заключается, что и без нее всё хорошо, а с ней - вообще отлично. Но надеяться на симплификацию, как на разрешение проблемы нельзя. Это её просто слегка отодвинет в сторону.
Только время тратить. Ну хорошо, посмотрим какие у нас есть варианты в трассировке треугольников при помощи ббокса.
Вообще надо заметить, что проверка bbox vs triangle очень тяжёлая. Особенно class III test.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему ббокс?
ncuxonaT ну а как игрока представить? Капсулой? Это пока не существенно. Вот кстати, хотел бы с вами посоветоваться насчёт одной коллизии. Описание компиляторных энтить в скриптах - это почти полноценный исполняемый язык, хоть и с некоторыми оговорками.
И в этом языке возникла небольшая коллизия, сейчас поясню на примере.
1 | "env_static" |
2 | { |
3 | addCompileFlags( C_DETAIL ); |
4 | includeModel( "model" ); |
5 |
6 | if( spawnflags & 1 ) |
7 | forceClipModel(); |
8 | if( spawnflags & 2 ) |
9 | dropToFloor(); |
10 |
11 | transformModel( "self" ); |
12 | movePrimitives( "classname", "worldspawn" ); |
13 |
14 | removeEntity(); |
15 | } |
if( spawnflags & 1 ) |
if( spawnflags & 2 ) |
1 | if( spawnflags ) |
2 | { |
3 | if( spawnflags & 1 ) |
4 | forceClipModel(); |
5 | if( spawnflags & 2 ) |
6 | dropToFloor(); |
7 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
if( targetname == t1 ) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне было бы комфортнее самому объявить то, что я хочу считать полем. Например так:
field spawnflags; |
field model; |
field targetname; |
field spawnflags, model, targetname; |
Так я же об этом и толкую. Объявлять ничего нельзя. Здесь нет переменных, только обращение. И данные бывают двух типов - либо это содержимое ключа, либо константа. Над ними нельзя производить операции кроме как сравнения или сохранять куда-то полученные результаты. Хотя модифицировать имена ключей и их содержимое - можно. Но - только такими же константами. Или на худой конец - содержимым соседних ключей в пределах одной энтити.
Добавлено 14-01-2021 в 00:39:
Ну да ладно, вернёмся к колоизации. Вообще я думаю, дело даже не только и не столько в методах, сколько в выборе дерева. Здесь по идее мне нужно аксиальное нерегулярное BSP. Которое будет искать оптимальный сплиттер по двум критериям - минимальному размеру ноды и максимальному кол-ву полигонов, которые лежат на ноде. Т.е. отбалансировать это дерево именно для коллизии. Стоковое кутришное дерево для этих задач абсолютно негодится. Возможно я его тоже потом отбалансирую, но это не так критично. Смысл в том, что дерево ничего не должно разрезать, в этом плане уподобляясь AABB-tree, но при этом быть иррегулярным. AABB это как правило регулярная сетка, где каждый узел содержит ровно один полигон (хотя это и необязательно конечно). Из-за чего такое дерево может быть просто гигантских размеров. Ну нам это очевидно не надо.
А подход с несколькими деревьями неплохо себя зарекомендовал еще со времён первой кваки. Для видимости одно дерево, для коллизии другое.
Надо только придумать как потуже сжать клипсурфейсы, у них будет раздельный набор данных - точки и рёбра. Причём рёбра в некотором смысле будут выполнять роль индексов для точек, поскольку каждое ребро содержит индексы двух точек. Ну собсно, как и в халфе.
Так же у каждого ребра есть нормаль, но я думаю хранить их в карте слишком расточительно, лучше заново рассчитать при загрузке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С этой коллизией, немаловажная задача стоит, определиться какую именно геометрию мы будем использовать. С одной стороны - нам непременно нужна видимая, для точечной трассы, которая способна трассировать тексели, например для пропуска пуль сквозь решётки, ну и не только.
С другой стороны, нам нужна упрощённая геометрия для тестирования примитивов. И вот здесь конечно затык у меня. Хранить оба вида геометрии в карте? Строить точную геометрию при загрузке, а упрощённую считать при компиляции? Оба типа геометрии рассчитать при компиляции?
Всё это так или иначе угрожает переизбытком данных. Конечно не столь масштабным, как если бы вознамерился сконвертить каждый треугольник в браш, но всё равно.
Для начала я решил всё же опробывать аксиальное дерево из третьего дуума. Хорошая штука, но о том, чтобы строить его при загрузке, речи конечно не идёт, на картах типа кордона это может занять десятки минут.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Совсем пашарить не получится, потому что видимая геометрия натурально хранится в RAW-контейнере, куда доступ только по шаблонам. Для коллизии обращаться с такой датой дико неудобно, поэтому для нее создается локальная копия. Ну она не сильно много места занимает.
А вот с симплифицированной версией визуальной геометрии, тут уже посложнее, её придется хранить в явном виде. Но меня больше занимает вопрос, насколько эта геометрия вообще актуальна.
Добавлено 14-01-2021 в 19:33:
Построил я дерево и даже его визуализировал на всякий случай. Долго строится зараза и полигоны к узлам как-то странновато примыкают. Наверное налажал где-то. У этого дерева есть существенный плюс - его очень легко хранить на диске. Потому что нам посути надо сохранить только axial type (если -1 это лиф), дистанцию до плоскости и два указателя на детей. 16 байт на ноду максимум. Лифов вообще нет, как легко догадаться.
А при загрузке просто отфильтровать геометрию в это дерево, это легко и просто делается, там даже ничего резать не надо. То есть в такое дерево можно профильтровать вообще любую геометрию, ну там брашы, полигоны, наконец полигоны из симплифицированой версии. А в карте таскать только само дерево. В этом несомненный плюс конечно.
Но я его еще не тестил на производительность. Хотя с виду - ну дерево как дерево, наверняка быстрее классического в силу аксиальности. И как я понимаю, обладает некоторыми достоинства R-Tree, KD-Tree и BVH вместе взятых. Впрочем BSP это самый общий случай, поэтому оно и способно приобретать черты узкоспециализированных деревьев и в его построении допускаются абсолютно любые приёмы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Собственно почему придётся завести два дерева. Потому что для двух задач - коллизии и рендеринга нужны совершенно противоположные требования.
То что идёт на отрисовку сгруппировано большими кусками, там дерево нужно достаточно редкое, отдельные узлы могут быть даже размером 1024х1024. Для физики напротив - скопление мелких полигонов в одном месте провоцируют появление дополнительных узлов там. Это противоречие никак не разрешить в одном дереве. Да вообщем-то и не нужно. К слову сказать, те кто делал OverDose этот момент вообще не поняли. Неудивительно что он такой тормозной получился.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ввёл в компилятор понятие уровень оптимизации.
Там довольно много такого, что могло бы помочь, но каждый раз ждать пока оно сработает, брр. А для финального компила можно и потерпеть.
В основном влияет на уменьшение размера карты и на увеличение фпс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Всё забываю устроить опрос. У меня есть очень древний вьювер моделек, совмещённый с дециматором. Но главное его преимущество в том, что там аж четыре наиболее известных метода симплификации встроено и можно пощёлкать и оценить качество работы того или иного алгоритма.
В комплекте, разумеется, идёт набор рафинированных моделек, на которых всё гладко. Я недолго думая, при помощи Noesis переконвертил пару моделек из сталкера, в частности, вот камаз и сунул этому вьюверу.
И оставил от первоначального поликаунта примерно 20% (было 9697 трианглов, стало 2288). И сделал пять картинок. Оригинал, чтобы была референсная точка. И четыре различных метода симплификации. И вот мне любопытно, какой из четырёх методов вам покажется наиболее качественным. Оставить 20% от первоначального меша, это довольно непростая задача, если бы я убрал скажем половину полигонов, скорее всего разница была бы малозаметна. Программка называется jmspmesh, если кому-то интересно. Поехали:
Это оригинал:
Quadric Error Metrics (QEM) weighted by triangle area
Quadric Error Metrics unweighted
Original Algorithm by Stan Melax (Стэн Мелакс, это дядька такой известный)
Shortest Edge (не знаю кто автор, но принцип работы можно уместить в одно предложение: выбрасывается самое короткое ребро)
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В Shortest Edge наиболее угадывается камазюка, разве что немного покрышки побиты.
На втором месте Quadric Error Metrics unweighted, кроме покоцанных колес угадывается оригинал.
Quadric Error Metrics (QEM) weighted by triangle area
- такое себе, лонжероны пропали.
Original Algorithm by Stan Melax - ужас.
Судя по скриншотам автоматическая генерация лодов еще долго не заменит ручную работу модельщика.
Вообще мне кажется что в принципе вряд ли возможен алгоритм который мог бы нормально уменьшать полигонаж, т.к. надо понимать геометрию модели, и упрощать ее сохраняя ее форму.
Добавлено 16-01-2021 в 19:37:
Если выбирать из перечисленных то однозначно Shortest Edge, у него модель меньше всего убита. Stan Melax однозначно самое дно, модель полностью анигилирована.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Имплементировал колоизацию из дуум3, в целом неплохо, мне нравится.
Но есть конечно и досадные моменты. Во первых, больше всего места в заняли сурфэджы - индексы ребёр. На лост-альфовском кордоне почти 17 мегабайт. И ведь ничего не сделаешь. Сами рёбра и вертексы весят достаточно скромно, дерево я ужал, плюс это всё происходит на оригинальной геометрии где порядка миллион двести тысяч полигонов (не треугольников, а именно полигонов). Думаю, если геометрию симплифицировать, будет не так жутко. К тому же у аксиального BSP есть один важный плюс - сурфейсы в него можно фильтровать на лету, это очень быстро, а значит не надо их хранить в карте. К тому же фильтровать их можно, читая контентсы из материала, если к примеру несолидный, то вообще не помещать в дерево. Ну то есть, для того чтобы поменять контентсы, вовсе необязательно перекомпиливать карту.
Минус в проверке на пересечение модель\полигон. Т.е. движение модели сквозь полигон работает отлично, а вот тест на застревание внутри полигона - не очень. Это не баг кода, это такой подход. Помните выражение "застрял в текстурах"? Вот это как раз оно. Т.е. проверка на пересечение делается в самом начале, когда плоскости модели и плоскость полигона рядом. Но чистой проверки на всю модель - не выполняется.
Иными словами полигоны односторонне проходимы, т.е. сзади сквозь него можно пройти, но назад он уже не пропустит.
Такой подход не позволяет конечно некоторые вещи, которые раньше решались легко и просто, ну например - проверка на вставание игрока внутри узкого тоннеля скорее всего сфейлит. Это не значит что подобные вещи нереализуемые теперь, логика немного поменяется. Но я вот думаю что классический тест на застревание тоже нужен. Потому что трассировочную модель можно представить в виде конвексного браша.
Добавлено 22-01-2021 в 14:00:
К слову, весь этот механизм колоизации предполагает любопытный выверт геометрии. Вся геометрия вывернута наизнанку, но плоскости смотрят правильно. При этом и модель для трассировки тоже вывернута, но уже в другую сторону, т.е. полигоны смотрят внутрь, а плоскости наружу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем главная претензия к колоизации - это её размер.
Хрен его знает что с этим делать. Всего по чуть-чуть, а в сумме много.
Примерно половина от визуальной части. Ну скажем, если визуальная геометрия весит 100, то колоизация - 50. Многовато.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А сколько ты хотел?
Мегабайт 30 к примеру.
Кстати, ЧАЭС с коллизией собралась и коллизия там весит удивительно немного. Было 175 стало 214.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати, вот такой вопрос к сообществу.
Как сейчас делают внутриигровые редакторы движков?
Там все элементы GUI кастомные или на стандартных виндовых контролах?
Ну или скажем блендер или 3дМакс? Я просто смотрю на некоторые скриншоты и понимаю, что виндой там и не пахло.
В принципе если делать кастомные контролы, которые рисуются через GL, то будет настоящая кроссплатформенность, правда я не гарантирую что все шрифты будут чёткие на любом разрешении, со шрифтами конечно придётся повозиться тогда.
__________________
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 этим можно объяснить разбиение покрышки на части?
Вроде бы и УЕ, и юнити, и даже годот используют собственный GUI. А по поводу шрифтов - фотошоп, например, использует собственные контролы, но текст на них рисует средствами системы.
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Из уровня, из огф-версии, где-то нарыл исходный .object
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Мне проще написать декомпилятор уровней, чем искать оригинальные модели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добавил механизм анимации текстур, разделённый по группам.
Изначально анимация базировалась на единственной группе, но это не позволяло, скажем, иммитировать кушные\халфовские кнопки.
Теперь 32 группы по 32 кадра. Каждая группа может иметь как автоматическую анимацию, так и контроль за кадрами с сервера.
Описание кушной кнопки ( два кадра мигает в отжатом состоянии, один светится в нажатом), в простейшем случае выглядит, ну например так:
1 | "+0runered" |
2 | { |
3 | image u_ColorMap = "globals->$WhiteTexture"; |
4 |
5 | // pev->frame == 0 |
6 | addUnitFrame( u_ColorMap, "textures/<wadname>/+0runered", 0, 0 ); |
7 | addUnitFrame( u_ColorMap, "textures/<wadname>/+1runered", 1, 0 ); |
8 | setUnitFramerate( u_ColorMap, 10.0f, 0 ); |
9 |
10 | // pev->frame == 1 |
11 | addUnitFrame( u_ColorMap, "textures/<wadname>/+Arunered", 0, 1 ); |
12 | setUnitFramerate( u_ColorMap, 10.0f, 1 ); |
13 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
анимации дискретные что ли
На одном юните сидят, так что без лерпинга, если ты конечно это имел в виду.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно в 3д текстуру засунуть и анимировать сдвигом по z координате. Я так анимированные спрайты делал.
Вообще лерпинг легко замутить даже имеющимися средствами.
Надо просто объявить два текстурных юнита и сдвинуть в них один и тот же набор кадров на один шаг.
Но это для скайбоксов разве что. Обычно оно не нужно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да с коллизей конечно очень непросто. Слишком много взаимоисключающих параметров. С одной стороны - инстанс-модели нельзя хранить с локальными деревьями. Потому что tree of trees это такой тормоз перестройки, что его даже рассматривать не хочется. Ну естественно, всё упирается в стек.
Может пока там две-три, пять моделей это незаметно. Но когда их несколько тысяч - не вариант вообще. Значит надо колоизацию для каждой копии из локального пространства разворачивать в общую кучу треугольников. Это естественно влечёт за собой резкий рост конечного BSP-файла. Эджи и сурфэджи при таком раскладе хранить в карте вообще не вариант - и те и другие весят, ну например для Кордона, суммарно столько же, сколько весят сами вертексы и индексы. Т.е. грубо говоря, вертексы 18 мегабайт (только точки, позиции в пространстве), 20 мегабайт - описание самих сурфейсов, ну и эджы с сурфэджами - еще 60.
Но для индексированной геометрии, рёбра весьма легко восстановить при загрузке. это занимает совсем немного времени, если использовать хэш.
Пару секунд примерно. Собсно, я так и делаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Визуализировал колоизацию. Цвета рандомные. Но кстати берутся из халфовской палитры
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не могу сказать, чтобы компилятор уровней был готов прямо на 100%, но я над форматом уровней работаю уже год и у меня попросту замылился глаз.
К тому же есть и другие важные задачи. Собственно, задач еще две:
1. разработка формата моделей с общим банком анимаций. Это не должно занять много времени, благо основные части механизма уже разработаны.
В частности форматы хранения вертексов-индексов, контейнеры для моделей и прочее. Думаю за месяц управлюсь.
2. Собственно, то, что делает движок пригодным для использования продуктом - самостоятельный редактор для всего. Движок без редактора точно никому не нужен, в этом я уже убедился. Джек не годится - он не сможет отрисовать ЧАЭС из Сталкера, не заточен он под такое.
К слову сказать, я подсознательно предполагаю что отсутствие собственного редактора во многом ограничивало полёт моей мысли в некоторых аспектах.
Надеюсь преодолеть это противоречие.
Промежуточный билд будет доступен когда я разработаю новый формат моделей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша 3д пакет за редактор сойдет?)
Я не планирую делать привязку к конкретному типу редактора.
Будет свой собственный редактор, в котором можно будет сделать большинство операций, исключая полноценное моделирование и анимацию, но подвигать вертексы-треугольники будет можно, а так же редактировать развертки. Можно будет написать какой-нибудь плагин к блендеру и наконец кубать в Джеке, если планируется по старинке использовать браши по большей части. Любая привязка к собственному редактору обычно только отталкивает пользователей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, я скорее имел ввиду плагин на какой-нибудь 3д редактор, с экспортом всего уровня для последующей компиляции.
Ну да, я это и имел в виду. Геометрия и точечные объекты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А в GtkRadiant можно будет?
Почему нет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://hlfx.ru/forum/showthread.php?s=&threadid=5620
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Открыл тему обратно. Буду тут по прежнему бухтеть бесплатно и без смс
Добавлено 20-04-2022 в 18:46:
Сразу же дам ответы на вопросы, которые должно быть интересуют общественность.
1. Блог на Boosty - всё. Вестись более не будет. Дико неудобная площадка как по своей природе, так и для моего формата.
2. Телеграм-канал. Будет вестись, но к сожалению на данный момент идёт работа над низкоуровневыми вещами, которые подписчикам там попросту не будут интересны. Как только начнётся работа над вещами, понятными юзерам, он будет активно вестись. В этом году.
3. В этой теме продолжится классический формат ведения блога в стиле "заметки на полях". С вашими вопросами и предложениями, и моими ответами. Полагаю этот формат наиболее всех устраивает.
4. Доступ к бета-тестированию по прежнему платный, цены не поменялись.
5. В данный момент идёт разработка виртуальной машины и универсального редактора. Редактор будет использовать виртуальную машину для создания оформления. Таким образом ядро будет единым, а внешний вид - на усмотрение пользователя. Собсно, я об этом уже писал.
6. Как только будет что показать вы это сразу узнаете, по активности в телеграм-канале.
7. Какой-то прототип редактора (не уровней, а вообще всего), будет готов уже в этом году, по крайней мере я на это надеюсь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Расскажи по форматам ресурсов.
Можно ли будет драг дропом закинуть модельку и чтобы движок сразу собрал её под нужный формат?
Тоже самое с текстурами?
Будут ли генерироваться дефолтные материалы при импорте модели?
Будет ли движок пытаться запарсить параметры этих материалов? Хотя бы дефолтный PBR.
Будет ли возможность в материале подключить свой шейдер, и указать глубину его отрисовки?
Будут ли модели наконец поддерживать морфинг?
Можно ли объектам назначать вместо параметров, скрипты которые будут задавать правила этим объектам? И можно ли в реальном времени их включать/выключать? А так же перемещать в иерархию друг друга?
Будет возможность загрузить пустую сцену без бсп и накидать на ней объекты?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Сколько символов в минуту читаешь?
Дядя Миша
А какой скриптовой язык будет?
Насколько сложно будет сделать визуальное програмирование типа, как в уе4 - блюпринты?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
>> Что конкретно рассказать?
Вообще с какими форматами файлов работает движок.
>> 1. системы плагинов для импорта, которые будут читать различные типы ресурсов.
Что подразумевается под плагинами для импорта? Это обычные компиляторы? Я к тому нужно ли писать какие то плагины экспорта для 3д пакетов? Как в случае с .smd ГС и Сорса? Либо же твой конвертер будет питаться обычными моделями типа .obj, .fbx, .blend и т.п.? Насколько это всё сложно в настройках?
>> Т.е. на входе - ресурсы любых форматов, а на выходе - понятные XashNT.
Под нужным форматом это я и имел ввиду. Стоковый формат движка.
>> А что с текстурами? Каких-то хитрых форматов в XashNT нет, только самые распространённые. bmp, jpeg, tga, dds.
О, это уже неплохо. Добавь ещё PNG
>> Моя система материалов позволяет генерировать не дефолтные материалы, а полностью воспроизводить рендеринг из того движка, откуда модель была скопирована. По крайней мере, если речь идёт о достаточно старых движках, до первого срузиса, включительно.
В теории можно будет из унреалов-юнитей тоже всё это иметь, сам механизм позволяет, но я пока что не тестировал.
Ну вот загрузил ты в движок модельку, она грузится у тебя голой без материалов, или же у неё уже есть какой то стоковый набор созданный при импорте где можно просто дописать пути к текстурам?
>> Некорректный вопрос. Система материалов XashNT вообще не предусматривает никаких встроенных материалов и шейдеров. Только пользовательские. Фактически рендерер создаётся в скриптовых файлах с нуля под любую задачу. Соответственно меняется уровень графики, в зависимости от использованных шейдеров. Можно получить картинку уровня Doom\Quake, можно картинку уровня HL2, уровня Stalker\Crysis или Unreal4. Я над этой концепцией шесть лет думал.
Ты наверное неправильно понял. Вот допустим я захочу сделать материал которого тупо нет в движке. Например туже кубамапу поделенную на сектора, которые можно заливать разным цветом. Или там зеркало с альфаканалом какое нибудь. Зачем для этого лезть в рендер? Когда можно просто загрузить простой шейдер, и сделать ему публичные переменные как настройки материала?
>> Что имеется в виду под морфингом? Если лицевая анимация, то на данный момент её нет, но формат позволяет её добавить в любой момент, не нарушая совместимость. Если же имеются в виду модели с вертексной анимацией (без костей), то этого на данный момент тоже нет, но такой формат будет. И тоже без нарушения совместимости.
https://www.youtube.com/watch?v=e675Ulc7QL4
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Тут еще вот какое соображение. В халфе нормально логические энтить такого рода сделать было невозможно - для них физика считалась, движок пытался их передать по сети, к тому же они занимали очень много памяти, каждый логический блок - как целый монстр. Только что без модельки.
В ксаше с этим не будет проблем, там объектам необязательно наследоваться от CBaseEntity, их кол-во не будет ограничено тысячей штук, т.е. их может быть и 10000 тысяч. Вполне естественно какую-то часть отдать вот под такие логические условия. А в редакторе сделать вкладку, которая будет их показывать отдельно, на манер блу-принтов.
Да, в дальнейшем надо будет поразмыслить над этой темой.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Уже более понятно что из себя представляет движок. Чтож, скажу что мне пока твоя концепция нравится. Главное чтобы с ресурсами можно было работать очень быстро, не теряя уймы часов на подготовку их к конвертациям, это меня прямо сильно в ГС/Сорсе раздражало.
Ну и вообще имей ввиду что твой движок будут использовать по большей части художники которые хорошо знают 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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Читаю тему с самого начала, неспешно. Очень хорошо что я это сделал, например освежил в памяти, сколько же на самом деле было итераций у системы материалов. Спустя 2 года, мне уже кажется, будто я её выдумал и реализовал буквально за месяц. Но нет, она менялась очень много раз.
Что хотелось бы отметить.
- XashNT разрабатывается итеративным методом. Это чем-то напоминает работу виндового дефргаментатора. Содержимое диска изменилось - повторный запуск и опять всё сначала. Поэтому если в теме встречаются упоминания "движок готов на 50\60%" это число могло откатиться обратно к более скромным значениям. Я в принципе не готов оставлять те решения, которые кажутся мне спорными. Готов с ними какое-то время мириться, но потом они всё равно будут переписаны.
- Основная задача, как и декларировалось изначально - максимальная целостность концепции. Это даёт пользователю возможность безо всякой документации, просто по аналогии и предидущему опыту предполагать у движка наличие тех или иных возможностей и движок не обманет его в этих ожиданиях. На мой взгляд это самое главное качество. Продираться через документацию - это почти всегда заставлять себя принимать чужую точку зрения и пытаться её осмыслить. Конечно это не значит, что документации вообще не будет. Будет и она уже есть, но гораздо удобнее, если человек прочитав вводную и уловив общие принципы сможет действовать интуитивно, а не спотыкаться на каждом шаге.
- Всё что я делаю сейчас - это продолжение разработки того самого ксаша из 2007-го года. Да, Ксер мне сказал - сделай его совместимым с халфой и я сделал. Появился Xash3D, XashXT, P2:Savior. Но об истинной цели я не забывал никогда. Просто теперь у меня появился несравнимый с 2007-м опыт.
Глобальные задачи, которые предстоит решить:
- Написание редактора
- Использование виртуальной машины в качестве игровой библиотеки
Самое сложное в разработке, это фундаментальные задачи, когда еще неизвестно чем дело закончится. Ну вы помните, когда я разрабатывал новый формат уровней и точно так же не знал. А что если у меня не получится? А что если он будет слишком тормозной? Или лайтмапу не сумею нормально наложить? Тут те же вопросы встают, по виртуальной машине. Точнее часть очень острых вопросов стояла буквально месяц назад, но я их успешно решил. Впрочем, вопрос о производительности пока остаётся.
Добавлено 22-04-2022 в 09:51:
Кстати. Я там в середине темы топил за сохраняемые модели. К этой концепции можно будет всеръез вернуться, когда пользовательская часть станет виртуальной машиной. Ну потому что сейчас сериализация именно в юзерской части дллки находится и это совсем другой расклад.
Добавлено 22-04-2022 в 10:26:
Пока не забыл, оставлю здесь на будущее концепцию моделей.
Идея в том, чтобы абсолютно все видимые и осязаемые сущности были моделями. В старых движках модель - это только то, что было загружено с диска. Уровень, монстр или спрайт. Я хочу пойти дальше и сделать моделями абсолютно всё. Эти модели смогут конструироваться на лету и сохраняться в сейв. Что с одной стороны разрешит вопрос, например с сериализацией разрушаемых моделей. Т.е. если модель в сейве - грузим именно её, а не с диска. Примеры:
Модель декалей: mod_decal. Имеет родителя - реальную модель, неважно мир или монстра. Внутри массив вертексов, который загружается в VBO и точно так же рисуется через стандартную систему материалов. При добавлении новой декали обновляется и массив. С точки зрения конвейера - это точно такая же модель. С точки зрения физического движка - коллизии нет.
Модель лучей: mod_beam - рисуем лучи по синусоиде или как там еще, скроллим текстурку. Ну их наверное нет смысла сохранять в сейв.
Модель партиклей: mod_particle - рисуем партикл-систему. Можем сохранить в сейв состояние частиц по аналогии с декалями. Thambs помню агитировал за это. Разницы никакой, что характерно - те же самые позиции в пространстве. Ну наверное можно оптимизировать, сохранять позиции как char и глобальный оффсет к ним или скейл. Это всё детали.
Модель деформируемая: mod_softbody. Коровы эти проминающиеся или просто разрушаемый ящик. С точки зрения рендеринга - те же самые частицы, аналог декалей или партиклей. С точки зрения физики да, посложнее, но тоже решаемо.
В этой концепции самое главное - рендерер по прежнему остаётся абстрактным конвейером. Ничего кроме списка моделей он не рисует.
А список бьётся на непрозрачные и прозрачные сущности. Конечно проблема отрисовки полупрозрачных поверхностей внутри такой модели никуда не исчезает к сожалению. Т.е. скажем партиклы внутри системы как-то сортировать. Но вам прекрасно известно, что эта проблема в принципе нерешаемая стандартными средствами, а OIT по прежнему слишком дорог для большинства пользовательских видеокарт.
Впрочем моя скриптовая рендер-система позволяет реализовать OIT пользовательскими средствами, чтобы каждый сам для себя так сказать решил, надо ли оно лично ему.
У этой системы есть только один условный минус. Она по дизайну куда больше подходит для persistent-объектов. А не для короткоживущих, типа спыжки от выстрела или wallpuff. Особенно, если этих последних довольно много. Но это наверное можно решить, определив время жизни для переиспользуемых слотов в массиве моделей. По тому же принципу, по которому энтити переиспользуются.
Такая концепция разом снимает все потенциальные проблемы и здорово упрощает разработку. Можете высказываться по поводу
Добавлено 22-04-2022 в 10:28:
ЗЫ, Чтобы было понятнее - это в противовес тесселятору из ку3, который программно обрабатывал каждый полигончик. Но сейчас для производительности весьма вреден такой подход. Поэтому вот такие модели - группы полигонов в VBO, а обработка в шейдере.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я очень не понимаю причем тут вообще отрисовка. Что, теже регдоллы рисуются как то по другому? Там же посути тоже каждая кость как отдельный объект с
ригидбоди.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Кости с сервера контролируются, так что да, будет такое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Осилил 70 страниц темы. Моё личное когнитивное искажение заключается в том, что я некоторые вещи я уже не помнил и искренне считал, что с самого начала придерживался подобной линии, но вот как оказалось, отношение к ним поменялось непосредственно в процессе разработки, по итогам проведённых опытов. Давайте же вспомним все ключевые моменты.
1. Игровую часть планировалось оставить в С++ библиотеке и вынести туда как можно больше связанных вещей, чтобы у юзера было как можно больше свободы действий. Это действительно было сделано, но движение в данном направлении превращает пользовательские библиотеки в подобие сорсовских. Куда обычному дизайнеру просто страшно залезать. Это явно не то, чего бы мне хотелось.
Смена концепции: игровая часть должна быть в скрипт-машине, которую легко отредактировать, не устанавливая громоздких IDE.
Статус: еще не реализовано
2. Система материалов. Концепция, если внимательно ознакомиться с темой, менялась раз пять-шесть, в процессе имплементации. Получившийся язык позволяет гибко описать абсолютно любой материал, однако он слишком громоздкий для обычно пользователя. Решение было найдено при помощи системы макросов, которые позволяют притвориться одним из стандартных языков описания материалов. Таким образом пользователю даже не придётся переучиваться. Или наоборот - он сможет создать свой язык описания системы материалов.
Статус. завершено наполовину, поскольку нет динамического освещения и теней, что вероятно потребует некоторых нововведений в уже существующую систему.
3. Формат уровней. Изначально предполагалось использовать Q1-like формат, слегка доработанный. Во многом в рамках этого эксперимента и создавались p2st-компиляторы. Затем был использован Q3-like формат,
который тоже меня не устроил по ряду показателей и наконец в процессе была выработана концепция Uniform Mesh. Это очень хороший механизм, позволяющий расширять любой формат без потери совместимости.
Статус: формат завершен, однако текущие реализации на его базе еще будут изменяться (без потери совместимости) и расширяться.
4. Статическое освещение. Как вы помните, изначально я не планировал его внедрять, однако под давлением общественности и собственных соображений всё же сделал это. Смена концепции: первоначальный лайтмаппер не умел считать отражённое освещение, но в итоге там появился полноценный радиосити.
Статус: лайтмаппер закончен, но я не исключаю его дальнейших оптимизаций.
5. Редактор ресурсов. До сентября прошлого года не хотелось связываться с этой темой вообще. Были надежды, что его заменит Jack или Blender.
Натурные эксперименты показали, что об этом нечего даже и думать.
Смена концепции: я не хотел делать редактор, поскольку он ожидаемо был бы похож на QuArK, но теперь я создаю редактор, у которого внешний вид заложен в скриптовых файлах, а следовательно может быть адаптирован под внешний вид любого редактора, будь то Jack или даже Unity.
Статус: в процессе разработки (именно над ним я сейчас и работаю).
Всё это конечно удлиняет путь, но меня покрайней мере не мучают мысли, что я собственноручно заложил в фундамент своего движка какое-то гамно или дохлую крысу. Уж если для себя строить тяп-ляп, зачем тогда вообще строить?
Есть и другие соображения. Когда мне кто-то говорит "Да сделай всё как в XXX", я спрашиваю - а зачем? Копия не будет лучше оригинала. Это их концепция и их путь. Если кто-то его разделяет, то пусть и пользуется этим продуктом.
На данный момент я придерживаюсь такого мнения, что ситуация на рынке движков, абсолютно не устраивает их пользователей, но альтернативы у них всё равно нет. Вот и приходится терпеть и успокаивать себя тем, что всё что они видели - еще хуже.
Добавлено 23-04-2022 в 09:24:
Теперь к вопросу, могут ли поставленные задачи быть реализованы одним человеком? Если на другой стороны - корпорации с миллиардными бюджетами. Ну я напоминаю, что изначально Кармак и Суини писали свои движки в одно жало. Сила таких продуктов - в сложившемся коммунити, и накопленных обучающих материалах, ресурсах, а так же в общественном мнении. А вовсе не в том, что исходники движка весят 20 гигабайт.
Если народу понравится предложенный мной путь, это будет куда важнее многомиллиардных бюджетов. Сила в идеях, а не в нарисованных ноликах на банковском счёте. Ну да ладно, не буду углублять эту тему, а то уже политота начнётся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну я планирую написать простенький редактор моделей тоже.
В первую очередь для себя, потому что я написал компиляторы уровней вслепую, а некоторые эвристические вещи лучше визуализировать.
В частности это касается склеивания зеркальной развертки обратно в обычную для лайтмапы, ну и не только это, конечно.
Т.е. персов в нём навряд ли можно будет делать, а вот всякие домики, на манер брашевых - вполне, так думаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Можно будет в редакторе запустить сцену и побегать на ней?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Круто, ждём ждём ждём
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Затем что, он позволит редактировать модели, не выходя из редактора уровней.
Насколько я знаю, с этим всё очень хреново.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
(_-=ZhekA=-_) Ku2zoff
Я так понимаю ДМ имеет ввиду инструментарий для создания брашевой геометрии или просто базового блокинга. В целом норм идея. А для создания сложных мешей действительно лучше нормальные 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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Использовать реальную геометрию для путей, это какой-то гнилой способ.
Это же и навмешей касается. Вон в Метро Эксодус бандюки по воздуху бегали. Потому что в этом воздухе висел навмеш.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro то что ты описал вполне могут быть недостатки конкретных реализаций. Но я пока не составил по этому поводу своего мнения, так что спорить не буду.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В уе хорошо, там волюмы, поставил один на всю карту и вася кот )))
__________________
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
Многие иностранцы пилят карты для ку1-ку2 в тренчбрум. В его сторону тоже стоит смотреть. Хотя бы потому, что там подход как в УЕ - все можно делать не покидая 3д-окна.
__________________
igroprom.d3.ru
Ну я надеюсь вы понимаете, что в 3д окне очень важны всякие прилипалки геометрии друг к другу, поскольку там целиться неудобно.
Но я это тоже планирую сделать. Это очень удобная фишка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize
Ну я про триде-редакторы.
К слову о прилипании, в УЕ даже хоткей есть, который позволяет "уронить" какой-нибудь условный ящик на условный пол.
__________________
igroprom.d3.ru
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Пришлось пока что остановить работу над редактором и заняться бакэндом.
А точнее - платформозависимым слоем абстракции. Поскольку движок изначально базировался на коде от Кармака, вы знаете, как там с этим обстоят дела - мультиплатформенность гарантируется только для самого движка, а вот утилиты и особенно редактор - ну как повезёт.
К тому же утилиты использовали собственную файловую систему, упрощённую. Пока я долгое время тешил себя надеждой, что можно будет обойтись сторонним редактором, это всё худо-бедно работало.
Но с учётом новой концепции, это будет единая среда, в которой каждый компонент может запускать другой. Движок из редактора, редактор из движка, утилиты. Неплохо бы предусмотреть гибкий механизм, который позволяет это сделать. Какие-то зачатки были еще в старом ксаше, там как вы помните, движок умел перезапускать сам себя, через хитрозакрученную систему каллбэков, но это не слишком надёжно.
Сейчас я выработал новый принцип для этого дела. Есть некая структурка, которая содержит в себе:
1. путь до загружаемой библиотеки
2. название инстанции (движок, редактор, дедикатед-сервер, компилятор)
3. строку командных параметров
Эта структурка заполняется внутри .exe файла. И передаётся внутрь дллки, которая будет вызвана. Дальше дллка может по собственному усмотрению записать туда новый путь к дллке, новую инстанцию и изменить командную строку. И при выходе из экспортной функции, соответственно, вернуть 0 - завершение работы. Или 1 - рестарт.
А сам вызов этой экспортной функции из дллки оформлен в цикле.
Точнее говоря, не просто функции, а загрузки библиотеки, вызова функции и выгрузки библиотеки. Т.е. мы можем подключать любые части движка по необходимости, минуя классический вызов экзешников с командной строкой, поскольку возникают сложности, с выводом в консоль, например при таком подходе. Там какие-то трубы надо городить.
Опять же смену игровой директории через этот механизм можно делать.
Вторая задача - абстракция платформозависимого кода, вынос его в отдельный класс, не только для движка, а для всей среды. Это будет нечто вроде SDL (для понимания), но для более широкого спектра задач и заточенное именно под XashNT.
Например в любом приложении будет доступна консоль с виндовым окошком, а не только системная.
Отдельно скажу по DLL Hell. В новом ксаше я принял за правило, что ни одно из приложений входящих в среду не может вызвать более одной дллки. Иначе получится натуральный DLL Hell. Т.е. всегда будет работать схема: exe->dll. А дллка будет содержать в себе абсолютно всё необходимое для работы. Конечно она может вызывать еще какие-то дллки, но только системные из папки windows. То есть в такой дллке будет целиком оформлена подсистема движка, но на уровне понятном пользователю. Библиотека - редактор, библиотека - движок, библиотека - компилятор уровней. То что, с точки зрения пользователя делает какое-то завершенное действие. А вот подход, когда у нас в этой библиотеке tier0, tier1, FileSystem, ParticleMan и прочее - такого не будет. Потому что неизбежно получится каша из разных версией с несовпадающими интерфейсами и работать ничего не будет.
Мое допущение заключается в том, что абсолютно у всех библиотек будет единая точка входа, с интерфейсом, описанным в начале этого поста.
И этот интерфейс никогда меняться не будет.
Из любопытного: теперь настройки для конкретного экзешника будут задаваться в командной строке, в которую экзешник будет автоматически добавлять параметры - вот в ту самую структурку. Таким образом пользователи смогут тоже вручную это контролировать в некоторых ситуациях. Довольно гибкий подход получится, я думаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XaeroX
У тебя уже есть полностью рабочий двиг для него рабочий редактор, что еще для жизни надо?!
Дядя Миша
Если не секрет, то сколько часов в день ты тратишь на свой двиг и все необходимое для него?
__________________
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
>> Отдельно скажу по DLL Hell. В новом ксаше я принял за правило, что ни одно из приложений входящих в среду не может вызвать более одной дллки.
Ну можно процесс иницилизации вынести в GameInfo.txt А сами дллки хранить в папках игры или мода, с подписью версии движка. Ну и создать папку base с базовыми библиотеками, на случай если в папке мода вообще ничего нет. В общем всё уже валва придумала за нас.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Да, если бы я только за компьютером сидел и код писал, уже давно бы выгорел. Но у меня тут ручная работа, кофемашины жы.
Так что нормально получается в целом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Предидущий пост на эту тему: https://hlfx.ru/forum/showthread.ph...&pagenumber=116
Из того что тогда предстояло финализировать, отпишусь по готовности.
1. единый формат хранения геометрии успешно финализирован. Возможно я к нему так же приведу шрифты, для пущей консистентности. DONE
2. компилятор освещения успешно финализирован и радиосити прикручен. DONE
3. Код рендерера с момента того поста практически не менялся. UNDONE
4. Колоизация сделана. Симуляция твёрдых тел еще нет. Partially DONE
5. Момент продуман, сама виртуальная машина уже написана, но пользовательская часть еще не создана. Partially DONE
6. Код сети с момента того поста практически не менялся. UNDONE
7. Просмотровщик в планах, он поделит код вместе с редактором, так что по сути оба появтся одновременно. UNDONE
8. Как раз над редактором я сейчас и работаю. Но я только начал, по сути. UNDONE.
Интересно, как теперь подсчитать процент готовности движка?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
Да, undone - разломато, загублено.
UNDONE - недоделато, я так всегда понимал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Недоделато — incomplete, unfinished.
Вобще я всегда нелюбил это слово, поэтому в каментах к коду использую только
TODO и FIXME. Ну еще иногда HACKHACK и TESTTEST
Кстати товарищи, вот вам от меня небольшой лайфхак. Ни для кого не секрет что очень многие начинающие программисты бояться работать с памятью, с указателями, поскольку программа вылетает. Но дело не в том, что она программа вылетает. Дело в том, какой звук она при этом издаёт!
Стандартный виндовый звук ошибки даже подготовленного человека заставляет наложить фштаны, или спровоцировать энурез, понятно.
Поэтому мой вам совет - идёте в звуковые схемы и там на звук ошибки ставите что-то более нейтральное, например "Звездочка.wav". И Вася-кот!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
igroprom.d3.ru
Вопросы про авто-нумерацию билда вынес в отдельную тему:
https://hlfx.ru/forum/showthread.php?s=&threadid=5834
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize ты как-то тему невнимательно читал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Знаете, пожалуй, что самое сложное при написании компилятора программ?
Неважно настояшего или виртуальной машинки, потому что между ними разница только в том, какие опкоды этот компилятор генерирует - для процессора или виртуальные. Так вот самое сложное в том - чтобы отследить все пользовательские ошибки и выдать сообщение.
В отличие от всех остальных типов компиляторов, ну например уровней или моделей, да чего угодно, где наоборот приветствуется выдача предупреждения и нормальное продолжение работы, здесь надо ругаться на каждую мелочь. Потому что потом программа запустится и вы уже не поймете что получилось. А компилятору в целом пофигу, пока ему не сделаешь явный вызов ошибки, он будет собирать любую дичь абсолютно.
Можно например в структуре сделать кучу переменных с одинаковыми именами, компилятор будет просто каждый раз обращаться к первой.
Технически здесь нет никакой ошибки. Но для юзера - есть.
Добавлено 06-05-2022 в 10:02:
Я вам характерный примерчег приведу.
Я уже упоминал, что при инициализации членов класса можно через двоеточие задавать кол-во бит, которые будут использоваться не для выравнивания структуры, как в настоящем языке, а как подсказка для сейв-рестора и передачи по сети. Выглядит это вот так, ну вы знаете:
1 | class CBaseEntity |
2 | { |
3 | string m_targetname : 16; |
4 | float m_health : 10; |
5 | unsigned int m_skin : 8; |
6 | }; |
1 | if( CheckToken( ":" )) |
2 | { |
3 | if( m_immediateType != type_integer ) |
4 | m_lexer.Error( LEX_CONSTANT_EXP_NOT_INTEGRAL, "constant expression is not integral" ); |
5 | else bits = m_immediate.integer; |
6 |
7 | if( bits == 0 ) m_lexer.Error( BIT_FIELD_ZERO_COUNT, "'%s' : named bit field cannot have zero width", name ); |
8 | else if( bits < 0 || bits > 32 ) |
9 | m_lexer.Error( BIT_FIELD_INVALID_COUNT, "'%s' : type of bit field too small for number of bits", name ); |
10 | if( type->Type() != ev_integer && type->Type() != ev_float && type->Type() != ev_string ) |
11 | m_lexer.Error( BIT_FIELD_INVALID_TYPE, "'%s' : bit field must have type 'int', 'float', or 'string'", name ); |
12 | def->bits = bound( 1, bits, 32 ); |
13 | NextToken(); |
14 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А разве нет уже готовых решений? Зачем изобретать велосипеды?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Готовые решения, в лучшем случае code-driven к тому же внутренние методы спрятаны от пользователя и находятся только в документации.
Для того чтобы вызвать какой-нибудь косинус в яве ты не можешь заглянуть в хидер. Либо лезть в документацию, либо помнить наезусть, либо надеяться, что тебе студия вывалит подсказку. Всё это очень неудобно.
Я пишу data-driven машинку, т.к. это общая концепция XashNT.
Добавлено 06-05-2022 в 10:30:
Поясню на примере. Когда у тебя в коде виртуальной машины есть хидеры со списком всех доступных системных, функций, ты уже можешь прикидывать что тебе понадобится для реализации. А не листать многостраничную документацию или вообще с размаху налететь на стену, узнав что такого метода просто нет, но в следующей версии появится обязательно.
Добавлено 06-05-2022 в 10:34:
Для мапперов очень хороший пример приведу. Энтити, которые есть в игре вам не видны. Вы можете только прописать их в FGD, причём FGD и реальные энтити никак не связаны. Вы можете прописать туда несуществующую энтить или наоборот - забыть прописать то, что есть.
Вот с этими виртуалками, у которых системные методы нигде не задекларированы точно такая же ситуация. Очень неудобно это.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сегодня товарищи, знаментальный день. Я набиваю для виртуального языка системные функции, ну что-то вроде CRT. И дело дошло до функции Q_timestamp. И тут я вспомнил! Эта функция была мною написана в апреле 2007-го года (первые опыты с написанием движка начались в феравле 2007-го). Так вот я её написал, чтобы в лог сохранять дату когда движок был запущен и соответственно остановлен.
Эта функция пережила старый ксаш (ну который несовместимый ни с чем), переехала в Xash3D и оттуда разумеется попала в FWGS, затем она так же без изменений попала в XashNT и вот я делаю её частью стандарта будущего скриптового языка. И теперь миллионы людей по всему миру её увидят и будут ей пользоваться. А-ФИ-ГЕТЬ. Знал бы я какая судьба будет у этой функции, когда я её писал в апреле 2007-го года, я бы удивился и неповерил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пишу конвертор Delphi -> C++. Для того чтобы изучать исходники QuArK, естественно. Мне проще написать конвертор, чем забивать голову этим ублюдошным синтаксисом.
Интересно, будет ли такой конвертор нужен кому-то еще кроме меня?
Добавлено 13-05-2022 в 02:12:
Делфи изумительный язык. Мало того что его компилятор по сути стейт-машина, так в язык намеренно введены конструкции чтобы программист выполнял половину работы за компилятор.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
Из Delphi в С++.
Добавлено 14-05-2022 в 10:55:
Больше всего я боюсь, что пока буду писать конвертор - выучу сам Delphi.
Нахрен бы мне он нужен.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Помнится, когда я активно использовал C++ Builder, то сидел на каком-то программистском форума в разделе посвящённому вышеназванной ide. Так вот добрая треть тредов там была с просьбами перевести код из дельфи в C++.
Как вообще такой конвертер будет работать? Он выдаст рабочий код или просто сделает код более читабельным (для знающих С) ?
__________________
I tell you to enjoy life
Утром я наивно полагал, что можно сконвертить 1 в 1 и прям будет работать
Сейчас я уже в этом так не уверен, да и лично для меня это неприоритетная задача, чтобы прям доводить конвертор до идеала.
Скорее всего он будет работать лучше всех существующих аналогов, но и только. Да я его вам выложу, потестируете.
Добавлено 15-05-2022 в 00:59:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I tell you to enjoy life
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
igroprom.d3.ru
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro в кварке самое ценное - инспектор объектов и компас.
А кол-во окон может быть любым.
Добавлено 16-05-2022 в 14:48:
И да, начиная с версии 6.4 интерфейс основательно испортили, но к счастью он находится на прилипающих панелях, которые можно выдернуть и закрыть. Правда народ настолько привык что поменять ничего нельзя, что даже не подозревает об етом
Добавлено 16-05-2022 в 14:50:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В Кварке меня в своё время поразило, что для того, чтобы что-то сделать с брашем, надо непременно найти его в иерархическом списке, с именем East Wall 1643, ну или скажем South Wall 998. Если не знаешь названия браша - то извините, надо было за-пони-нать!
А что касается компаса, он меня тоже поразил. Думаю, надо же, такой уродский интерфейс и в нём такой красивый компас. Поэтому я на всякий случай решил его не трогать.
Добавлено 16-05-2022 в 10:43:
__________________
XaeroX пятерка наверное, совсем древняя. 4 была в 1998, 6 в 2003
Добавлено 16-05-2022 в 23:00:
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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
У тебя какие-то совсем дремучие представления о маппинге
1. Кварк делает за меня
2. устарело лет на 10 и даже тогда для Кварка не было важно
3. устарело примерно так же
4. чисто эстетика
5. согласен
Crystallize
Ну фиг знает. Я до сих пор вижу что народ спотыкается об эти грабли, даже на Джеке, хотя казалось...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Во первых, боюсь вы невнимательно читали. Я не собираюсь реконструировать интерфейс кварка 1 в 1. Более того, я вообще не собираюсь, чтобы мой редактор был похож на Кварк.
Вот ссылка на итоги тестирования: https://hlfx.ru/forum/showthread.php?s=&threadid=5733
Чтобы не повторяться.
Добавлено 17-05-2022 в 11:34:
А во-вторых, все авторы редакторов упорно копируют друг за другом, из-за чего и складывается впечатление, что по другому не бывает.
Бывает. Просто этого еще никто не делал.
Добавлено 17-05-2022 в 11:48:
Чтобы не быть голословным - напомню про свой опыт создания модель-вьювера. Который по факту своего выхода разом заткнул за пояс всё, чтобы было сделано за 20 лет ранее. Безальтернативно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro А вот ты напрасно смеешься. Объект Паскаль - 86-го года, т.е. он новее чем С++
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так ООП это новомодная и ненужная приблуда навязанная маркетингом. Люди всегда без ООП писали, а теперь видите ли.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
По смыслу ООП действительно нужен далеко не везде. Но там где нужен - там с ним действительно удобнее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff кстати форумы свен-коопа закрылись вот уже примерно пару лет назад.
Добавлено 19-05-2022 в 23:52:
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize да эт я по старой памяти упомянул форумы. Сейчас свен обсуждается в стим-комьюнити.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
Если кто-то из вас надумает писать свой компилятор или виртуальную машину - очень рекомендую ознакомиться с исходниками TinyC, там хороший кодостиль, приятно почитать. К тому же, оно вроде как научилось собирать С++. А если вам нужен пример жуткого кодостиля - посмотрите cfront от Страуструпа.
Добавлено 23-05-2022 в 16:26:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
igroprom.d3.ru
Фичелист из свена выкладывали, в основном - лимиты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так запустите да посмотрите будет последний свин работать на Краше или нет
[CFR] B@N@N как минимум, версии SDL2 и VGUI несовместимы с ксашевскими. Ещё сервер завязан на стимовских интерфейсах. На FWGS не заводится, на ванилле - тем более.
Вальва с этим внезапным обновлением голдсорса подложила всем Геганцкую Свенью™
Напоминаю, что это делалось ради стим-бокса, который в итоге так и не вышел, портирование игр на линукс закончилось пшиком - линуксоиды не захотели за это платить. Зато мы получили изумительный несовместимый голдсорс, который для своей работы требует теперь FBO, т.е. минимум GeForce 8xxx. Так мало было виндовых функций проброшенных в клиентку.
Теперь туда еще и SDL примотали. И все носятся с этим обновлением и причитают - о боже, нам срочно нужна такая халфа.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для понимания того, что собой представляют, ну как минимум старые компиляторы (да и новые зачастую тоже) С\С++, приведу вам вот какой факт: эти компиляторы по сути - продвинутая версия интерпретаторов ассемблера. Только ассемлеровские листинги просто конвертятся в опкоды процессора, а смысл этой замуты в то, что опкоды для разных архитектур отличаются, а во вторых приятнее всё же читать команды push, mov нежели просто номера опкодов - глазу удобнее.
Так вот Си в большей степени, а С++ в меньшей степени являются точно такими же интерпретаторами, которые помнят объявленные переменные.
Генерация опкодов происходит прямо по факту чтения очередного операнда, ну в некоторых случаях компилятор сам втыкает условия и goto, например в циклах или свитчах. С парсингом классов чуть похитрее - там двухпроходной цикл, сначала парсим члены класса, пропуская тела функций, объявленных внутри декларации класса, потом парсим только тела функций.
Функции класса, объявленные вне его тела парсятся в обычном режиме.
Самая сложная замута с шаблонами, их вообще нельзя парсить на момент их объявления, поэтому компилятор сохраняет их исходный текст в укромное место и начинает парсить только когда предвидится реальный шаблонный вызов, из-за чего ошибки шаблонов сыплются чуть ли на этапе линковки и немало удивляют юзера. Вообще я так понимаю этот костыль с шаблонами, Страуструп прикрутил по многочисленным просьбам телезрителей чуть ли не в самом конце разработки. Вот они и получились такие неудалые. Впрочем более современные компиляторы, вроде как со стандартная С++11, уже так не делают, они все опкоды сохраняются в какие-то локальные массивы, отчего там и ошибки информативнее и возможны некоторые конструкции, которые не работали на стандарте С99. Ну об этом можно в Вики почитать.
Добавлено 28-05-2022 в 17:23:
Кстати эти современные компиляторы далеко не факт что спровляются лучше старых, но вот памяти жрут однозачно больше, и при этом компилируют дольше. Ну это так, к слову. Направление эволюции вполне естественное.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://ru.wikipedia.org/wiki/CISC
https://ru.wikipedia.org/wiki/RISC
Теперь уже с полным пониманием дела можно освежить эту информацию и с уверенностью сказать, что моя VM использует RISC архитектуру
Добавлено 28-05-2022 в 22:47:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize CISC-команды предназначались для людей, пишущих на ассемблере, а RISC-команды - для компилятора. Это основная разница.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем вот какая у меня нехорошая вещь получилась. Поскольку это всё же виртуальная машина, а не настоящий С++, у меня не получилось сделать из компилятора нормальный вызов виртуального деструктора. Потому что опирается не на участок памяти, по которому идёт переход на виртуальную таблицу, а на тот тип, который сунули в указатель delete. И соответственно если вызов деструктора делает компилятор, то без разницы виртуальный он или нет - правильность его вызова напрямую зависит от типа указателя, а ведь смысл виртуальных деструкторов в том и заключается чтобы правильно работать независимо от типа входных данных. Хорошо, я выбросил этот вызов из компилятора и конструктивно объединил вызов деструктора в рантайме с высвобождением памяти. Это прекрасно работает абсолютно в любом случае, т.к. VM располагает всей необходимой информацией.
Но вылезла другая проблема, блин! Теперь оно ВСЕГДА работает правильно, независимо от того, виртуальный деструктор или нет. Само по себе это проблемы не представляет, поскольку вызов идёт именно правильный.
Проблема в другом. Если кто-то напишет код на моей VM без виртуальных деструкторов, а потом решить его перенести на С++, оно перестанет правильно работать. Хотя в сущности поправить дело будет несложно, достаточно будет прописать virtual у деструктора базового класса.
Помнится мне, что когда я меню разрабатывал у меня там тоже кошмар начался, а прописал virtual и помогло. Т.е. технически проблемы нет, просто будет вот такая особенность языка. Деструкторы всё равно не могут быть перегружены, скорее виртуальный деструктор - это костыль для самого С++, нежели реальная необходимость.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну что же, теперь, когда я достаточно понаторел в разработке С++ совместимого языка, я могу вам наконец-то рассказать, за что же его все так ругают и почему это с ним произошло в отличие от того же Си.
Всё дело в том, по-видимому, что Страуструп писал его в молодости и был увлекающейся натурой. То есть он придумывал какую-то фичу, которую можно было реализовать в рамках препроцессора Си и тут же её внедрял.
Как правило это давало какие-то новые возможности и открывало для программиста новые удобства. Но порождало комбинаторный взрыв, который в свою очередь разрушал целостность поведения, порождая UB.
Как когда-то написал Боресков в своей статье - откройте любую книгу по С++, о чём там будет написано в первую очередь? "Как не надо делать!".
То есть довольно много таких проблематичных мест на самом деле, из-за чего невозможно догадываться о поведении языка в целом, а желательно уточнять в справочнике, если вдруг что-то не заработало. Опытный программист просто их все знает наизусть и в ногу себе не стреляет.
Новичок же пытается экстрполировать полученный опыт но весь язык и очень часто получает граблями по носу. Это основная претензия, так сказать. В какой-нибудь Яве или СиШарпе перетянули в обратную сторону - постарались исключить вообще всё, что могло вызывать малейшие проблемы, из-за чего эти языки обновляются с пугающей периодичностью - туда постоянно добавляют то, чего не хватает юзерам. И то и другое - очевидно крайности. Я попытаюсь сделать свой язык максимально близким по синтаксису и парадигме к С++, но при этом лишив его пугающих неоднозначностей и UB, насколько это в моих силах. Чтобы никто не смог выстрелить себе в ногу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хочу вам на наглядном примере показать, почему в перегрузке функций, к сожалению нельзя опираться на то что функция возвращает. Иными словами нельзя иметь перегруженные функции, у которых меняется только тип возврата
int get( void ); |
float get( void ); |
int a = foo(); |
bar( a ); |
bar( foo() ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, замутил я перегрузку функций, прямо как в С++. Самым поганым оказалось необходимость написания функции с тысячами if-else, прямо как ФиЭктра любит. Вот к сожалению никак это в табличку не свести.
Но я смотрю вам неинтересно всё что я пишу по С++? То ли вы так хорошо язык знаете, то ли вам просто неинтересны эти подробности.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша скорее я знаю плюсы плохо, в рамках HLSDK, но вот например с перегрузкой методов в яве такие же дела. Хотя мне всегда казалось, что сигнатура функции при компиляции в байткод может иметь отдельный байт или маску на возрвращаемый тип, что позволит делать рекурсивную перегрузку
__________________
-Brain is dead-
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это как пауза в выполнении функции. Вызвал функцию снова - продолжил выполнение с этого места, а не с начала.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
KiQ почему в яве фреймворк с рантаймом весят один гигабайт?
Что туда напихали?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша думаю разрослись засчёт сторонних либ и обратной совместимости. На мобилках как-то впихивали, вот прошивки на мои SonyEricsson весили в пределах 50Мб
__________________
-Brain is dead-
__________________
I tell you to enjoy life
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I tell you to enjoy life
В Си наоборот слишком дохрена неявных преобразований, там где С++ уже ругается и нехочит.
Пример
unsigned char *foo = malloc( 123 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Важное событие! Сегодня написал имплементацию динамического массива прямо на скриптовом языке. Насколько я знаю, ни на шарпе ни на яве это сделать невозможно в принципе. То есть можно унаследовать динамический массив от намертво встроенного в язык, а вот так чтобы с нуля - невозможно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А пример можно? Как это выглядит?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
I tell you to enjoy life
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну я вон выше про логические ловушки написал - никто даже не откомментил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я писал контейнеры на Яве, но там это выглядело так - заводим массив элементов на 10, при его заполнении создаём новый [n+10], делаем Arrays.copyOf и обнуляем старый массив
__________________
-Brain is dead-
В сущности принцип тот же. Но realloc всяко быстрее будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем два миллиарда команд выполняется примерно за 21-секунду.
Цикл с условием INT_MAX. Для сравнения чистый С++ справляется за 4 секунды.
60 миллионов команд отнимает 0.7 секунды. Среднее кол-во инструкций для игрового кадра - ну может тысяч 20-30. Хотя это я так, навскидку.
Потом замерю, скажу точно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Самое прожорливое как правило это поиск и перебор игровых объектов, а так же их параметров.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Поиск можно в движке будет сделать. Ну посмотрим.
Добавлено сегодня в 18:09:
Образчик кода на делфи, низкий уровень, где-то в раёне базы для всех классов
1 | procedure TComponent.ReadLeft(Reader: TReader); |
2 | begin |
3 | LongRec(FDesignInfo).Lo := Reader.ReadInteger; |
4 | end; |
5 |
6 | procedure TComponent.ReadTop(Reader: TReader); |
7 | begin |
8 | LongRec(FDesignInfo).Hi := Reader.ReadInteger; |
9 | end; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Upd. На GD.ru подсказали, что top-left - это верхний левый угол окна, т.е. его позиция, почему-то упакованая в int с названием FDesignInfo.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, насчёт виртуальной машины, а почему бы не взять wasm с уже готовым JIT и биндингами, в который к тому же умеют компилироваться всякие разные языки (C, C++, C# и т.д.). Или этот вариант уже рассматривался и был отвергнут?
PRoSToTeM@ я вообще стараюсь как можно меньше использовать чужой код. По крайней мере - в виде готовых библиотек. Потому что он всегда не годится под мои задачи, которые выходят за рамки стандартных применений в силу того, что у меня есть своё виденье, как всё это должно быть устроено. Есть конечно вещи, которые меня устраивают - например форматы OGG и Theora. Писать свои собственные форматы для сжатого аудио и видео я точно не планирую.
Добавлено 16-06-2022 в 09:51:
И вообще любая привязка к чужим библиотекам это очень порочная практика.
1. ты привязываешься и поначалу тебе всё нравится
2. потом ты что-то изменяешь под себя\исправляешь ошибки
3. потом выходит новая версия оригинальной либы с исправленными ошибками, о которых ты вообще ничего не знал
4. вместо того чтобы писать код дальше - начинаешь мержить либо вносить в новую либу уже сделанные изменения
5. если чужих либ много - то периодически в каждую
6. следишь чтобы после всех этих изменений у тебя самого ничего не испортилось
7. в конце-концов плюешь и перестаёшь вносить эти изменения
8. к моменту релиза твой софт использует устаревшие версии с критичными дырками (к примеру)
9. обновлять их нельзя, так уже создан пользовательский контент, неизвестно что сломается после обновления
10. Плюешь на пользователей пилишь новую версию, несовместимую, заставляешь всех перелезть туда.
11. За это время куча либ получает очередные обновления...
Вот в итоге чем занимается современный разработчик который просто хотел "сэкономить немного времени".
Добавлено 16-06-2022 в 09:57:
Для себя я выработал два чётких критерия, когда можно использовать сторонние библиотеки и один опциональный:
1. функционал библиотеки отвечает абсолютно всем моим требованиям, а если какие-то мелочи и не отвечают, то альтернативы нет всё равно.
2. библиотека не обновлялась в течении очень долгого времени - 10-15 лет и скорее всего не будет обновляться уже никогда, но при этом достаточно активно используется программистами. Или пусть не так активно, но была задействована в продакшене, что тоже показатель.
3. (опционально) библиотека берётся на время, в качестве заглушки, потом вместо нее будет написана собственная реализация.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I tell you to enjoy life
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, я конечно во многом согласен, но есть и security аспект. Для singleplayer он разумеется не сильно актуален, но для multiplayer очень даже. Да и в случае с singleplayer пользователь может скачать ресурсы со стороннего сайта, а там окажется эксплойт в модельке/звуке.
PRoSToTeM@ приведи пример такого эксплойта.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ничего себе! Нам надо срочно нейросеть, которая будет анализировать контент и подменять женские соски на мужские! А модельку Путина на модельку Брежнева.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Новостей никаких не пишу, к сожалению, ну тут как обычно. Чем фундаментальнее и масштабнее работа - тем меньше чего-то осмысленного можно сказать аудитории по этому поводу. Фундаментальные вещи, они или есть или нет. А как продвигается над ними работа никого не интересует.
Чаще всего в таких случаях просто берут готовую библиотеку и не парятся.
Ну вот как в Юнити однажды взяли C# который для игр абсолютно не годится и уже 15 лет с ним вооют. Я так не хочу, поэтому создаю собственный скриптовой язык, ну об этом вы знаете. Так же будет собственная библиотека оконного менеджера, написанная прямо на этом языке.
Фишка в том, что она сможет подгружать оконные формы из текстовых описаний, а значит визуальное оформление можно будет менять на лету без перекомпиляции. Это относится к будущему редактору. Сам же язык будет использоваться и для описания игровых объектов тоже. Ну и не только для них, для игрового меню, для клиентской библиотеки. Вобщем для всего того, для чего вам раньше требовался С++ и необходимость устанавливать студию. В идеале получится среда, которой не требуются никакие внешние инструменты для работы. Самое главное в данном случае - возможность гибкого расширения, т.к. изначально всё предусмотреть невозможно.
Написание фундаментальных вещей занимает больше всего времени к сожалению, поэтому работа идёт небыстро. Но зато это последние две фундаментальные вещи, которых не хватало движке - свой собственный язык программирования и библиотека окошек. А потом наконец-то будет первая юзабальная версия и регулярные обновления.
Добавлено 28-06-2022 в 10:10:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
За Шарп вот какая любопытная вещь прослеживается. Его версию в Unity периодически обновляют, но на самом деле это довольно небыстрый процесс. Может и год пройти, пока обновят. То есть просто нельзя взять и скачать новый рантайм, надо что-то менять в коде самого Юнити. А почему так происходит? Ну очевидно потому что в самом шарпе опять вообще всё переделали, чтобы он стал только лучше от этого. Значит старые версии говном были? И так - из года в год.
Добавлено 28-06-2022 в 11:48:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Есть поучительный пример с Valve. Которая очень долго использовала Havok, но в итоге для Source3 написали свой собственный физический движок.
Хотя я лично про Havok ничего плохого сказать не могу, да и вообще не помню, чтобы на него кто-то ругался. Но вот, рассудили, что свой всё равно лучше будет. И это совершенно правильная тенденция. Никогда не возможно чужие либы друг с другом совместить идеальным образом.
Добавлено 28-06-2022 в 11:59:
Кстати, с JavaScript точно такая же шляпа прослеживается. Как-то KIQ давал свой движок потестить, так я скачал наверное штук 15 рантаймов, прежде чем нашёл тот, с которым он заработал. Ну и что в этом хорошего?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | CALL: main( locals 52, args 0 ); |
2 | TAKE_ADDR: stack[16]( <RESULT> '4445748' ) = &stack[8]( foo '4445748' ); |
3 | PUSH_P: stack[52] = stack[16]( <RESULT> '4445748' ); |
4 | OBJECT_CALL: PropTest::ctor( locals 12, args 1, size 4 ); |
5 | ADD_P: stack[56]( <RESULT> '4445748' ) = stack[52]( this '4445748' ) + heap[240]( m_customText '0' ); |
6 | STOREP_S: memory[4445748]->string( '' ) = heap[292]( <IMMEDIATE> '' ); |
7 | ADD_P: stack[60]( <RESULT> '4445752' ) = stack[52]( this '4445748' ) + heap[244]( m_text '4' ); |
8 | STOREP_S: memory[4445752]->string( '' ) = heap[292]( <IMMEDIATE> '' ); |
9 | RETURN: void; |
10 | TAKE_ADDR: stack[16]( <RESULT> '4445748' ) = &stack[8]( foo '4445748' ); |
11 | PUSH_P: stack[52] = stack[16]( <RESULT> '4445748' ); |
12 | PUSH_S: stack[56] = heap[580]( <IMMEDIATE> 'Test' ); |
13 | PUSH_I: stack[60] = heap[28]( true '1' ); |
14 | OBJECT_CALL: PropTest::SetText( locals 16, args 3, size 12 ); |
15 | IFNOT: stack[60]( useCustom '1' ) != 0, continue from 21; |
16 | ADD_P: stack[64]( <RESULT> '4445748' ) = stack[52]( this '4445748' ) + heap[240]( m_customText '0' ); |
17 | STOREP_S: memory[4445748]->string( 'Test' ) = stack[56]( text 'Test' ); |
18 | GOTO: jump from 24 to 27; |
19 | RETURN: void; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | void SaveGame() |
2 | { |
3 | PlayerPrefs.SetInt("SavedInteger", intToSave); |
4 | PlayerPrefs.SetFloat("SavedFloat", floatToSave); |
5 | PlayerPrefs.SetString("SavedString", stringToSave); |
6 | PlayerPrefs.Save(); |
7 | Debug.Log("Game data saved!"); |
8 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дочитал статью. Изумительно, просто измуительно. Давно я такого индусского кода не видел. Значит в шарпе вообще нет встроенных средств сериализации. Даже в девятой версии или какая там сейчас актуальная.
Добавлено 28-06-2022 в 15:35:
1 | void SaveGame() |
2 | { |
3 | BinaryFormatter bf = new BinaryFormatter(); |
4 | FileStream file = File.Create(Application.persistentDataPath |
5 | + "/MySaveData.dat"); |
6 | SaveData data = new SaveData(); |
7 | data.savedInt = intToSave; |
8 | data.savedFloat = floatToSave; |
9 | data.savedBool = boolToSave; |
10 | bf.Serialize(file, data); |
11 | file.Close(); |
12 | Debug.Log("Game data saved!"); |
13 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro совсем другое дело!
Надо понимать, это появилось только в 2021-м году?
Добавлено 28-06-2022 в 15:57:
А нет, с 2019-го. Т.е. даже не с пятой версии. Я кстати был уверен, что пятая версия щас самая актуальная, оказывается она уже давно устарела и deprecated. Очуметь можно. Частое обновлений версий вовсе не говорит о том, что продкт развивается. Это значит, что старыми версиями вообще было невозможно пользоваться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Про отладку имелось ввиду что то вроде этого:
https://docs.microsoft.com/ru-ru/do...vots=dotnet-6-0
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Брыкпоинт у меня тоже имеется, если речь об этом.
Еще можно стек размотать и показать map calls.
Единственный косяк - из-за близости архитектуры к реальной, она всё же может теоретически спровоцировать вылет интерпретатора, вместо безопасной остановки с ошибкой. Но думаю к финальной версии этого уже не будет.
Добавлено 28-06-2022 в 21:41:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Интересная всё же штука - целевая аудитория. Вот вышел этот видос про Xash у StalkerOS. Ну какая там графика в 2022-м году? Смех один.
А народ в каментах пишет - ура, отлично, давай-давай.
И наоборот - на Хабре блог Unigine публикует цикл разных статей (они активизировались в рамках потенциального импортозамешения) и народ на них льёт ощутимый негатив, на мой взгляд - часто на ровном месте.
Хотя казалось бы - отечественный производитель, может быть единственный в своём роде. Но нет - не любят наши его почему-то. Причём вопрос лежит даже не в технической плоскости. Это какая-то иррациональная неприязнь, на мой взгляд.
Вот и вопрос - что надо было сделать или наоборот не сделать, чтобы заслужить к себе такое удивительное отношение? Не понимаю.
Хотя может я и не прав, а там просто пара хейтеров в каментах тусуется?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Надо сказать, что лично мне очень не нравятся все эти анальные привязки даже к бесплатным версиям, когда движку надо логиниться на сайт разработчика и сообщать что юзер такой-то снова в сети и опять кубал полтора часа. Надо будет в дальнейшем продумать эти политику.
Я вообще ненавижу софт, намертво привязанный к сети.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Заведи репозиторий, и не надо ничего привязывать. К тому же будешь спокоен что диск не сдохнет внезапно со всеми наработками.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro О, ты-то мне и нужен!
Как устроен GUID в Unity? Вот у нас есть 128 битный индентификатор ресурса. Из чего он получается? Из пути к этому ресурсу или из контрольной суммы самого ресурса? Или еще как-то иначе сделано?
Может есть где-то в документации об этом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нашёл вот это: https://makaka.org/unity-tutorials/guid
Но там ни слова о том, как он создаётся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Фиг его знает, я не вникал. Посмотри тут:
https://unityatscale.com/unity-meta...iles-and-guids/
https://unityatscale.com/unity-meta...-file-deep-dive
Или даже тут?
https://gist.github.com/ZimM-LostPo...a3e5a1be183ac19
Если ты про идентификацию, то он просто мета файлики создает ко всем ресурсам.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ознакомился с материалами по ссылкам, что дал FiEctro но всё равно пока не очень понятно.
https://unityatscale.com/unity-meta...-file-deep-dive вот здесь к примеру написано что рядом с каждым ресурсом создаётся мета-файлик, который содержит не только GUID, но и настройки для ресурса.
Но это же абсурд! Смысл ресурса как раз в том, что он может бы переиспользован как угодно, а не иметь какие-то конкретные настройки.
Никто не запретит мне одну и ту же текстуру влепить как на уровень, так и в GUI. Так почему же у нас в этой схеме ресурс довлеет над материалом?
Получается что к каждому ресурсу полагается только один материал, а если вы хотите этот же ресурс использовать с другими настройками материала, вам надо... сделать копию этого ресурса. Изумительно!
В противовес этому, в том же Quake3 шейдеры рассматривались именно как высокоуровневая концепция, которая ссылается на реальные файлы, но на какие именно - это персональное дело каждого шейдера. Ресурс по сути не может иметь в себе каких-то настроек привязанных к редактору или компилеру. Точнее говоря может, если как раз процесс компиляции - неявный. В этом и есть главная проблема на мой взгляд. С одной стороны кажется удобным что можно избежать явного процесса компиляции, с другой стороны это превращается в некоторый ад, потому что движок обязан следить за всеми изменениями и оперативно перекомпилировать изменённые ресурсы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Теперь вот по этой ссылке: https://unityatscale.com/unity-meta...iles-and-guids/
Для чего нужны GUID мне и так было понятно. В статье это лишний раз подтвердили. Если мы переименуем ресурс или переместим его куда-то еще, то Unity всё равно его обнаружит и подхватит. Казалось бы удобно?
На практике я ни разу не видел, чтобы у кого-то возникало желание переименовывать или перемещать ресурсы. Если у нас моделька пушки - кладём в models\weapons. Если у нас моделька монстра кладём models\monsters. Если у нас текстура, допустим дерева кладём textures\wood. Это простая и понятная схема, которая не требует никаких доработок или изменений. GUID же в Unity пропагандирует строго обратную модель - раскидайте ресурсы как попало, но мы их всё равно найдем.
Особенно любопытно в этом плане то, что во первых связь между ресурсом и его мета-файлом осуществляется всё равно по имени и пути, т.е. если разъединить ресурс с мета-файлом, начнётся интересное. Опять же я не знаю, если мы уничтожим мета-файл, будет ли новый сгенерирован с точно таким же GUID или нет? И если да, то на что он опирается? На внутренние данные файла? А если я изменю саму текстуру и удалю meta-файл, новый GUID уже будет отличаться от старого и все ссылки превратятся в тыкву?
А как я по старому GUID пойму на что он ссылался, оно же нечитабельно для людей? Вопросы-вопросы.
https://gist.github.com/ZimM-LostPo...a3e5a1be183ac19
Вот по этой ссылке мне удалось понять ключевое - ReadAllText, т.е. хэш всё же генерируется на основе данных всего файла. Отсюда же и принципиальная невозможность хранить GUID внутри самого файла.
Корочи очень спорная система на мой взгляд.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот захотел ты допустим кубамапу текстуру подгрузить, и она например одной картинкой сделана, ты что отправишь юзверя резать её вручную в фотошопе? Или например захочешь ты чтобы у тебя все текстуры в степень двойки сконвертировались в проекте, опять юзера отправишь ковырять в фотошоп? Наверное проще показать чем рассказать:
https://docs.unity3d.com/Manual/cla...reImporter.html
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В принципе проблема решения конфликтов имён может быть разрешена не через GUID, которые нечеловекочитаемые, а через пространство имён как в С++. То есть каждый ассет может иметь своё пространство имён и не мешать другим. Я потом подумаю над этой схемой. Но не раньше чем у меня появится свой мета-контейнер для хранения ресурсов.
А что касается ассетов содержащих код - так где гарантия, что куча таких ассетов не будет конфликтовать друг с другом? Это как раньше из кучи туторов код копипастили и оно друг с другом могло не работать, теперь по сути тоже самое, только копипастить ничего не надо, просто денег заплати и всё. Но проблема по сути не решена.
Добавлено 02-07-2022 в 12:19:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | public class MainHero : MonoBehaviour |
2 | { |
3 | public int health; |
4 |
5 | . |
6 | . |
7 | . |
8 | } |
1 | public class AnotherHero : MonoBehaviour |
2 | { |
3 | MainHero mainHero; |
4 | int anotherHealth; |
5 |
6 | void Start() |
7 | { |
8 | mainHero = GameObject.FindGameObjectWithTag("YOUR MAINHERO OBJECT TAG").GetComponent<MainHero>(); |
9 |
10 | anotherHealth = mainHero.health; |
11 | } |
12 | . |
13 | . |
14 | . |
15 | } |
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вообще на мой взгляд вот эта практика "накидал отвсюду чужого, нажал кнопку export и получил игру" она невероятно порочная т.к. внушает ложные надежды и порождает иллюзии. Ну не работает это так.
Оно рано или поздно вылезет самым интересным образом, когда уже никто не сможет понять, что именно сглючило. Слишком уж много всего будет накидано.
Добавлено 02-07-2022 в 12:25:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Нет-нет, я именно про гипотетический вариант возврата денег с одновременным оставлением ассета у себя. Или там нет возврата денег?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Деньги можно вернуть, ассет оставляешь у себя, но его больше нельзя будет скачать через твой аккаунт в ассет стор.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
А, ну с этим я уже сталкивался, когда скачивал Viking Village. Она хоть и бесплатная, но скачивать мне её не давали, мотивируя как раз тем, что якобы 6 лет назад я уже скачал этот ассет. Очевидно это никак не связано с оплатой, т.к. эта демка вообще бесплатная.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
JIT не панацея, если язык сам по себе сконструирован таким образом, по типу явы и шарпа. Где на любой чих - выделение памяти, сборщик мусора.
Это не будет быстро работать.
Добавлено 03-07-2022 в 10:47:
Да и дата выхода статьи - 2016-й год. Ты уверен что это уже не deprecated?
Как вы любите говорить "с выходом новой версии изломали вообще всё".
Это обратная стороная хвалёной гибкости, народ зачастую привязывается к недокам и потом оно ломается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Важный момент хочу отметить - если я что-то критикую, то скорее не явление в целом, а то, в какие формы оно выродилось. И на этом этапе важно понять почему так получилось, то есть совершить исторический экскурс. Очень часто оказывается, что раздражающие и ненужные вещи - просто дань совместимости, которую уже нельзя выбрасывать.
Но в новом проекте от подобной практики можно отказаться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
igroprom.d3.ru
Было бы круто если освещение от неба будет примерно учитывать цвет на конкретном участке скайбокса. Потому в том же хл2 или сталкере на скайбоксах ближе к горизонту есть яркие пятна от освещенных облаков которые совершенно не учитываются ни солнцем, ни цветом амбиента.
Я думаю в новом движке благодаря системе материалов такое будет сделать намного проще.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Crystallize облака надо рендерить честно, а не рисовать их на скайбоксе. Это не так уж и сложно - в первом кризисе уже рендерили.
Добавлено 12-07-2022 в 09:18:
В таком случае скайбокс останется только залить цветом неба в соответствующее время суток, есть соответствующие математические модели.
Вот к примеру: http://steps3d.narod.ru/tutorials/sky-tutorial.html
Добавлено 12-07-2022 в 09:23:
Впрочем, повторюсь главный смысл идеологии XashNT - не навязывать правильную модель поведения разработчику. Кто захочет - будет рендерить честные облака, кто не захочет - будет использовать скайбокс или скролл-текстуру из первого квейка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да вроде не сложно такое делается, environment lighting есть практически в любом мало мальски уважающем себя рейтрейсере, без всяких честных облаков.
https://learn.unity.com/tutorial/co...-settings-2019#
Дядя Миша опять всё усложняет. Но это больше актуально для рассеяного света, нежели прямого.
Добавлено 12-07-2022 в 11:44:
Дядя Миша
Кстати рекомендую ещё вот этот сайт по рендерингу в Юнити. Здесь чувак очень подробно всё объясняет с примерами. Плюс в некоторых туторах он буквально пытается воспроизвести некотрые элементы рендера Юнити средствами самой Юнити.
https://catlikecoding.com/unity/tutorials/
https://catlikecoding.com/unity/tutorials/rendering/
https://catlikecoding.com/unity/tut...ender-pipeline/
Много полезного из этого можно подчерпнуть.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
Возможно многие не понимают чем я сейчас занят, над чем работаю и почему в телеграм-канале ничего не пишу. Объясняю: в данный момент я выращиваю конкурента СиШарпу и Яве. А возможно и С++ в некотором смысле. Та скрипт-машина, которая планировалась изначально уже давным-давно вышла за рамки простейших скриптов, это будет настоящий полноценный язык, по возможностям приближающийся к настоящему С++, но лишенный его недостатков и имеющий все приятные особенности виртуальных машин. Естественно он будет гораздо медленнее С++, по моим замерам где-то 6-9 раз. Но в дальнейшем это можно будет решить при помощи JIT, сократив разрыв до двух раз всего.
Язык пишется не ваккууме, я сразу же портирую на него VCL - Delphi Visual Component Library, это нечто навроде Qt или wXWidgets, только гораздо приятнее в обращении. Ну Дельфисты знают.
Выбор на библиотеку отчасти пал из-за того что QuArK написан на Делфи, но это не единственная причина. Там весьма богатый набор всяческих кастомизаций для окошек, недоступный более нигде - ни на Qt ни в MFC ни в wxWidgets, ни в другом известном мне фреймворке. Отчасти это обусловленно особенностями самого языка Delphi. То что на нём написано невозможно портировать на С++. Но на мой будущий язык - вполне возможно. Чем, я собственно, сейчас и занят.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как насчет кросплатформенности всего этого?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Закладывается, насколько это вообще возможно.
Сам Delphi, к примеру имеет две библиотеки - VCL, чисто под Windows, и CLX - враппер для Qt. Т.е. это вполне реально.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Скажи, а почему ты не хочешь сделать для ui отдельный язык разметки подобный html? Помню когда мы с тобой обсуждали, ты говорил что это неплохая идея. Не надо лезть в код игры, и легко переносить такие интерфейсы из мода в мод. Только события подставляй.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это всё автоматически получится. Т.е. скриптовой язык будет грузить текстовые файлы с описанием окошек.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это всё конечно не моё дело, но твои пренебрежительные высказывания о Qt наводят на мысль, что ты о нём знаешь очень мало. И наоборот, этот VCL, наш кошмар из начала нулевых, вдруг внезапно становится "приятным в обращении"... Прям какая-то альтернативная реальность.
Но справедливости ради, сейчас иметь несколько альтернативных реальностей в мире - это норма. Мы теперь все так живём.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Тогда уточни, что ты называешь излишествами?
На VCL написан, например, редактор партиклов pfxEd. Вроде окошки ничуть не сложнее.
Добавлено 28-08-2022 в 14:00:
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще, как я изначально планировал смотреть в сторону кроссплатформенности:
1. нативная поддержка Windows
2. поддержка Linux через Wine
3. нативная поддержка Android
Но дело в том, что к моменту выхода рабочей версии XashNT, поддержка Android скорее всего готова не будет, к тому же движку нужно какое-то время, чтобы получить распространение в массах. И к этому моменту вполне может оказаться, что Andoid уже дропнут самим Гуглем, а вместо этого предлагается совершенно новая операционка. Причём она может быть интерфейсно совместима с Windows. Мелкомягкие же делают какой-то универсальный API в качестве стандарта. Вот уж что-что, а API у них всегда неплохо получались, равно как и их международная сертификация.
И это поставит окончательную точку в вопросах кроссплатформенности.
Будет такой единый API, которому все операционные системы будут обязаны соответствовать. И будут приложения, которые будут привязаны к этому API.
А смысл кроссплатформенности сведётся лишь к перекомпиляции исходного кода в соответствующий образ. И больше не надо будет таскать с собой зоопарк библиотек из линукса, который к тому же непонятно каких версий.
Такой мой прогноз на будущее кроссплатформенности.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro ты видишь какую-то неправильную логику. Работать ведь можно ничего из материальных ресурсов не потребляя, лишь расходуя своё время и используя талант или навыки. Например, быть пейсателем или певцом ртом. Или невыносимо талантливым племянником одного известного режиссёра. И вообще, нужно разграничивать ресурсозатраты на производство чего-л. и разбазаривание капитала на развлечения. Речь-то не совсем об этом изначально была. Речь была о кроссплатформенности, и о том, как она сильно нужна в современных реалиях. На самом деле кроссплатформенность - нишевое явление. Для профессионального (научного) софта, например. И то, это занятие сомнительное. Для серьёзной работы быстрее и в перспективе дешевле приобрести машину, на которой работает целевой софт, нежели портировать этот софт на уже имеющуюся машину.
Для каждой платформы есть свои задачи, с которыми прекрасно справляются приложения, написанные под эту платформу, и эти приложения нет никакого смысла портировать на другие платформы. Это всего лишь современный тренд.
Возможно, с подачи Apple или кого-то ещё, ARM архитектура через n-ное количество десятилетий вытеснит x86. Но тогда уже будут готовы универсальные API, которые прогнозирует Дядя Миша. От рудиментов со временем отказываются, это отчётливо прослеживается в индустрии железа. Весь зоопарк портов и интерфейсов, которые имелись у компов 90-х сейчас заменён PCI-E и USB. А что надо древнему софту - эмулируется. Так же будет и с платформ-специфичными фичами.
Вы пытаетесь сравнивать операционки, которые вообще для разного предназначены.
Андроид делали для потребления контента. Да, на нем можно что-то разрабатывать, можно взять большой планшет, подключить клаву и мышь... Можно вообще на ноутбук поставить андроид, есть x86-совместимые билды. Но все равно работать будет неудобно, он на это не заточен. Нет поддержки многомониторности, нет мультиоконного интерфейса (ну ладно, в андроиде добавили разделение экрана между двумя приложениями, и то все тупит и тормозит). Нет быстрого переключения между окнами.
А вот винда годится не только для потребления, но и для производства контента (как и линукс, и макось). Поэтому эти операционки точно не умрут. По крайней мере, не андроид их убьет.
__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
XaeroX
Истина познаётся в сравнении. И таки да, это очень косячный софт. Да чего говорить, оказалось в 2022 году многие до сих пор на милкшейпе сидят.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Консоли у меня всегда вызывали вопрос, зачем они существуют в принципе, и почему люди любят хавать фекалии. Не знаю кто в здравом уме купит обрезанный недо-пк, когда есть собственно ПК? Особенно когда сейчас оно как я понимаю стоит по цене полноценного компа, не сильно в теме, потому что я никогда не видел смысла в них и не интересовался.
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro если нет разницы в итоговом результате, зачем платить больше? Я понимаю, что многим надо 200+ фпс при 4k, но остальные довольны тем, что хотя бы запускается в 30 фпс. На ютюбе полно видосов про бюджетные компы, и это массовое явление.
Короче, какой можно подвести итог? Касательно XashNT. С одной стороны изначально делать его кроссплатформенным это, конечно, неплохо. С другой стороны, Xash3D стал кроссплатформенным после допиливания сторонними ребятами. И этот форк обрёл популярность только из-за того, что школоло смогло играть на смартвонях в сраную каэсочку. Не будь сраной каэсочки - никому кроссплатформенный ксаш (и голдсорс тоже) не нужен был бы. То есть, мы всё-таки упираемся в целевую аудиторию и целевые устройства. Поскольку ДМ очень сильно ориентируется на свалкера в тестировании и демонстрациях, логично предположить, что целевым устройством будет ПК, а целевой платформой шindows. А дальше уже портируют те, кому надо. Например, если сконвертируют мультиплеер свалкера, чтобы шкальники могли мериться органами по своей шкале, играя со смартвоней.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
Мой мод на Xash
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну просто народ привычный. Если ему показать колидоры - он моментально себе представит, что колидоров могут быть многие километры. С незапамятных времён так. А если показать озеро и 3 домика, будут надеяться, что размеры карты ничем не ограничены.
У меня еще со времён xash_demo задумка так и не реализована в полной мере. Ну вот на новом движке надеюсь выполню так, как планировал в 2012-м. Но тогда не прокатило.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
так в чем сложность рисовалку карт вставить, если какой-то нонейм кодер сделал что можно шикарные карты рисовать прямо в paint (DrawMap) слабые вы кодеры
AntiDote не жди пока другие сделают - сам вставь, будешь сильным кодером.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
AntiDote
Так чем тебя DrawMap не устраивает? Кстати гугл по этому запросу выдаёт фигню, где скачать можно пощупать? Рисуй да импортируй куда надо.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro https://gamebanana.com/tools/5715
__________________
Мой сайт
Xash3D Modding Discord
__________________
В метро 2033 на удивление мелкие уровни. Вот к примеру мёртвый город, часть первая.
Компенсируется это живым окружением, т.е. там какие-то монстры прыгают, провода раскачиваются, машинки опять же могут сползти в пропасть.
Здесь на скриншоте только статика, до энтить\лампочек пока не добрался, когда-нибудь потом займусь.
Добавлено 01-09-2022 в 14:10:
И кстати. Вопреки расхожим представлениям, в метро таки есть лайтмапа.
Одна несжатая страница 2048х2048 на любой уровень, даже самый мелкий.
Видимо прикручивали когда форматы ресурсов менять было уже нельзя, может до последнего надеялись обойтись без лайтмапы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А что всё такое шумное? Мипмаппинг отвалился? После компиляции развертка сохраняется, и можно накладывать оригинальные лайтмапы? И что по оптимизации отдаленной геометрии?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Компилятор прекрасно генерит собственную развертку, с этим нет особых проблем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Для всяких статичных пропсов эффективнее использовать вручную созданную развертку. На порядок будет меньше косяков. Но лучше конечно провести эксперимент, можешь запечь лайтмапу на модельке Аликс например? У неё вроде нет перекрывающихся островков, так что можно сравнить оба метода.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
У меня нет хорошего исходника этой модельки. То что есть - делал Raid путём разрезания сорсовского исходника на несколько кусков, чтобы голдсорсовский компилятор смог её скомпилировать. А затем голдсорсовская модель, минуя стадию декомпиляции была сконвертирована в формат, понятный XashNT. Поэтому получилось вот такое:
Вот повертексное, как я и говорил - смотрится получше
потому что несмотря на разрубленную модель, физическая связь между вертексами осталась.
Добавлено 02-09-2022 в 13:12:
Посчитал свет с samplesize 1. Чем-то похоже на повертексное, но с окантовкой в тех местах, где меш порубили на части.
Добавлено 02-09-2022 в 13:17:
Хмм, я признаться тоже удивился, ну почему лайтмапа выглядит с таким недостаточным разрешением, по сравнению с вертексным. А потом включил сетку:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Выглядит очень даже недурно, за исключением черных полосок. Хоть в первой итерации куда то отвалились тени. А причем тут Раид, есть у тебя компилятор сам строит развертку? Можно подробнее?
И как пишется информация для повертексного освещения? Он создаёт отдельный слот для цветов вертексов конкретной модели? Или просто берет освещение с пола и точечных объектов?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Хм, в той модельке, что у меня - 50 тысяч полигонов, а тут всего пять.
Да и нечем мне открыть формат .max
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Сбрось сорсовскую модельку, я тебе попробую сконвертнуть. Мне лень качать гигабайты синематик мода ради одной модели.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так нету у меня сорсовской
У меня была уже сразу голдсорсовская-порезанная-скомпилированная.
Это у нас народ сразу даёт готовую модель. И Элбер свою ЧАЭС мне тоже дал в скомпилированном виде, я его когда спросил за исходники, он мне нашёл какие-то частичные ошмётки. Пришлось свой конвертор писать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нашел на геймбанане.
https://gamebanana.com/mods/182173
Попробуй эту.
https://drive.google.com/file/d/1ib...iew?usp=sharing
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Текстурку бы к модели
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Мда, сорс моделеры конечно как всегда в своём репертуаре срут миллионами текстур и материалов. Удивительно как движок с таким обилием справляется.
Собственно всё вытянул, прилепил и упаковал в ротик положил.
https://drive.google.com/file/d/1Mk...iew?usp=sharing
Куда делись зрачки у модели, я хз. Впрочем они и в сорсе иногда отваливаются, похоже там отдельный шейдер для этого.
Кстати, а ксаш умеет парсить просто цвет материала модели?
Добавлено 03-09-2022 в 15:56:
P.S. Вот ещё кое что нашел по шарпу, может будет тебе интересно.
https://habr.com/ru/company/microsoft/blog/550996/
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чёт эта моделька запеклась гораздо хужее превидущей. Ну и плюс в лайтмаппере есть недоработка на фазе сбора рассчитанного отражённого света. Там в крации в чём суть. Индирект традиционно считается в более низком разрешении, нежели прямой свет. Ну как и в халфе, собственно.
На поверхности генерируются патчи с шагом, ну там обычно 64\128, тогда как у люкселя размер 16\8 и меньше. После рассчёта индиректа отражённый свет применяется ко всему патчу. Который, как вы понимаете - заведомо больше чем люксель. Прикол в том, что нельзя эту низкочастотную сетку тупо (единственный случай, когда этот слово уместно), скопировать на сетку лайтмапы. Потому что низкочастотный индирект проявится на лайтмапе.
Поэтому используется фаза сбора с интерполяцией. В том же VHLT она может занимать даже больше времени, нежели сам рассчёт непрямого освещения.
Но это по сути не главное. Главное то, что структуры для интерполяции между соседними полигонами могут занимать дьявольски много памяти.
Те кто пользуются VHLT, могут открыть диспетчер задач на фазе FacePatchLights и охренеть. А у меня - большие карты из того же сталкера.
То есть не вариант. Поэтому у меня идёт сбор соседних сэмплов через поиск в заданном радиусе и окклюзии через трассу. Вот, собственно в радиусе этого поиска и есть вышеозвученная недоработка. Она равна фиксированному значению, заданному пользователю - аналог параметра -chop. А моделька напоминаю состоит из микрополигончиков. Ну вообщем можете догадаться, что на один люксель для интерполяции собирается несколько тысяч сэмплов. И фаза FacePatchLights может реально длиться около часа, хотя конечно в этом нет никакой необходимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Впрочем пару скринов всё же покажу
Мне не нравится. С другой стороны - освещать персов лайтмапой довольно дурацкая затея.
Добавлено 04-09-2022 в 10:59:
А повертексное показывать не буду. Там страх и ненависть в Лас-Всегасе получилось. Интересно почему так? Может у меня парсер obj кривой?
Добавлено 04-09-2022 в 11:06:
У этого obj полный разброд и шатания. Может не так сильно, как в ase, но тоже ничего хорошего. Пример того, что корректно читает мой парсер:
1 | g models/doors/door4 |
2 | usemtl Material01 |
3 | s 1 |
4 | f 3/1/1 2/2/1 1/3/1 |
5 | f 2/2/1 4/4/1 1/3/1 |
6 | f 1/3/1 4/4/1 5/5/1 |
7 | f 1/3/1 5/5/1 6/6/1 |
8 | f 6/6/1 5/5/1 7/7/1 |
9 | f 5/5/1 8/8/1 7/7/1 |
1 | usemtl Trenchcoat |
2 | s 1 |
3 | f 1/1/1 2/2/2 3/3/3 |
4 | f 4/4/4 3/3/3 2/2/2 |
5 | f 4/4/4 5/5/5 3/3/3 |
6 | f 6/6/6 7/7/7 8/8/8 |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Попробовал бейкер Психопата, вот что получилось. Лайтмапа 4к, время запекания 25265ms.
Странная тень на ботинках - мой косяк, забыл убрать перекрытие островков.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
На 4K лайтмапе - нет ничего удивительного. У меня на тех скринах, она где-то 256х256.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
У Психопата сама модель освещения более красивая, халфовская как то искуственно ненатурально и всё серым/грязным выглядит.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Чем выше разрешение лайтмапы - тем лучше всё это выглядит, естественно.
Но я напоминаю, задача не в том, чтобы просто красиво осветить одну модельку на карте-коробке.
__________________
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-2022 в 14:38:
Ты люксели можешь визуализировать на этой лайтмапе?
Добавлено 07-09-2022 в 15:19:
Чтобы было понятнее об чём речь
Это соотношение люксель к юниту 1\1. Можно видеть что нос целиком поместился на одном люкселе, поэтому и выглядит так странно.
Добавлено 07-09-2022 в 15:26:
А вот соотношение люксель к юниту 1/0.1
11 страниц 1024х1024
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Любопытно, а в XashNT код так же как в Xash3D намертво привязан к 32 битам? Или там всё же заранее предусматривается какая-то портабельность на 64-битные платформы?
__________________
Мой сайт
Xash3D Modding Discord
Нет он изначально спроектирован таким образом, чтобы без проблем можно было перебраться на 64-бита. Единственное, что я пока нерешил - надо ли будет иметь две версии виртуального образа для виртуальной машины, 32-х битный и 64-х битный, или ограничиться только 32-х битным.
Проблема не только и не столько в 64-х битах, сколько в видеопамяти, например. Если текстур и геометрии много, а на видеокарте всего гигабайт памяти - ничего не поможет. OpenGL просто выдаст ошибку Out Of Memory и всё.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Видеопамять дублируется в ОЗУ, естественно. То-то ж Сталкер так лагал, когда его текстуры в тогдашних видеокартах не помещались полностью.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
К слову, на Android в скором времени урежут поддержку 32-разрядных приложений. В этот раз на аппаратном уровне.
__________________
Мой сайт
Xash3D Modding Discord
SNMetamorph ой, какая бида. Уже несколько лет приложухи доступны пакетами в нескольких вариантах. Есть 32 и 64 битные апк под разные версии arm. Что хомякам втюхают для ношения в карманах, то и будет целевой платформой. Одно мы знаем точно: десктопы конкретно нацелены на отказ от 32-битной архитектуры. Мелкомягкие даже крайнюю винду выпустили x64 only. И Apple таки грохнули 32-битную iOS пару лет назад.
Только на десктопе не всё так просто, как с мобилкаме. Мобильный софт сам по себе мерзкое говно, как и мобилки сами по себе мерзкое говно. Эта ниша очень и очень нестабильна. Сегодня в тренде одна повест(очка), завтра другая, послезавтра третья. На десктопе всё более-менее стабильно, если юзер не алень и не гонится за обновлениями ради обновлений. Винда уже лет 10 на подавляющем большинстве компов 64-битная, однако мелкомягкие не убирают из неё заветную папочку SysWOW64.
На десктопах эмуляция не то что других архитектур, даже других ОСей - это будущее в ближайшие лет 10-20. Хотя бы просто потому, что людям очень лениво перевыпускать уже законченный софт, особенно игры.
Эпики уже примерно года два, как отказались от 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
Отказ от 32-х битной версии программы автоматически означает "теперь память можно не экономить вообще и набирать на работу кого угодно".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Немного о весе прог... Я тут недавно из исходников гита собрал уе 5.1 и все в конечном результате получилось около 200гб ... И собирался двиг часов 5 если не больше на коре 9. Если всю хрень почистить он будет весить 20-25гб, но все же
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro ну естественно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Пусть тут пока полежит.
https://www.siliconstudio.co.jp/mid...that-scales.pdf
Добавлено 17-09-2022 в 22:52:
Кстати хороший пейпер. Enlighten передали японцам, которые в отличие от чопорных англичан, наконец-то честно рассказали, как он всё-таки работает. Именно так, как я полагал и именно так, как я сам и планировал сделать. Вкратце - берём типичный алгоритм рассчёта непрямого освещения Instant Radiocity (Quake2, Half-Life), делаем очень редкую сетку, считаем трансферы, потом очень сильно их ужимаем и сохраняем на диск.
Собственно это и есть самый сложный момент. Ну и генерация патчей втч.
А когда у нас есть матрица светопереноса, любое решение сходится за доли секунды. Причём обновлять можно только видимую часть мира. Это абсолютно надёжно, быстро, не запаздывает во времени и не имеет артефактов. Ну предрассчёты, да. Фактически отражённый свет работает только для статичной геометрии. Впрочем для лайтпроб можно точно так же посчитать светоперенос.
Главный плюс такого подхода - его можно применять в продакшене.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну так мы с тобой тогда ещё 8 лет назад разбирались как это работает. Вроде как и тогда к похожим выводам пришли. Просто да, в первых пдфках не очень доходчиво было описано.
Вот кстати тоже тебе в копилочку:
https://github.com/sonicether/SEGI
https://forum.unity.com/threads/bak...eleased.536008/
https://unityassetcollection.com/ba...-free-download/
Добавлено 18-09-2022 в 11:26:
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дочитал тот документ по Enlighten. Ну что сказать? Опять куча лайтпроб, нерегулярная сетка, масса проблем и их героическое преодоление.
Всё то, с чем я столкнулся еще в P2, только в гораздо больших масштабах.
Надо подумать, возможно имеет смысл генерировать эти лайтпробы прямо на лету, но опираясь на информацию от трансферов и VPLS.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это при условии, что источник света неподвижен, а больше всего лайтпроб на открытом пространстве, где мы хотим сделать смену дня и ночи.
То есть всё это имеет ограниченное применение.
У меня тут есть любопытная мысль, на стыке LPV и Enlighten замутить технологию, может быть что-то и получится из этого. Из LPV взять генерацию лайтпроб налету в регулярных сетках, а из Enlighten - те самые предрассчитанные данные. Ну в смысле идеи взять, а не код, конечно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ничего пока не скажу, это так, задумки на будущее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сегодняший день, 19.10.2022 можно официально считать датой рождения нового языка программирования.
Это не день, когда я внезапно принял решение о создании такого языка. Это не день, когда я набросал первый прототип и провёл первый юнит-тест, в стиле Hello World. Это день, когда мне удалось портировать на новый язык исходный код меню из XashNT, написанный на С++ и провести серию тестов по стабильности, производительности, да и вообще соответствию языка ожидаемому поведению. Теперь, когда, всё это сделано, уже можно с ответственностью заявить - язык создан, опробован в деле и будет как минимум использоваться внутри среды разработки игр XashNT. Подобно тому, как для первого квейка использовался QuakeC или для Unity используется C#. Однако заложенные в нём возможности позволяют использовать язык и для любых других задач, в отличие от того же QuakeC, он не прибит гвоздями намертво к игровому движку и там нет никаких явных привязок.
Язык имеет собственное имя: HeadShot или просто Shot. В этом можно усмотреть аллюзии на С++ который позволяет стрелять себе в ногу. А мой язык позволит выстрелить сразу в голову и не мучаться. Или же намёк на то, что с его помощью можно писать игровой код для шутеров, в которых хедшоты - важная часть игрового процесса. В принципе оба утверждения в какой-то степени справедливы. Но в какой именно, я конечно не скажу, т.к. любой продукт должен обрастать собственными легендами с момента появления. Расскажу поподробнее как я пришёл к выводу, что мне нужен собственный язык, что в нём планировалось сделать и что уже сделано, а что еще только предстоит.
Идею создания собственного языка я вынашивал примерно с 2006-го года, но тогда, у меня разумеется, не было для этого никакого опыта. Поэтому я планировал использовать расширенный QuakeC из движка FTE. Этот движок, к слову, развивается до сих пор, причём по большей части упор делается именно на расширение возможностей QuakeC. К сожалению изначальные рамки, заданные для этого языка Кармаком, сделали невозможным добавление в него многих возможностей и особенностей С++, которые на мой взгляд оказались бы весьма полезными. Я так же рассматривал другие языки, которые бы меня полностью устроили, однако ничего подобного так и не удалось найти. Минимальное соответствие моим требованиям было только у AngelScript, но и там были вещи, которые меня не устроили. К тому же, с момента, когда было принято решение о портировании VCL, он отпал автоматически. Возможно кто-то не в курсе, но портировать Delphi на C++ в ряде случаев - нерешаемая задача. Заодно, у тех, кто внимательно следит за моими "невероятными приключениями", наверняка встал вопрос - отчего же я не взял уже портированую библиотеку VCL, для C++ Builder. Ведь разработчики Delphi выпускали и такой продукт тоже и там VCL тоже была. Так вот если внимательно изучить рантайм, то вы увидите, что там VCL присутствует в своём оригинальном виде, т.е. по прежнему на языке Delphi. Никто и никогда не портировал её на С++, в нём отсутствует ряд возможностей, которые она активно использует. В частности там нет свойств и нет виртуальных конструкторов. А вот на C# она успешно портирована, как раз потому что, этот язык и создавался с учётом возможности портирования подобного кода. То есть в каком-то смысле я повторяю путь Микрософта начала нулевых. Но конечно у меня есть собственные идеи, насчёт всего этого. Исходя из всего вышесказанного было принято единственное верное решение - нужен свой собственный язык. В котором следует реализовать как минимум привычный синтаксис и поведение С++ и заодно те вещи, ради, которых всё это и затевалось. Перечислю их:
1. Возможность легкого отправления объектов по сети. Для чего у члена класса просто ставится необходимый атрибут и больше ничего делать не надо. Всё остальное происходит автоматически. Опционально можно указать сколько бит переменной должно быть передано.
2. Возможность легкой сериализации объектв. Полностью аналогично первому пункту - атрибут у переменной и опционально указать кол-во бит.
3. Возможность портирования кода с Delphi. Здесь нам понадобятся виртуальные конструкторы и свойства с расширенными возможностями.
4. Язык ни в коем случае не должен иметь привязки к игровому движку, как это случилось, например с QuakeC, но одновременно должен позволять максимально плотную интеграцию для увеличения скорости работы и её упрощения.
5. Язык должен иметь синтаксис и поведение полностью аналогичные С++, при этом предоставляя программисту такие возможности, которых в С++ нет и они там не появятся уже никогда. А если и появятся, то это будет сделано через костыли типа STL.
6. По возможности сохранить в языке идеологию, заложенную Страуструпом - вы не платите за то, чем не пользуетесь. Практически все известные мне скриптовые языки эту концепцию игнорируют.
7. Встроенные в язык средства отладки, позволяющие выводить исполняемый код на экран, расставлять точки остановки, ошибки внутри исполняемой среды языка не должны приводить к краху всего приложения - ну вообще стандартные возможности песочницы.
8. Не слишком удручающая скорость выполнения кода, даже без преобразования опкодов в реальные исполняемые коды x86. Т.е. без JIT-конвертации.
9. Возможность манипулирования объектами со стороны рантайма, например для реализации физики объектов, подобно тому как это было сделано в Quake.
Вот такие задачи были мной поставлены и надо сказать, у меня получилось практически всё из намеченного. Так же у языка будет возможность работы на 64-х битных системах, я изначально закладывал это в его архитектуру, но пока в этом просто нет необходимости.
Архитектура системы комманд - RISC. Команды имеют фиксированную длину и три операнда (но необязательно используются все три). Из них смещения на данные в случае 16-битных смещений составляют 6 байт, а в случае 32-битных смещений соответственно 12. Плюс 4 байта информации. Из которых 8 бит - номер опкода и по 8 бит мета-информации на каждый операнд, где 2 бита - размер операнда, а 6 бит флаги их состояний. В отличие от CISC-системы команд, их легко проматывать и полностью исключена возможность вредоносного вмешательства из-за переполнения буффера, когда данные трактуются как команда.
Немного о практическом применении, с учётом накопленного опыта. Valve, как вы знаете, купив первый Quake у Кармака, очень быстро упёрлась в возможности этого ограниченного языка и было принято решение переписать игровую библиотеку на С++. Это было сделано в спешке, поэтому кодинг под GoldSource напоминает пляски на картофельном поле с дедомграблях. Абсолютно все сталкивались, не с тем, так с этим.
Просто раз уж у нас тематический форум по халфе, в каком-то смысле, вы все хорошо знаете, о чём я говорю. Так вот для многих эти ужасы послужили негативным стимулом вообще забросить программирование.
Что характерно, Valve не отошла от этой практики и в последующих движках, но там действительно уже было невозможно ориентироваться, даже на мой взгляд.
Плюс разработка под С++ требует наличия на компьютере тяжеловесной MSVC. Иногда требуется какая-то строго опредлённая версия, иначе потребуются дополнительные пляски с бубном. Unity со своим C# аналогично требует наличия MSVC. К тому же у меня в последнее время сложилось нехорошее впечатление, что сигналом для выхода новой версии Unity как раз и служит новая версия СиШарпа. Может быть в 2005-м году, когда Юнитех сделал свой выбор пользу Шарпа, он еще не выглядел так страшно, как сейчас, хотя тенденция уже тогда просматривалась. Так или иначе, но лично мне совершенно не хочется зависеть от капризов разработчиков стороннего языка и следить, чтобы код мог компилироваться на целом букете компиляторов. В дальнейшем, если новый язык выйдет за рамки 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'
Плюшка из Делфи, в виде «набросал контроллов и готово» перекочевала тоже?
И насколько оно будет совместимо со старыми версиями винды и старым железом в целом?
Возможно у нас здесь собралась аудитория которая не слишком хорошо знает все возможности С++, да и не факт, что многим это будет интересно, но я всё же опубликую список того, чего ещё нет в моём языке (в отличие от С++) и что планируется туда добавить, т.к. разработка языка еще не завершена, хотя в сущности поставленная задача уже выполнена.
Итак, что еще планируется добавить в язык:
1. Перегрузка операторов. Полезна для создания абстрактных типов данных, вроде векторов, матриц и комплексных чисел, но и не только.
2. Поддержка функций внутри функций как в Delphi, ну или лямбда-выражений, пока еще не определился точно. К слову сказать трюк с объявлением локального класса прямо внутри функции, как это возможно в С++, у меня тоже работает, хотя, как и так, не даёт никаких преимуществ, в плане оптимизации.
3. inline-разворачивание функций. Это весьма сложная вещь, которая прячется за простым интерфейсом. К тому же я не уверен, что в случае скриптового языка от нее будет какая-то польза. Но серию экспериментов я конечно проведу. Для методов get\set (невиртуальных свойств), развертывание, к слову уже имеется, т.к. это часть их природы.
4. Шаблоны для функций. На данный момент поддерживаются только шаблоны для объектов. Не то чтобы сложно, просто руки пока не дошли.
5. Доступ к защищенным членам класса с выводом соответствующих ошибок. На данный момент компилятор не учитывает секции private\protected\public, хотя и хранит информацию о них. Это в сущности мелочь, т.к. при ошибке доступа просто выдаётся соответствующее предупреждение компилятора, больше ничего не делается.
6. Механизм исключений. Он не является особенностью именно С++, т.к. есть много где. И он идеально ложится на RISC-архитектуру. Аналогично пункту 4 пока не дошли до него руки.
Все остальные возможности и особенности С++, по крайней мере те, которые регулярно используются так или иначе уже реализованы. Постепенно всё будет приводится к соответствию стандартов самого С++, если речь идёт об унаследованных особенностях, а те вещи, которых в С++ нет, будут максимально тесно интегироваться с уже имеющимися для обеспечения максимальной целостности нового языка.
Добавлено 19-10-2022 в 10:45:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Дядя Миша
Это все конечно хорошо, а есть рабочая версия - запустить посмотреть, что и как?
__________________
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
(_-=ZhekA=-_) есть. Читай F.A.Q.
https://hlfx.ru/forum/showthread.php?s=&threadid=5696
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
О каком портировании идёт речь, не понял.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
На ведроид например, или макось.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ну вообще-то наоборот, виртуальная машина везде будет работать без портирования. В этом и смысл.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Традиционно подведу итоги уходящего года.
Наверное это был самый неинформативный год в плане разработки Ксаша.
Ну что поделать? Мои планы не поменялись, я по прежнему считаю, что графический интерфейс следует размещать внутри виртуальной машины.
Разумеется это не я первый придумал, это давно практикуется с явой и шарпом. Вот только ни один из уже существующих скриптовых языков меня не устроил. Я бы мог пуститься в пространные рассуждения почему сложилась такая ситуация, но не стану. Вы всё равно ничего не поймете. Не потому что глупые, а потому что вам это абсолютно неинтересно. Но если всё же кому-то будет интересно, я распишу дополнительно ниже. Пока что отмечу тот факт, что собственный скриптовой язык открывает замечательные возможности. недоступные ни на Яве ни на Шарпе, поскольку в этих языках обязательно не будет того, что нужно, и придётся ждать, когда оно там появится, неизвестно в какой форме оно там появится и как после этого сломается совместимость. В качестве примера могу привести тот же Unity, где смена мажорного номера версии ознаменовала собой переход на новую версию Шарпа. То есть разработчики целиком и полностью зависят от сторонних библиотек, сужая и без того невеликое пространство решений.
Впрочем даже выбирая Lua или AngelScript вы всё равно оказываетесь в зависимости от авторов этих библиотек. Были, как вы знаете два движка с собственными скриптовыми языками - это Unigine и Godot. Первый пытался частично эмулировать функционал С++, но к сожалению использовал порочную модель Шарпа и Явы (всё - объект), что разумеется сказалось на его производительности. Поэтому большой объемный код на таких скриптах не напишешь. Впрочем в Unreal до третьей версии включительно сохранялась та же самая ситуация. Скрипты есть, а их производительность не годится для написания чего-то боле-мене серьезного. У Годота язык старался быть похожим на Питон, который использует ту же самую объектную модель со всеми вытекающими. И с той же низкой производительностью. Как итог все движки предлагают альтернативу - использование С++ библиотек, что полностью ломает первоначальную задумку и вносит элемент хаотичности.
В Ксаше я поступил иначе. Мой язык изначально планировался как скриптовой и с высокой нагрузочной способностью. Грубо говоря это песочница с синтаксисом и поведением С++, но при этом имеющая такие возможности, которые в самом С++ реализованы не будут никогда. А если и будут, то очень коряво и неудобно. Разумеется всё это успешно обходят - прописывая подобные вещи вручную. Но ведь смысл как раз в том и заключается, чтобы автоматизировать очевидное, получив при этом новые возможности. Практически весь 2022-й год я и бился над решением этой задачи. Пока ещё рано говорить с полной уверенностью, но мне определённо нравится то, что у меня получилось.
И теперь я наконец-то смогу вернуться к своей изначальной цели - написанию универсального редактора и универсального вьювера, интерфейсы которых будут реализованы на том самом скриптовом языке, а значит смогут быть отредактированы юзерами, если им вдруг захочется поменять расположение контролов или вообще создать новые окна.
Но, как вы понимаете, сам скриптовой язык предлагает куда более широкие возможности, нежели правка исходного кода таких меню. Теперь так же будет доступна возможность редактирования внешнего вида из текстовых файлов, причём изменения в исходном коде потребуются минимальные - т.к. сама виртуальная машина уже обеспечивает весь необходимый функционал. Да и сохранение абсолютно всех настроек как редактора, так и вьювера теперь стали весьма простым делом.
Язык создавался не только для меню. На этом же языке будет написан и игровой код движка. И здесь я вижу одну потенциальную возможность, которой лишены как Юнити, так и Унреал с КрайЭнджином.
В Юнити фактически нет игрового кода. Там есть сэмплы-примеры, написанные на скорую руку и крайне неоптимально. Предполагалось, что для реального проекта их перепишут правильно. Однако, как вы понимаете, те, кто пытался создавать свои проекты на Юнити поверили рекламным обещаниям, что там вообще не придётся писать код. В результате похабные примеры из сэмплов перекочевали в реальные игры и мы с удовольствием наблюдаем "фирменную" физику Юнити - да-да, тот самый мешок с гамном на пенсии. В Унреал и Крае строго обратная проблема - игровые библиотеки из коробки умеют практически всё, но разобраться в десятках мегабайт этих абстракций мало кому под силу. Без обучающих курсов тут делать просто нечего. Кажется я придумал весьма оптимальный способ решения этой проблемы.
Ну а в наступающем 2023-м я надеюсь у меня для вас будет куда больше различных новостей и планируется очередная бета-версия. Ориентировочно в мае-июне.
Ещё раз всех с наступающим!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так товарищи, я наконец-то добрался до той части работы в процессе которой мне будет о чём с вами поговорить и надеюсь вам будет интересно.
А именно: портирование игрового кода на мой новый язык. Этот процесс обратный тому, что когда-то сделали Valve, когда перенесли свой игровой код с QuakeC на С++. И вот теперь настала пора сделать наоборот - перенести код с С++ на скритовую машину. Конечно её функционал превышает таковой не только у QuakeC, но и у самого С++ (уступая лишь по быстродействию), иначе бы вся эта затея попросту не имела смысла.
На первый взгляд это кажется несложной задачей, однако я напомню - 80% глюков GoldSource как раз и обусловлены этой спешной заменой виртуальной машины на библиотеку. Кармак, к слову, проделал тоже самое в Quake2, из-за чего добавление новых полей в объект для сохранения превратилось в жуткую боль, ну кто пробовал тот знает. Да и сам код объектов на чистом Си весьма неудобен и не располагает к пониманию. В Source из-за отсутствия в языке встроенных способов задания мета-информации код превратился в нагромождение каких-то адских таблиц и абстрактных классов, в которые без подготовки соваться страшно. Игровой код Unreal - ну там тоже вся мета руками прописана. Unity... На мой взгляд СиШарп для игровых объектов вообще не годится. Не для этого он создавался. Ну вообщем изучив основные проблемы и разработав собственный язык, я теперь готов вам предоставить своё виденье того как это должно выглядеть. Фронт работ следующий:
1. Новый механизм сейв-рестора. В отличие от халфовского классического, где надо было постоянно прописывать какие-то таблички, здесь от пользователя не требуется ничего. Максимум - пометить переменную-член класса, которую не надо сохранять.
2. Новый физический движок. С парент-системой, рагдоллами, катающимися бочками, машинками, полной предиктабельностью по сети и возможно с надувными коровами (???), впрочем насчёт последнего я не уверен. Но нечто вроде матрасов из хл2 будет. Так же будут возможны деформабли и разрушабли. Но это попожжы.
3. Новый дельта-калькулятор. Больше не будет никаких загадочных структур entity_state_t, clientdata_t и weapon_data_t, в которых вечно не хватает места, а изменить их нельзя. Новый сетевой движок будет строить индивидуальные дельта-таблицы автоматически для всех типов энтить, вот только ему не придётся прописывать жуткие таблицы-подсказки, как это сделано в сорсе.
4. Новая система предиктинга. В идеале - всех объектов, которые видны и осязаемы. Логика, понятное дело, на клиент передаваться не будет.
Впрочем в этом аспекте у меня еще нет чёткой картинки как тут всё будет устроено, детали будут уточняться по ходу разработки, т.к. надо будет провести ряд экспериментов.
5. Собственно портирование игровых энтить на новый скриптовой язык. На данный момент, как вы наверное уже догадались будет портирован весь набор энтить из ксаш-мода 0.82. Но вообще энтити могут быть из любой игры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Но на чтение этой справки уйдут годы
Тебе не кажется что обучение на реальных примерах гораздо быстрее, нежели на чтении справки, которая может давно уже не соответствовать реальному положению дел?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На чтение телефонного справочника тоже уйдут годы, но его от корки до корки не читают.
Я уже как-то писал, что главная проблема большинства скриптовых языков - это встроенные методы, которые нигде не отсвечивают и узнать о них можно в двух случаях:
1. если специализированная студия сама тебе его предложила автозаполнением
2. из справки
Но чтобы сработал первый метод, надо хотя бы немного ознакомиться с возможностями языка и на чтение этой справки уйдет порядочно времени.
Тогда как в том же С++ можно просмотреть заголовки и в аочию увидеть что доступно изкаропки. Но конечно это предполагает наличие некоторого опыта.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Образцовый справочник по скриптовым апям — у блендера: https://docs.blender.org/api/current/
Всегда актуальный, так как генерируется из исходников модулей. Хорошо организованный, так что я не понимаю, чего там можно долго искать.
import bpy |
bpy.data.objects["Cube"].data.vertices[0].co.x += 1.0 |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Кстати будут ли у тебя какие то упрощения для работы с сейв реестром и неткодом?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Будут и демки и примеры и документация. Но самое главное - это обратная связь с пользователями. Сделал демку, думаешь всем всё понятно, а на практике никому ничего не понятно. Но все молчат как на уроке в советской школе.
Добавлено 11-02-2023 в 15:53:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
for( int i = 0; i < UINT_MAX; i++ ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, наконец-то добрался до портирования кода монстров.
Это можно сказать вообще моё первое болимение углублённое изучение их кода. Никогда до этого я монстрами не интерисовался и вообще не знаю, что они там вытворяют. Ну а сейчас, поскольку портирую, придётся поизучать.
Это к слову ни в коем случае не означает, что в XashNT будет именно халфовский AI. Я портирую халфовскую (точнее ксаш-модовскую) библиотеку по ряду причин:
1. выстроить интерактивное взаимодействие между движком и скриптовой частью.
2. отладить это взаимодействие на реально существующих уровнях
3. дать вам портированный ксаш-мод, чтобы вы могли спокойно продолжать работу на новом движке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил в целях расширения кругозора ознакомиться с работой AI (точнее поиска пути) в различных движках. Ну сперва взял сталкера. Там жеж типо искуственная жизнь, интересно. Начал разбираться как всё устроено. Вообщем есть некие ноды. Между нодами есть некие связи. Причём эти ноды загружаются из редактора. Пошёл читать ликбез по сталкеру. А там вот эта картинка...
Аппроксимация навмеша при помощи точек. Я конечно хз, как эта сетка генерится, судя по всему - автоматически. Не могу представить, чтобы кто-то в здравом уме вот такое вручную расставлял да ещё с такой плотностью.
Однако нанести сетку на ландшафт - много ума не надо. А как насчёт извилистых коридоров? К тому же сетка на полу никак не поможем ориентироваться летающим и водоплавающим монстрам. Она годится только для сухопутных. Что особенно интересно - эта сетка потом ещё дополнительно проверятся на reacahbility. Т.е. доверия к тому что расставили - мало.
Добавлено 08-03-2023 в 19:57:
Да, чуть не забыл самое главное. В этой сетке если присмотреться к картинке не всегда четыре направления. Иногда их три. Таким образом обозначаются препятствия. Также в структуре каждой ноды имеются ограничивающие плоскости, но я пока не разобрался для чего они нужны.
Добавлено 08-03-2023 в 19:59:
Впрочем нет, гоню. Плоскость там одна - обозначает уровень наклона пола.
Добавлено 08-03-2023 в 23:24:
Более подробно расписано тут:
https://www.amk-team.ru/forum/topic...aktika-oshibki/
Чёт у меня волосы на голове от ужаса зашевелились. На гигантской карте визуально вручную контролировать, чтобы все ноды корректно соединились, иначе наградой будет вылет компилятора, расставлять\удалять невидимые стены, чтобы предотвратить расползание сетки (аналог замкнутого пространства в кваке), и вишенкой на торте - надо поставить на карту хотя бы один нод перед генерацией иначе вылет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это не сильно от навмеша отличается, только зачем так объектами спамить?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я не знаю откуда берутся навмешы. Может из исходной геометрии, а может их руками расставлять надо. А может сперва из исходной, а потом руками исправлять. Но видимо с точками проще управляться, чем с мешем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А в ку3 как?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вот я же сейчас и хочу сделать как в ку3 и в doom3. Там строится отдельное дерево, которое очень похоже на клипноды, но содержит в себе гораздо больше информации и этой информацией могут пользоваться монстры для навигации.
Минус в том, что оно поддерживает только брашы и патчи, модели не поддерживает. Вот я сейчас как раз добавляю в это дерево модели. Посмотрим что получится. Идея в том, чтобы не расставлять никаких навмешей и нодов.
В крайнем случае - окружить специальным монстерклипом некоторые конструкции. Но в норме монстры должны нормально взаимодействовать с моделями. Если скажем модель - это дом. В доме есть подвал и туда ведёт лестница. Нам достаточно приложить к лестнице func_ladder (которым сможет пользоваться и игрок тоже) и монстры смогут аналогично заходить в дом, спускаться и подыматься в подвал.
Добавлено 13-03-2023 в 12:22:
В крайнем случае, если моя затея не выгорит, я сгенерирую регулярную сетку из нодов, как это сделано в сталкере, но мне этот путь не очень нравится.
Во первых этих нодов чудовищно много получается, во вторых их зачастую приходится исправлять руками на некоторых границах, в третьих это ноды только для ходьбы по земле, они не учитывают ни воду, ни воздух. В отличие от кутришных.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так по идее всё что торчит нормалью вверх это простейший навмеш? Ну можно ещё делать отступы от стен у которых нормаль торчит куда то в Vector3.right
Я как раз когда делал скольжение по стенам, заметил что можно так же заставить монстров прожектплайнами огибать препятствия
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В халфе были инфо_ноды, как они работают? Может их банально просто автоматически расставлять?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Создал новый бинарный формат для хранения исходников с расширением - usm. Это тоже мета-контейнер, который может хранить в себе любой тип данных - например уровни, модели со скелетом, анимации или просто статичные мешы. Меняются только содержимое секций, их имена и кол-во.
Детектирование того или инго формата происходит по трафарету необходимого набора секций. Так же возможно мутирующее определение, когда целый уровень детектируется просто как статичный меш.
Единственный момент, с которым я пока что не определился - вероятно пары ключ-значение стоит иметь рядом в отдельном текстовом файлике, чтобы можно было их оперативно отредактировать из блокнота, как это мы делаем порой с обычным форматом map. Просто для удобства. Но возможно это и не понадобится.
Расширение формата пока не окончательное, могу выслушать ваши предложения. USM - Uniform Source Mesh.
Добавлено 15-03-2023 в 09:25:
Да, пока не забыл. Тем кто внимательно следит за ходом разработки, наверняка известно, что в 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'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
БСП вриатле можно отнести к категории source mesh.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это что выходит, все ресурсы будут с одинаковыми расширениями? Тогда может уж вовсе без расширения пусть лежат, одинаково удобно\неудобно.
Почему с одинаковыми? У них так же и останутся расширения .bsp, .mdl, .spr, и прочие.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Зачем спрайтам собственное расширение? Это же просто материал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я так полагаю под спрайтом Дядя Миша подразумевает не просто ориентированную картинку как было во времена Голда, а просто декоративный объект без коллизий и т д. это может быть и картинка и моделька и все, на что хватит фантазии. Верно я понимаю?
__________________
Дядя Миша, прошу прощения. разул глаза и увидел раздел на форуме. Я просто стал участником невольно, поэтому сразу и не распознал.
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ещё вот какая шляпа. Все редакторы строят брашы немного по разному. Тоесть эпсилоны там разные в chop is dish. Поэтому брашы, валидные с точки зрения компилятора редакторы злобно взрывают на гигантские плоскости.
Но кстати. Я вчера наконец-то осознал в чём профит сохранения плоскостей как трёх точек. Мы с вами помните гадали, зачем такая избыточность? Ну там в голову лезло, что эти точки хранились в целочисленных координатах по некоторым причинам, однако для текстового формата это не сказать чтобы прямо какая-то догма. Но оказывается есть и ещё один профит. В том случае когда браш построить не удалось, QuArK рисует, правильно что? Да эти же самые полигончики, подсвечивая их другим цветом. А как я узнал? Да очень просто. Я всегда сохранял в карту стоковые плоскости, ну те, которые размером на весь уровень. А вчера думаю, дай-ко сохраню уже те полигоны, которые компилятор превратил в браш. Ну и сохранил. Каково же было моё удивление, когда на некоторых из них QuArK браши так и не смог построить, но аккуратно отрендерил на их месте треугольнички, формой в целом напоминающие те самые брашы, которые могли бы быть на их месте.
Я конечно не знаю, может так только QuArK умеет, а другие редакторы нет.
Но вообще интересно, конечно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Так, ну чтож, для успешного завершения генерации брашей из моделей, осталось только написать генератор конвексных хуллов из произвольных полигонов. Это когда мы на вход подаём разные полигоны а на выходе получаем единый браш, который отдалённо напоминает исходную форму.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подведу некоторые промежуточные итоги. В целом сконвертировать модельный уровень в брашы - возможно. Колоизационная часть по возможности принимает форму конвексных хуллов, сложные конструкции налету декомпозируются в конвексные. Всё это конечно довольно небыстро, но уж всяко быстрее чем работа VHACD, который несчастную тубаретку мучал почти 8 минут и отожрал на это гигабайт оперативы.
К тому же с переходом на новый формат, я могу легко и просто предрассчитать брашы с помощью модельного процессора и тут же сохранить их в usm-файлик. Если он изменится, то процессор перерассчитает брашы автомагически. Таким образом загруженная моделька сразу же даст мне набор готовых брашей, а я просто выберу куда мне их подевать.
Структуральные отправятся на построение BSP, а детальные отфильтруются в это дерево. Одно могу сказать точно - тот принцип построения дерева, который использовался в Q3 и D3 для модельной геометрии абсолютно не подходит. Он там всё кромсает и портит. Неудивительно, да вообщем-то и не имеет значения. Я просто отфильтрую детальные брашы в лиф, ну будет навигационная трасса потреблять чуть-чуть больше ресурсов при анализе построения пути. Некритично. Зато построение такого дерева займет не часы, а минуты. С этим моментом я определился. Теперь, собственно, вернёмся к превращению нашей полигональной геометрии в брашы.
Как я уже говорил из модели формируются группы в которых у треугольников смежные рёбра. Классификация на данный момент умеет определять следующие типы этих групп:
1. планарная группа. Ну понятно. декаль, вода или окошко. Или может плакат на стенке. Чот такое.
2. Конвексная группа. Ну тут всё просто - это 100% детальный браш. Т.к. части уровня не могут быть набором конвексных треугольников. А даже если и могут - это всё равно детальный браш
3. Почти конвексная группа. Браш не может быть почти конвексным, а вот моделька - запросто. Метод построения немного иной, но визуально результат практически такой же.
4. Группа смотрящая внутрь себя. Это очевидно мировая геометрия, какой-то колидор или лаз. Ну вообщем детальная геометрия всегда смотрит наружу себя. Конечно никто не мешает сделать сложную комплексную модель, у которой будет как наружная часть, так и внутреняя, простейший пример - ящик без одной стенки, в сталкере такие попадаются, а вертексы все шареные. Но очевидно, он не подходит под определение группы, которая смотрит исключительно в себя.
5. Ландшафт. Ну тут тоже понятно, что мировая геометрия.
6. Все оставшиеся группы. Здесь самое интересное начинается. Потому что под определение всех оставшихся групп подходят как унитазы, так и стенки уровня. То есть это неконвексная группа. Замкнутость\разомкнутость в данном случае не имеет никакого значения - моделлёры зачастую убирают лишние полигоны, поскольку за них этого никто не сделает. То есть у унитаза вполне может отсутствовать нижняя часть модели, где он соприкасается с полом. А у структурных стен вполне может оказаться какой-то разрыв в рёбрах - например одну стенку просто вдвинули в другую, да и всё. Связи между рёбрами нет, а герметичность есть. То есть передо мной стоят ещё две важные задачи:
1. отличить детальные группы от мировых (точнее говоря, всё что не задетектируется как детальная группа станет структуральной), потому что надёжного способа задетектировать часть уровня вообще не существует, приходится действовать методом исключения - задетектировать все детальные группы, то что останется и будет структурной. Этот путь гораздо надёжнее и проще, поскольку есть масса способов выявить детальные полигоны и ни одного - чтобы выявить структуральные. К тому же моделлёры их вообще никак не различают и модели делаются без учёта всего вот этого.
2. Аппроксимировать вогнутую детальную группу при помощи множества AABB. Я с подобной задачкой ещё не сталкивался, так что пока у меня нету однозначной идеи как именно это сделать. Собственно сама аппроксимация делается элементарно, вопрос только в том, как задетектировать, когда нам уже надо бросать одну группу и переходить к следующей. Тут очевидно надо искать ось для текущей группы полигонов или что-то вроде этого. Ну и вот когда эта ось вдруг резко меняется - значит переходим к созданию следующей группы. А то что получившиеся мешы будут незакрытыми как минимум с двух сторон не представляет никакой проблемы, я вчера написал автозакрыватель брашей, очень простой и эффективный алгоритм, который работает во всех случаях.
Добавлено 17-03-2023 в 15:33:
Перечитал и понял, что наихудший кейс - это трубы, внутри которых можно бегать. Они отправятся в мировую геометрию, детальными их сделать, увы не получится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Возможен ли будет стол из единой мадельки, под который можно залезть?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот рандом-тайлинг текстур в КсашНТ оживет или это сущая глупость?
Ну его здесь пользователь может сам оживить - через шейдер и многослойную текстуру. Причём даже на уже выложенной демке.
Единственное, надо будет придумать какой-нибудь seed.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так ну штожы, моё мини-исследование подходит к своему логическому завершению, в принципе всё что я хотел узнать - я узнал. Результатами с вами поделюсь позже, когда всё систематизирую и обдумаю.
А пока что вот вам скриншот для затравки. Радиатор отопления, разобранный на конвексные брашы. Он не прошёл сквозь CSG, потому там видно лишние детали.
Добавлено 19-03-2023 в 13:41:
Строго говоря, когда этот хулл надуется по своим размерам, тут останется три браша, ну или что-то вроде этого.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это колоизация?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да, она.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что со сферой будет? И всякими изогнутыми объектами?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да со сферами как раз-таки ничего - сфера-то конвексная.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, подведу итоги моего мини-исследования:
1. В принципе превращать полигональную геометрию в брашы можно и даже без критичных артефактов.
2. На сравнительно больших (но по меркам Сталкера игрушечных) картах, только лишь на генерацию брашей для одного хулла уходит чертовски много времени. Это без учёта работы CSG и построения BSP. Скажем на testers_mp_factory это заняло более часа. И вероятно еще пару часов считал бы CSG, а потом BSP строился ещё пару часов. А потом был бы ещё долгий поиск возможных путей для навигации. Проблема здесь конечно не в том, что долго, а в том, что алгоритм разбит на слишком большое кол-во этапов, на каждом из которых накапливается ошибка. Насколько я помню даже в оригинале кутришные карты имели массу дополнительных брашей, для того чтобы навигация монстров работала боле-мене нормально. Так что нет, этот метод к сожалению не годится и неактуален в настоящее время.
3. Поскольку в BSP30 лимит всего-навсего на 65 киловертексов, это автоматически предотвращает от вставки на уровень слишком больших\детализированных моделей. А мои механизмы разбора вполне жизнеспособные, то я вполне могу имплементировать это в p2st. Собственно, он и так умеет вкомпиливать модели в карту при помощи встроенной энтити misc_model (и это будет работать на голдсорсе), однако у таких моделей не было коллизии. Теперь же с учётом накопленного опыта можно учитывать и коллизию тоже. И даже использовать достаточно грубые модели в отсечении видимости - например как тот пресловутый домик. Когда у меня появится время, я скорее всего выпущу обновление p2st с полноценной поддержкой вкомпиливания моделей в уровни. Но повторюсь, эти модели должны быть не слишком полигональными.
4. Можно замутить в Xash3D AAS-систему из Q3 (для XashNT она не годится, о чём я подробно расписал в во втором пункте). Но если бы её делал я, то не декомпилил бы карту целиком и полностью, а строил AAS прямо на основе хуллов, получая набор полигонов прямо с них. При помощи того самого визуализатора клипнодов, я бы просто добавил полигоны на уже существующее дерево, заново выполнил бы ему портализацию и рассчитал reachability. Возможно, что в p2st я тоже проделаю часть этой работы, посмотрим.
5. В процессе исследования сделал несколько интересных открытий и исправил некоторые вещи. Кое-о-чем я уже рассказал выше. Так же отремонтировал склеивалку конвексных полигонов. Это позволит более эффективно создавать поверхности для патчей в радиосити. Так что получилась неожиданная побочка - исправление для моего лайтмаппера.
6. Использовать полигональную геометрию для отсечения видимости в принципе можно, но лучше этого не делать, причины расписаны во втором пункте - слишком долго, если компилятор будет пихать такую геометрию по собственному усмотрению. К тому же с вероятностью 99% она не будет замкнутой (ради чего всё и затевалось), а значит не сможет ничего отсечь и время будет потрачено впустую. В том же сталкере некоторые домики обстраивали брашами с окнами-порталами. В принципе нечто подобное делать можно. Например модельное здание многоэтажки, у которого в каждом окне находится портал. Причём порталы тоже сделаны полигонами. И явно указано, что эту модель надо целиком добавить в построение BSP. Полагаю это будет наиболее оптимальный метод. К тому же анализатор всё равно выбросит детальные группы и добавлять их не будет. То есть - строго по желанию пользователя.
7. Для навигации монстров придётся всё же использовать автоматически расставленные ноды, но я сделаю это не так, как это сделано в сталкере, у меня есть некоторые идеи насчёт всего вот этого. И еще есть мысль, что даже для этого облака точек возможно выполнить портализацию, как если бы мы имели дело с настоящим уровнем. Только здесь будет как бы двухмерное BSP.
Добавлено 20-03-2023 в 10:05:
Да, по поводу вот этого https://hlfx.ru/forum/showthread.ph...3460#post213460 скажу отдельно.
Оно хоть и работает, но лишено практического смысла. Колоизация ведь надувается по размеру хулла, а значит все эти мелкие детали пропадут автомагически. А для точечной трассы вполне достаточно просто пропустить в дерево оригинальные полигоны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так это ж твоя лошадка? Ты лучше меня должен помнить.
Добавлено 20-03-2023 в 14:24:
Вообще они поддерживаются, если что.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Что ещё хотелось бы сказать по поводу всего вот этого?
Да, я практически не выкладывал скриншотов, но это потому что не видел ничего особенного в сделанном. Если бы какой-то результат превзошёл мои ожидания я бы обязательно поделился.
К тому же, я фактически занимался не навигацией монстров, а генерацией брашей из исходного уровня, будучи изначально настроенным скептически к этой затее. Вот как раз из-за долгого времени ожидания. Ну да не принципиально. Побочные результаты потом всё равно найдут своё применение, когда у меня будет на это время.
Чтож, пришла пора уже напрямую заняться AI, точнее построением навигационного графа. Я ставил свои опыты в компиляторе уровней, но видимо это неразумно и стоит его вынести в отдельную утилиту.
Утилита будет называться aigraph.exe. Ну и да, запускать её можно будет как до рассчёта освещения так и после (или даже вместо).
Я абсолютно ничего не знаю о построении графов, ну только про алгоритм A* кое-что слышал. Но идти привычным путём не хочу. Я вам уже выше приводил пример сколько проблем влечёт тупая автоматическая генерация нодов. Попробую сделать по своему. Поскольку тема для меня новая, то любой результат скорее всего будет представлять какой-то интерес, поэтому постараюсь выкладывать скриншоты и сопровождение к ним в телеграм-канале. Вообще мне представляется, что генерация навигационного графа куда проще чем написание лайтмаппера, но посмотрим.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
может натолкнет на кое какие мысли
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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-2023 в 11:33:
Я исхожу из того, что трасса в игре и трасса в компиляторе навигации должна быть идентичной. Мы же вычисляем в оффлайне всё то, что можно проделать в реалтайме, но не нужно. т.к. можно рассчитать предварительно.
Эх, опять куча подготовительной работы, загрузи то, загрузи это.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Для начала надо загрузить колоизацию, которую рассчитал makebsp.
Когда у нас есть колоизация, то мы можем вытворять разные интересные штуки (в штанах).
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Мне кажется что навмеш вообще сомнительная фигня. Он слишком избыточен на больших дистанциях, где этого не требуется, а на вблизи наоборот очень грубый где наоборот требуется большая точность. Кажется что для поиска по всей карте достаточно использовать обычные точечные ноды которые просто показывают нам что они друг друга видят, что то вроде регулярной сетки лайтгрида (это можно использовать и для летающих нпц), а вот в области видимости нпц уже строить в реальном времени детальную сетку навигации включая динамические объекты. Причем с дистанцией можно детализацию этой сетки уменьшать.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
У регулярной сетки есть один большой минус - она иногда промахивается мимо дверных проёмов и прочих узких мест. Подгонять геометрию под сетку тоже весьма сомнительное дело.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я поначалу превращал ячейки навмеша в полигоны, полигоны в брашы, брашы записывал в карту, а карту смотрел в кварке, но во первых эти самые карты могли легко достигать полгигабайта в размерах и кварк их очень долго открывает (но всё-таки открывает), а во вторых (и это главное), смотреть на навмеш в сферическом ваккууме удобно лишь до поры до времени, а потом всё-же хочется оценить его в совокупности с препятствиями. Первые эксперименты в картинках:
Добавлено 23-03-2023 в 19:58:
У вас разумеется возникнет вопрос, почему навмеш залазит под солиды, отвечу - потому что никакого тестирования на солиды в построении этого навмеша ещё не участвовало. Выброшены только ячейки, которые не смогли получить нормальный размер 32х32.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Интересно как оно отработает на склонах, на том же грасстресте
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Склоны не проблема, проблема не попадание в ячейки регулярной сетки. По крайней мере в текущей принятой концепции. Да и пока оно никак не работает, я просто меш строю и визуализирую его.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Zbot используют вроде навмеши или навзоны. Отлично бегают. Эти боты еще используются в л4д и ксго. И код есть. Совместить бы их вейпоинты с хл монстрами...
__________________
Мой мод на Xash
Моя основная задача - это построение самого навмеша. Может показаться, что это просто полигоны, но в действительности он состоит из сотен тысяч квадратиков, размером точно с хулл игрока\монстра. При сохранении в карту я просто эти квадратики объединяю обратно, т.к. для визуализации это не нужно. А как он будет представлен в итоге, я ещё не решил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сейчас самое главное - построить непрерывный меш, чтобы монстр мог везде ходить. А способов его оптимизации много и они особой проблемы не представляют. Сложность же заключается в том, что навмеш генерируется из произвольной геометрии. Из брашей было бы не в пример проще.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
крайне желательно нарезать эту геометрию на квадратные патчи. Каждый патч по размеру хулла монстра, чтобы можно было точно проверить куда он может шагать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подведу некоторые промежуточные итоги. Всё нижесказанное я пишу исходя из главных допущений при построении ai-карты - никаких ручных правок, мы хотим чтобы компилятор нам самостоятельно всё посчитал. Мы же к примеру лайтмапу не дорисовываем, если компилятор ошибся. Так оно и здесь должно быть. Да, задачка не слишком простая, но решаемая.
1. В сталкере (впрочем как и практически везде) не было нормальной трассы по форме объекта и тем более трассы произвольной формой объекта, а не только bbox. Последний там как-раз бы, но не использовался. Видимо применение bbox test в сочетании с регулярной сеткой приводило к большому кол-ву мёртвых зон. Поэтому там трасса только точечная используется. Что приводит к необходимости ручного редактирования всего этого дела.
2. AAS для уровней из произвольной геометрии не годится. Максимум уровень первой-второй кваки (он собственно для них и делался, а потом его кое-как натянули на Q3 и D3). Там приходится слишком многое окружать специальными брашами, чтобы монстр не попал в плохие места. К тому же там AI очень сильно завязан на предрассчёты и специальные контентсы.
На полигональных уровнях всё это нормально работать не будет. Ну или будет очень-очень долго считаться и не факт, что коллизия получится нормальной для всех случаев. Мелкие полигоны, сами знаете, провоцируют щели и прочие ошибки точности.
3. Навмешы подошли бы лучше, но у них есть проблема. Ступеньки! В идеале навмеш должен быть непрерывным, чтобы монстр мог бежать придерживаясь его внутреннего объема. Ступенька - это разрыв в навмеше. Ладно, если бы все лестницы были прямые, то можно было бы аппроксимировать их пологим подъемом. На практике лестницы бывают и витые и с разным шагом ступенек. То есть тут какая-то ручная правка всё равно потребуется. Ручная правка означает, что навмеш частично приходит из исходника. Это ничем не лучше клипбрашей, которыми в халфе обстраивают модели, иммитируя коллизию. Модель поменялась, клипбраш остался прежний, коллизия не совпадает. В Метро Эксодус был забавный ляп, ну все наверное помнят - на карте "Поволжье" бандюки бегали по воздуху. Вот как раз геометрия поменялась, а навмеш старый остался. Не вариант.
4. Остаются только ноды-точки. У каждой точки должна быть связь с другой точкой. И у каждой связи должна быть специальная подсказка для кода WalkMove или чего-то подобного. А именно - что представляет собою следующая нода. Ну навскидку как это могло бы выглядеть:
0. move stop - стена
1. move normal - обычный шаг
2. move step up - ступенька вверх
3. move step down - ступенька вниз
4. move fall - падение с высоты (обратная связь разорвана и покажет move stop)
5. jump to water - следующий шаг приведёт к падению в воду
6. jump from water - следующий шаг это waterjump
Возможно ещё какие-то ситуации упустил, но в целом примерно так.
И подобные подсказки избавляют нас от кучи лишних проверок на самом деле. AI надо будет лишь убедиться, что путь не перекрыт каким-то динамическим объектом. Локальные сетки так же могут присутствовать на моделях, встроенных в карту. Чтобы монстр, например мог ходить по вагончику поезда или чему-то подобному.
Ну и самое любопытное - в эти сетки можно инжектировать позиции точечных энтить и отсекать все те части, которые оказались недосягаемыми, подобно тому, как портализация убирает все внешние части геометрии.
Единственный момент - построение оптимального графа сквозь путешествие через пол-карты может быть не столь быстрым, однако это не критично, поскольку монстры так далеко не заглядывают. Обычно это в случае получения нового задания - например пробежать по скрипту в указанную точку или найти укрытие. А в обычных состояниях они довольствуются локальным шагом на размер хулла и эта сетка идеально поможет им ориентироваться в пространстве.
ЗЫ. я тут уже три версии построения навигации опробовал. Напоминает разработку лайтмаппера, тот тоже менялся раз 15, пока я не нащупал наиболее оптимальный путь. Впрочем и с компилятором уровней было так же и с разработкой собственного языка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Идеи для построения путей навигации неожиданно нашли применение в лайтмаппере. У меня там оставалась одна нерешённая проблема с генерацией патчей для радиосити. И вот я внезапно додумался как решить её красиво и эффективно. И удивился, почему эта идея мне раньше не приходила в голову. Поясню в чём была проблема:
Когда у нас брашевая геометрия, обработанная CSG, лайтмаппер работает в идеальных условиях. Когда у нас произвольная полигональная геометрия, условия уже далеко не такие идеальные. К тому же с модельной геометрией делать как правило ничего нельзя. Сквозь CSG её не пропустишь, рубить нежелательно. К тому же там много кривых поверхностей. Наложить лайтмапу в таких условиях проблематично но вполне реально. А вот нарубить эти поверхности на регулярную симметричную сетку уже гораздо труднее. Раньше я действовал просто - пытался объединить все треугольники лежащие на одной плоскости, а затем рубил геометрию на квадарты-патчи с заданным шагом. Процентов 40 патчей при этом оставалось состоять из двух-трёх кусков. А каждый патч генерирует собственные трансферы и потребление памяти растёт экспоненциально.
И тут мне в голову пришла здравая мысль - надо попытаться смержить уже нарубленные патчи! Зная длину ребра довольно просто проверить две ситуации:
1. В результате объединения получился квадратный патч с нужной стороной ребра
2. В результате объединения получился еще не квадратный патч, но аксиальные стороны ребра у него подходящие и он скоро будет достроен до квадрата. Чтобы объединение происходило веселее, я поместил кусочки патчей в AABB-дерево. В данном случае дерево использовалось не для поиска. а для сортировки. На каждой ноде скопились именно те кусочки, которые и надо было объединить. Мне осталось линейно пробежаться по нодам (ну или обработать каждую ноду в отдельном потоке) и доклеить разобранные патчи. Экономия в результате оптимизации составила до 40%! Второй позитивный момент заключался в том, что раньше я выбрасывал сверхмалые патчи, из-за чего потенциально менялась общая яркость светопереноса и приходилось нормализовывать излучающий свет. Сейчас я ничего не выбрасываю, поскольку велик шанс, что эти мелкие кусочки в процессе склейки достроятся до квадратного патча. Получился стабильный и прозрачный алгоритм, который в любых условиях должен хорошо себя проявить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чтож, возвращаюсь к генерации навигационных путей. Поскольку нодов адски много надо разработать эффективный дисковый формат для их хранения. Подобный формат предполагает различные допущения.
Я выбрал следующие:
Максимальный размер уровня, который может быть покрыт нодами +\-98304 юнита. Т.е. квадрат ~2.4 километра.
Минимальный размер хулла (по любому измерению) составляет 24 юнита.
Это с запасом, т.к. в халфе например минимальный размер хулла - 36 юнитов (+\- 16). Меньше делать смысла нет, да и этот хулл, как вы понимаете, смогут использовать все, кто меньше по размерам. Уж если персонаж проходит, то и тараканы, мышы, крысы тоже пролезут. Вероятно понадобится еще один хулл - для больших персонажей. Сама система предусматривает наличие нескольких Ai-хуллов для каждой модели уровня. По аналогии с клипнодами.
И точно так же некоторых хуллов может и не быть вовсе.
__________________
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-03-2023 в 15:07:
Исходя из накопленной информации, обычно нужно не более двух хуллов на уровень: хулл персонажа-хумана и хулл крупного монстра.
Кстати в халфе тот факт, что мелкая живность боится яркого света - не случаен. Потому что они в качестве навигации как раз и используют яркость света и стремятся найти тёмный угол. Они же не по нодам бегают.
Это просто кто-то очень удачно предложил и оно совпало с реальным поведением.
Добавлено 28-03-2023 в 15:08:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Там тараканы еще в мясину лукапят.
Согласно новой концепции, вот такая вот сетка из нодов у меня получилась.
Пустые места - это те, где ноды создать по каким-то причинам не удалось, учитывая, что изначально они генерятся из реальной геометрии, а геометрия может быть порезана как угодно. Но ничего страшного. В дальнейшем я полагаю эти точки можно будет восстановить. У нас же сетка!
А зная шаг и уклон, можно попробовать экстраполировать недостающие ячейки. Я долго с этим маялся и в конечном итоге пришёл к выводу, что экстраполяция в данном случае будет надёжнее, чем собирать их из осколков реальной геометрии (с учётом того, что я и так это делаю).
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот, если кому интересна более сложная геометрия:
Время рассчётов - менее секунды. Правда здесь пока ещё трассировка не выполняется.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот еще более большая карта. Тут эта сетка уже 12 секунд считается.
Добавлено 29-03-2023 в 15:02:
Ну впрочем, понятно, что большая часть этой сетки может быть удалена за ненадобностью. И не просто удалена, а удалена автоматически.
Используя всё тот же старый добрый метод портализации.
Добавлено 29-03-2023 в 15:03:
Чтож, теперь, эта сетка - всего лишь предварительные данные. Теперь, собственно, предстоит рассчитать настоящий граф, которым будут пользоваться монстры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я так вижу с наклонными поверхностями оно выглядит не очень, но в целом результат наверное не хуже чем в сталкере
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я целенаправленно удаляю ячейки, которые не смогли склеиться в квадратик. А не смогли они потому что там было секущее ребро треугольника. Попробую их реконструировать и посмотрю что из этого получится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В сталкере любопытно устроено - там, как я уже и говорил надо несколько нодов поставить на реальную геометрию руками. А дальше от них во все стороны как бы разрастётся сетка. Мне это не нужно - т.к. у меня сетка из реальной геометрии генерится, процентов на 60 наверное. Но дальше - тот же самый метод - генерация недостающих нодов.
Интересное кино, конечно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Склеил уже существующие ноды между собой в отладочных целях.
Отладочную текстурку попятил из сталкера, надеюсь вы меня за это не осудите
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему на относительно ровной поверхности, он генерирует какой то шум?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Потому что поверхность наклонная, а симулятор ходьбы ещё не написан.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хоть и наклонная но плоскость. Почему шум то? Вон в верхней части у тебя вся плоскость покрылась нодами, а ровно в одном месте отсустсвует квадратик, чем это место отличается от остальных на этой плоскости?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Потому что на том месте были секущие рёбра и раздолбали квадратик на столько частей, что он обратно не смог склеиться. Да это ерунда в сущности, сколько их там смогло поставиться. Главное чтобы на каждой изолированной поверхности хоть одна штука была. А это требование вполне соблюдается.
Добавлено 31-03-2023 в 14:49:
Они же потом дальше расползутся как тараканы.
Добавлено 31-03-2023 в 14:51:
ЗЫ. Если бы я генерировал ноды на брашевой геометрии, то поставились бы все, естественно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
К сожалению, автоматическая генерация нодов на поверхностях, это хоть и быстрый и надёжный, но несостоятельный подход. Он был бы идеален на брашевой геометрии, прошедшей CSG-процессинг, и удаление всех невидимых поверхностей. Но на модельной геометрии эта штука попросту генерит ноды в таких местах, куда никто попасть не сможет. И удалять эти лишние ноды потом крайне затруднительно. То есть получится множество островков, не связанных между собой, и каждый на свой рассчёт займет время. А потом эти островки будут всё равно удалены. То есть произведена бессмысленная работа, по факту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша то есть наиболее оптимальным всё равно является расставление клип-брашей поверх моделек?
__________________
-Brain is dead-
KiQ не, клипхуллы я вам нагенерю. Я говорил именно про составление навигационного графа. Представь ситуацию, что часть модели вдвинули в землю и там тоже создались ноды. Они не нужны, их потом удалять придётся.
Т.е. бессмысленная работа была проделана.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот для халфовских уровней, получается что-то такое.
С полигональными всё сложнее, хотя и там результаты неплохие.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Комнату с костюмом пропустило, и место где Барник стоит тоже. Что то совсем уж детские болячки у такого подхода.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ИДЕАЛЬНО!!!
Давно не было, чтобы я был прямо вот так вот доволен, но здесь именно тот самый случай. В моушен-симуляторе есть несколько очевидных трудностей, связанных с тем, что под ногами у монстра может быть какая угодно геометрия и мы должны просто и надёжно определить, что там такое, а в некоторых случаях - апрроксимировать её. Какие трудности нам могут встретится?
1. Это конечно же обрыв. Из-за того что сетка регулярная, хулл монстра, может зацепить её краешком, но монстр фактически парящий над пропастью - это некрасиво. И тем более, если подобная сетка была рассчитана в оффлайне.
2. Полигональный мусор. Самый простой пример полигонального мусора - костры в сталкере. Разумеется можно каждый костёр окружить func_mosnterclip, но как вы понимаете - это не наш метод. Да и зачем, если эта задачка решается чисто аналитическими методами.
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'
Выглядит так уютно, что уже хочется обвести Фримена рамочкой и отправить обшаривать шкафчики! Здорово!
Чтож, система получилась сверх-чувствительной к полигональному мусору, это именно то, что надо. Даже если монстр будет игнорировать мировую геометрию для навигации, ничего хорошего в том, что он полезет прямо в нагромождение полигонов - нету. Однако в том же сталкере довольно много такого мусора, типа маленького камушка, который тоже детектируется и нода туда не ставится. Такие мелкие вещи, я полагаю стоит игнорить.
Впрочем надо будет всё же попробовать взять колоизацию из оригинальных карт, её там ручками делали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сетка на кордоне. Расползлась от единственной ноды под info_player_start и осталась точно в границах, очерченных колючей проволокой.
14 мегабайт занимают эти ноды. В принципе немного.
Осталось проверить две вещи: как будет строиться сетка, если взять коллизию из оригинальных карт сталкера (её там руками сглаживали) и проверить как всё это строится на карте ai_test из Lost Alpha, которая специально была сделана для тестирования навигации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
С ходячими монстрами понятно, а как дела с летающими и плавающими?
В анриле там просто ставишь навмеш на весь уровень потом идет генерация пару сек и забываешь об этом ) Летающие летают, а ходячие ходит )
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Ну вот тут возникает уже много вопросов:
1. почему вокруг аксиальных препятствий возникли такие неровные вырезы. Это похоже работу солвера комплексных чисел, типа Eigen.
2. Зачем наверху препятствий остались маленькие островки навмешей.
3. Как эти островки соединятся с основным навмешем?
Принцип работы я понимаю, алгоритм тоже, мои первые опыты по генерации навмеша примерно так и выглядели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Меня в навмешах более всего интерисует вопрос, как там пути находятся.
Возможно аналитической трассировкой внутри самого навмеша, но навскидку я ничего не придумал.
Добавлено 10-04-2023 в 13:28:
Или, учитывая, что навмешей может быть множество - как строится путь от одного края карты до другого, если на этом пути - сотня не связанных друг с другом навмешей.
Ну то есть вот мы дали команду монстру бежать к черту на рага, как он это выполнит? Есть примеры?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ты можешь на уровне поставить один NavMeshBoundsVolume на весь уровень или можешь их хоть 500 понаставить и все они автоматом будет работать, как один. Я не пробовал, но думаю, если монстру дать команду бежать с одного края карты на другой и при этом навмеш будет только на половине карты, то он до туда добежит и остановиться. Если же навмеш есть везде и путей прохода несколько к концу карты, то монстр может выбрать любой и побежит ) Еще много зависит, что прописано в коде АИ на то или иное действие )
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
опиши подробнее структуру этого формата
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Бинарный формат однозначно. Его парсить быстрее.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, ну чтож, навскидку могу обозначить следующие принятые решения:
1. формат исходников будет бинарным
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'
Дядя Миша
Посмотри в сторону json он легко парсится даже на обычных крестах и при этом вроде как имеет как бинарное так и текстовые варианты представления. И довольно быстро работает в обоих вариантах. Зачем придумывать велосипеды, к тому же ни с чем не совместимые? К тому же универсальность Жсонов позволяет их использовать так же и для других вещей такие как сейвы и конфиги.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
SNMetamorph
__________________
Xash3D FWGS форк
Вообщем пока решил всё же сделать текстовый формат исходников.
Как раз с неймспейсами.
Добавлено 15-04-2023 в 08:34:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подведу небольшие итоги:
1. Формат описания исходников карт всё же будет текстовый.
2. Формат будет универсальный, абстрактный, позволяющий его легко расширять до бесконечности.
3. Формат с прямой и обратной совместимостью, т.е. если встретятся незнакомые описания, парсер их просто пропустит.
4. Формат иерархический вложенный, базируется на двух ключевых конструкциях:
- токенах, начинающися с решётки #, как директива препроцессору
- ключевых словах без решётки, обозначающих именованную секцию фигурных скобок. Имя каждой такой секции оканчивается на "Def", хотя будущим стандартом это и не регламентируется.
Подобная схема уже отлично себя зарекомендовала в файле настройек для компилятора уровней и в описании материалов (тоже абстрактная универсальная система). Пример простейшего map-файла:
1 | #version 1.0 |
2 |
3 | EntityDef |
4 | { |
5 | "classname" "worldspawn" |
6 | "message" "Test Level" |
7 |
8 | ConvexDef |
9 | { |
10 | "flags" "C_SOLID" |
11 | "id" "0" |
12 | "group" "0" |
13 |
14 | SideDef |
15 | { |
16 | "material" "AAATRIGGER" |
17 | "plane" "0 0 1 1000" |
18 | "uaxis" "1 0 0" |
19 | "vaxis" "0 1 0" |
20 | "id" "0" |
21 | "group" "0" |
22 | } |
23 | SideDef |
24 | { |
25 | "material" "AAATRIGGER" |
26 | "plane" "0 0 -1 1010" |
27 | "uaxis" "1 0 0" |
28 | "vaxis" "0 1 0" |
29 | "id" "0" |
30 | "group" "0" |
31 | } |
32 | SideDef |
33 | { |
34 | "material" "AAATRIGGER" |
35 | "plane" "0 1 0 1000" |
36 | "uaxis" "1 0 0" |
37 | "vaxis" "0 1 0" |
38 | "id" "0" |
39 | "group" "0" |
40 | } |
41 | SideDef |
42 | { |
43 | "material" "AAATRIGGER" |
44 | "plane" "0 -1 0 1010" |
45 | "uaxis" "1 0 0" |
46 | "vaxis" "0 1 0" |
47 | "id" "0" |
48 | "group" "0" |
49 | } |
50 | SideDef |
51 | { |
52 | "material" "AAATRIGGER" |
53 | "plane" "1 0 0 1000" |
54 | "uaxis" "1 0 0" |
55 | "vaxis" "0 1 0" |
56 | "id" "0" |
57 | "group" "0" |
58 | } |
59 | SideDef |
60 | { |
61 | "material" "AAATRIGGER" |
62 | "plane" "-1 0 0 1010" |
63 | "uaxis" "1 0 0" |
64 | "vaxis" "0 1 0" |
65 | "id" "0" |
66 | "group" "0" |
67 | } |
68 | } |
69 | } |
70 |
71 | EntityDef |
72 | { |
73 | "classname" "info_player_start" |
74 | "origin" "0 0 64" |
75 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
интересно, а как отличить "material" и "AAATRIGGER" где параметр, а где его значение? только по очереди?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
так можно просто запятую поставить:
"material" "AAATRIGGER",
"plane" "0 0 1 1000",
"uaxis" "1 0 0",
"vaxis" "0 1 0",
"id" "0",
"group" "0"
Тогда сразу будет понятно какое поле битое. Можно будет вывести в консоль сразу номер строки. Зачем усложнять отладку?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Никакие запятые там нахрен не нужны.
Если соответствующий ключ не будет найден, он просто скипнется и работоспособность будет восстановлена, начиная со следующего ключа.
Это само-восстанавливающийся формат данных, если ты не знал.
Добавлено 17-04-2023 в 15:12:
Вот как раз наличие запятых и усложнит отладку и замедлит парсинг.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В телеграме выложил серию постов, отчёты о проделанной работе и о том, что предстоит сделать в ближайшее время. Ну а здесь хочу просто немного порассуждать на тему того, что является самым сложным в разработке, даже не софта, а как в моём случае - полноценной экосистемы.
Так уж получилось, что сейчас все увлекаются эко-системами. Какой-то изолированный программный продукт никого не удивляет и мало кому нужен.
Вот и XashNT разрабатывается как эко-система для разработки игр.
Изначально в 2019-м году я такой задачи перед собой не ставил, но в процессе дело приобрело невиданный размах и общественную значимость.
Так вот самое сложное, на мой взгляд - это определить границы экосистемы, а значит и ответственности. С одной стороны, заложенный потенциал, позволит всему этому разрастаться ещё достаточно долго если(тут следует перечисление всех возможных сценариев развития событий). Но исходя из пессимистичного варианта (я по прежнему продолжаю работу над движком в гордом одиночестве), границы моей ответственности будут ограничены редактором и созданием полноценного work-flow в будущем.
Это означает, что в идеале для разработки на XashNT не понадобятся никакие сторонние редакторы. Но конечно такое состояние будет достигнуто далеко не сразу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Здесь я в основном пишу отвлечённые мысли, когда есть что писать.
а в телеграме - конкретику.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сорян вот правильная ссылка
https://environment.data.gov.uk/Def...es&Mode=spatial
В рамках написания универсального конвертора-мигратора со старых игр на XashNT, наконец-то дошли руки до обещанного декомпилятора уровней из халфы\кваки. Что тут можно сказать:
1. Информации, которая хранится в Q1BSP\HLBSP недостаточно для полноценной реконструкции брашей. Я не могу извлечь эту информацию из дерева, потому что соответствующие ветки дерева помечены как outside и обрублены ещё на этапе компиляции. Они все просто ссылаются на common outside leaf.
2. Тем не менее, учитывая вышесказанное, можно создать гигантский куб, по размеру всей модели и пропустить его сквозь дерево, нарубив внутренности на конвексные брашы. У такого подхода две очевидных проблемы:
- результат декомпиляции, запечённый в куб практически не подлежит дальнейшему редактированию.
- текстурные координаты для сурфейсов при таком подходе ищутся перебором примерно подходящих и в большинстве случаев оканчиваются фейлом. Нет хорошего способа наложить текстурные координаты на получившиеся брашы. Если не путаю, то BSPc вообще их не накладывает.
3. Таким образом декомпиляция по методу, описанному во втором пункте не годится - мы же хотим чтобы карту можно было ещё и редактировать в дальнейшем. Был ещё один декомпилятор под названием BSPTwoMap. Он на первый взгляд давал куда более лучшие результаты, но на самом деле просто превращал каждый полигон в отдельный браш. Т.е. максимально тупой способ.
4. Учитывая всё вышесказанное, надо было придумать что-то иное. Раз уж внешние стены всё равно до брашей не восстановишь, то их можно превратить в тонкие брашы, достроив недостающее. И в то же время, там где сторон достаточно для полноценной реконструкции - создавать настоящие браши. Именно такой подход я и принял за основу своего декомпилятора. Однако меня ждала весьма неожиданная и непреодолимая засада.
5. Дело в том, что перед тем, как уложить фейсы на ноду, компилятор их рубит на квадратики, согласно размерам их лайтмапы. Как легко догадаться, отличить сурфейс, разрубленный секущей плоскостью ноды, от сурфейса, разделённого субдивайдером на квадартики нет даже теоретической возможности. Казалось бы, ну и что такого? Надо просто смержить все сурфейсы да и всё. Но как раз тут нас и подстерегает вышеупомянутая засада:
6. Излишний мержинг убивает валидные стороны брашей! Т.е. если где-то были два браша у которых была планарная верхушка, существует очень высокая вероятность что эти две стороны смержатся в одну и там где могло бы получится два симпатичных замкнутых браша, получится 12 брашей из их сторон. Я бы не сказал, что эта ситуация возникает абсолютно всегда. Я больше скажу - брашей подлежащих полноценной реконструкции практически на всех картах удивительно мало, но оно и понятно. Ведь BSP в первую очередь задаёт геометрию, а детализации там весьма мало. Вот и получается что на какую-нибудь халфовскую карту приходится от силы 50-60 брашей, которые можно реконструировать. А всё остальное превращается в новые брашы из одной-единственной стороны. Т.е. это такой компромиссный вариант между BSPc и BSPTwoMap.
7. Теоретически в дальнейшем мне в голову придут какие-то новые идеи насчёт всего этого. Но пока - вот так.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В NT будут триггеры которые могут регистрировать высокоскоростные объекты?
Crystallize да, конечно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
сначало может от сабдивайд избавиться, вычистив разбиение и даже если вручную разбито мапером это тоже почиститься заодно. чистка на основе названия текстуры и текстурных координат и положения полигона в пространстве и общих вершин. получатся такие сложные многовершинные полигоны.
потом их уже разбить и превратить в обычные примитивы браши. этот результат вычесть от изначальной карты, останется много или мало кусков не распарсеной архитектуры. каждый из кусков превратить в модельку, за одно и ббокс подсчитать и впендюрить его к примитивам брашем, чтобы можно сходу карту скомпилить.
__________________
vk.com/skullcapstudios
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Кстати, а как работает сорсовский декомпил? Он строит браши на порядок качественнее чем голдсорсовский.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Просто проверка пересечений с триггером как и с любой другой геометрией.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Хм, но это же как будто тоже что и раньше. Тогда как же детектируется скоростной объект который раньше не ловился?
Раньше триггер детектировал столкновение только когда объект проделывал путь за кадр. Т.е. движение на шаг, новая позиция, проверка на попадание в триггер. Сейчас же триггеры ловятся на всём пути этого движения.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то дошли руки до важнейшей вещи. Честно говоря не знаю, может быть во всех современных играх оно давно уже именно так и сделано, а может быть и нет. Речь идёт о наших любимых разрешениях экрана, конечно же. В старых играх эти разрешения были намертво вкомпилены прямо в код игрового движка, а игроку предлагалось выбрать разрешение самостоятельно. Ну или при первом запуске игра могла сама сделать это за него, ориентируясь на разрешение рабочего стола.
Основная проблема была в том, что можно было выбрать неверное разрешение и даже спалить некоторые модели мониторов таким образом.
Или же получить от кого-то игру с конфигом для одного монитора, запустить на своём компьютере и получить Out Of Range или нечто подобное.
Тут конечно уместно спросить - почему бы не получить список доступных разрешений монитора прямо из системы? А очень просто. Дело в том, что исторически, до появления DVI и тем более HDMI не существовало никакого способа узнать какие же разрешения поддерживает тот или иной монитор. Вы наверное помните, что года до 2002-го к мониторам прикладывали диск с драйвером и инструкцией в PDF. Так вот драйвер по сути был текстовым inf-файлом, который содержал только и исключительно список поддерживаемых монитором расширений, ну и его оригинальное название. А больше он не делал ничего. Потом впоследствии конечно эти драйвера стали встраиваться прямо в дистрибутив Windows самим Микрософтом, а интерфейсы DVI и HDMI позволяли получить список поддерживаемых режимов путём чтения микросхемы EDID на матрице.
Для тех кто не в курсе, поясню, что эта микросхема - аналог текстового драйвера, только в аппаратном исполнении и просто припаяна на саму матрицу. Т.е. путём перепрошивки туда можно записать любую пургу, хотя это конечно сложнее, чем редактирование inf-файла. Ну так вот. Все эти способы, так или иначе не дают надёжного определения рабочего разрешения. Поэтому я сделал следующие допущения:
1. LCD и AMOLED матрицы имеют только одно-единственное рабочее разрешение. Да, они могут работать в меньших, но в отличие от CRT, картинка будет мыльной и просто отвратительной. Поэтому данные режимы никто никогда не использует, а современные винды неплохо научились определять то самое дефолтное разрешение.
2. Эксперименты с максимально поддерживаемым разрешение и максимально поддерживаемой частотой экрана гораздо лучше и надёжнее ставить в свойствах системы, а не внутри какой-то игры. Игра зависнет и вам придётся собрать всю пыль с кнопки Reset.
3. Поэтому мы можем с уверенностью предполагать, что разрешение и частота обновления на рабочем столе - это единственное валидное разрешение полного экрана. Таким образом игра для полного экрана сможет использовать именно его и только его.
4. Разрешения которые нам вернул EnumDisplayModes с учётом того, что там много дубликатов и мусора мы можем пропустить сквозь фильтр разрешения десктопа. Очевидно что оконные разрешения не могут превосходить полноэкранное ни по какому из измерений и тем более не могут превосходить частоту кадровой или отличаться по битности.
Таким образом у нас всегда формируется список из актуальных и безопасных разрешений экрана.
5. И горячее сочетание Alt+Enter запоминает размер оконного режима - эта штука в старом ксаше так и не работала нормально.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
>> Основная проблема была в том, что можно было выбрать неверное разрешение и даже спалить некоторые модели мониторов таким образом.
Или же получить от кого-то игру с конфигом для одного монитора, запустить на своём компьютере и получить Out Of Range или нечто подобное.
Эта проблема решается сбросом разрешения на то что у пользователя при первом запуске. Например если эта запись не найдена в реестре или конфиге.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А не смотрел как этот механизм реализован в Унигине/Крайенгине/Анриле?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Нет не смотрел. Скорее всего вариации на аналогичную тему.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я надеюсь будет побежден тот баг когда в оконном режиме в меню Xash3d нажимались не те элементы меню что под видимым курсором, а другие чуть в стороне.
Там теперь и меню совершенно другое. Ничего общего со старым.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Borderless windowed режим нужен. В fwgs его тоже до сих пор нет. Не один я о нем прошу, он очень удобен.
__________________
Мой мод на Xash
Главное удобство от borderless - сообщения из телеги не мерцают, да.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Новый ксаш - он не про вау-эффекты, которые можно показать на картинках или видео. Хотя конечно со временем и таковые появятся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
(_-=ZhekA=-_) Так всё же выложено давно о_О
Добавлено 09-08-2023 в 21:43:
Расскажи чем вообще занимался по движку в эти месяцы? С того поста в тг немало времени прошло.
Вкратце - планирую собрать нечто вроде первой играбельной демки - порта первого квейка. Сам по себе он конечно не представляет интереса, но мне это нужно, чтобы протестировать все подсистемы движка в рабочем режиме и убедиться, что всё функционирует.
На следующий год планируется написание редактора ну и дальше будет только эволюционное обновление без нарушения совместимости.
На движке уже можно будет делать собственные игры.
Добавлено 09-08-2023 в 18:06:
Из действительно масштабных задач осталось три:
1. разработка сетевой подсистемы движка и её увязка с архитектурой движка и виртуальной машиной.
2. Завершение портирования библиотеки VCL на Shot
3. Разработка собственного редактора (собственно ключевые компоненты редактора, это как раз портированная библиотека VCL и мой язык).
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ты там кстати вкурсе кстати что первый квейк обновили ? Добавили новые компании и прочие плюшки.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Дык это. Все силы уходят на то, чтобы радоваться обилию крутых фичей. А как нарадуешься текущим - появляются новые. Когда тут игру делать?
__________________
Один из наших форумчан уже третью или четвертую игру на GZDoom сделал при этом. В котором нет ни блюпринтов ни предпросмотра уровней. И даже не бегал за мной и не рассказывал как там всё круто "просто берёшь и делаешь как тебе нужно всё что угодно". А вот игру - таки сделал и не одну.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
SNMetamorph
Старая версия одного готовых из конфигураторов лежит тут, можно скачать и по юзать
https://hlfx.ru/forum/showthread.php?s=&threadid=5828
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Мимо крокодил, работая под ксашем.
Я делаю свой мод под Праймом,и ксашем который обновляют.
У ксаша есть своя аудитория, именно из игроков, и она огромная, и вкатиться туда вполне себе хороший кейс, чем очередная поделка от ноунейма на анриле/юните которого никто не знает.
Теперь почему я выбрал ксаш. Он простой. Буквально. Даже не смотря на всякие плюшки типо вьюпорта на анриле и блюпринт там, в ксаше все еще удобнее делать многие вещи, исходя из кол-ва человекочасов. Так же не смотря, на какие-то анальные ограничения, которые были введённые ради хз чего, их можно обойти, код довольно понятен даже для нуба, а уж про портирование контента я уж молчу. Именно ассеты перетягивать на ксаш под праймом, проще простого, ДАЖЕ НЕ СМОТРЯ на то, что начинал с инструментов которые работают из под консоли, без минимального интерфейса.
В данный момент у ксаша много проблем, но в сравнении с теми проблемами, что есть у других движков, это чепуха. Субъективное мнение конечно же, но оно такое уж извините. У меня очень сильно возрос аппетит, и приходилось просить пофиксить какие-то баги, лимиты, графику и прочее подтянуть, но с той скоростью с какой это делается меня устраивает. Это все еще быстрее, чем ковырять огромные движки.
Когда я перешел на ксаш, я ожидал, что комьюнити будет более сговорчивое, и поэтому зарегистрировался тут, и очень был опечален тем, что вместо того, что уже готовое решение забросили, это странно. Потратить много времени, чтоб сделать хорошую вещь, и тут же переключится на другое, оставив все в огне, но благо есть другие люди.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
Мой сайт
Xash3D Modding Discord
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
Дядя Миша
Если тебе действительно интересно, то я тебе могу многое рассказать о 3д максе и анриле, так как я в этих двух прогах работаю
Добавлено 12-08-2023 в 00:54:
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну чтож, приступаю к реализации первой из озвученных задач - имплементации сетевой подсистемы. Сама по себе сеть на первый взгляд кажется довольно-таки простой задачей - тут байты переслал, там принял. Построил дельта-таблицы (отсортировал в них строчки, естественно), чтобы не пересылать лишнего, а только необходимое. Проинтерполировал данные с предидущими.
Как будто бы всё несложно и тиерично. Проблемы начинаются когда мы хотим предиктинг. Предиктинг базируется на физическом поведении объектов. Физическое поведение объектов мы сами задаём в пользовательском коде. Значит нам надо этот код либо два раза скопировать на клиент и сервер, либо как-то иначе вызвать из другого места, причём имея в виду, что на клиенте возможно будут недоступны некоторые вещи, которые есть на сервере (ну в теории), поскольку полная клиентская симуляция сервера, скорее всего просто затормозит работу движка и ничего не даст нам. Особенно в синглплеере.
Перед тем как выработать собственный подход к проблеме, давайте пробежимся по исходникам уже существующих движков и посмотрим в общих чертах, как оно реализовано там. Поскольку это не обзор на редакторы, я не буду заводить отдельные темы, а буду писать прямо сюда по мере штудирования.
Добавлено 12-08-2023 в 12:42:
Если кто-то вдруг не понял. Проблемы в первую очередь у конечных юзеров, которым при неудачной организации всего этого дела придётся физический код куда-то два раза дублировать. Вспоминайте как все ненавидели этот предиктинг оружий в халфе, как он глючил, как была мешанина из пушек с предиктингом и без. Я не хочу чтобы мы второй раз наступили на эти грабли.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Обзоров пока что не будет, будут общие размышления по теме.
Итак, кроме двух классических сетевых моделей, есть так же два варианта имплементации поддержки сети:
1. Сеть как архитектура
2. Сеть как сервис
Первое - это то, что мы имели удовольствие наблюдать в трёх кваках, а так же в голдсорсе и сорсе и возможно (поскольку нет исходников) в Source2.
В чём тут смысл - сетевая архитектура буквально пронизывает весь движок и заставляет его подстраиваться под нее. Это приводит к тому, что даже в сингл-плеере мы имеем два набора энтить - клиентский и серверный, причём на полном серьезе данные передаются на виртуальный клиент через заглушку (заглушка прямо там же в коде движка, в виде обычных буфферов-массивов). Т.е. по сути выполняется никому не нужная работа.
Так же, ради предиктинга приходится дублировать код физики на клиентской части, с рядом оговорок, само собой, потому что предсказать поведение тех же монстров мы не можем. Предиктинг вообще можно рассматривать как более продвинутый вариант интерполяции, который учитывает некоторые нелинейные условия. Ну например прыжок, приседание или блокировку поезда (если мы предиктим его). Т.е. в принципе предиктинг можно заменить такой простейшей проверкой, типа испускания луча по ходу движения объекта и в 70% случаев этого окажется достаточно (в Darkplaces именно так и сделано).
Единственный плюс такого подхода - для нас олдскульщиков эта модель более привычная и совершенно чётко разделяет клиент и сервер даже если физически они находятся на одной машине. А так же даёт некоторые гарантии, что всё что работало в локальном режиме будет так же работать и по сети. Правда последнее выполняется лишь с рядом оговорок.
Вторая модель - это то, что повсеместно используется сейчас. У нас нет никакого разделения на клиентские и серверные объекты. Объект у нас всегда один. Сеть подключается только когда активен мультиплеер. Всё остальное время она не оказывает никакого влияния. И соответственно не потребляет ресурсов. Для локального игрока тоже всё прозрачно и по сети не передаётся. Для остальных - считывается состояние объекта, отсылается по сети и принимается. Ну и есть две функции исполнения физики - нормальный кадр и кадр предиктинга. Реализация физики для этих двух состояний может чуть-чуть отличаться, хотя это и необязательно. Таким образом:
1. мы не тратим ресурсы на сеть в синглплеере
2. мы не траим память на дельта-секвенции
3. нам не нужно расшаривать свой код на клиентские и серверные инстанции библиотек.
Но есть одна маленькая ложка дёгтя в этом подходе. Поскольку такой сервис не нарушает целостность архитектуры ядра, его прикручивают спустя рукава в надежде, что те, кому надо - сами всё допилят или переделают. Что мы, например, имеем удовольствие наблюдать во всяких Юнити.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем, подводя итоги, что хочу сказать. Обзоры писать не буду, ибо ничего такого заслуживающего внимания найти так и не удалось.
Только общие рассуждения:
Чем меньше движок (по крайней мере в пользовательской своей части) будет выпячивать свою принадлежность к клиент-серверной архитектуре тем будет только лучше для всех. Я вам объясню принципиальную разницу в этих подходах. Те, кто привыкли кодить под халфу\кваку, знают, что вот они настроили объект и в принципе - всё. Дальше он куда-то передаётся по сети, потом рендерер его подхватывает и рисует. Повлиять на что-либо, получить какую-то обратную связь в принципе невозможно. Иметь в свойствах объекта метод Draw тем более из области фантастики. Тогда как во всех современных движках оно именно так и устроено. Объект, игровой цикл - отправка на отрисовку. Сеть в данном случае действует максимально прозрачно для всех - она по необходимости просто реплицирует объект у клиента и всё. Ну то есть понятно, что есть так же протокол соединения, но он тем более находится где-то сбоку и сами объекты никак не затрагивает.
Соответственно при такой модели есть три способа синхронизации с сервером:
1. интерполяция - если игра запущена на удалённом клиенте, физика отключается и просто ловит обновления переменных по сети.
2. Предиктинг - физика делает несколько кадров как бы в песочнице, используя для нового кадра смешанные результаты от обновлений по сети и полученных локальных вычислений. Кол-во таких кадров определяется кол-вом пришедших обновлений.
3. Полностью локальная симуляция - физика на клиенте живёт своею жизнью (но синхронно с временем сервера) и иногда мягко интерполирует значения с локальными, если они вдруг не совпадают. Т.е. грубо говоря сервер может как рассылать обновления usercmd_t для всех клиентов, так и делать полное обновление стейта. Проблема такого подхода, что возникает как бы двойной лаг, если игнорировать остальные обновления стейтов, например в целях экономии траффика. Впрочем сама модель мне вполне нравится своей гибкостью, у нее потенциально гораздо больше настроек, чем у старой.
Благодаря наличию виртуальной машины нет нужды даже вручную прописывать мета-информацию для всех полей объектов. Можно собрать списки полей в полностью автоматическом режиме. Тут тоже возможны два варианта:
1. Собираем стейты со всех полей в каждом объекте, отправляем их на клиент целиком, ориентируясь на тип переменной. Если float - передаём четыре байта, если byte - передаём один байт. Получившийся пакет сжимаем каким-нибудь простейшим архиватором, тем же LZSS. Так же заводим delta_state для каждого серверного объекта, чтобы не отправлять данные, которые не изменились. Правда тут потребуется обратная связь, скорее всего - клиент, приняв обновления, должен будет отослать на сервер подтверждения что стейт синхронизирован и только тогда кэш будет считаться валидным.
2. Для тех, у кого много свободного времени - всё как в первом варианте, но при помощи встроенных средств языка вы указываете сколько бит использовать для передачи по сети той или иной переменной и таким образом вручную оптимизируете траффик свой игры. Работа несложная, но как правило такое дико раздражает если обязательно требуется, как в той же халфе - каждый раз когда мы хотим что-то передать на клиент, приходится лезть в delta.lst и что-то там сортировать, добавлять. Никому это не нравится. Ну а когда игра полностью готова - почему бы и не оптимизировать?
Из вышесказанного, надеюсь, уже понятно, что новый ксаш будет очень сильно напоминать Unity по крайней мере той его частью с которой будут иметь дело игровые программисты. По духу, по концепции, но не по реализации!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Надеюсь будет и способ по фасту вкинуть сеть в проект
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В новом ксаше есть любопытное ограничение архитектуры: он способен рисовать только модели и больше ничего, кроме моделей.
Ну то есть как. Он может рисовать конечно буквы в меню или отладочные линии-полигоны, но штатная отрисовка универсального конвейера заточена только и исключительно под модели. Поясню почему так получилось:
Всё дело в системе материалов. Каждый материал состоит из трёх частей.
1. базовая часть
2. опциональная часть
3. пользовательская часть
Базовая часть - это настройки по умолчанию. То что никогда не придётся прописывать пользователю для каждого материала. Они всегда есть и их всегда можно поменять, но для всей группы материалов разом.
Опциональная часть - даже не знаю, работает ли она. Никогда её не использовал, просто не было нужды.
Пользовательская часть - это собственно та часть, которую мы все привыкли видеть как описание материала. В чём же подвох, спросите вы?
Так именно в том, что базовая часть вяжется к строго определённому типу модели, а материал без базовой части существовать не может - и текстурные юниты и юниформы во время рендеринга активно обращаются к модели и берут оттуда различную информацию. В принципе можно создать такую специальную фейковую модель для короткоживущих эффектов (например партиклей) и скорее всего в дальнейшем я именно так и сделаю. Но вот для долгоживущих эффектов (лучей, декалей), этот вариант наоборот оказывается невероятно удобным.
По сути получается такая секретная модель которая внутри движка неявным образом прилинкована к энтите и в течении всего времени её жизни аккумулирует в себя декали, которые были поставлены на эту энтить. Оптимизирует их там внутри себя, собирает в батчи, ну итд.
Причём, поскольку модель является частью стандартного конвейера, то такие декали сразу из коробки получают абсолютно весь функционал обычных моделей в плане настроек системы материалов. Т.е. ситуации, когда у моделей одни настройки, а у декалей другие, более ограниченные попросту не возникнет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Под моделью понимается некая структура с VBO-данными.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не очень понял. Вот OpenGL позволяет рисовать вертексы, полигоны, текстуры, линии и т.д. Имеется ввиду что такие структуры смогут существовать как отдельный объект на сцене или что?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro то отрисовка в ImmediateMode. А я про объекты, которые загружены в видеопамять и не изменяются.
Декали ведь создаются один раз и потом уже не модифицируются.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А, ну примерно понял, мне казалось нечто подобное уже в ксаше есть. Декальки геометрией планируешь делать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да, геометрией, по-старинке. К декалям-прожекторам у меня по прежнему много вопросов. Если на статику я их ещё наложу, то как быть с анимированными моделями?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Декали на самом деле это тихий ужос. Это самая противоречивая вещь, которая успешно сопротивляется вообще всем оптимизациям.
Не зря я их в параное так и не доделал. Вот и сегодня - весь день обдумывал.
Ну и надумал сделать такую штуку, которая естественно не имеет аналогов.
Если получится - декалей будет унлимит. Ну не прям-прям унлимит, а где-то примерно 16 тысяч декалей на сурфейс(!!!). И тормозить всё это не будет.
Если я конечно всё правильно рассчитал.
Добавлено 25-08-2023 в 01:21:
А, да. В новом ксаше декали разделены. Если декаль полностью статичная - постеры там всякие, лужы и прочее - то её создаёт компилятор BSP.
Но вышесказанное относится к декалям, которые спавнятся во время игры - кровищща, следы от взрывов, дырки от пуль.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В ут2004 декали-проекторы, если я не ошибаюсь. В больших количествах они некисло сажают фпс даже на компах, которые многократно превосходят системные требования игры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это всё конечно пока ещё очень глючное, но просто для теста нагрузочной способности. Бинарник собран в дебаге, так бы там было за тысячу фпс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А почему со стены на стену декальки не переходят?
__________________
Финальная версия
На динамическое освещение тоже реагируют.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Эти декальки используют нормаль поверхности, куда попала трасса.
Если бы вместо этого использовать в качестве нормали взгляд игрока, то была бы проекция. Ты же об этом спрашивал?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я имел в виду, что когда в халфе наносится декаль, она кладётся сразу на несколько сурфасов, например в углу - покрывает весь угол, на лестнице - кладётся и на саму ступеньку, и на её боковую часть. А у тебя - выглядит, будто декаль наносится только на один сурфас, возле которого стоит её оригин.
Добавлено 26-08-2023 в 20:05:
Вот картинка
__________________
Я понял об чём ты говоришь, но повторюсь, используется нормаль от поверхности, которую вернула трасса. Если использовать нормаль от взгляда - получится проекция.
Впрочем код клиппинга декалей возможно будет ещё меняться.
Добавлено 27-08-2023 в 11:30:
Можно ещё сделать что: пробежаться по дереву, собрать все потенциальные сурфейсы, пробежаться по сурфейсам, из каждого треугольника посчитать нормаль, сложить все нормали и получить среднее.
В компиляторе я так и делаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну да, нетривиальная задача, тут либо растягивать рисунок декали, либо вот такие пропуски, и то и то выглядит так себе. Видимо нужно брать нормаль не от проекции, а высчитывать какую то среднюю нормаль от поверхности. В общем хз.
Дядя Миша
А можешь визуализировать сетку твоих декалей и пофоткать с разных ракурсов? Мне всегда было интересно, как они ложатся.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Разве в этой каше можно что-то разобрать?
__________________
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-2023 в 13:16:
В принципе можно заморочиться и уничтожить смежные рёбра там где по смыслу они не нужны, но на скорость отрисовки это не влияет, а время постановки - увеличивает. Смысла нет.
__________________
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-2023 в 15:02:
Кстати говоря, освещение партиклов я вам завёз ещё для ксаш-мода.
Правда только в авроре. Но они и освещались и туманились.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Система физических материалов у меня есть. Она в пользовательском ведении, так что туда можно добавлять всё что угодно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Декали готовы. И на моделях и на брашах. И они сохраняются в сейв.
И да, действительно можно накладывать без ограничений - они никогда не удаляются, только накапливаются. Впрочем потом надо будет сделать более гибкие настройки в этом плане конечно. Иногда декали надо удалять по сюжету.
Перехожу к имплементации клиентских эффектов.
У нас это темпэнтити, лучи, партиклы и трасеры.
С новой архитектурой ксаша никакие дурацкие темп-энтити мне не понадобятся. Буду использовать обычные - это намного удобнее во всех отношениях. С лучами пока всё очень туманно, никакая концепция в голове не вырисовывается. Но к счастью в Кваке таких лучей нету, а значит пока что этот вопрос можно отложить в сторону. А те лучи, которые используются в кваке сделаны из темпэнтить сегментами. Так что тут вопрос закрыт.
А вот партиклы надо сделать обязательно. Какая же игра без партиклов?
Это первый дуум ещё как-то без них мог обходиться. Но сделать партиклы с моей архитектурой движка будет не так-то просто. Рисовать партиклы через глбегин я не могу. Можно сделать через инстансы, но я с ними никогда не работал. К тому же у меня конвейер под них не настроен, а вообще инстансы будут нужны, например для отрисовки инстанс-моделей и я полагаю, эту работу имеет смысл выполнить разом для всего. Поэтому пока что мне представляется следующая схема организации партиклов:
1. как и декали, партиклы будут прикрепляться к модели. Если же прикрепления не предполагается, то будут аттачится к миру.
2. апдейт предполагает обновления всех позиций партиклей, а так же изменения их цвета, т.е. стандартная эвалюация.
3. обновлённые данные заливаются в VBO в конце кадра. Та часть партиклов, которая уже вышла из строя, просто получает нулевую прозрачность. И по этому критерию для нее перестаёт выполняться обновление. Когда все партиклы получат нулевую прозрачность, считается что парт-система выработала свой ресурс и может быть освобождена.
4. технически каждый партикл представлен в виде четырёх вертексов и шести элементов, причём во все четыре вертекса записана текущая позиция партикла, а трансформация поворота к камере выполняется на видеокарте. Да, тут есть избыточность, но во первых в одной партсистеме партиклов обычно не так уж и много (128-256 максимум), а во вторых без инстансов эту проблему всё равно не решить. Зато все партиклы, принадлежащие одному эффекту рисуются за один вызов, что тоже положительно сказывается на оптимизации.
5. Из-за предложенной схемы отрисовки оказывается возможным переиспользовать шейдер спрайтов для партиклей. А так же использовать и сами спрайты в качестве партиклей. Аналогично сделано и для декалей - шейдер мировых декалей использует шейдер для отрисовки мира. Меньше уникальных шейдеров - меньше их переключений, выше фпс. Но конечно никто не мешает написать и собственный.
6. Партиклы всегда добавляются в очередь прозрачных полигонов и их возможно отсортировать по дальности. Но только в рамках целой партсистемы,а не каждой частички. Впрочем и это неплохо, т.к. партиклы обычно вообще никто не сортирует.
Пока что так всё это вижу.
Добавлено 30-08-2023 в 16:39:
У прочитавших вышесказанное наверняка возникнет вопрос, мол почему бы и с лучами не поступить так же как с партиклами, хранить сегменты обновлять в шейдере. А потому что для лучей нужно две точки. И где брать эту вторую точку, как её корректно хранить - это больной вопрос, нарушающий всю инкапсуляцию объектов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | effect TE_GUNSHOT |
2 | count 1 |
3 | type static // вот это тяжелое наследие из кода кваки. Таких переключателей быть вообще не должно |
4 | color 0x101010 0x707070 // RGBA упакованный в unsigned long. Симпатично, а главное как удобно! |
5 | tex 32 36 // вручную предлагается прописывать размер текстуры или я не понял |
6 | size 1 2 // это начальный и конечный размер, а может быть рандомный диапазон? |
7 | sizeincrease 2 // а это тогда что? |
8 | alpha 64 96 48 // альфа с тремя параметрами? |
9 | velocityjitter 8 8 4 // почему джиттер по трём осям но без диапазона рандомности, |
10 | gravity 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'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Класснейм?
Crystallize
Не обязательно. В целом и сам пользователь может выставлять различные теги для своих объектов. Зачем по лишнему пробегаться? По мне это очень удобно.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Что прямо настолько быстрее проверить наличие тега чем сравнить класснейм? Можно класснеймы захешировать и сверять чексуммы, если это быстрее.
Кстати я не так давно задумался, почему движки Кармака работают и сверяют голые строки вместо каких-нибудь хэшей или номеров как это делают японцы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, демка некоторым образом готова и отправлена на приватное тестирование. Если всё достаточно неплохо, то завтра выложу для подписчиков.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Расскажи кратко что будет в демке. Ротатабля? Бамп? Тени?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
А чего бы тебе больше хотелось?
__________________
XaeroX
Неанимированного хряка
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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 в телеграме поменьше.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
После отпуска возвращаюсь к работе. Плагин для Джека вчерне готов, т.е. им уже можно пользоваться. Осталось сделать две вещи:
1. Спецификация формата .source - это нативный формат XashNT для хранения исходников уровней, префабов и прочего.
2. Компиляция плагина в 64-битную версию.
Потом будет большая ревизия исходников, дописание недостающих мелочей (например генерация Tangent-Space для бамп-маппинга или T-Junc полигонов), некоторые вещи ждут своего часа с 2020-го года.
Затем - создание SampleSDK, простейших примеров и возможностей.
Потом написание документации и первый релиз инструментария.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
(_-=ZhekA=-_)
Чем же тебя Джек не устроил?
__________________
1 | "EntityDef" |
2 | { |
3 | "id" "324" |
4 | "classname" "trigger_multiple" |
5 | "spawnflags" "2048" |
6 | "angle" "270" |
7 | "message" "Shub-Niggurath awaits you..." |
8 | "sounds" "2" |
9 | "wait" "5" |
10 | "angles" "0.00 270.00 0.00" |
11 |
12 | "ConvexDef" |
13 | { |
14 | "id" "1246" |
15 |
16 | "SideDef" |
17 | { |
18 | "id" "7403" |
19 | "material" "start/trigger" |
20 | "plane" "1 0 0 0" |
21 | "uaxis" "1 0 0" |
22 | "vaxis" "0 1 0" |
23 | } |
24 |
25 | "SideDef" |
26 | { |
27 | "id" "7402" |
28 | "material" "start/trigger" |
29 | "plane" "0 1 0 2016" |
30 | "uaxis" "-1 0 0" |
31 | "vaxis" "0 1 0" |
32 | } |
33 |
34 | "SideDef" |
35 | { |
36 | "id" "7405" |
37 | "material" "start/trigger" |
38 | "plane" "0 0 1 -312" |
39 | "uaxis" "0 1 0" |
40 | "vaxis" "-1 0 0" |
41 | } |
42 |
43 | "SideDef" |
44 | { |
45 | "id" "7406" |
46 | "material" "start/trigger" |
47 | "plane" "0 0 -1 376" |
48 | "uaxis" "0 -1 0" |
49 | "vaxis" "-1 0 0" |
50 | } |
51 |
52 | "SideDef" |
53 | { |
54 | "id" "7404" |
55 | "material" "start/trigger" |
56 | "plane" "0 -1 0 -2000" |
57 | "uaxis" "1 0 0" |
58 | "vaxis" "0 1 0" |
59 | } |
60 |
61 | "SideDef" |
62 | { |
63 | "id" "7401" |
64 | "material" "start/trigger" |
65 | "plane" "-1 0 0 208" |
66 | "uaxis" "-1 0 0" |
67 | "vaxis" "0 1 0" |
68 | } |
69 |
70 | } |
71 |
72 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize ключевое звено нового формата - именованный блок фигурных скобок внутри которого находится пара ключ-значение.
Т.е. никаких больше длинных строк с неизвестным числом аргументов и кучей лишних скобок, как круглых, так и фигурных.
Чтобы было понятнее - теперь геометрия описана таким же образом, как и настройки энтити.
Добавлено 24-09-2023 в 18:40:
Конечно уровни из сталкера в такой формат сохранять не рекомендуется - он распухнет до пары гигабайт. Но это и не требуется - для хранения высокополигональной геометрии есть формат .csm
Добавлено 24-09-2023 в 18:44:
Так же хочу обратить ваше внимание - формат полностью отвязан от размера текстур. И есть возможность сохранять текстурные оси (то что приведено в примере), текстурные вектора, или даже старый способ с оффсетами и вращением - просто используя другие ключи.
Аналогично, вместо ключа "material" можно использовать ключ "texture" или даже "mipmap" для разных способов. Скорее всего в XashNT это не понадобится, но я делаю все эти форматы с дальним прицелом - на стандартизацию.
Добавлено 24-09-2023 в 18:45:
Следующая задача - ревизия интерфейсов виртуальных машин, чтобы потом можно было подключить к ним сетевой интерфейс, не ломая совместимость.
Т.е. интерфейсы которые сейчас в демке скоро станут неактуальными, но пока что это не имеет никакого значения.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Та демка, что я выложил 11-го сентября была крайним билдом с возможностью подгружать не только виртуальные машины, но и игровые дллки (как в халфе). Самих дллок я, разумеется, не приложил, поэтому для вас разницы нет. Но в дальнейшем всё взаимодействие пользователя с движком будет только через мой собственный язык программирования Shot (ну или HeadShot), кому как больше нравится.
Про этот язык я уже писал, а кое-кто даже успел пощупать.
Вкратце для тех, кто пропустил - язык ОЧЕНЬ сильно напоминает С++, как визуально, так и по логике работы. Однако в нём устранён один из самых главных недостатков С++ - дебильная работа со строками, которая стабильно фрустирует каждое поколение начинающих программистов.
Так же присутствует мощная система отладки, брэк-поинтов и встроенный профайлер, который рисует визуальные графики нагрузки.
Из коробки поддерживается сериализация объектов, есть возможность создавать приватные объекты (в которые бакэнд совсем не сможет вмешаться, ни на чтение ни на запись).
Так же (ну пока только в теории), этот язык как бы включает в себя разнообразные достижения как низкоуровневых, так и высокоуровневых языков, позволяя портировать их исходники на Шот. В случае с С\С++ потребуются минимальные усилия, более творческий подход потребуется для таких языков, как Delphi, Java, C#, но в целом это тоже реально.
Добавлено 26-09-2023 в 13:27:
И ещё один момент: в отличие от того же QuakeC, язык не имеет какой-то явной привязки к игровому коду и без проблем может быть использован для любых задач. Так что в дальнейшем есть вероятность появления отдельной реализации самого языка, для тех, кому игры неинтересны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Самое главное - это энтити инспектор и компас.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хотел в гугле найти скрины кварка, чтобы глянуть, что это за хрень такая и ничерта не нашел...
Видимо не очень популярный редактор
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Браши-то? Ну как минимум у них нет изнаночных сторон что легче для восприятия человеком. Плюс бесшовное текстурирование по ПКМ. В 3д-пакетах есть где-нибудь такое текстурирование? Было бы очень удобно же.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Когда интерфейс основан не на кнопках с подписями а на пиктограммах? Да вроде и Кварк на этом построен. Но на самом деле это плохая идея потому что документацию читать не будешь и пойдёшь за объяснениями к инфоцыганам. Красиво но для новичка неудобно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну я понял, рудимент короче. Щас это просто кубик который рисуют поверх вьюпорта.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Изучил устройство сетевых подсистем в некоторых движках. Для начала - в околоклонах того же квейка. Что хочу сказать - там абсолютно везде использовано допущение, что сеть должна посылать пакеты намного реже, чем сервер выполняет кадров. Мало этого - в большинстве случаев там ещё нет и явной связи между кол-вом кадром выполненных сервром и временем для передачи очередного пакета. Сеть живёт по каким-то своим асинхронным правилам. Из-за этого обстоятельства нам приходится накапливать на клиенте кадры, пытаться всё это дело проинтерполировать или предсказывать. Структуры, нужные для интерполяции или предсказания занимают очень много места на самом деле. Да и само выполнение сетевого кода далеко не бесплатное.
Пока что навскидку наметил вот какую схему сетевой интеракции:
1. Сервер и Клиент хранят в себе состояние предидущего кадра, для каждого объекта отдельно. Хранят в виде bitstrem в raw-массиве и только для тех объектов, которым вообще требуется синхронизация. Критерии известны с незапамятных времён - у объекта должна быть модель. Разумеется можно завести какой-то флажок для форсирования отправки на клиент, ну руководствоваться одним только флажком неудобно.
2. Клиент и Сервер тикают синхронно 60 кадров в секунду. Никакого удушения и пропуска пакетов не предусмотрено. Это в свою очередь избавляет нас от необходимости заведения каких-то промежуточных структур для интерполяции значений, которые ещё надо куда-то сохранять, менять местами и выполнять кучу дополнительных действий. В норме интерполяция не нужна вообще. Я допускаю необходимость локальной интерполяции, скажем в рамках того же сервера, когда монстры делают шаг всего 10 раз в секунду, а в промежутках их позиция плавно двигается к заданной точке. Как минимум потому что между этими действиями нет реальных факторов в виде лага сетевого пакета, значит такая интерполяция будет всегда работать надёжно.
3. Несмотря на отсутствие пропуска пакетов, в дело вмешивается фактор их задержки. Если задержка менее времени кадра - менее 16 милисекунд, то всё хорошо. Нам даже не потребуется ничего предиктить.
Если же задержка выше, то клиент продолжает выполнять локальную симуляцию мира в ожидании очередного пакета. И при получении данных - просто обновляет их для клиентских объектов.
4. При таком подходе размер пакета может вырастать до приличных значений, однако не всё так плохо.
- Посылаются только переменные, отличные от ноля
- Посылаются только переменные, которые изменились с преведущего кадра
- Посылаются в виде небольшого кол-ва бит
- Если пакет достаточно большой, его можно дополнительно сжать LZSS
- Если даже такой пакет превысил MTU, его можно слать фрагментами. Фрагментация отправляет пачку пакетов за один кадр, но с этим я пока ещё толком не разобрался. UDP совершенно точно может отправлять и принимать пакеты размером до 65к чего бы мне хватило за глаза, но к сожалению в целях совместимости в большинстве случаев размер пакета ограничен прямо в настройках роутера.
Любопытно, что вышеприведённой схеме в наибольшей мере соответствует Normal Quake, который пакеты не душит, правда и предиктинга там тоже нет. Собственно уже в QuakeWorld ввели удушение пакетов и на тот момент (97-й года, диалап) это было неплохим решением. Ну а потом это удушение унаследовали все форки квейка, включая сорс и вероятно даже сорс2.
Надо будет ещё исследовать унреалы, край-энджины, сталкер.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А чем мультиплеер первой и второй кваки отличается от мультиплеера первохалфы? И что с ним сделали в сорсе?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В первой кваке не было предиктинга. Она вообще не была рассчитана на игру по интернету в тогдашних условиях. Чтобы исправить это недоразумение, Кармак сделал QuakeWorld, который был заточен исключительно под мультиплеер. Халфа первоначально базировалась на исходниках кваки, не заточенной под мультиплеер - это самые первые версии. Потом появилась CS и встал вопрос о комфортной игре по интернету.
Тогда вальвовцы конкретно прокачали сетевой движок, используя наработки от QuakeWorld, Quake 2 и собственные. В результате получилась мощная сетевая подсистема. Она же изначально была использована в Сорсе, но что там потом с ней делали я уже не знаю.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Возможно ли какое-то упрощение работы с клиент-сервером? Например я залажу в условный func_car который горит в лесу и в зависимости от того, от 3-го лица у меня камера или от 1-го, мне может понадобиться анимация всего персонажа или по крайней мере камеры и вьюмодели. Значит нужно снова тянуться в hud.cpp чтобы сделать мессагу и проиграть анимацию на клиенте.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
Crystallize будет, если тикать синхронно и без предиктинга.
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Aynekko если у тебя монитор умеет выше 60 герц, то да, вероятно может быть такой эффект.
Ты с сорсом сравни, там похожая схема.
Добавлено 29-09-2023 в 22:15:
Нёмыч мне тоже возмущался, мол лагает Ксаш. Я ему говорю, взапроверь в Doom3 и в Source. Он взапроверил и признал, что там тоже самое.
Просто когда это движки от крупных компаний - воспринимается как должное. А когда от дяди Мишы - сразу предъявляют как баг.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Aynekko так ты и в ксаше поставь fps_max 75. Или не помогает?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А квейк ремастер?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я не знаю как там игровая петля устроена.
Для начала надо будет собрать статистику по этой проблеме.
Попозже запилю голосовалку в закрытой ветке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я не очень понимаю эту проблему, в Юнити такие глюки бывают когда ты код размещаешь в неправильные апдейты. Это косяк кода квейка, или всётаки архитектуры? Или ксаш выполняет всё разом в апдейте?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Проведи слепой тест - сделай 2 простых билда, с логикой залоченной на 60 фпс, а другой на 144 например. Назови их билд1 и билд2. Я более чем уверен, что все скажут, что 144 плавнее.
__________________
Мой мод на Xash
Немножко картинок вам в ленту. Вот так выглядит визуальный профайлер игрового кода. Раздельно для серверной и клиентской части (потом ещё аналогичный сделаю для меню).
Можно посмотреть сколько в среднем опкодов виртуальная машина выполняет за кадр, а так же наглядно - в виде графика. Соответственно, если график начинает краснеть - пора оптимизировать ваш код.
Впрочем, когда я напишу JIT, лимиты на оптимизацию отодвинутся. Ну а пока - вот так.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ладно, то что напротив CPU иконка часов - это я понять могу. То что напротив памяти - изображение микросхемы в принципе тоже. Но то что напротив рендеринга нарисован не то бублик, не то дырка от него - это вот вообще взрыв мозга какой-то.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Как Рокстар юзают imgui (видео в хорошем качестве)
https://t.me/gta6_leak_videos
Debug Menu в HL2
https://www.youtube.com/watch?v=bsARRLc6Pro
Но это не про работу с отдельными объектами
Мне нравится вот эта штука для gta. Тоже про глобальные настройки. Выглядит минималистично.
https://www.youtube.com/watch?v=036YTNSD4bw
https://github.com/aap/debugmenu
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
(_-=ZhekA=-_) Это как история с первохалфой когда у них взорвался сервер сорсконтроля и фрагменты кода пришлось собирать по клиентским машинам.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Такое делать нежелательно по ряду соображений. Но возможно я сделаю этот фпс регулируемым на какое-то время, чтобы найти оптимальное значение.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не помню, писал ли я об этом здесь или в ТГ, но в рамках подготовки SDK я принял решение подключить минимальный набор того, без чего не обходится ни один современный движок, а именно:
- бамп
- спекуляр
- параллакс
- динамические тени
- пбр
Поскольку у меня мощная система описания материалов, то это не потребует вмешательства в движок и может быть реализовано прямо на уровне скриптов - достаточно блокнота для редактирования материалов и шейдеров. Разумеется в собственном редакторе будут более наглядные инструменты. Собственно, у меня оставалась пара незавершённых моментов - рассчитать Tangent-Space и сохранить делюкс-мапы. Когда я это сделал, на внедрение бампа потребовалось менее одного часа.
Это классический бамп по формуле
max( dot( delux, normal ), 0.0 ) |
max( dot( delux, normal ) * 0.5 + 0.5, 0.0 ) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это будет захардкоженный шейдер, или можно будет подключать к материалу свои шейдеры? Можно будет ли наследоваться от твоих шейдеров?
Поддержка ssbump будет? И как дела обстоят с бампом на моделях?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша в третьем конечно.
Не понял.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Будет ли сильно красивее в третьем думе если вместо первой формулы там в шейдерах поставить вторую?
Тут есть особо навороченный дуум3, с подсветкой в темноте
https://github.com/RobertBeckebans/RBDOOM-3-BFG
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
a1batross
Как то там всё прыгает и накладывается друг на друга у него что вообще можно разобрать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
FiEctro там не накладывается, но прыгает. Сверху фреймтайм от двух последних кадров. Слева графики.
Причём он говорил что через квар можно выставить список метрик динамически, в зависимости от того что в данный момент нужно.
__________________
Xash3D FWGS форк
a1batross
В любом случае выглядит как мешанина, там ещё и старый интерфейс под ним.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro какой старый? Там ничего старого нет, весь рендер вообще с нуля написан, за редкими исключениями, и то временными.
__________________
Xash3D FWGS форк
a1batross
Почему все линуксоиды не умеют/любят UI?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
Кстати, а какой порядок каналов для нормалей у тебя? Можно в мета файле ресурса указать тип нормали?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Хмм, бамп-маппинг появился на этой неделе. Я над подобными вещами просто не задумывался. Потом разберёмся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Как референс можешь глянуть в Юнтити при импорте ты можешь настроить метаданные для текстур и моделей. Ещё до того как она попадёт в материал и шейдер. Что позволяет быстро заменять текстуры не исправляя кучу материалов.
В Texture type задаётся к чему относить эту текстуру, к текстуре, спрайту, нормали, кубамапе, UI, лайтмапе.
https://docs.unity3d.com/2021.3/Doc...xtureTypes.html
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
У меня мета-материалы. Можно исправить саму настройку материала, добавить туда новый функционал. Так что думаю, проблемы нет.
Ну чтож, сегодня наконец сбылась мечта идиота - попиксельные лайтстили.
Вы вероятно над этим не задумывались, но корректное смешение лайтстилей на GPU - это архисложная задача. Вот так, чтобы не разбивать батчи по сурфейсам, каждый из которых имеет свой набор лайтстилей, что в общем случае крайне негативно сказывается на производительности. К тому же лайтстили, приложенные к сурфейсу не дружат с инстанс-моделями.
И вообще стили должны быть привязаны к лайтгруппе. а лайтгруппа это виртуальное понятие, которым оперирует только лайтмаппер, движок про нее ничего не знает. То есть мало просто собрать лайтмапы в большие атласы - лайтстили сломают эту идиллию нахрен.
При том, что лайтстили сохранённые в текстуру не могут иметь интерполяцию. То есть всё это дело постоянно норовит взорваться уродливыми артефактами. Но тем не менее - у меня получилось.
Теперь лайтстили вообще никак не влияют на производительность
Ну и плавающий лимит присутствует конечно - 4 лайтстиля на лайтгруппу.
А вот лайтгруппы, товарищи юзеры вы в принципе можете регулировать самостоятельно, как раз на такой вот стрёмный случай. Ну и не только на такой. В 99% случаев компилятор прекрасно справляется сам. Но иногда ему требуется помощь. Теперь это регулируется со стороны дизайнера.
Добавлено 06-10-2023 в 19:44:
Так, ну чтожы. Пора показать некоторые достижения. Скриншоты в порядке появления эффектов:
Нет эффектов.
Хай-рез текстуры
Нормал-маппинг
Оффсет-маппинг (он же рельф-маппинг, он же параллакс)
Скриншоты имеют накопительный эффект, т.е. на каждом следующем видны предидущие фичи + новая. Обратите внимание как падает фпс.
Осталось только подключить PBR и тестирование бампа завершено.
Добавлено 06-10-2023 в 19:45:
Как и прошлые разы, напоминаю - в движок не лазаю. Все эти эффекты были подключены путём редактирования материалов и шейдеров.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
FiEctro это r_speeds. Его движок забирает строчкой из рендерера и как хочет, так и рисует.
__________________
Xash3D FWGS форк
__________________
Ну чтоже. Могу сказать, что работа над лайтмаппером завершена.
Начал я им заниматься в июле 2020-го года и вот наконец он обзавёлся всем необходимым и превзошёл по своим возможностям абсолютно все лайтмапперы для всех движков семейства Quake и их производных.
За промышленные лайтмаперы ничего скажу - там и требования другие.
Впрочем как и за лайтмапперы того же Unity\Unreal. Будете сами сравнивать и мне рассказывать. Однако один момент всё же отмечу. Судя по всему, мой лайтмаппер - единственный, который умеет давать инстанс-моделям персональные лайтмапы. В том же юнити я поковырялся - там освещение еденичным цветом, ну как и в сталкере. Т.е. это довольно непростая в реализации фича. Более подробно распишу в документации.
То что лайтмаппер завершён ещё не означает, что я больше не буду над ним работать. Какие-то небольшие исправления, оптимизации, внедрение новых режимов запекания - это всё будет. Но фундаментальные принципы меняться уже не будут. В этом плане будет логичнее написать ещё один лайтмаппер, чем трогать этот, если вдруг возникнет такая необходимость.
Ну а поскольку теперь у меня есть стабильный референс в виде статически запечённого света - пора переходить к динамическому освещению.
Для начала разумеется сделаю обычный прямой свет. Собственно сам свет не проблема запилить уже сейчас, но нужны ещё две вещи:
1. эффективная система отсечения невидимых источников. Будет построена на уже знакомой вам технологии визлайт матрицы. Я использовал её в параное и остался доволен. Это на мой взгляд вообще единственная технология, которая позволяет в реалтайме рисовать лайты с квадратичным радиусом затухания. Я в своё время писал об этом. Пакость этих лайтов заключается в том, что отсечение их по радиусу невозможно в принципе - каждый такой лайт заведомо больше площади экрана. Т.е. все эти кластеры и отложка идут лесом. Поэтому в играх по прежнему используют либо лайтмапу либо локальные лайты, радиус которых гарантированно меньше площади экрана. А у меня есть технология как рисовать подобные лайты в реалтайме. Правда с оговоркой что лайты не должны двигаться, но ведь они и так не двигаются. А для подвижных лайтов можно юзать и линейный радиус затухания.
2. система рендеринга теней. Проблема теней в том, что для каждого источники выделяют одну теневую карту. Причём эти карты ещё и разные - где-то кубемапа для всенаправленных источников, где-то каскады, т.е. несколько теневых карт на источник, где-то одна, для проекционных.
Это очень неудобно и мешает полноценному менеджменту на GPU. Чтобы не проталкивать в параметры что-то, а решать эти задачи целиком на GPU. Я вижу это таким образом, что движок подаёт на вход рендеринга только массив с индексами лайтов, которые видны из текущей позиции взгляда, а всё остальное полностью решается в шейдере. Это наиболее гибкая и надёжная схема.
Динамическое освещение в движок планируется внедрить в течение следующей недели. Само по себе освещение делается легко - это немного кода в шейдере. Главная сложность - это бакэнд, обеспечение. То самое, на которое я убил почти три года и мне даже нечего было вам показать в плане скриншотов. Ну зато теперь любая задачка решается в рекордные сроки. Реалтайм радиосити займусь уже в следующем году.
Добавлено 06-10-2023 в 22:33:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Закэширую в атлас. Сервер тикает 60 раз в секунду, значит положение теней просто не изменится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Да нет у меня неко-кова лерпинга. Лерпинг - это когда 20/60. А когда 60/60 - что лерпить-то?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Ну да привязка к герцовке 60Гц плохая идея. На мониторах с более высокой герцовкой будут плохие вещи происходить.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Пока нет сетевой подсистемы - бессмысленно что-либо менять в этой конструкции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Параллакс вы сможете подключить какой угодно, я просто взял для теста то, что было под рукою. В игре он вроде норм смотрится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне параллакс нравится. Когда будет ssbump у него появятся тени, и будет ещё лучше
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro у этого паралалкса тоже есть само-затенение, чуть позже подключу. Но для SS-бампа не требуется карта высот для получения теней.
Там дополнительная информация уже запечена лайтмаппером.
Но в сущности плюс-минус то на то и выходит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ещё такой вопрос чисто теоретический, не совсем относящийся к ксашу. Скажи а возможно ли как то фейково сглаживать стенсильные тени? Я когда экспериментировать с альфа клипом, пробовал отобразить тона точками. Возможно что то подобное использовать для стенсильных теней? Вроде как и у шадоумап что то подобное я наблюдал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Попробую попытаться переформулировать идеологию движка простым и понятным языком. Я когда начинаю говорить о возможностях систем, народ как правило не воспринимает - они такого никогда не видели, сравнивать не с чем, поэтому непонятно.
Вот смотрите, за что мы любим старые движки? Потому что там всё просто, раз-раз, накидал уровни, собрал и игра готова. Минимум посторонних действий.
За что мы любим новые движки? Как говорят сами их пользователи - потому что на них можно сделать вообще всё что угодно! На практике чаще всего получается, что это "всё что угодно" требует гораздо больше усилий от разработчика, но приятное чувство полной свободы при этом никуда не исчезает.
Особняком стоят те же продукты от Valve - Source, Source 2. Это в некотором роде, то что я ориентируюсь, но не в плане наследования идеологии, а просто исходя из факта, что Source внутри это всё тот же квейк, пусть и переписанный десятки раз. Сама идеология осталась прежней - Хаммер, брашы, консольные утилиты для компиляции. И очень многие высказываются про него в положительном ключе, мол с удовольствием перешли бы на Source 2, да Valve его толком не даёт народу. То есть даёт, но не только лишь всем и с рядом оговорок. Опять таки, у Вальвы там дллки на С++, адов код, в котором попробуй ещё разберись. Но в целом этот подход народу нравится. При условии что его не будут заставлять абсолютно всё делать брашами и при условии, что другие примитивы не будут иметь каких-то ограничений, как было в той же Халфе. Модельку вставить вроде бы можно, да только ни нормального освещения, ни нормальной коллизии с ней уже не получить. И это конечно была трагедия.
Так вот XashNT пытается одновременно исправить недостатки всех существующих подходов, сохранив главное достоинство - простоту разработки. Он не будет перекладывать чисто внутренние проблемы на юзера, только лишь потому что кто-то поленился всё это грамотно организовать. Ваша игра тормозит? Ну вот вам отладчик - сидите и разбирайтесь где там у вас тормозит. В квейке никакого профайлера не было, но при этом и ситуации с тормозами тоже не возникало, например.
Опять же эти сторонние лайтмаперы и прочие утилиты - потребность во всём этом возникает далеко не от хорошей жизни, а потому что нативное толком не справляется. Т.е. вся эта свобода - выбор между сортами говна.
Сказанное конечно не исключает появления сторонних утилит для XashNT, но как и в случае с движками того же Квейка они будут появляться уже после его выхода и ориентироваться на то, чтобы быть как минимум не хуже нативных тулзов.
Примерно так.
Добавлено 07-10-2023 в 11:49:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Как выглядят 3-5 страниц кода реализованные на блюпринтах? С предохранением от вылетов на случай ненайденных энтить и соотв непроинициализированных векторов?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
Мой сайт
Xash3D Modding Discord
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
Зачем юниты конвертировать в сантиметры для рендера? Ну возьми пропорцию юнит=миллиметр и делай себе архитектуру. Это же не для игры.
(_-=ZhekA=-_) я про геймплей а не про графику если что
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
С системой счисления ставить вопрос надо, когда я начну работу над редактором. Джек позволяет только в юнитах работать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Соответствия между юнитами и реальными единицами вроде бы имеют значение только при использовании инструментов архитектурного освещения. А так-то совершенно по барабану, к чему ваша левая пятка захотела приравнять юнит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Тогда у него двери 96 метров в высоту и вообще он великан в стране великанов. Пока ты не начнёшь симулировать водичку, например, он с тем же успехом может быть лилипутом в стране лилипутов. Разницы ты не заметишь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | // meters to inches |
2 | #define METERS_PER_INCH 0.0254 |
3 | #define METER2INCH( x ) ( x * ( 1.0 / METERS_PER_INCH )) |
4 | #define INCH2METER( x ) ( x * ( METERS_PER_INCH / 1.0 )) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так, а причем тут дюймы, когда речь о метрах и юнитах?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
При том, что юнит это и есть дюйм. Я же сталкеровские карты перегонял из метров в юниты, используя размер дйюма. Всё идеально совпало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Хм, и правда 1 метр это 39,3701 дюймов. Почти не отличается от того что писали выше. Тогда в чём проблема? Формулы перевода метров в дюймы и дюймы в метры у тебя уже есть.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так я же выше написал - надо все сорцы прочекать на предмет констант.
Чтобы в коде их движка их не было.
Опять же, можно определять систему прямо в настройках карты - новый формат исходников такое вполне позволяет. Потом постепенно и для моделей что-то аналогичное сделаю. Впрочем есть и ещё одна проблема - дюймы некритично переводятся в тексели. Один тексель = 1 юнит. Это удобно. С метрами так не получится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ничего не пишу, но это не значит что новостей нет. Работаю над динамической системой освещения. Всмысле полностью динамической.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Эта фича была ещё в q3map2. Ни разу не видел чтобы это было хоть сколько-нибудь заметно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Прогресс, когда уже есть что показать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Потому что солнышко это прямое освещение, а свет от облаков - индирект. Никак ты его лампочками не имитируешь, разве что эмиссивными текстурами что раздует тебе время компиляции. Так же эта фишка очень полезна когда у тебя динамическая смена дня и ночи.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Скайбокс это набор точек вообщето. Потому и сымитировалось, я считаю - весьма симпатично.
Crystallize
Да фигня, от такого способа будут тени там где их не должно быть. А если каждое солнышко будет рисовать шадоумапу то вообще жопа. Всё это работает только на очень низкочастотной лайтмапе как на скриншоте.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro Так мне и нужно для статики.
Насчёт вытянутых не думал. Остальное да.
Добавлено 12-10-2023 в 10:37:
Crystallize так а где твой эффект от пикселей скайбокса?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я так понял он имеет ввиду чтобы цвет и яркость неба вносили вклад в индирект освещения.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Что-то вроде _diffuse_light
Диффуз лайт у меня поддерживается, если что.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Дифуз лайт это просто равномерный цвет. А это что то вроде умножение на цвет лучей индеректа неба на одну из сторон кубамапы цвета.
Например если луч идёт с севера от неба, то к нему добавляется цвет кубамапы неба с той же стороны откуда идёт этот луч. Можешь в Юнити глянуть как эта фишка работает. Она кстати и для динамических объектов тоже там работает.
Это полезно если небо неравномерно освещено в разных частях, к примеру закат, одним дифузом ты его уже не выровняешь.
Вот у Скаржа ещё был пример хороший:
https://gamebanana.com/mods/92240
правда я не знаю как он это у себя имитировал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
code:
{ "origin" "520 -264 504" "_light" "255 255 255 700" "style" "0" "_fade" "1.0" "_falloff" "0" "angles" "-55 240 0" "_diffuse_light" "0 0 0 0" "classname" "light_environment" } { "origin" "521 -265 520" "_light" "0 0 0 0" "style" "0" "_fade" "1.0" "_falloff" "0" "angles" "90 240 0" "_diffuse_light" "64 121 255 900" "classname" "light_environment" } { "_fake" "1" "origin" "525 -232 504" "angles" "-55 240 0" "_light" "255 255 255 100" "classname" "light_environment" }
Через diffuse_light и имитировал же.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Дифузлайт даёт только один цвет, там у него три солнышка
Ну если ты сторонник таких костылей, то наверное ок...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вон в Юнити и одного достаточно, и для динамики работает
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я рад за него.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Внедрил систему полностью динамического освещения. Пока что - без теней, только свет, тени это отдельная сложная тема, на неё сейчас просто нет времени, по плану идут совсем другие вещи. Но зато это освещение обладает высокой нагрузочной способностью. Как вы знаете в квейках обычно делают релайт, потому что нарисовать эту кучу лампочек в кадре очень затруднительно с приемлимым фпс. В XashNT это не составляет проблемы.
Слева статичное освещение (лайтмапа), справа полностью динамическое.
Добавлено 12-10-2023 в 17:54:
Перед выходом SDK надо сделать ещё три вещи:
1. то что я делал с освещением оформить в очередную демку и выложить вам напотестить.
2. набросать SampleSDK (игрок, ротатабля).
3. обновить документацию.
И наконец-то можно будет всё это пощупать извнутри, так сказать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Для директ лайтов выглядит огонь Интересно потянет ли пентиум такое, хотя бы в 10фпс
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша А ты юзаешь для динамики вот эти долбанутые квейковские формулы затухания и прочего?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это настраивается пользователем. Можно загрузить и менять небо по команде с игрового кода. Т.е. движок в это не лезет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А будет сглаживание TBN как у берсеркера в форке ку2?
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
(_-=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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
Рядовые юзеры сели в ряд, ксаш скачали и давай рядовые игры пилить. Серьезно?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Князь - это рок-группа такая, форк Короля и Шута.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
XaeroX
Кстати интересно тоже твоё мнение. Какими критериями ты руководствовался когда писал Волатилу и инструменты к ней?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
Если мы говорим про четвертый и, наверное, пятый анрылы то там редактор и правда классный, въехать в базовый функционал сходу вышло, новый хаммер примерно по тем же принципам построен. А вот анрилед, который был с 2004 ут, я открыл, карту подправил, поплакал немного и закрыл. Субъективно, конечно.
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По поводу вывода информации — в GTA III была такая вещь в отладочном скрипте (17:35)
https://youtu.be/tpP4kKCeNew?t=1055
А в source есть такая энтити point_message, мы могли наблюдать их в большом количестве на картах в HL2 Beta. Такие записки, что в конкретном месте нужно будет сделать.
Предполагаю что была бы возможность делать такой привязанный текст, там уже каждый решал бы, как это использовать.
А может в уже имеющейся системе пользователю реально смастерить такое?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
А если я ещё одну кошку хочу поставить на уровень. Мне надо создать объект с именем koshka2 ?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Нет, я её сразу же удалил. Да и что там на тех викингах смотреть? Там игрок и две ротатабли.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | using UnityEngine; |
2 |
3 | public class ObjectCopier : MonoBehaviour |
4 | { |
5 | public GameObject objectToCopy; // Указать объект, который вы хотите скопировать |
6 |
7 | void Start() |
8 | { |
9 | if (objectToCopy != null) |
10 | { |
11 | for (int i = 0; i < 10; i++) // Создать 10 копий объекта |
12 | { |
13 | Vector3 spawnPosition = new Vector3(i * 10f, 0f, 0f); // Смещаем каждую копию на 10 единиц по оси X |
14 | GameObject copiedObject = Instantiate(objectToCopy, spawnPosition, Quaternion.identity); |
15 | // Quaternion.identity означает, что копии будут иметь тот же поворот, что и оригинал |
16 | } |
17 | } |
18 | else |
19 | { |
20 | Debug.LogError("Объект для копирования не указан!"); |
21 | } |
22 | } |
23 | } |
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Фигово, что в шарпе, там где по смыслу достаточно функции приходится городить класс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А у тебя энтитя это метод?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Нет, класс. Да скоро сам увидишь всё.
Просто то что ты привёл - явно не требует никаких классов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну я просто шаблон привёл тебе. Такие скрипты и использует Юнити вместо энтитей. Наполнение может быть разным. Например туда можно засунуть игрока или генерацию уровня аля майныч.
Ну вот что то более приближенное к жизни:
https://github.com/atil/fpscontroll...psController.cs
Энтития игрока.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
И что каждый раз писать [SerializeField] вот это?
А это ещё что такое - #region Drag Drop?
Меня к слову здорово разраждает вот эта необходимость напротив каждой переменной писать private или public. Да возможно секции выглядят не так красиво, как модификаторы, но вопрос удобства же. Явно что тот, кто это придумал, сам писать на языке не планировал. Другим подляну сделал.
Ничем другим это объяснить невозможно. Да и Степанов, который динамический массив зачем-то вектором обозвал, тоже свинью подложил.
У меня это всё устроено не так. Есть класс. Он не наследуется ни от чего. Но тем не менее неявным образом связан с движком. Это поведение легко отменить перегрузив оператор new. Например для объектов, в которые движок лезть не должен - элементы меню или худа. Или какие-то вспомогательные объекты, которые не являются частью игры.
Поскольку объект ни от чего не наследуется, встаёт вопрос, а как же движок с ним общается? Очень просто - нужные переменные подключаются к свойствам (properties) с особым именем. Свойства в шоте имеют имена заключенные в двойные кавычки, благодаря чему и становится возможным объявлять имена, недопустимые с точки зрения синтаксиса самого языка.
При этом, разумеется внутри программы обратится к таким свойствам невозможно (да и не нужно) - это метки для бакэнда.
Приведу примеры:
"event.origin" - сюда мы цепляет ссылку на позицию объекта
"event.transform" - а здесь ссылка на матрицу объекта
В принципе таковых полей не очень много - до десятка. Движку это не особенно нужно. Аналогичным образом передаются и свойства в материалы. Разумеется свойства можно использовать и внутри кода, это просто удобный механизм для разных нужд.
Сериализация устроена наоборот - по умолчанию сохраняется вообще всё. Иногда что-то сохранять не требуется - напротив такой переменной прописывается _declspec( "transient" ) но это редкость.
Публичные поля (те, которые приходят из настроек энтити) описываются свойствами "field.origin" "field.angles" итд. Т.е. только то, что мы хотим загружать. В каком-то смысле соответствует вот этим твоим "Public Header" или что-то вроде. Но повторюсь - легально движок вообще не лезет в переменные ни под каким предлогом (хотя без проблем и может). Только через свойства, обозначенные пользователем.
Для отладки бакэнд может вторгаться в любые зоны объекта, но только непосредственно по команде пользователя. Это чисто отладочный режим.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это просто неймспейс так называется - event.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я так понял первое с чего нужно писать СДК это с редактора кода с подсказками
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вышло обновление QuakeNT, подробности в телеграм-канале.
Приступаю к созданию SampleSDK. Тут ещё вот какой момент - с удалением дллки на С++ из движка, мне стало не под чем тестировать статичную геометрию. Ну то есть можно под библиотекой кваки, но это неудобно, она будет спамить ошибками. А вот SampleSDK для таких целей отлично подойдет. Что именно в него будет включено - вопрос открытый.
Пока что я вижу эту следующим образом:
1. Минимальный худ, который показывает кол-во здоровья
2. Минимальное меню с тремя пунктами - New Game, Settings, Quit.
В настройках смена режима разрешения и яркости.
3. Код перемещения игрока
4. итем_аптечка
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'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В кваке был такой удивительный баг, когда некоторые дохлые монстры на опускающейся платформе вдруг начинали двигаться нетолько вниз (вслед за платформой) но и куда-то резко вбок.
При том, что не все были этому подвержены, но в игровых ситуациях встречались именно те, которые ехали. Например в конце e1m3 вы подымаетесь на лифте и есть вероятность, что убитые демоны на нём же и останутся. И когда лифт начнёт опускаться вниз, эти самые демоны куда-то поедут влево, вправо, в потолок. Причём в разные стороны.
А разгадка проста - демоны прыгают через velocity. Дохлый монстр получает флаг FL_ONGROUND, но его велосити - не обнуляется. А платформа обнуляет FL_ONGROUND и монстр в полном соответствии с остатками энергии прыжка начинает ехать не только вниз, но и туда, куда он прыгал.
Исправить этот баг очень легко - достаточно обновить pev->velocity в функции MonsterKilled.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Aynekko Ну NT всё ещё предназначается для начинающего разработчика, а дедушка старый ему всё равно.
Не вижу связи с "начинающим разработчиком" и 60 фпс
__________________
Мой мод на Xash
Пока нет сети, организацию игровой петли трогать не буду.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Правда там написано то, что я прочитываю? Элитарные фреймрейты?
__________________
Мой мод на Xash
Дядя Миша а в каком состоянии находится твой конвертор уровней из сталкера? А то тут обнаружилась неплохая локация для стресс-теста.
https://ap-pro.ru/forums/topic/4023-zhivaya-zona-obt/
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот кстати какая мысль ещё мне пришла в голову. Для тех у кого логает там где логать не должно - попробуйте поиграться с кваром gl_finish.
Добавлено 17-10-2023 в 12:54:
И ещё. Попробуйте gl_vsync -1
Не один, а именно минус один.
Добавлено 17-10-2023 в 13:14:
Я тут разгребаю код инициализации OpenGL-подсистемы, там очень много залежей накопилось ещё с конца нулевых. Так что может и уйдут ваши лаги.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
То есть что это получается? Я зря трес компьютор?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну вы же жалуетесь на лаги неодолимые. Я и предлагаю поиграцца.
Может поможет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сделал большую ревизию для кода создания OpenGL окна и обработчика движения мышы. Код там не менялся со времён Xash3D, был бардак какой-то непонятный. Куча ненужного устаревшего кода, который вообще непонятно как работал. В связи с этим также изменились скриптовые API, стали более целостными, поэтому демки, которые выкладывал уже несовместимы с будущей версией - каллбэки поменялись. Ну ничего, каллбэков немного, и я не планирую их всё время трогать, это просто сейчас идёт процесс окончательного устаканивания. А вот новые API, доступные из скриптового языка будут добавляться новые, на совместимость это никак не повлияет.
К тому же в движке есть встроенное средство тестирования функций и интерфейсов, позволяет убедиться что это всё есть в наличии, прежде чем вызвать.
SampleSDK для начала будет совсем простейший, но даже в таком варианте он содержит порядочно кода.
Меню состоит из двух подменю:
1. Подменю выбора карт для запуска
2. Подменю смены разрешения экрана
3. Кнопка выхода из игры (в Unity как мы помним по дефолту не было даже этой кнопки).
Клиентская часть обрабатывает нажатые игроком кнопки и отсылает их биты на сервер, а так же считает ректангл вьюпорта и fov игрока.
Серверная часть содержит в себе ворлдспаун, объект игрока и точку его старта.
В принципе этого достаточно, чтобы бегать и летать по статичной геометрии, например по картам из того же сталкера.
И достаточно для изучения кода, чтобы сформировать минимальное представление о том, как это всё работает. В таком виде оно и будет выложено для первого знакомства. Дальше возможны варианты - либо я сам добавлю туда для примера двери-аптечки, пушку в руках, либо вы прекрасно справитесь и без меня с этим. В любом случае SampleSDK для каких-то серьезных задач не предназначен, это просто минималка для запуска. Для разработки игр будет написан BaseSDK с объектами из XashXT, ну я уже говорил об этом.
Так же вам будут доступны исходники Квейк-Римейка да и любой другой из игр, которые я впоследствии планирую портировать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Насколько Шота будет совместим с современными вижуал студиями и будет ли файл проекта для более удобной работы с проектом? Ибо писать код в блокноте врядли кто то захочет, особенно новички.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я никогда не работал в современных визуал-студиях, ничего не могу сказать.
Но там же вроде бы теперь есть возможность подключения плагинов, для поддержки разных специфических вещей? К примеру я слышал вроде бы есть плагин для написания GLSL.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Да есть, но их написание тоже требует определенной компетенции. Как минимум очень хорошего знания твоего языка. А уж парсить свои собственные файлы проекта это вообще кошмар. Уж лучше использовать то что есть, и при возможности немного подправить чем изобретать велосипед с нуля, а потом ещё как то и всё это поддерживать.
Лучше всего рекомендую ознакомиться с VS Code он более легковесный чем студия, кроссплатформенный и более дружелюбный к плагинам, и полностью бесплатный. Правда с WinXP могут быть проблемы, как вариант можно попробовать эту старую версию (https://code.visualstudio.com/updates/v1_14) но я хз заведётся или нет, я не проверял.
https://ru.wikipedia.org/wiki/Visual_Studio_Code
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Актуально - не актуально, вопрос так не стоит. Сейчас идёт активное бета-тестирование платформы и лучше всего это делать на готовых и хорошо изученных ресурсах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что можно протестировать в первом дууме? Спрайтовых монстров?
Мне кажется логичнее брать игры где есть материалы.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
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'
Так, ну чтожы. Скоро (на след. неделе) выложу ещё одну демку.
Потом ревизия документации и наконец-то первый SDK.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ждём
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Как бы странно это ни звучало, но в настоящее время мне по духу ближе всего стала именно идеология Юнити - если конечно избавить её от проклятия third party в немыслимых количествах. Кризис амазоновцы затерзали насмерть, Унреал превратился в какого-то монстра, с которым никто не знает как управляться в одиночку.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Всё в одном + скриптовой язык.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
(_-=ZhekA=-_)
Так же как в Анриле, некоторые пакеты можно ставить оффлайн
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Пакеты это тупиковый путь. Посмотрите во что они превратили линукс, ад зависимостей, всё глючит, конфликтует и занимает чёртову уйму места.
И если пакеты начнут перестрелку друг с другом вы никак это не отладите и не почините и даже не поймете что вообще происходит.
Мне это напоминает китайскую технику слепленную из всякого мусора, в 90-е такую продавали. Я резко против такого.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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 вот они между собой и будут конфликтовать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А каким образом они могут конфликтовать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Всё что делалось разными людьми - обязательно будет конфликтовать между собой, закон природы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну вот моды в халф лайфе конфликтуют между собой? Пакеты работают примерно так же, только локально.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
потому что кости принадлежат:
1. одному объекту
2. одной модели
Тут нарушение целостности, когда несколько объектов пытаются контролировать одну модель. Такого быть просто не должно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
дело в том, что прописывать аттачменты в коде - это такой возврат к первому квейку, где все смещения были жестко захардкодены.
И наоборот - халфа с её аттачментами в модельках воспринималась как глотк свежего воздуха. Ну хорошо, возьми этот s&3box и изучи вопрос - как там сделано. И напиши отличия от юнити - удобно\неудобно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Ты редактор скелетов просишь?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
То есть по сути ты просишь надстройку с констрейнтами. Если без перекомпиляции модели.
nemyax
Констрейнты юзеры могут и сами писать. Главное это доступ ко скелету и возможность управлять его костями не затрагивая саму модель.
Вот тут например посмотрите как это работает.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это понятно, вот только поменяешь модельку и всё сломается. Я просто доношу общую идею. Может придумаешь и более удачную реализацию. То что префабы дают большую гибкость и совместимость чем вшитые в модель аттачменты.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Слушай, ну в халфе модельку меняли, разве что-то ломалось? Наоборот получался новый монстр.
Добавлено 31-10-2023 в 22:26:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так то не игра, а мод, баловство всякое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша На движках серии квейка разница между модом и новой игрой довольно условная.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша кстати, где-то тут шла речь про плагин для блендера. Не планируешь включить в сдк?
Есть плагин для импорта-экспорта в CSM, не за моим авторством.
Думаю его включить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, работаю над документацией. Это двухсторонний процесс, т.к. я исправляю и саму документацию и параллельно удаляю то, что было создано но так и не пригодилось\утратило актуальность. Т.е. навожу ревизию.
А так же занимаюсь любимым занятием всех форкеров - переименовываю все папки, файлы, расширения и прочее. Папку sound в папку audio, условно говоря. Удивительное дело. Мне это занятие весьма нравилось в 2008-м, а сейчас с трудом себя заставляю.
Добавлено 04-11-2023 в 20:15:
Взглянул наконец на эту сталкеровскую чудо-карту, Живая Зона или как-то так она там называется. Ну это сразу не вариант. Там одна только геометрия больше гигабайта весит. Я её даже сдекомпилить не смогу на 32-х битах-то.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для тех, кто любит читать документацию и внимательно изучил документацию от прошлых выпусков, скорее всего возникнут вопросы, почему часть параметров, которая уже тогда была помечена как неиспользуемая, наконец-то исчезла, а часть - так и осталась висеть.
Я удаляю те или иные параметры, когда им появляется уже готовая новая система, которая не предполагает использование этих устаревших параметров. А если пока что никакой системы написано не было, то эти устаревшие параметры так и продолжают висеть. Использовать их невозможно, но и удалять я их пока не спешу. Речь о системе материалов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так тулзы для декомпиляции 32-х битные. Впрочем, насколько я понял, эту локацию никто не может разобрать даже нативными инструментами для сталкера. Да и смысла в этом никакого. У меня на видеокарте 1 гиг памяти всего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Кстати, а в ксаше будут разные современные плюшки, например, 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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
Работаю над документацией. Исправляю, дополняю. Потом ещё придётся гайд по языку писать, хотя бы самый минимальный. Потому что предполагается что пользователи знакомы с С++ и немного в него умеют.
Впрочем - тут в сущности как в халфе. Мы его SDK редактировали вообще не зная никакого С++, просто делая по аналогии и ведь даже что-то получалось. Просто нам тогда Халфа немало палок в колёса навставляла, т.к. вальвовцы там целую кучу мин оставили. Ну а тут, понятно, виртуальная машина, думаю особых проблем не возникнет. Опять же, от вас будет обратная связь, по итогам которой я постараюсь внести в документацию самое неочевидное. Но скажу честно - как правило все эти объекты игровые пишут даже толком не зная языка и ничего, оно даже работает.
Потом, когда управлюсь с документацией, поставлю новую студию, надо попробовать собрать тулзы-плагины в 64 бита, посмотрим что из этого получится. Потом закрытое бета-тестирование SDK будет.
Ну и потом уже официальная версия. Я уже как-то привык к этому ритму, чтобы всё по десять раз заранее проверить, а не как тогда с параноей было - выложили и у половины форумчан незавелось, да чего за примером далеко ходить, вон у Жэки не завелось, я тогда чуть сума не сошёл. Почти неделю починяли.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Архитектура более чем подготовлена ко всему. Я над этой архитектурой не один год размышлял.
Offtop. Поиграл наконец в эту карту Сталкер Живая Зона.
Грузилось ужастно долго, ппц просто. Минут наверное 10 грузилось. Я честно говоря думал - вылетит. У меня на видеокарте один гигабайт памяти всего, кстати надо будет обновить видеокарту, взять хотя бы гигов на шесть.
Но как ни странно - загрузилось и заработало. Если ходить по окраинам карты, то в целом не тормозит даже, под сотку фпс выдаёт, но в центре где много домов, много геометрии, там до нуля падает и ничего не сделаешь.
Решение - смотреть себе под ноги и напевать песню.
Корочи на этой карте, представьте себе расположилось минимум 20 локаций, причём как из оригинального сталкера, так и новых. И все вместе они образуют закрытый город Припять. Правда ЧАЭС на этой локации нет, ну то как бы и фиг с ней. И знаете, ведь вполне неплохой городок - небольшие микрораёны, поликлиника, магазины, дома быта, рынки, ЖД-станция - ну вообщем всё что нужно для жизни. Хорошее дело такие вот городки, жаль что после развала СССР они превратились в депрессивные.
Или вот как в случае с Припяти - из-за аварии.
Теперь, собственно, немного технических данных:
1. На этой карте 86 лайтмап 1024х1024, как я понял там содержится только тень от солнца и ничего более. В любом случае на таких вот размерах уровней использовать лайтмапы не вариант.
2. Сам уровень весит на удивление мало, если взять без AI-сетки, лайтмап и упрощённой геометрии (я так до сих пор и не понял зачем она нужна), то всего-навсего 2.5 гигабайта, из них 1.25 гигабайта колоизация, 1.15 гигабайт видимая геометрия. Вот это кстати не понял, почему колоизация весит больше чем видимая геометрия. Такого быть ну точно не должно.
3. Лайтмапы эти весят 178 мегабайт. Ну в принципе терпимо, для такой карты-то.
4. Уровень сохранён в самый-пресамый обычный сталкеровский формат.
Это означает, что он целиком уместился в разрешение флоата. Уж не знаю сколько там квадратных километров, но бегать я по нему реально заманался. А я ведь толком и не глянул ничего, всё на бегу, носом в пол.
5. При попытке разобрать карту на запчасти декомпилятор ожидаемо вылетел с нехваткой памяти, ну оно и неудивительно.
На мой взгляд наполнить такую локацию геймплеем будет крайне непросто. А если и получится, то играть на ней можно будет неделями, причём большая часть времени уйдет просто на нарезание кругов. Вы учтите, что тут фактически закрытый город целиком уместился, люди ИРЛ годами в таком жили не покидая его. И ничего - не тянуло их куда-то.
На мой взгляд куда лучше взять вот такую локацию типа небольшого города и максимально наполнить её событиями. Чем делать тупые игры про космос, где ты большую часть времени летишь в грёбанной пустоте.
То есть если бы допустим на эту локацию со временем завезли геймплей - я бы с удовольствием вспоиграл. Впрочем думаю, что так оно и будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Потому что там индексы лайтстилей, их нельзя сжимать с потерями.
Но можно сделать единую конфигурацию лайтстилей на все страницы - как в сталкере. Отключаемую разумеется. Тогда вся эта информация просто не понадобится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, дописываю документацию по языку. Потом надо будет собрать плагин для джека в 64 бита и приступим к закрытому тестированию.
Добавлено 10-11-2023 в 23:23:
Закрытое тестирование - это совсем закрытое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Основная документация по языку готова. Осталось написать ещё два приложения к документации.
Добавлено 11-11-2023 в 19:23:
Чтож, работы по написанию документации завершены. Разумеется она неполная, разумеется она будет в дальнейшем меняться, улучшаться и уточняться. Но она хотя бы есть. А ведь могло бы и вовсе никакой не быть, особенно в случае, когда продукт является opensource и его автор предполагает, что люди будут в нём разбираться, просто читая исходный код.
Добавлено 11-11-2023 в 19:26:
Пока что по документации не получено обратной связи в телеграм-канал ничего писать не буду, это ориентировочно воскресенье-понедельник.
Мне так же требуется произвести некоторые исправления и улучшения в утилитах конвертации и собрать плагин для джека в 64-бита.
И начнётся первичный закрытый процесс бета-тестирования SDK.
По его завершению будет опубликован SDK для официальных бета-тестеров.
К концу следующей недели ориентировочно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Супер, ждём
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сделал ревизию QuakeNT. Дописал недостающих монстров из платных эпизодов, прописал им эффекты, исправил кое-какие багги, в частности игрок не всегда хотел выныривать из воды.
Добавлено 12-11-2023 в 18:55:
Оформил движок в виде исполняемого файла. Это самое надёжное - можно быть уверенным, что такой движок запустится всегда. Соответственно, пользовательский запуск движка выглядит теперь примерно следующим образом:
1 | int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) |
2 | { |
3 | char cmdline[1024]; |
4 |
5 | // generate final commandline |
6 | strncpy( cmdline, "bin\\xashnt_core32.exe -game quake ", sizeof( cmdline ) - 1 ); |
7 | strncat( cmdline, lpCmdLine, sizeof( cmdline ) - 1 ); |
8 |
9 | // run engine |
10 | return WinExec( cmdline, SW_SHOW ); |
11 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Это квар cl_sidespeed регулирует
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Как работать с Дельтой в твоём движке? Есть ли аналог Start/FixedUpdate/Update/LateUpdate? Покажи примеры.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
transform.position += m_Velocity * Time.deltaTime; |
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | void EXPORT ServerActivate( void ) |
2 | { |
3 | progs->ServerActivate(); |
4 | } |
5 |
6 | void EXPORT ServerDeactivate( void ) |
7 | { |
8 | progs->ServerDeactivate(); |
9 | } |
10 |
11 | void EXPORT ServerStartFrame( void ) |
12 | { |
13 | progs->ServerStartFrame(); |
14 | } |
15 |
16 | void EXPORT ServerRunPhysics( int e ) |
17 | { |
18 | progs->RunPhysicsForObject( e ); |
19 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Движок не имеет права просматривать\вызывать ничего, пока пользователь ему явно это не разрешит. Т.е. скриптовая машина движком управляет, а не наоборот.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Редкие кадры. Наверное всем интересно, что же там в сталкере за нормалки такие с диффузией ошибки, почему их так корёжит и нужны ли они вообще?
Ну вот вам два скриншота - первый без коррекции ошибок, а второй с коррекцией.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что он корректирует? Ещё у тебя у нормалей зелёный канал инвертирован.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Я так и не понял, это артефакты сжатия dds?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну да
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, ну в Юнити такой же есть. Хорошая штука.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Что-то мне подсказывает, что это DXT-компрессор был калечный в те далёкие времена. Ну не должно быть таких артфактов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
При портировании ксашмода на NT ты учтешь замеченные баги? Например те что были исправлены в прайме? Или те что Айнекко нашел когда спецназ гоняет не с тем оружием которое выставлено?
Crystallize
NT движок куда более масштабнее чем ксашмод.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В первую очередь в ксашмоде нужно исправить секвенции игрока - дерганье модели от третьего лица и так далее. Там что-то с гейтсеквенциями.
Я все жду того самого обновления ксашмода, который вроде как обещался (?) и надеюсь что там это профиксят.
Предвосхищая вопрос "что же вы сами за столько времени это не пофиксили", ну, копанием в коде ксашмода активно занимаюсь только я, а в прайме код рендера уже весь из паранои - и там SNMetamorph сейчас занимается конкретно графикой и вроде как залез в physx.
Мне в студиомодельрендере касаемо игрока не получается разобраться, а больше и некому.
__________________
Мой мод на Xash
Я от своих слов не отказываюсь, но сроки пока называть не буду.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Товарищи, вы ещё учитывайте, что обновление старого ксаша будет так или иначе привязано к новому. Чтобы в старом ксаше появились некоторые возможности нового - в частности поддержка формата .csm.
Это хороший формат и я его буду всячески рекомендовать для использования.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой мод на Xash
__________________
Мой сайт
Xash3D Modding Discord
Хранит статичную геометрию - позицию вертекса, нормаль, цвет и два UV-канала, для текстуры и лайтмапы. Компилятор уровней, загружая эту модель дополннительно её обрабатывает - генерирует развертку лайтмапы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Компилятор виз изобретен заново. А вообще интересное стремление работу компьютера перекладывать на человека. Хотя надо-то наоборот. Каждый раз в этом контексте вспоминаю свое стремление подрисовать лайтмЭпы в фотошопе.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вот и виз с трейсами подъехал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Порталы в окнах домика это я так понял совсем не то что функ-порталы в ксашмоде?
Можешь показать сравнение одинаковой геометрии с тру-индиректом из HL против индиректа по полусфере из NT?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ёмое, какие-то полигоны друг друга проверяют, что такое я прочитываю?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В xash3d/ксашмоде очень кстати не хватает такой оптимизации, что при закрытой двери отсекалось бы все то, что за ней. Понятно, что двери могут быть и прозрачные, но допустим даже если по флагу "отсекать видимость".
__________________
Мой мод на Xash
В хл2, если кто помнит, ареапорталы даже в выбитых окнах работали -- просто изображение в них заблюривалось и портал закрывался.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отсекать одни ёлки другими бессмысленно - эта операция займет больше времени чем их отрисовка. Вот если скажем гора, а за ней ёлки - тут у нас сплошной профит получается.
Добавлено 18-11-2023 в 00:31:
Поэтому только туман + дальняя плоскость.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А можно, например, сделать такую оптимизацию?
Например, сначала у нас рисуются браши, потом модели. Есть чистое поле. Стоит брашевая стена, непрозрачная, пусть даже func_wall (видимость не отсекает). Но модели за этой стеной все равно рисуются, хотя игрок их не видит. Нельзя как-то сравнить масштабы стены и глубину, делать нужные проверки и вообще не вызывать рендер этих моделей?
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне кажется, на производительность в контексте Ксаша больше повлияет склеивание нескольких моделей в одну, чем такие вычисления. Учитывая, что моделька проверяется на видимость по своему оригину, то как быть в твоем случае, если стенка перекрывает оригин модели, скажем, опоры ЛЭП?
__________________
Мой мод на Xash
Ну так на то и дан разработчику живой ум, чтобы эту задачу решать в жестких рамках.
__________________
Мой мод на Xash
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Чтож, SDK выложен, миграция на новый форум продолжается, но эта тема ещё не потеряла своей актуальности. Она будет закрыта по достижению 256-страниц. Сейчас мы на 224-й странице.
Вторая часть блога разработчика выйдет уже на новом форуме.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Обнови первый пост что ты мигрировал на новый ресурс. А то малоли найдутся ещё слоупоки которые всё пропустили.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
F.A.Q. обновил, естественно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что за новый форум?
__________________
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
(_-=ZhekA=-_) https://t.me/xashnt/102
__________________
ㅤ
Дядя Миша, ты писал в закрытой ветке в уже закрытой теме, что в гта могли текстуры загрузиться, а коллизия нет, и игрок проваливался. За всю жизнь не помню такого даже в самых старых III и VC. А вот наоборот, когда текстуры не догрузились — да, это всем известные удары самолета об невидимые столбы и деревья например
https://www.youtube.com/watch?v=gvFcg_Rc8_I
https://www.youtube.com/watch?v=tSGuWyxRhBc
Забавно что в старых ГТА можно провалиться уже на загруженных локациях
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Decay зайди пожалуйста в закрытую ветку и следуй инструкциям.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Decay я помню такое. Но и текстуры в таких случаях успевали загрузить только один из самых мутных мипов.
Дядь Миш, А можно ли и куда-нибудь на рдаче сохранить первоначальные логин-пасс на новый форум?
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Camblu_Buildovich в телеграме есть, ссылка на телегу у меня в подписи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А форум бесшовной реальности надолго прилег?
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Работы ведутся, может быть недоступен, да.
Уже работает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли считать переезд на другой форум концом эпохи xash.ru? Как раньше считали переезд на КСМ?
Ещё 32 страницы нам тут флудить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Дык эпоха xash.ru закончилась ещё с момента потери домена.
А для конца эпохи hlfx.ru нужно чтобы я на какой-то другой форум переехал. А мне некуда.
__________________
А вот скажите мне товарищи - часто ли используется эта схема огранизации файловой системы, как это было принято у Кармака и впоследствии перешло на первую халфу?
Я имею в виду базовая папка с игрой а к ней можно подключать папку мода, из которой доступны все ресурсы. Это вообще ещё актуально?
Скажем в Юнити или UE такое практикуют? Как вы это видите?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да, но народ же кушать не может, "у меня игра, у меня игра, не какой-то там мод!".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
ㅤ
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Энтити это теже блюпринты просто неудобные и без нормальной визуализации.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro блин я всё время забываю что все скрипты уже написаны за меня и их только скачать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
FiEctro есть три подхода к разработке игры:
1. дизайнер расставляет объекты и связывает их событиями.
2. дизайнер расставляет ноды и пытается через эти ноды заставить объекты что-то делать
3. дизайнер углубляется в код и понимает, что кодить куда интереснее, чем расставлять объекты. С этого момента он уже потерян для мира как дизайнер.
На первом подходе сделана куча игр и модов. Второй подход - это то, чем вы занимаетесь на Юнити, без особенных успехов. Движение есть, а результата нет. Третий подход как правило ведёт в никуда. Но есть исключения.
Добавлено 19-12-2023 в 08:24:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Мода по кругу идёт. Завтра твои ноды объявят deprecated, что ты будешь делать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Deprecated - это нежелательный к использованию. Не уберут конечно, но новое поколение начнут учить чему-то другому.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Нет, вопросов не надо задавать. Лучше самостоятельно задумайтесь.
А ещё лучше - посмотрите фильм целиком.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем товарищи для корректной работы инстансов, они же детайлы, они же MU-модели, придётся ещё раз сломать совместимость формата уровней.
Я какое-то время полагал, что достаточно достроить в движке эту подсистему, но нет. Там всё придётся переписать. Впрочем от вас потребуется только пересобрать потом уровни заново.
Добавлено 21-12-2023 в 23:26:
Вот тогда и на сталкере будет нормальный фпс, кстати.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Хочется надеяться
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообщем минимальная версия OpenGL для запуска XashNT - это версия 3.2
Но судя по тому, что ни у кого проблем не возникло - у всех железо удовлетворяет этому требованию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это какому гефорсу соответствует? 8800?
__________________
Вообщем, начиная с Intel HD Graphics 2012-го года выпуска, восьмая серия жирафов и Radeon HD 2000 и выше.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообшем учитывая устройство современного конвейера GPU вооруженного ксашевской системой материалов и организацией конвейера рендеринга в движке можно с уверенностью сказать - движок за тормоза более не отвечает. Только пользователь. Какую геометрию скормит, какие шейдеры напишет - так и будет тормозить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну как же: Unreal 5. Карту-коробку создал, а там уже 30 фпс почему-то.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
И кстати восьмая серия жифорсов - последняя векторная специализированная архитектура конвейеров. В следующем поколении уже пошли юниформ блоки с плавающей точкой, без чёткого деления на растр-вектор. Отчего стало возможным тут же реализовать Куду. Что и было с успехом проделато.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Ну чтож, реорганизация формата уровней для ускорения работы инстансов успешно завершена:
Карта, прямо скажу, не особо подходящяя для таких тестов, но времени это всё тестировать на картах Сталкера у меня уже не было.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Инстансы на данный момент превратились в прозрачную для пользователя систему. Он просто ставит кучу одинаковых объектов на уровень и не задумывается над тем, как именно движок будет их рисовать. Но в возможностях при этом не теряет ничего.
Добавлено 31-12-2023 в 13:15:
Единственный момент - для инстансов качство лайтмапы автоматически ухудшается вдвое, а то никаких страниц не напасёшься. Но как правило этого никто не замечает + легко отключить в дальнейшем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Для травы даже повертесное избыточно.
Добавлено 31-12-2023 в 14:43:
А оно там есть как раз потому что система не знает, какую модель поставили на уровень
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На фоне постов ДМ в телеге, мне стало интересно, а насколько хорошая идея мержить созданную траву в более крупные кластеры? Ну тоесть изначально это мешб 1 кустика = 1 объект, а мы например делаем 100 мешб в 1 сетку = 1 объект? Или это разрушит инстансинг? Ещё я провёл некоторые тесты и понял что такие меши весят многовато, вес кластера обжшки могут доходить до 2х гигов (это где то 250тыс кустов по примерно 48 вертексов), но благо движок не хранит их в таком виде.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro почему именно такое странное сочетание - кубы в VR, я это хотел узнать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Не понял насчёт разрушений. Каких разрушений?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
как в ред фрекшене, ты же помнишь игру такую?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
https://assetstore.unity.com/packag...oject-pro-87744
Думаю будет интересно - реалтаймовое построение навмеша.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Для статичного уровня используется предрассчитанный патч в который вносятся поправки с учётом положения динамических тел.
Кстати-кстати. По идее я уже в сл. месяце буду как раз решать эту задачу и задействовать встроенные механизмы навигации.
Добавлено 28-01-2024 в 14:29:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Процедурно-генерируемый ландшафт это параметрическая поверхность, это ни о чём. Если бы речь шла о динамической генерации навмеша на произвольной геометрии, то да. Но смысла в этом нет - давно рулят предрассчёты.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
То что ящик движется - прекрасно делается на уже предрассчитанном навмеше. Находишь то место которое твой ящик перекрывает, и помечаешь ноды под ним как неактивные, всё. A* уже ищет другой путь.
Потом ящик передвинулся - старые ноды обратно включил, новые выключил.
Добавлено 28-01-2024 в 16:13:
Это с любыми обстаклями работает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как ты проверяешь бокскастом размером с монстра?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Не понял вопроса
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Как ты определяешь пересечение ноды с ящиком?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
И ещё вопрос в довесок, как быть с дверьми?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Каждый дискретный кадр движения физического тела, которое потенциально может перекрывать навмеш. Ну разумеется при условии, что оно вообще куда-то двигалось или хотя бы крутилось.
Добавлено 29-01-2024 в 14:33:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Что такое Иерархический поиск А* (на 38 секунде)? Чем он отличается от обычного A* и как работает?
Впрочем для Юнити он существует.
https://www.youtube.com/watch?v=1Q8zlnZXKec
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Я и говорю - нод на карте миллионы могут быть. Ты что, собрался каждый кадр все ноды проверять на пересечение?
Добавлено 29-01-2024 в 19:54:
ЗЫ. А что за амбар-то?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ты неверно интерпретируешь слово кластеры. Это просто ускоряющая структура типа того же AABB-дерева для быстрого поиска конкретной ноды в трёхмерном пространстве. Только и всего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Не очень понимаю, покажи пример.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro когда займусь навигацией всё расскажу и покажу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
Я рассчитал навигационную сетку. Теперь надо ей воспользоваться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
То была просто тестовая карта из PrimeXT, я проверял как модельки превращаются в браши. Ну вот на этом тестовом домике - отлично превращаются.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, вот руки наконец-то дошли до поиска путей. Собственно сам поиск - это реализация алгоритма A*. Тут вроде как иных вариантов попросту нет, по крайней мере на первый взгляд. Однако, кроме непосредственно поиска пути, нас интерисует ещё несколько вещей:
1. рассчёт сетки на статичной геометрии. Это я успешно проделал весной прошлого года, где-то тут в теме есть скриншоты. Теперь у нас есть сетка доступности в рамках статичной геометрии. Хорошо, но это только половина дела.
2. блокировка сетки с учётом подвижной геометрии. К подвижной геометрии мы можем отнести все лифты, двери, вагончики, а так же других монстров и игрока.
И вот какие у нас тут есть варианты? Я к примеру не знаю как это устроено в Юнити\Унреале, но руководствуясь здравым смыслом и тем фактом, что ни в одной игре ни один монстр не добирается до конечной точки мгновенно (тогда бы его было проще туда телепортировать, а поиск пути был бы вообще не нужен), можно наметить два сценария:
1. Сперва делается поиск по статичной геометрии, а поправки на динамическую вносятся на каждом шагу, который сделал монстр.
2. Динамическая геометрия может вносить изменения в статичную сетку.
Я склоняюсь ко второму подходу, но с элементами первого. Если мы к примеру выбрали первый вариант, он нам рассчитал доступность пути, монстр по нему побежал и тут внезапно оказалось, что на пути есть закрытая дверь. И монстр будет в нее безнадёжно долбиться, прямо как в халфе. Кому такое интересно видеть? Во втором варианте идея в том, что ячейки навигационной сетки линкуются в тоже самое AABB-дерево, что и физические объекты. Поскольку это делается каждый кадр и обязательно для физики (чтобы искать объекты), нам даже не придётся перестраивать архитектуру всего этого дела. Только лишь определить какие именно объекты нам надо указать в качестве фундаментальных блокираторов пути. А дальше их линковка в сетку автоматически пометит те или иные ячейки как недоступные и A* будет это учитывать. Что немаловажно - мы например можем исключить из блокираторов двери, которые монстр в состоянии открыть самостоятельно - для него они будут прозрачными.
Единственный минус такого подхода - мы не сможем фильтровать объекты на уровне разных монстров. Ну типа один может открывать все двери, а другой - только определённые. Хотя и это можно решить, например заведя маску блокировки. Ну пока что не требуется. Обычно идёт разграничение на скриптовые двери и двери, которые могут открыть все.
А игроку построение пути не нужно.
Что же касается элементов второго подхода, то на мой взгляд блокировать сетку перемещением тех же NPC смысла не имеет. Пока наш монстр добежит, там уже 10 раз всё поменяется. Поэтому огибание локальных препятствий (в виде ббокса монстров) можно оставить классическим - т.е. так, как его реализовал Кармак - через рандом и сохранение общего направления пути. Потому что обогнуть таким образом ббокс получится, а вот найти более сложный путь - уже нет.
Собственно, именно поэтому монстры в кваке такие тупые.
Плюс в том, что проверка локальных перемещений больше не требует тяжёлой трассировки уровня, т.к. мы движемся по предрассчитаному пути, который гарантировано проходим.
Собственно пример того, как закрытие двери обновляет навигационную сетку:
Это всё делается на самом низком уровне, поэтому мы не зависим от логики самих дверей или лифтов. Дверь может остановиться в любом положении и в сетке будет доступен именно проход по ширине щели.
Ну и ещё об одном моменте хочу сказать. Если бы я смержил эти ноды в меш, то уже не смог бы проделать эту фишку. Так что пожалуй пока остановлюсь на дискретных нодах.
Добавлено 03-02-2024 в 14:52:
Поговорим об общей философии поиска пути. Учитывая что практически всегда используется A* либо его модификации, для увеличения скорости работы. Алгоритм находит кратчайший путь между двумя точками.
В переводе с человеческого на машинный это означает:
1. Найти все возможные пути из точки А в точку Б
2. Выбрать самый короткий из них
Оптимизация предполагает, что мы не будем трассировать все пути, а осуществлять непрерывную коррекцию дистанции прямо в процессе поиска, т.е. кол-во шагов сокращается. Всё это довольно долго.
Я смотрю на это дело следующим образом. Нахождение пути используется только и исключительно монстрами, которые в игре призваны имитировать живые существа, либо человекоподобных роботов. И те и другие могут ошибаться, как ошибается в реальной жизни и сам человек. Т.е. когда маршрут очевиден - человек разумеется выбирает кратчайший путь.
Если маршрут неочевиден, может быть выбран и не самый оптимальный путь.
Для игры это некритично. Ну сделает монстр десяток лишних шагов, так что же с того? Наоборот подобное поведение придаст ему больше человечности, он не будет ломиться каждый раз по одному и тому же пути.
Таким образом мы приходим к простой мысли: для большинства случаев нам вовсе необязательно искать все доступные пути и затем выбирать наилучший. Будет вполне достаточно найти из приемлимых. Это куда проще и быстрее. Мы можем использовать тот же самый алгоритм, который использует квейк для поиска пути - выбор одного из четырёх направлений + рандом. Вот только от квейка, который каждую ячейку долго и муторно тестирует на предмет заполненности геометрией, наличия обрывов, уступов, возможности сделать шаг вверх\вниз или скажем наличие водной преграды, в моём алгоритме ничего этого не понадобится - т.к. ячейки уже заранее предрассчитаны и если между ними есть связь, значит шаг возможен. Проложение пути осуществляется по кратчайшему расстоянию между точками. У каждой ноды - четыре соседа.
Значит аппроксимация для углов, отличных от 90 градусов - просто чередование смены направлений. Сперва влево, потом вправо.
Можно и локальный рандом подмешать, он погоды не сделает. Монстр не обязан бегать как по рельсам. Я помню как в P2 меня покоробило, что солдаты бегут по нодам именно как по рельсам, несмотря на все триангуляции. Но зато математически всё чётко - не придерёшься.
Опять же режим поиска может настраиваться при помощи флагов, например. Помоему такой фишки ещё нигде не было.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
У меня такой вопрос с которым я сам столкнулся. Вот если сам игрок и монстры будут являться преградой для А* то как поступать? Ну ладно упростим, игрока игнорируем его обходить не будем. Но что делать с монстрами? Они могут окружить игрока и тогда поиск пути к игроку будет невозможен. И тут я столкнулся с такой проблемой что вот именно в таком конкретном случае дерево начинает беспомощно разростаться в надежде найти нужный путь, и следовательно тормозить.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Как правило при большом количестве мобов проблема в том что они сбиваются в длинную очередь и плетутся паровозиком за игроком.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так ты в итоге от навмешей отказался в пользу обычных нодов? Не особо понимаю какой концепт на текущий момент времени.
__________________
Мой сайт
Xash3D Modding Discord
Навмешы я и не делал никогда. Я просто обратил внимание, что навмешы делаются из этих же самых нодов. Путём аналитической склейки нодов в примитивы. Вот этот шаг я просто не стал выполнять. Потому что ноды оказалось дико удобно выключать перекрывающими объемами, что с навмешем уже не проделаешь. Да я же серию картинок приводил.
У нодов единственный минус - то что их много, а так они даже удобнее в работе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такую штуку ещё нашел, но пока не выкурил как это работает.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Забавно. У меня изначально мысль работала как раз в направлении vector field pathfinding, я даже другие варианты и не рассматривал, мне этот казался самым очевидным. Собственно, именно его я сейчас и делаю.
Добавлено 05-02-2024 в 09:43:
Причём я вообще не штудировал никакой литературы на этот счёт, просто опирался на собственный опыт.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Досмотрел видео. Ну как обычно, начали за здравие. Какая нахрен карта градиентов в рантайме? А если у меня четыре миллиона нодов?
Нет, у меня иной принцип.
Добавлено 05-02-2024 в 09:53:
Я не планирую строить никакие карты градиентов. Поиск пути должен закончится быстрее, чем будет построена эта карта.
Добавлено 05-02-2024 в 11:13:
Итак, первые опыты. Когда я говорю "первые опыты", это означает, что создан механизм линковки нодов в AABB-дерево, создана пользовательская команда для построения пути из глаз игрока до точки прицела, создан механизм визуализации, которые показывает построенный нами путь, раскрашивая его градиентом от красного (начало) до зелёного (конец),
и написан простейший эвристический анализатор, задающий вектор пути для поиска без перебора. Посмотрим как это выглядит:
На последней картинке путь упирается в препятствие, не в силах его обогнть - алгоритм пока что такое не умеет.
Добавлено 05-02-2024 в 11:19:
Теперь, собственно, как это работает. У каждой ноды есть четыре соседа.
Они идут в строгом порядке, сосед с индексом 0 - это левая нода, сосед с индексом 1 - передняя, итогдалие. Т.е. по часовой стрелке.
Зная эту особенность, мы всегда можем вычесть позицию конечной ноды из текущей, нормализовать получившийся вектор и при помощи нехитрой функции, превратить направление в индекс ноды, которую нам следует выбрать. Именно поэтому путь сперва прямой, а затем начинает заворачивать. Я не берусь утверждать, что найденный путь является кратчайшим, но это не имеет никакого значения. Потому что живые существа далеко не всегда выбирают самый кратчайший путь.
Достаточно чтобы он был приемлимым.
Добавлено 05-02-2024 в 12:07:
То что приведено на рисунках выше - это просто прямой путь.
Если он упрётся в препятствие, то всё закончится. Добавим к алгоритму так же поиск ближайшего пути с учётом проверки на наличие уже пройденных нод. Ну чтобы путь случайно не закольцевался. Пусть лучше сфейлит.
Как видите - это вполне неплохо работает. Препятствия огибаются. На третьем скриншоте изображён фейл - я хотел попасть в самую дальнуюю комнатку, алгоритм упёрся в угол и всё закончилось. Чтобы избежать такого поведения, нам надо сохранять лишь часть нашего пути и делать бэкапы в спорных местах. Спорное место - это когда мы упёрлись в блокирующую ноду, очевидно. Учитывая организацию нод в пространстве - у нас есть фактически бинарный выбор. Мы можем попробовать обойти препятствие либо слева, либо справа.
Добавлено 05-02-2024 в 12:09:
Прикол в том, что в поиске пути при подобной организации нод есть всего-навсего четыре варианта действий:
1. прямой и тупой поиск.
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'
__________________
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
Дядя Миша
Я вот что подумал, а что если узкие проходы помечать как более приоритетные? Конечно в туннеле в 1 шаг делать это бессмысленно, но в твоём бы случае думаю это сильно помогло. Ведь даже человек бессознательно ищет как первую цель именно первый дверной проём. Что то в этом есть.
Ещё появилась такая мысля что для предрасчитаной статичной сетки можно и предрасчитать A*. Но это пока просто мысли, я ещё не обдумывал всё.
Дополню что можно сделать перебор по построению пути между комнатками, т.е. искать заранее не объект, а комнату относительно другой. А вот уже игрок будет искать ближайшее A* дерево т.к. ему ещё до начала поиска известно в какой комнате находится цель и в какой он сам.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну, собственно. Впрочем, он частенько фейлит.
Буду думать.
Добавлено 05-02-2024 в 19:32:
Тест на реальных уровнях:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По скриншотам вроде всё ок?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ещё проще - ноды, где кол-во связей менее четырёх.
Да, ты прав, что-то в этом есть. Я подумаю над этим.
Можно замутить локальную трассировку между такими нодами.
Добавлено 06-02-2024 в 00:11:
A* почти во всех движках запускается в фоне, никто не может гарантировать что путь будет рассчитан за приемлимое время.
Мда.
Добавлено 06-02-2024 в 00:14:
А ведь действительно. Зачем мне бегать по этим нодам, я если я могу замутить в пространстве нод трассировку, как будто бы это не ноды, а реальная геометрия.
Скажем стрельнул по направлению к цели - ага, фейл, значит, стреляем между корнерами. Ну посмотрим. Идея интересная.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ещё такая мысля что монстр может искать только самую дальнюю ноду в прямой его видимости в 2д пространстве. Дабы не ходить и облизывать каждый угол на пути к очевидной цели.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Поизучал вчера навмешы в юнити и UE3. Ну что сказать. У меня сложилось впечатление, что навмешы начали использовать вот как раз в силу невозможности оптимизации AStar. При этом огребли проблем, например с расстановкой обстаклей, которые теперь в этих мешах должны выгрызать дыры (ну а как ещё?). Да и сам факт, что пространство больше не квантизировано, мешает сохранять какую-то дополнительную информацию. Ну скажем я бы мог в нодах на берегу водоёма установить подсказку - форсирование водной преграды. С навмешами, понятно, такое уже не прокатит.
Добавлено 06-02-2024 в 09:34:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Потестировал свою конструкцию в сталкере. Ну в принципе норм.
Скорость рассчёта весьма быстрая, если речь только о поиске пути при наличии визуального контакта, то мой алгоритм почти всегда справляется.
Если же речь о том, чтобы монстр честно прорвался с одного края карты на другой, пока его никто не видит - то увы. Скорее всего сфейлит.
Но скажем поиск пути, когда враг забежал за угол или за два угла - вот это всегда работает чётко. А ведь именно это в играх и бесит больше всего.
Игрок за угол забежал - монстры его потеряли. Так быть точно не должно.
Добавлено 06-02-2024 в 14:09:
Постепенно приходит понимание, что алгоритм полного и честного поиска пути через перебор всех существующих ячеек на данный момент мне просто-напросто не нужен. В первой-второй кваке монстры вообще искали игрока тыкаясь в примерном направлении, куда он убежал и останавливаясь на каждом шагу. И ничего, игроки им эту тупость вполне прощали.
Моя реализация позволяет успешно огибать не слишком сложные препятствия, вплоть до поиска пути с одного этажа на другой.
Зато скорость поиска такого пути - мгновенная. Ну почти.
Так что я буду оттачивать и отлаживать свой алгоритм.
Добавлено 06-02-2024 в 15:33:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как кстати боты в той же кваке третьей путь ищут? Там они довольно бодро бегают и не спотыкаются.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Так я же объяснял - через портализацию. Это спайка технологий трёхмерного навмеша, фиксированных хуллов и portal flow. Впрочем с обстаклями там дело обстоит так же как грустно как и с классическими навмешами. Но для кваки некритично, там из обстаклей только двери, которые может открыть любой бот или игрок.
Добавлено 06-02-2024 в 16:23:
Я ведь поначалу и сам хотел сделать нечто подобное, но оно не подружится с полигональной геометрией. Хотя я честно три недели копал в этом направлении.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://webdocs.cs.ualberta.ca/~mmueller/ps/hpastar.pdf
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Итак товарищи, я финализировал свой авторский алгоритм поиска пути.
При его разработке я сделал целую кучу допущений и активно опирался на уже имеющееся у меня представление навигационной сетки.
Допущения были следующие:
1. В подавляющем большинстве случаев монстру не надо прокладывать кратчайший маршрут через полкарты. Обычно это или маршрут по прямой, или маршрут буквой Г, если враг успел укрыться за углом. Нахождение подобного маршрута может быть решено крайне быстро.
2. В некоторых случаях, например если мы хотим попасть в какую-то точку сквозь узкий проём, допустимо реверсивное построение маршрута, в случае если прямой путь зафейлился.
3. Лучше просто зафейлить построение маршрута, чем пытаться найти путь, который возможно вообще не существует. При этом мы не должны привязываться ни к каким магическим константам или радиусам, в которых этот путь ищется. Иными словами фейл проблемного пути должен завершиться так же быстро, как и поиск существующего.
4. Пусть маршрут будет не слишком коротким, главное чтобы он построился быстро.
Исходя из этого я разработал алгоритм, основанный на движении по заданному направлению, сходимости и отскоке от препятствий, с вариативностью. Суть алгоритма сводится к следующему:
Каждую итерацию мы выбираем ноду, согласно направлению между текущей и финальной. Из четырёх нод мы можем выбрать только три.
Первой будет выбрана самая предпочтительная, затем - менее предпочтительная, затем самая нежелательная. Таким образом на каждом шаге у нас может образоваться три ноды. Первая нода используется в поиске текущего пути, вторая и третья (если они выбраны) добавляются к уже пройденному пути (текущий путь + вторая нода) и (текущий путь + третья нода), которые помещаются в массив частичных путей. Изначально частичный путь состоит всего лишь из одной ноды - стартовой. Ну и в процессе построения первого пути достраиваются остальные частичные пути. Дальше начинается самое интересное:
Если самый первый путь успешно достроился, то функция завершает свою работу и возвращает этот самый первый путь. Если же нет, то функция в цикле пытается достроить остальные частичные пути (попутно порождая новые на каждой потенциальной развилке). Вы конечно можете задаться вопросом, что подобное порождение всё новых и новых частичных путей никогда не закончится и всё это зависнет в бесконечном цикле. Да, но нет. Ведь мы с момента построения самого первого частичного пути помечаем ноды, в которых мы уже побывали, как бы ограничивая пространство. Таким образом, путь ведущий в никуда уже заведомо отсечён чем-то вроде виртуальной секущей плоскости (в роли которой выступает сам наш путь, завершившийся фейлом). Из-за этой любопытной особенности у алгоритма есть сходимость - только один путь из всех закончится успехом, остальные упруться в препятствия. Зная эту особенность нам нет нужды проверять абсолютно все частичные пути - первый, достигший конечной точки и будет валидным маршрутом. Этот момент ценен в качестве оптимизации. т.к. потенциально алгоритм может наплодить до десятка тысяч незаконченных путей, но если уже самый первый путь достигнет финальной точки, то нам уже нет нужды их проверять - мы справились. Так же в коде присутствует специальный лукап, чтобы строящийся путь не упёрся в препятствие уже на следующем шаге, что потенциально может привести не то чтобы к быстрому фейлу, а к весьма замысловатой и нереалистичной траектории маршрута, которая будет похожа на слишком длинную змейку, которая огибает сама себя.
Эта же штука сглаживает обход препятствий и ускоряет поиск маршрута.
Однако для сложных маршрутов она наоборот сама по себе является проблемой. К примеру с этой включённой эвристикой невозможен проход сложного лабиринта, или поиск пути буквой U, когда финальная точка находится сзади начальной, а начальная - соответственно в нише, выход из которой противоположен направлению между стартовой и конечной точкой. Поэтому я сделал данную эвристику отключаемой со стороны пользователя. Таким образом есть флаг глубокого поиск пути, который используется для скриптовых сцен, например, если монстру надо прорваться сквозь всю карту. Если же он просто следует за врагом, то выставлять этот флаг не надо - время поиска значительно ускориться.
Теперь мне надо финализировать отладочный режим поиска пути, чтобы провести углублённое юнит-тестирование и по его окончании, я выложу разные интересные скриншоты и комментарии. Повторюсь, главное свойство моего алгоритма - это поиск, на который требуется не более 0.001 секунды (или меньше). Вне зависимости от кол-ва нод на карте.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Всё же кажется что конвексный поиск который мы придумали был бы быстрее разрастающихся нод. Ну ладно, возможно такая реализация будет тоже хорошо работать, но конечно излишнее разрастание дерева это большой минус A* и причина тормозов. В конвексном поиске такого жесткого брутфорса уже не будет.
Надо будет уже у себя тогда поэкспериментировать.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Странно, похоже на баг, А* не должен так работать.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подозрительно высокий фпс при таком количестве дипов, что это за компуктер?
ZGreen
Так, а оригинальный сталкер разве меньше фпс даёт?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Да какая разница что там кто дает, предыдущие билды с таким дип сотку показывали.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://twitter.com/turanszkij/stat...UiQDN4n_7A&s=19
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сглаживание уже построенного пути - довольно простая и лёгкая задача на самом деле. Я планировал это потом тоже ввести, тем более что у меня путь потенциально может быть весьма затейливым.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
тут не только сглаживание, но и построение пути интересное, глянь видео по ссылке в свиттере
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Твиттор это экстермисткая организация, запрещённая на территории РФ.
Как я тебе гляну-то?
Но ты можешь рассказать своими словами.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Это ты с метой перепутал. Посмотреть можешь в дискорде я тебе в личку переслал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Не пускает меня в Твиттор. Потом посмотрю.
Ну а тем временем я успешно заставил монстров следовать маршрутом.
Причём они не бегут по нему как по рельсам, а лишь придерживаются общего направления. В каком-то смысле получается халявное сглаживание пути. Ну я примерно на это и рассчитывал.
Если можете себе представить - это нечто вроде навигации в халфе, с тем лишь отличием что мы не ограничены теми info_node, которые расставил дизайнер, а наоборот - путь корректно построится из любой точки в любую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ступеньки проверял? И как можно сделать навигацию в воде и воздухе (ихтиозавры и верталёты)? У них с навигацией в халфе было совсем всё плохо. Рандомно заполнять пространство нодами с большим шагом?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Осталось понять, чьи.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
ㅤ
Cybermax Если нужно одновременно стримить 2-3 потока плюс пара аудиоканалов и десяток чатов то нужен Дискорд.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
ㅤ
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, товарищи, по многочисленным просьбам трудящихся в Ксаш была добавлена полноценная поддержка PNG. Я взял реализацию от Шона Баррета, он там вроде что-то делал для ускорения распаковки сжатых частей изображения. Вообще удивительно конечно. В джипеге - точно такой же хаффман, но скорость загрузки отличается в десятки раз, например.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Новый формат игровых архивов\ассетов .bundle успешно внедрён во все подсистемы движка и написан плагин для Total Commander для менеджмента таких паков. Это тоже временная мера, пока нет своего редактора.
Так же этот плагин позволяет заглядывать внутрь каждого уровня, модели, спрайта и даже игрового кода на шоте, поскольку все ресурсы в ксаше - это точно такие же архивы, но с некоторыми незначительными отличиями.
Другими словами любой игровой формат может хранить в себе не только чисто специфичные вещи, такие как внутренние структуры формата, но и абсолютно любые ресурсы - например текстуры, звуки. Отсюда же растёт и потенциально бесконечная расширяемость форматов - нет никаких ограничений на кол-во лумпов в них.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Отличные новости, когда планируешь ближайшую обнову в бетатест ? И что там с .csm форматом? Ты вроде говорил что переделываешь его.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Материалы абстрактные, они не ограничены предлагаемым тобою набором параметров.
Добавлено 11-03-2024 в 20:38:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Но ведь обмен и так уже есть - между блендором и джеком и компиляторами, например. Разве есть разрезы?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Конечно есть, куда они денутся. Под разрезами имеются в виду не щели, а дублированные вершины и рёбра на тех границах, где не коллинеарно.
CSM не потдерживает рёбра. К тому же компилятор коллапсит вершины, их кол-во постоянно меняется. Этот механизм я трогать не намерен.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А зачем он их коллапсит? Это же не браши.
Для индексации, чтобы избежать дублирующихся вершин.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не очень понял. Ведь моделер по идее уже всё подготовил. А если я не хочу чтобы в этом месте они коллапсились?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Какой же у нас народ, дисциплинированный штоле. От меня новостей нет и все спокойно ждут, никто не торопит не задаёт вопрос "ну что там?".
Прямо даже тревожно как-то. Товарищи, вы здесь?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В движке можно игры одной лишь мышью делать без кода?)
__________________
Отличаюсь особой адекватностью!
Ты всё ещё портируешь Quake 2: The Comrades?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Отличаюсь особой адекватностью!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Какой текущий прогресс по портированию второй кваки?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Какие фундаментальные отличия твоего AI от AI в HLSDK?
Crystallize
Ноды вручную расставлять не надо
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
То что я написал - оно ближе к кушному AI. Но с возможностью проложить чёткий путь до врага или любой другой цели и заранее знать, если это невозможно.
Добавлено 23-04-2024 в 16:14:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добрался до важного момента - пора сделать освещение персонажей.
Да, вы уже видели в кваке, что они корректно освещаются, но не всё так просто. В кваке ведь только прямой свет. А нам надо собрать ещё и отраженный. Проще всего это сделать через амбиент-кубы, но их ещё надо расставить должным образом. В этом моменте и кроется основная хитрость.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
XF-Alien вообще-то я имел в виду монстров.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Похоже ни один из форматов, представленных в прошлогодней сентябрьской демке до следующего обновления не доживёт.
Формат исполняемых файлов виртуальной машины - поменялся. Причём поменялся уникальным образом. То что собрано новым компилятором - будет работать в старой версии (если не юзать одну фичу), а то что собрано старым компилятором - в новой версии работать увы не будет. Но зато виртуальная машина неплохо прибавила в производительности.
Формат CSM - обновился до версии 3. Причём я это обновление задумал ещё с апреля прошлого года, но тогда в нём не было смысла.
Формат уровней - тоже поменялся, для поддержки травы-растительности, всяких мелких детайлов вообще. Появился инстансинг.
Ну вот правда форматы анимированных моделей и спрайтов остались практически без изменений.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Кстати не думал так же о ландшафте основаном на маршевых кубах как в роблоксе? Если уж замарочился дисплейсментами из хл2 или кривыми из ку3.
И ещё хотел спросить, у твоей ВМ есть возможность разбивать выполнение кода на несколько потоков?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
У меня про инстансинг заботится сам движок и компилятор. Допустим ты ему даёшь на отрисовку деревья. Много-много деревьев. Очевидно их лучше всего нарисовать через инстансинг. Да вот беда - у каждого дерева минимум две текстуры, листва и кора. Компилятор это видит и расчленяет каждое дерево на две инстанс-группы. В одном будет только листва, в другом - только кора. Настройки меша (позиция, углы, скейл), они при этом берут из общей текстуры-контейнера, в которой всё это хранится и которая читается в вертексном шейдере. Так же для инстансов возможно освещение по одной точке (как в халфе, только лучше качеством), возможно им задавать коллизию и спавнить по поверхности. Но можно и вручную каждый кустик поставить. Ещё инстансы умеют автоматически опускаться на пол при компиляции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сегодня наконец-то был совершён важный прорыв. Теперь XashNT может обрабатывать в качестве геометрии для видимости модели, а не только браши. Т.е. мы можем сделать уровень моделью, пропустить его сквозь BSP-дерево и он правильно портализуется и разобьется на сектора, как будто был сделан из брашей. Технология пока ещё сырая и необкатанная, но в пределе XashNT позволит отказаться от брашей полностью. Это не значит, что он перестанет их поддерживать. Это значит уйдет требования наличия на уровне минимального кол-ва брашей, как это есть сейчас - например коробки-скайбокса. Иными словами можно будет целиком и полностью создавать уровни в Блендере или Максе. А в формате map или source останутся только точечные энтити.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Если геометрия сделана моделью, подразумевается, что дизайнер выполняет работу за компилятор в редакторе. Поэтому все CSG операции там производятся вручную. Тут и с классическим CSG довольно жесткие правила, которые в теории могут дать неверный результат:
1. браши сортируются по контентсам
2. солид жрёт небо и воду и пустые браши
2. небо жрёт воду и пустые браши
3. вода жрёт пустые браши
4. пустые браши не жрут ничего
5. структурные браши не жрут детальные и наоборот
6. браш, которые выше по списку - жрёт тот который ниже. Это самый спорный пункт, но для автоматического CSG ничего умнее не придумать.
С 95-го года мы пользуемся этими правилами.
А ты предлагаешь ещё и автоматически вычитать из полигонов моделей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил перечитать тему с самого начала, её скоро уже закрывать, по достижению 256 страниц. Память человеческая весьма ненадёжна.
Ну то есть мозг сам решает, что ему помнить, а что с забыть.
С превеликим удивлением узнал, сколько же было неудачных интераций у моей материал-системы. Сейчас-то она мне кажется вполне естественной и логичной, как будто бы я к ней пришёл сразу. А там - минимум пять промежуточных версий, причём в довольно короткий промежуток времени, около двух месяцев. Интересно.
Так же я там грозился полностью отказаться от лайтмап, обосновывая это тем, что накладывать лайтмапу на модели и убирать швы - это крайне нетривиальные занятия. Чтож, именно так и оказалось. Но я героически преодолел эти трудности
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Давайте отчитаюсь по проценту готовности основных подсистем среды XashNT, а то годы идут, народ пребывает в недоумении, когда же это всё станет полностью юзабельным.
Тут можно группировать по разным категориям, я пока ещё не решил, как лучше сделать, пока что вот так попробуем:
Что уже сделано:
1. компилятор уровней
2. компилятор статичного освещения
3. компилятор навигационной сетки для AI
4. конвертор-мигратор ресурсов для Q1\Q2\HL\P2
5. плагин для J.A.C.K. (создание уровней)
6. плагин для Total Commander (работа с архивами)
7. конвертор-мигратор ресурсов для S.T.A.L.K.E.R.
8. компрессор текстур в DXT
9. компилятор скриптового языка HeadShot
10. компилятор шрифтов из произвольного набора изображений
11. компилятор моделей со скелетной анимацией (не тестировался)
12. конвертор исходников Delphi->HeadShot
13. конвертор-мигратор ресурсов для серии игр Metro (неокончен)
14. утилита определения системных требований
15. собственно ядро самого движка
что ещё предстоит сделать:
1. плагин-просмотровщик формата CSM для Noesis
2. универсальный модельвьювер для просмотра ресурсов XashNT
3. редактор уровней для XashNT
4. компилятор моделей с вершинной анимацией
5. компилятор спрайтов
Это общая информация, теперь напишу детально и подробно список задач, из тех, которые уже сформированы:
1. поддержка сети\мультиплеера в движке
2. переработка звуковой подсистемы в движке
3. собственный формат хранения звуков (программируемый саунд-банк, саунд-фонт)
4. банк хранения анимаций для скелетных моделей
5. мульти-проходный рендерер (поддержка зеркал\порталов)
6. динамическое непрямое освещение (global illumination)
7. финализация компилятора моделей со скелетной анимацией
8. разработка компилятора моделей с вертексной анимацией
9. разработка компилятора спрайтов
10. портирование VCL (Visual Component Library) из Delphi на язык HeadShot
11. разработка универсального модельвьювера с некоторыми функциями редактирования
12. разработка редактора уровней, который потенциально станет редактором для всех ресурсов.
13. портирование игры Comrades на XashNT (почти закончено)
14. портирование игры Paranoia на XashNT
15. портирование тулкита XashXT на HeadShot (в основном код)
Это - те задачи, которые я чётко вижу, что они должны быть реализованы. В процессе, разумеется могут возникнуть ещё какие-то задачи.
Хотя на каждую задачу отведено по одной строчке, время их реализации сильно разное. Где-то достаточно будет одного-двух дней, а где-то и на полгода растянется. Самый главный момент, самая приоритетная задача для меня - это портирование VCL. Если мне успешно удасться это реализовать, то и всё остальное не будет представлять никаких проблем.
Это единственное, в чём я не уверен на 100% - получится ли. Весь мой предидущий опыт говорит о том, что должно получиться, но я подобных вещей никогда не делал, поэтому немного волнуюсь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
После портирования Камрадов сразу будет релиз какого то билда?
Наверное сперва надо модельвьювер сделать. Потом уже выложу билд.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Кстати почему?
Задачи разные у разных просмотровщиков.
Вьвювер скомпилированных ресурсов, к примеру будет использовать полноценный рендеринг, как и в игре. А вьюверу csm достаточно подгрузки текстур.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот кстати нашёл сообщение с предидущим отчётом:
https://hlfx.ru/forum/showthread.ph...6303#post196303
12 августа 2020-го года.
Прокомментирую пункты, которые планировалось сделать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Про нормали на моделях так же упомяну, может кому-то нет желания перечитывать всю тему с самого начала. Есть возможность пропустить в модель кастомные нормали и есть возможность доверить их генерацию компилятору. На усмотрение пользователя, вообщем.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Сегодня знаменательная дата! 02.06.2024 можно считать днём, когда движок наконец-то полностью и окончательно отвязался от брашей в качестве основного и определяющего строительного материала!
Отныне XashNT переходит из разряда брашевых движков семейства Quake, в семейство современных полигональных движков
Как это определяется? Очень просто. В брашевом движке вы не сможете построить уровень только из моделей, вам обязательно понадобится хотя бы небесная коробка, ну или что-то вроде этого. К тому же при таком подходе у вас не будет просчитана видимость. В XashNT теперь можно полноценно считать видимость без использования брашей, полноценно работает коллизия и накладываются лайтмапы. Тем не менее я не планирую полностью избавляться от брашей по двум соображениям:
1. Поддержка классических брашевых уровней из старых игр. Это останется по прежнему доступно, более того - XashNT будет собирать такие уровни гораздо лучше и точнее чем оригинальные компиляторы тех игр. Но есть и другая интересная возможность. Как вы знаете эти уровни довольно плохо поддаются декомпиляции обратно в браши (зависит от формата BSP). Так вот, теперь есть возможность сдампить эти уровни в полигональную модель и скомпилить обратно под XashNT. Единственное что потребуется от моделлёра - это расставить порталы для обеспечения видимости. Впрочем их потребуется расставить в любом случае. Так что этот кейс сохраняет одно из важных направлений для любителей возиться со старыми играми и поэтому я не могу его просто взять и выбросить.
2. Несмотря на то, что XashNT умеет обходиться полностью без брашей, они ему всё же нужны. Для трёх важных случаев:
- Без брашей не будут работать триггеры. Вернее будут, но не слишком чётко. Могут срабатывать через раз, зависит от протяжённости триггера и места его пересечения другим примитивом. Полигональный движок коллизии может весьма точно определить момент пересечения двух тел, но нет абсолютно никакой возможности точно определить - продолжает ли тело застревать "в текстуре" или уже освободилось. Именно поэтому вы и наблюдаете чертопляску когда код антизастревания пытается вытолкнуть объект из текстуры. Потому что пересечения определяются по пересечению рёбер, а это происходит далеко не всегда. Это не ограничение XashNT это ограничение любого полигонального детектора коллизии. Решения этой проблемы не существует в принципе.
Точнее существует - в виде брашей, т.е. конвексных замкнутых примитивов
- Так же без брашей и по той же причине будут не очень хорошо работать всякие давилки, типа дверей, поездов и прочего. Хотя могу сказать, что в принципе этот момент в будущем скорее всего будет успешно исправлен. Ну просто потому что поездам не надо проникать в игрока, в отличие от триггеров. Просто на данный момент используется старый код детектирования коллизии из Quake (естественно в кодобазе на Shot, не в движке).
- Водяные объемы. Ну тут всё просто - нахождение предмета в воде определяется по результату возврата функции POINT_CONTENTS, а контентсы можно считать только и исключительно для объема. Если в первыми двумя пунктами ещё есть вероятность, что я это дело разрулю и исправлю, то здесь без вариантов. Вода будет работать только и исключительно с брашами. Если в движке нету брашей, там соответственно нет и никакой воды. Либо вода есть - но фейковая, как в Сталкере. Либо вода есть, но глобальная на всю карту и задаётся через гигантскую плоскость, как в Кризисе. А вот чтобы делать какую угодно воду, как в Quake - тут без брашей не обойтись.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вроде как в любом физическом движке есть замкнутые коллайдеры для триггеров? Причём и трассу ими можно делать, там коробкой, сферой или капсулой. А вот для полигонов уже мешколайдер. Так что в целом это и всё и без брашей может работать даже для полигональной геометрии как в Юнити.
Но если делать по заветам Кармака, то да придётся писать целую систему. В Юнити кстати проваливания я крайне редко замечал, в основном только в тех случаях когда объект имел какое то неадекватное ускорение.
Да и не сказал бы я то что брашевая коллизия в целом стабильнее полигональной, я когда занимался переводом моделей в браши и пытался компилировать промежуточные результаты в бсп, замечал то что прекрасно обрабатывалось на полигональных движках, жутко обсиралось на брашевых - игрок проваливался под карту практически на ровном месте, в основном я как понял большой вклад в эту нестабильность вносили разбиения геометрии на более мелкие фрагменты, чего у полигональных движков нет.
Ещё я помню очень давно когда я делал карту на конкурс по хл, был случай когда на ровном месте появлялась невидимая и непроходимая плоскость.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
И давайте ка я прокомментирую то предидудщее резюме спустя два года.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Под вайном точно всё работает и производительность адекватная.
Грубо говоря, портирование на Линукс сводится к тому, чтобы встроить куски вайна внутрь приложения. И получить ту же самую производительность, но при этом потерять довольно много времени.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
1 | /* weapon_blaster (.3 .3 1) (-16 -16 -16) (16 16 16) |
2 | always owned, never in the world */ |
3 | "weapon_blaster" |
4 | { |
5 | "pickup_func" "Pickup_Weapon" |
6 | "fire_func" "Blaster_Fire" |
7 | "pickup_sound" "misc/w_pkup.wav" |
8 | "world_model" "models/weapons/g_blast.model" |
9 | "view_model" "models/weapons/v_blast.model" |
10 | "effects" "EF_ROTATE" |
11 | "hud_icon" "w_blaster" |
12 | "punchangle.x" "-1" |
13 | "pickup_name" "Blaster" |
14 | "flags" "IT_WEAPON|IT_STAY_COOP" |
15 | "precache_model" "models/objects/laser.model" |
16 | "precache_sound" "weapons/blastf1a.wav" |
17 | "precache_sound" "misc/lasfly.wav" |
18 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
Не обязательно делать готовые пушки и монстров, достаточно просто библиотеку функций которые можно использовать как ноды.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Читаю тему дальше. FiEctro категорически не понимает того, о чём я пишу. Ну оно и неудивительно. Если рассматривать движок как абстракцию в ваккууме, то его представления о том, как это всё должно быть - правильные. Вот только, когда по этим правильным представлениям создаёшь реальную программу, она начинает логать даже на карте коробке и занимает работой все восемь ядер.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Переписал игровой таймер. Не сказать чтобы он стал прямо лучше прежнего, но все другие варианты - ещё хуже. Я помню как мучался с этим в старом ксаше. Но зато он теперь микросекундный, с высоким разрешением.
Т.е. проблем с плавающей точкой не будет и одновременно не будет проблем вызванных низким разрешением таймера.
И в связи с этим у меня возник вот какой интересный вопрос - а надо ли ограничивать фпс? Ну то есть клиент-сервер тикают синхронно, это не меняется. А вот надо ли душить фпс рендеринга и если да, то зачем?
Средствами драйвера он прекрасно приводится к частоте кадровой развертки, достаточно включить vsync. Раньше фпс ограничивали, чтобы исключить влияние физики. Сейчас это может понадобиться разве что для исключения перегрева видеокарты. Но для это как раз и служит vsync.
Вот такие у меня соображения, что не нужен этот ограничитель вовсе.
А вы расскажите как обстоят дела в Унреале и Юните с этим. Ну и вообще ваши мысли по этому поводу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож, поскольку с таймером разобрался - вырисовываю будущий сетевой движок. Это довольно сложная тема и скорее всего я буду его создавать неспешно и параллельно с другими задачами, т.к. надо всё как следует продумать и предусмотреть.
Добавлено 10-06-2024 в 13:07:
Пока что приму за основу следующее допущение:
Абсолютно у каждого объекта есть шесть (на данный момент) полей, которые будут переданы на клиент средствами самого движка, независимо от пользовательских настроек. Хотя эти поля и приходят из виртуальной машины, движок требует их наличие для правильной работы.
На самом деле полей больше, но для передачи на клиент достаточно и этих.
для куллинга
entity->world_mins
entity->world_maxs
связь между объектом и его моделью
entity->modelindex
абсолютная трансформация объекта
entity->transform
то что раньше хранилось в pev->effects
entity->renderflags
индекс камеры - trigger_camera, func_portal, func_monitor - всё такого рода
по умолчанию ссылается сама на себя, т.е. по идее всегда валидная
entity->viewentity
Всё это обладает хорошим уровнем абстрагированности, и менять тут ничего не понадобится.
Так же существует набор параметров для анимационно-зависимой модели. Анимация это довольно широкий набор, он годится как для спрайтов, так и для вершинной и скелетной анимации, кол-во передаваемых параметров, соответственно тоже варьируется в зависимости от. Список этих параметров уточню позже, но аналогично - в движке жестко прописаны сетевые настройки передачи. Да собственно, пользователю и не надо это настраивать.
И наконец кастомный набор переменных - то, чего так не хватало пользователям старого ксаша, когда край как надо было передать очередной параметр в шейдер и внезапно выяснялось, что в entity_state_t уже всё заюзано и что с этим делать - решительно непонятно. Те, кто делал себе локальную копию движка - начинал его расширять под свои нужды, но понятно что это ломало совместимость. Весьма неудобно.
Переданные на клиент переменные будут в первую очередь использованы для интерполяции и передачи в рендерер. Во вторую - для потенциального предиктинга, но предиктинг это отдельная задача и пока я не разберусь с сетью, у меня ещё не вырисовывается картинка, как именно он будет выглядеть.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Все, что по смыслу должно динамически обновляться - будет это делать, да.
Добавлено 10-06-2024 в 23:40:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Так товарищи. Настало время открыть вам страшную правду. Я не настоящий гейм дизайнер, как некоторые думают. Настоящему гейм дизайнеру вообще всё равно какой диздок писать. Они в любуй созвон погружаются с интересом и работают над проектом. Им главное - новизна ощущений. По принципу "О! а на таких плантациях ещё не работал! Интересно!". Ну вот по этому критерию я совсем не настоящий Нет у меня желания созваниваться с каждым кабанчиком и погружаться в катарсис. В действительности существовал ряд хонк-хонков в которых мне было очень интересно ковыряться и разбираться, но достаточно ограниченный.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Очередной важный прорыв совершён сегодня. Движок, как вы знаете, наследуется от 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'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ты наверное мои посты не читаешь.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
XashNT же уже умеет овербрайты?
Crystallize умеет всё что можно сделать в шейдерах.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ещё в самом начале разработки, в 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'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize приватку проверь
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
У меня к тебе такой вопрос. Можешь описать что делают эти эффекты?
https://github.com/FWGS/xash3d/blob...ient/gl_beams.c
Типа:
case TE_BEAMTORUS:
case TE_BEAMDISK:
case TE_BEAMCYLINDER:
ну и им подобные.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Создают геометрические фигуры, указанные в названии. Ударную звуковую волну от собачек помнишь? Это вот как раз TE_BEAMCYLINDER.
Остальные два никогда не использовались в игре.
Добавлено 18-06-2024 в 19:50:
Ксаш эти штуки пока что не поддерживает - буду добавлять по мере возникновения необходимости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Добавил в формат .source поддержку групп, визгруп и кордона. Т.е. он позиционируется как полноценная замена rmf\jmf, но при этом текстовый, открытый формат. Надо будет ещё добавить цепочки из path_track и камеры. Хотя данный формат можно расширять бесконечно, сохраняя обратную совместимость.
Добавлено 21-06-2024 в 00:06:
В будущем он научится поддерживать кривые Безье из Quake3, дисплейсменты из Half-Life 2 и встроенные полигональные модели.
Точнее он в принципе это уже сейчас может - оно задокументировано в стандарте. Но в дальнейшем можно будет добавлять абсолютно любые примитивы, втч параметрические. И это никак не нарушит совместимость.
Парсер просто пропустит незнакомые секции, да и всё.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Добавь ещё поддержку ландшафта маршевыми кубами как в роблоксе.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ты для демонстрации механизма декалей сделай демку с лидаром который в темноте выжигает на стенах огни, обнаруживая их форму.
Crystallize это для ксаш-мода, когда я его портирую.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то добавил в компилятор генерацию T-Junc-ов. С 2020-го года висела задача. Несмотря на кажущуюся простоту, это ппц какая нетривиальная задача оказалась. И вот почему.
Исторически T-соединения возникают при брашворке. При моделлинге они возникать не должны (хотя и могут). Проблемка, собственно в том, что генератор Т-соединений работает в составе абстрактного процессора треугольников, а не генерит их персонально для брашей (как сделано, например в Quake3). В таком случае было бы достаточно добавить в конвексное облако ещё одну точку, потом побить на треугольники и проблема типа решена. Но, повторюсь, потенциально эти соединения могут вылезать где угодно, а компилятор работает с абстрактными данными, не выделяя из кучи трианглов брашы\патчи\модели. И тут начинается чертовщина. Технически фикс T-Junc это сверхтонкий треугольник на грани дегенерата. Который позволяет конвейеру рендеринга корректно отработать и не допустить появление щелей \ искрящихся точек.
В Doom3, собственно, именно такие треугольники делали. Но там тонкость - в Doom3 нет лайтмап же. И нет тех проблем, которые эти треугольники провоцируют. Во первых эта тонкая срань может создать очень большую тень - то есть их нельзя включать в качестве коллизионных в рейтрейсер.
Во вторых сглаживание лайтмапы на рёбрах начинает сходить с ума. Вместо того чтобы зацепиться за соседнее ребро, оно цепляется, правильно, за этот самый T-Junc дегенерат. И вместо сглаживания лезут лютые артефакты. Я честно говоря даже представить не мог, что с ними вылезет только проблем. Но тем не менее успешно разрулил.
Засада ещё и в том, что я никогда и нигде не видел как эту проблему решают для конвейеров с треугольниками, руководствовался исключительно пролетарским чутьём.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Так, а как решил то?
Вообще откуда могут быть Т-Джунки если компилятор больше не режет геометрию под лайтмапу? Мне кажется это уже какой то баг генератора треугольников.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ого здорово. А можешь показать как выглядят эти Sparkle Points?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну просто такие точки, за которыми цвет очистки экрана. Если отключить gl_clear то их невидно. Да и они тоже не всегда видны, иногда как бы вспыхивают под определённым углом. Запусти порт кваки, стартовую карту, пробеги вперёд до центрального туннеля, повернись на 180 градусов и поводи камерой туда-сюда, увидишь их некоторое кол-во.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А у тебя наверное вертексы не сшиваются? Типа погрешность координат с плавающей точкой? Я просто конвертировал халфовские карты в модели и там реально дырки по всюду, в том плане что вертексы не сшитые да вот на тех же Тджунках например. Правда я не знаю может это сам конвертер такое накосячил но такая топология крайне неудобна для редактирования. Если такую топологию делает и компилятор то я не удивлён откуда лезут все косяки с лайтмапой.
Кстати я заметил что на втором скриншоте будто шума стало меньше, интересно как это взаимосвязано.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Лайтмапа на 2 картинке выглядит лучше именно в тех местах где яркость близка к максимальной. Можно посчитать оба варика и отобрать из обоих самые лучшие пиксели
Меня больше удивляет почему пятна от лампочек шестиугольные Результат интерполяции пикселей?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это бокс-фильтр. Такой же использовался в оригинальной кваке. Цитата из документации:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Недавно обнаружил такую штуку как Ncalc которая позволяет задавать в конфигах формулы.
https://github.com/ncalc/ncalc
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
В ксашевой системе материалов из коробки можно писать выражения.
Иногда востребовано. Это для случаев, когда дешевле посчитать на CPU и сразу же отправить в юниформ.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А для игровой логики? Например если из одной энтитии передавать значение в другое, к нему применять формулу?
Дядя Миша
И ещё такой вопрос, будут ли шейдеры для UI? Ну и постпроцессинг.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
To start the match, Let's draw the sketch, Then add some magic from your heart!
Take gold and blue, Take silver too and put a sparkle in your art!
I love that dress, I love It, YES!!! I love the way It makes me feel.
I love the shoes, I love to choose, It was a dream and now It's real!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Тред не читал. Интересно, как будет работать юи в новом хаче, с т.з системы?
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro как там было, если дать пользователям систему детайл-пропов, то они на ней тут же попробуют сделать ландшафт
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Ну да ладно. Я думаю суть вы поняли. Всегда должен быть резервный вариант, чтобы ковыряться в движке посредством блокнота. Да мало ли.
Нет ни одной причины делать текстовые конфиги нечитабельными.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Отличаюсь особой адекватностью!
__________________
В детстве был благовоспитанным мальчиком, но начал играть в орлянку, связался с Ксероксом и Дядей Мишей и покатился… Характер мягкий. Не женат.
Наконец-то добрался до имплементации сетевого движка.
Точнее в XashNT он уже есть - достался в наследство от старого ксаша.
Но его всё равно надо переписывать. И самое главное - избавиться от этой долбаной структуры entity_state_t, которая в старом ксаше буквально пронизывала весь движок. Потому что обязательно возникает ситуация когда переменных которые надо передать на отрисовку - недостаточно.
И надо расширять эту структуру, перекомпиливать ядро и ломать совместимость. В принципе, этим болели все движки Кармака в 90х.
Ну тогда это было оправдано. В Хл2 и Дуум3 уже сделали возможность отсылать любое кол-во переменных на клиент, а значит и в рендер.
Но как сделали?! Виртуальной машины не было ни там ни там, значит всё руками прописывали. Сотни однотипных строчек либо в таблице (хл2) либо прямо в функциях (дум3). Что-нибудь где-нибудь забудешь и привет.
В виртуальной машине есть релфексия + я ещё специально принял меры для сохранения параметров передачи по сети прямо на уровне компиляции игрового кода. Так что теперь это будет выглядеть практически незаметно для пользователя.
Любопытные бета-тестеры, если они изучали исходники сэмплов на Шоте наверняка обращали внимания, что там практически нет никакой информации о том, какие переменные объектов надо сохранять в сейв.
Тем не менее всё корректно сохраняется. С сетью будет аналогично.
Добавлено 21-07-2024 в 16:43:
Причём задача по переписыванию сети была поставлена мной аж в сентябре 2019-го года. Но тогда она цеплялась за ряд других задач - новые форматы моделей, уровней, виртуальная машина, компиляторы, переписывание рендерера. Эти задачи в свою очередь тоже цеплялись друг за друга внутри стека задач. Наконец-то я распутал этот чёртов клубок.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Веб сокеты будут? Коннект онли по айпи? Поддержка прокси? Поддержка мастер сервера? Будет ли дедикатед сервер? Передача файлов по сети? Закачка ресурсов игры/обновлений с сервера? Обработка большого количества игроков? Защита от дудоса? Шифрование трафика? Защиты от выполнения пользователями админских команд? Базовые средства авторизации (например по MAC адресу или логину и паролю?).
Если тебе нужна помощь с тестированием могу создать тебе выделенный сервер, белый ip у меня есть.
В хл и кваках неплохой сетевой движок, но как ты говорил сегодня даже стыдно такое показывать.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://ru.wikipedia.org/wiki/WebSocket
Веб сокеты, веб реквесты.
Это веб запросы как у тебя в браузере. Можно таким образом обратиться на http сервер и получать данные с него.
Вот например что может посылать тебе сервер чтобы игра знала время интернета:
http://worldtimeapi.org/api/timezone/America/New_York
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
Вот я как раз стал обладателем множества эксклюзивных вещей, написанных лично мной.
Вы же знаете, что во всех проектах родом из 90-х обязательно лежит уникальный код, написанный энтузазистами. Потом это всё может обрасти дополнительными библиотеками, но невозможно построить свой продукт полностью из чужих библиотек
Можете посмотреть на Neo Axis Engine который именно так и устроен.
Свой код там только на шарпе, остальное всё сторонние либы.
Даже в Юнити изначально было больше своего и с каждой версией стороннего становится всё меньше, что хорошо и правильно.
Добавлено 23-07-2024 в 15:54:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну так блин это архитектурой называется, естественно у проекта из кучи либ архитектура выйдет крайне странной и не гибкой, но если строить что то поверх, в целом жить можно. Зависит всё опять же от конечной цели.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну чтож, по дельте могу определённо сказать следующее.
Сам факт передачи состояния объекта на клиент однозначно зависит от наличия у этого объекта модели. Каких-то других условий пока что не предусмотрено и если объем трафика окажется приемлимым, я полагаю никаких дополнительных условий там и не понадобится.
Собственно, в квейке оно так и было, в халфе ещё ввели дополнительную проверку на EF_NODRAW, но я думаю это лишнее, т.к. ломает интерполяцию.
Даже невидимая модель должна отсылать свое состояние на клиент, в случае если она играет какую-то анимацию. А если же её состояние не меняется, так обновления не будет происходить в любом случае.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну чтобы у клиента тоже мог выполниться скрипт? Объясни вообще как ты пришел к такому? Может я что то не понимаю.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой сайт
Xash3D Modding Discord
Поскольку мне предстоит очередное мини-исследование, я что-нибудь напишу по этому поводу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну чтож товарищи, настала пора сделать выбор. Точнее может даже и не выбор, а высказать свою позицию по вопросу. А дело тут вот в чём.
Изначально, как вы помните, я планировал смешать клиентские и серверные энтити в единый массив. Но подобная архитектура резко усложняет работу с сетью, всегда приходится удерживать в голове тот факт, что один и тот же объект существует и на клиенте и на сервере. Плюс мы получаем разные стили интерполяции в синглплеере и мультиплеере и невозможность заставить сервер тикать лениво. Т.е. скажем 10-20 раз в секунду, полагаясь на то, что визуальные рывки будет проинтерполированы клиентом.
Из плюсов совмещённого хранения только экономия памяти, да и то не слишком значительная, я полагаю. Ну может быть мегабайт 10 или 20, а может и того меньше. Виртуальная машина хранит объекты оптимальным образом, поскольку не имеет обязательных полей, как было в первой халфе, гигантская структура entvars_t, которая выделялась для любого объекта.
Этого у меня нет, оно просто без надобности. На данный момент тысяча энтить на сервере (с учётом пользовательских полей, системных полей и переменных для анимации) занимают около одного мегабайта. Ну и клиентский комплект плюс-минус столько же. Т.е. не критично в принципе.
Плюсом лично для меня будет работа с хорошо знакомой архитектурой, для тех кто кодил под голдсорс - аналогично. Для тех же кто работает с Unity - вот тут вопрос. Я знаю что там только один объект, клиентской копии нет, правда и с сетью там непонятная ситуация, вроде как только сторонние решения, неизвестно насколько надёжные.
Вот собственно вопрос - насколько лично вам удобно и комфортно мыслить в рамках клиент-серверной архитектуры? Т.е. как в голдсорсе и старом ксаше? Напоминаю, что здесь вернётся та же самая заморочка, когда поле, подлежащее репликации на сервере надо будет обязательно добавить и на клиенте тоже. Хотя и не будет ограничения, что переслать можно только те поля, что жестко определены в entity_state_t. В новом ксаше кол-во сетевых полей полностью в ведении пользователя, он сам определяет что передать на клиент.
Вообщем вот примерно такие мысли у меня. Что скажете?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Если тебе неудобно смешивать, ты не смешивай, а поверх этого сделай какой-то интерфейс через который можно будет работать с каждой энтитью равноправно, не думая о том на сервере она или на клиенте.
Ну работать вы будете на сервере, очевидно. А в клиентскую часть лезть практически не придётся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Удобнее мыслить в рамках сериализации и десериализации особо не залезая под капот.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сериализация - это не про сеть. Про сеть это репликация.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну я имею ввиду объявление данных которые нужно передавать по сети и так же принимать. Сам механизм. В терминах я не силён но надеюсь понял о чём я говорю.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Объявление там минимальное, но тут скорее вопрос в возможности контроля пользователем. Когда сделаешь всё прозрачно для юзера, обязательно скажут "а мы хотим это контролировать".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Я правильно понимаю что ты не можешь разобраться с одной программой с единым интерфейсом? А вот с кучей программ с разным интерфейсом можешь?
Откуда у вас эта тяга к линуксоидству когда всё максимально не стандартизировано и запутано?
Добавлено 02-08-2024 в 11:45:
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Аниматор не обрабатывает столкновения, аниматор обрабатывает анимацию, в анимации сказано двигать объект например по оси Y. Он двигает объект (вернее анимирует параметр компонента трансформ), на объекте висит моделька и колайдер, эта вся тройня двигается вместе с помощью констрейнта аниматор. Чтобы добавить обработчик столкновения на этот объект вешают как ты выразился констрейнт скрипт который уже связывает все эти констрейнты в единую логику.
Он обращается сначала например к col = gameObject.GetComponent<BoxCollider>();
Говорим ему points = col.GetContacts(contact); и если Points больше чем 0 то логично что наша дверь столкнулась с чем то. И в таком случае уже обращаемся к аниматору anim = gameObject.GetComponent<Animator>(); и говорим ему anim.Play("CloseDoor");. Всё. Ты конечно можешь уже сделать заготовку этого скрипта и использовать для всех дверей. Ну или сделать это как то по своему как ты это любишь, я не призываю повторять Юнити 1 в 1.
У меня это сделано проще через констрейнт отслеживающий эвенты, он просто отслеживает эвент колайдера и отправляет эвент аниматору вообще без программирования (это похоже на Input/Output систему из Сорса).
Но тоже помни, движок с непонятной логикой нафиг никому не нужен будет, т.к. в среде разрабов уже выработался некий пайплан.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Моя логика такая, что будет отдельный режим работы - анимация, которая рулится столкновениями.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Вон Ксерокс говорил что его бесила дверь с коллизией, он даже функцию ShouldCollide ради этого заюзал чтобы дверь могла повернуться сквозь игрока.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
Мой сайт
Xash3D Modding Discord
SNMetamorph
Это конечно очень примитивный пример, но думаю общие представления дать сможет.
Добавлено 04-08-2024 в 13:26:
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Временная зона GMT. Текущее время 04:34. | Показать все 3825 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024