HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Конвертор уровней для сталкера
в разработке
Страницы (6): [1] 2 3 4 5 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

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

Рейтинг



Конвертор уровней для сталкера

Это такой очередной побочный мини-продукт. Помните я говорил, что NT должен переварить уровни с детализацией не хуже метра? Очевидно, чтобы в этом убедиться, надо скормить движку этот самый уровень и посмотреть как он спровляется. А если не спровляется - оптимизировать.
Очевидно в сталкерских картах полигонов меньше, поэтому начнём с них.
Сперва я создал тему, на предмет наличия уже готового декомпилятора, но выяснилось, что они мне не слишком подходят, слишком много манипуляций требуется и ручной работы. А у меня нет цели впихнуть в игру уровень от сталкера. Мне надо просто убедиться что движок вывозит. Т.е. декомпилятор должен готовить все данные по максимуму. Побочный эффект - вы например сможете использовать его для паранои.
Задача такая: указываем папку с уровнем, ну например gamedata\levels\l01_escape, он её грузит и создаёт файл map с энв_статиками и скайбоксом.
А модельки-статики кладёт в подпапку в виде smd. Их потом можно будет собрать в mdl и тогда карта соберётся для паранои. А NT умеет грузить smd во время сборки уровни, ему не надо.

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

Добавлено 04-09-2020 в 14:33:

Первое, с чем я столкнулся - с необходимостью загрузить описания материалов. В GSC да и в 4A к теме материалов подходят довольно наплевательски, там почти всё захардкодено и настроек мало. Ну и типы жестко определены, то есть вот здесь трава, здесь ландшафт и так далее.

Сами материалы хранятся в виде Z-строк (т.е. непрерывный массив разделённый нулевыми символами). Одна строка - одно описание материала.

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

C++ Source Code:
levels\escape_asfalt_noblend/terrain\terrain_escape,terrain\terrain_escape_lm

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

То есть вот это у нас
levels\escape_asfalt_noblend - шейдер
а вот это
terrain\terrain_escape - имя текстуры
Ну и после запятой путь к лайтмапе
terrain\terrain_escape_lm

Пути к текстурам содержат неявную подстановку папки textures\ вначале.
Излишне говорить, что если пропустить такую строку через какой-нибудь COM_FixSlashes то мы надёжно убьём описание материала. Странные люди. Ну поставили бы там звёздочку какую или иной непечатный символ.

Второй момент, на который я бы хотел обратить внимание - лайтмапа жестко привязана к материалу. Т.е. один материал = одна лайтмапа.
Обратное неверно = разные материалы могут использовать одну и ту же страницу, если в ней еще есть место. Но мне интересно другое. Лайтмапы в сталкере фиксированного размера 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'

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

Старое сообщение 04-09-2020 11:33
-
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: ㅤ
Сообщений: 5116

Рейтинг



Цитата:
Дядя Миша писал:
Это такой очередной побочный мини-продукт.

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

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

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

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

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

Старое сообщение 04-09-2020 15:12
+ За что?
 Дядя Миша
racing for fish

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

Рейтинг



Данные записаны в виде чанков, причём самых примитивных: номер\размер, где номер это условная привязка к типу данных. Никаких меток в чанках нет. Ну то есть, если где-то в блоке данных размер нарушится хотя бы на один байт - получим битые блоки. Ну то ладно, плохо то, что подобную ситуацию даже адекватно отследить не удаётся и выдать соответствующее собщение. Кстати у переменной номера есть еще флаг сжатия данных.
В качестве компрессора используется старый добрый LZSS. Но поскольку, как вы знаете, толку от него в 70% случаев нет (наоборот даже размер файла растёт), то он нигде не используется.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 04-09-2020 19:31
-
Crystallize
Житель форума

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

Рейтинг



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

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

Старое сообщение 04-09-2020 19:57
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



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

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 04-09-2020 21:26
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Чего там Crystallize кретикует.

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

Старое сообщение 04-09-2020 21:47
- За что?
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: ㅤ
Сообщений: 5116

Рейтинг



А если Source und X-ray сравнивать в модо-пригодности, какой энджин имеет ниже порог входа?

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

Старое сообщение 04-09-2020 23:43
+ За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
Cybermax писал:
какой энджин имеет ниже порог входа?

ИМХО, сорс-таки имеет порог ниже. Хотя бы хаммер не крашится рандомно, в отличие от X-Ray SDK. Хотя, это только моё мнение, мне не очень трудно было бы делать мод на сорсе, т.к. я имею кое-какой опыт работы с голдсорсом. А вот X-Ray для меня тъомный лес. Но, вот эти вот вылеты что SDK, что движка на ровном месте не есть хорошо.

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

Старое сообщение 05-09-2020 00:22
- За что?
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: ㅤ
Сообщений: 5116

Рейтинг



Ku2zoff Ты не запускал ни разу Level editor? А Хамер сорсовский наверняка баловался?
Я Левел Эдитор попробовал второй раз в жизни после той темы и Мне не понравилось. (интересно, теперь местоимения с заглавной можно?)
Мне кажется что на форуме Сталкер СДК мало кто пробовал.

Отредактировано Cybermax 05-09-2020 в 01:41

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

Старое сообщение 05-09-2020 01:32
+ За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Cybermax я запускал LevelEditor. Открывал в нём ровно две карты: что-то вроде лабы в тёмной долине (идёт в качестве примера с SDK) и кем-то декомпилированный кордон из билда 1935. Попытки освоиться с навигацией в редакторе напрочь отбили охоту с ним работать. Ненавижу навигацию мышью, руки бы оторвал тому, кто это вообще придумал без возможности сменить клавиши и без возможности двигать камеру в 3D с помощью клавиатуры. Унреалед именно по этой же причине я никогда серьёзно не использовал.

Цитата:
Cybermax писал:
А Хамер сорсовский наверняка баловался?

Было дело. Но тогда у меня было 512 оперативки и одноядерный пень 4 прескоттина. d1_trainstation01 не то что редактировать, даже осмотреть невозможно было из-за жутких фризов. Но привычные интерфейс и управление хотя бы не вызывали отторжения.
В левел эдиторе я особо ничего не пытался не только из-за навигации, но ещё и потому, что ему мало 8 ядер и 8 гигов оперативки, чтобы не фризить. То есть, опять те же грабли, что и с сорсовким хаммером в своё время. ЧСП, унреалед в комплекте с UT3 так не фризил у меня, даже на очень больших картах.

Отредактировано Ku2zoff 05-09-2020 в 02:18

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

Старое сообщение 05-09-2020 02:12
- За что?
KorteZZ
Lambda

Дата регистрации: Oct 2009
Проживает: Mongolia
Сообщений: 377
Возраст: 35

Рейтинг



А что по лимитам энтитей и прочими? Вот в Ксаше сейчас можно карту 6х6 км делать, но если их насыщать как в обычных современных картах, размещая туда всякие скрипты и прочее, то толку от этих размеров не будет. Либо делаешь маленькую, но насыщенную, либо гигантскую, но пустую. Я до сих пор не видел ни одной хотя бы просто БОЛЬШОЙ карты, не говоря уже о гигантских.

__________________

Killing Floor: Horzine Outbreak

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

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

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

Рейтинг



KorteZZ 1.6 км же. Или тебе ДМ уже билд NT скинул?

Добавлено 05-09-2020 в 16:32:

Цитата:
Ku2zoff писал:
Хотя бы хаммер не крашится рандомно, в отличие от X-Ray SDK.

Весь r/hammer забит мемами про падающий хаммер и про Fuck You Map Corruptor: Absolutely Ancient Software

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

Старое сообщение 05-09-2020 09:32
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



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

Корочи говоря, если я правильно понял, в сталкере есть два типа лампочек - всенаправленные и солнце. В динамике еще есть спотлайты.
А так же у каждой лампочки может быть контроллер, но по факту он используется для солнца. Это нечто вроде аналога лайтстилей.
От самого солнца используется только тень, а свет считается в реалтайме даже в режиме R0. Ну впрочем это довольно быстрая операция: один направленный источник, тени считать не надо.

Добавлено 05-09-2020 в 19:36:

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

Добавлено 05-09-2020 в 19:41:

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

Добавлено 05-09-2020 в 20:27:

Вообщем опытным путём удалось установить, в сталкере (по крайней мере в оф. билдах) используется два типа лампочек - одно солнце и поинтлайты.

Причём у солнца реально используется только один параметр - направление и учитывается яркость по косинусу dot( N, L ); Хотя это мало о чём говорит, т.к. рендерер может вообще игнорировать эти данные (и скорее всего так оно и есть). Т.е. реально используется только тень. Но сквозь эту кашу нелегко продраться, да вообщем-то пока и не нужно. Принцип такого освещением можно почитать у Humusa на сайте в разделе Modern Lightmaps.
Тень берётся из лайтмапы, свет считается налиту. Получаем мягкие бесплатные тени и кое-какую динамику. Но конечно дикий перерасход страниц для лайтмапы или распухание вертексного буффера, если хочется лайтстилей. Иного пути просто нет.

У поинтлайтов тоже куча параметров игнорируется, но в некоторых почему-то записаны вполне валидные параметры, которые непонятно откуда там взялись, например почти у всех поинтлайтов есть какая-то нормаль. Чаще всего это 0 0 1, но возможны и варианты. В редакторе им что-ли проставили. Непонятно. Активно используется формула quadratic+linear+constant, причём constant всегда равен еденичке, т.е. до своей границы ни один лайт не затухает. Вероятно его никто и никогда не трогал. Но в формуле он используется. Впрочем в сталкере есть такая штука, что статичные лайты в готовый уровень не попадают, попадают только динамические, но поскольку они получаются путём копирования исходного набора, то можно логически предположить, что да, это те же самые лайты. Мало вероятно, чтобы в динамике отсутствовал какой-либо из статических лайтов, уж скорее наоборот. Ну вообщем там в параметрах довольно таки много мусора, иногда и NAN встречается.
Н - Небрежность.

Добавлено 06-09-2020 в 00:24:

Ну вот и вылезло то, о чём, я собственно говорил. Из-за идиотской системы хранения лумпов поиск каждого следующего возможен только сначала, даже при секвентальной загрузке. Что в свою очередь провоцирует навигацию по массиву при каждой итерации. Пока лумпов мало - (10-12), это естественно незаметно. Но GSC использует этот подход внутри своих чанков тоже. Т.е. внутри чанка - такие же чанки. Локальные. А внутри них могут быть еще такие же. Как здесь ориентироваться чтобы не запутаться? Правильно, аллокнем новый класс ридера размером с чанк и будем читать его. А я еще в NT переживал, что у меня ридер делает одну лишнюю копию. В Xray лишняя копия делается буквально на любое чтение любого блока, ну сам формат такой, по другому никак. Теоретически следующие чанки можно не искать сначала, а просто итерировать, но так очень велик риск прочитать что-то не то, из-за идиотской системы, когда чанк вообще невозможно отличить от любого другого типа данных. Даже в WAV-файлах были метки RIFF, WAVE и так далее. Т.е. даже если ты заблудился, можно было пропарсить до следующего блока. Здесь же поленились даже вот такие простейшие сторожа влепить. Почему?!

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 05-09-2020 21:24
-
 Дядя Миша
racing for fish

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

Рейтинг



Такой у меня вопрос. Кто-нибудь знает, какая в сталкере ориентация мира?
Y - высота? Или по Кармаку?

Добавлено 07-09-2020 в 15:30:

Да, в сталкере метры и YZ свапнуты местами. Классическая ориентация.
Скорее всего её никто сознательно не выбирал, это тепичные установки D3D по дефолту.

Добавлено 07-09-2020 в 17:52:

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

Здесь у нас только ббоксы секторов, без видимой геометрии.
Поскольку в сталкере HOM, то сектора как бы вложены друг в друга.
А самый главный сектор, по совместительству еще и скайбокс вокруг карты.
Можете сами прикинуть масштабы уровня.

Добавлено 07-09-2020 в 18:25:

Забыл сказать - это уже реальные размеры, после конвертации метров в дюймы.

Добавлено 07-09-2020 в 19:39:

Террейн в сталкере устроен любопытно. Похоже первоначально он строится из хейтмапы, но в исходнике карты хранится уже в виде реальных треугольников - ну потому что нам же надо в ём сделать дыру в бункер Сидоровича, ну и нетолько. Дальше spatial subdivision рубит этот меш на регулярные квадраты, но самое интересное то, что некоторые куски террайна имеют SWPM! То есть походу компилятор сам определяет для каких именно кусков его рассчитать. Интересно как он это делает.

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

Вложение: sectors.zip (6.0 кб)
Этот файл был скачан 382 раз.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 07-09-2020 16:39
-
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: ㅤ
Сообщений: 5116

Рейтинг



Отличная новость, сейчас заценю.

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

Старое сообщение 07-09-2020 17:39
+ За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 08:29. Новая тема    Ответить
Страницы (6): [1] 2 3 4 5 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Конвертор уровней для сталкера
в разработке
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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