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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- Конвертор уровней для сталкера (https://hlfx.ru/forum/showthread.php?threadid=5556)


Отправлено Дядя Миша 04-09-2020 в 11:33:

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

Это такой очередной побочный мини-продукт. Помните я говорил, что 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'


Отправлено Cybermax 04-09-2020 в 15:12:

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

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

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

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

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


Отправлено Дядя Миша 04-09-2020 в 19:31:

Данные записаны в виде чанков, причём самых примитивных: номер\размер, где номер это условная привязка к типу данных. Никаких меток в чанках нет. Ну то есть, если где-то в блоке данных размер нарушится хотя бы на один байт - получим битые блоки. Ну то ладно, плохо то, что подобную ситуацию даже адекватно отследить не удаётся и выдать соответствующее собщение. Кстати у переменной номера есть еще флаг сжатия данных.
В качестве компрессора используется старый добрый 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'


Отправлено Crystallize 04-09-2020 в 19:57:

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


Отправлено Дядя Миша 04-09-2020 в 21:26:

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'


Отправлено nemyax 04-09-2020 в 21:47:

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


Отправлено Cybermax 04-09-2020 в 23:43:

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


Отправлено Ku2zoff 05-09-2020 в 00:22:

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

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


Отправлено Cybermax 05-09-2020 в 01:32:

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


Отправлено Ku2zoff 05-09-2020 в 02:12:

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

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

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


Отправлено KorteZZ 05-09-2020 в 08:41:

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

__________________

Killing Floor: Horzine Outbreak


Отправлено Crystallize 05-09-2020 в 09:32:

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

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

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

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


Отправлено Дядя Миша 05-09-2020 в 21:24:

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

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


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

Такой у меня вопрос. Кто-нибудь знает, какая в сталкере ориентация мира?
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-дерево и оно их тоже нарежет на сектора. Задача облегчается тем, что на террайне - единая текстура.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Cybermax 07-09-2020 в 17:39:

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


Отправлено Aynekko 07-09-2020 в 18:10:

Jackhammer показал пустое поле, а потом после выделения "всей карты" вообще крашнулся


Отправлено Crystallize 08-09-2020 в 03:12:

Дядя Миша что такое SWPM? сферический маппинг какой-то?


Отправлено Ku2zoff 08-09-2020 в 03:51:

Цитата:
Aynekko писал:
Jackhammer показал пустое поле, а потом после выделения "всей карты" вообще крашнулся

У меня в джеке карта пустая. По выделению ctrl+a ничего не крашится.


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

Crystallize Sliding Window Progressive Mesh. Автолоды по нашему.

Добавлено 08-09-2020 в 11:27:

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

__________________
My Projects: download page

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

Цитата:

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


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

Ну вот получился такой семпотичный ландшафт и стресс-тест для ваших кубаторов.
https://yadi.sk/d/8-3G_j5ZVleHnA

Кварк его открывает, но это занимает порядка пяти минут.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 08-09-2020 в 12:33:

Jack открыл моментально, но внутри пустота.
Hammer 3.5 крашнулся сразу.
Hammer 4.1 (из CS GO SDK) выдал Block array - invalid block index или как-то так.


Отправлено Crystallize 08-09-2020 в 12:59:

Цитата:
Дядя Миша писал:
Кварк его открывает

самая лучшая ОС вообще!


Отправлено Cybermax 08-09-2020 в 13:12:

JACK открыл пустую карту.
Sledge Editor даже пытаться не стал, сразу багрепорт предлагает отправить.
QuArK открыл, не за 5 минут чуть быстрее, но не понятно ничего, непривычный интерфейс.


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

Там всего-навсего 50 тысяч брашей, в сипульчере и то большы

__________________
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-09-2020 в 15:02:

Цитата:
Cybermax писал:
QuArK открыл, не за 5 минут чуть быстрее, но не понятно ничего, непривычный интерфейс.

Там пол-интерфейса на колёсике.


Отправлено Дядя Миша 09-09-2020 в 15:12:

Оказывается, если сохранить map в Valve220, то карта открывается в Кварке за считанные секунды. Тормоза только на кутришном формате почему-то.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 09-09-2020 в 19:53:

Дядя Миша ну неудивительно, что джэк у всех пустую карту открывал, там же вроде автоопределения формата map нету

__________________
-Brain is dead-


Отправлено XaeroX 09-09-2020 в 20:00:

В джеке формат мап зависит от плагина. В режиме халфы он ожидает, что мап будет 220-й.

__________________

xaerox on Vivino


Отправлено KiQ 09-09-2020 в 20:03:

XaeroX ну да, я это и имел в виду

__________________
-Brain is dead-


Отправлено Дядя Миша 09-09-2020 в 21:02:

Похоже?


На месте дырок должны быть пропсы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено thambs 09-09-2020 в 21:10:

Дядя Миша
Это тени от облаков?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 09-09-2020 в 21:14:

У ландшафта уже была лайтмапа, я её заюзал - не пропадать же добру.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Cybermax 09-09-2020 в 22:13:

Прикольно с высоты птичьего полета смотреть на Зону. Без пропов просторно. Глаз сразу начинает искать знакомые места. О так это же деревня дураков, а рядом место где от кабанов убегал или аномалии обходил. Мне очень нравится. Да и ФПС высокий.


Отправлено KiQ 10-09-2020 в 00:32:

Дядя Миша деревья тоже как пропсы?) Почему тогда от них тени есть, а от зданий нет?

Добавлено 10-09-2020 в 03:32:

А, все понял

__________________
-Brain is dead-


Отправлено Camblu_Buildovich 24-09-2020 в 08:38:

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

Нет. Их вручную моделили, что видно по нерегулярной сетке, и исходникам мешей.


Отправлено Cybermax 24-09-2020 в 09:54:

А всё же меня интересует возможность декомпилировать хоть как-то карты из билдов. Lev5_aztec было бы достаточно. Эта тема напомнила мне про DM-Viridian-TOURNEY.


Отправлено Дядя Миша 24-09-2020 в 12:26:

Цитата:
Nim-Bitum писала:
Их вручную моделили, что видно по нерегулярной сетке

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

Цитата:
Cybermax писал:
А всё же меня интересует возможность декомпилировать хоть как-то карты из билдов

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

__________________
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 24-09-2020 в 15:38:

Цитата:
Дядя Миша писал:
хошь я тебе генератор напишу, который будет продуцировать нерегулярную сетку?

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

Вроде кто-то опытный на том самом сайте, где сливали почти все билды говорил, что ранние билды имели другой формат записи.
Особенно в то время, когда Х-рей принесли в студию GSC (от Alien Logic до 1114 билда). Раз вы это учли изначально - жду возможность потестировать.
Желательно бы еще оставить возможность в какой-нибудь 3д формат экспортировать. Комьюнити сталкера будет только в радость.


Отправлено Дядя Миша 24-09-2020 в 16:54:

Цитата:
Nim-Bitum писала:
С удовольствием.


1. делается регулярная сетка
2. треугольники с идентичными плоскостям мержатся в один большой полигон
3. большие полигоны потом разбиваются на минимальное кол-во треугольников (2-3).

Цитата:
Nim-Bitum писала:
ранние билды имели другой формат записи

От этих тулзов сорцы лежат на гитхабе. И вот там все доступные форматы перечислены:
C++ Source Code:
1
XRLC_VERSION_5	= 5,	// 1098
2
XRLC_VERSION_8	= 8,	// 1114, 1154
3
XRLC_VERSION_9	= 9,	// 1472
4
XRLC_VERSION_10	= 10,	// 1475
5
XRLC_VERSION_11	= 11,	// 1537
6
XRLC_VERSION_12	= 12,	// 1580, 1844, 1865
7
XRLC_VERSION_13	= 13,	// 2215
8
XRLC_VERSION_14	= 14,	// 2945+, 3456+

Т.е. они умеют читать до билда 1114.

Цитата:
Nim-Bitum писала:
Раз вы это учли изначально - жду возможность потестировать.

Да я не про свои тулзы. Я про X-Ray re-tools говорю. Мне-то что? Мне только движок потестировать под реальными нагрузками.

__________________
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 24-09-2020 в 19:04:

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

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


Да, всё сталкер-комьюнити будет молиться на Александра Михайловича.
Простите, что в свое время не смог сделать грасс_тест на юнити, я не кодер.

Цитата:
Дядя Миша писал:
От этих тулзов сорцы лежат на гитхабе. И вот там все доступные форматы перечислены:

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


Отправлено Дядя Миша 24-09-2020 в 19:36:

Цитата:
Nim-Bitum писала:
Простите, что в свое время не смог сделать грасс_тест на юнити, я не кодер.

ты не один такой )

Цитата:
Nim-Bitum писала:
они, наприме не могут залезть в конпеляторы, чтобы сделать нормальную многопоточность.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 25-09-2020 в 07:05:

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

конкретный пример


Отправлено Дядя Миша 06-11-2020 в 18:39:

В сталкере довольно странная структура хранения моделей.
Есть несколько типов:
1. модель со вкомпиленной геометрией по месту
2. модель без геометрии, ссылается на общий буффер level.geom (может быть множество моделей, которые ссылаются на этот буффер с разной матрицей трансформации)
3. иерархия - список индексов на модели типа 1 или 2. Зачем нужна эта иерархия понять вообще невозможно. Она не содержит никаких матриц, просто ссылки на модели. Может это для куллинга? Непонятно.

Добавлено 06-11-2020 в 21:33:

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

Добавлено 06-11-2020 в 21:36:

Там всё ЕЩЕ интереснее. Иерархии включают в себя другие иерархии, образуя некоторое подобие бинарного дерева. Причём они лежат в общем списке с моделями.

Добавлено 06-11-2020 в 21:39:

Ну да это дерево видимости со своими ббоксами. Интересно.

__________________
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-2020 в 16:11:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 22-11-2020 в 09:36:

Вот что удалось выяснить - оказывается все модельки MU юзают повертексное освещение. Правда в таком случае непонятно, как они состыковывают цвет вертексов с референс-моделью, он же явно отдельно хранится. Хотя, там вроде бы линейные массивы атрибутов, т.е. массив точек, массив текстурных координат, масив цветов. Очевидно они их как-то переключают. Но вообще, я навскидку не знаю, как такое сделать в GL.
Впрочем, я никогда подобным и не интерисовался. Мне наоборот казалось, что проще им дать лайтмапу. Тогда в референсе самой модели достаточно указать offset(x,y) который добавится ко всем координатам лайтмапы, ну и как бы готово. Впрочем, вертексные цвета ведь тоже можно записать в лайтмапу и читать оттуда. Правда потребуется фетчинг текстур в вершинном шейдере, чего нету в совсем старых видеокартах.

Добавлено 22-11-2020 в 12:36:

Хотя, щас глянул ради интереса. Достаточно шейдерной модели 2.0
Ну нормально.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 22-11-2020 в 11:06:

Цитата:
Дядя Миша писал:
как они состыковывают цвет вертексов с референс-моделью

Через альфа-канал мб?

__________________
-Brain is dead-


Отправлено Дядя Миша 22-11-2020 в 11:47:

KiQ ты не понял сути вопроса.

Цвет вертексов - это отдельный массив в видеопамяти. Есть референсная моделька без цвета - это один 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 22-11-2020 в 12:10:

А в ксаше как вертексное освещение сопоставляется с вбо модели?


Отправлено Дядя Миша 22-11-2020 в 13:39:

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

Вот у нас допустим модель. Референсная. Путём перемножения на матрицу, она ставится куда надо. И так далее. Всё хорошо. Но надо статическое освещение. Если таскать его в самой модели, непонятно как объединять два буффера для рендеринга. Может в D3D какие-то замуты были, но в GL навскидку я ничо не могу сказать. Ну да ладно, это не принцпиально.
Не очень-то и хотелось, как говориться. Моя идея заключается в том, чтобы использовать один и тот же тип вертекса как для повертексного, так и для лайтмапного освещения. Но с одной оговоркой. Для повертексного освещения мы делает в вершинном шейдере лукап по лайтмапным координатам и берём там 1 тексель. Этот тексель и будет нашим цветом вертекса. Ну а для лайтмапы - всё как обычно.
Т.е. вертекс не меняется, меняется только шейдер. Лайтмапа тоже остается прежняя. Там хватит места и для вертексных цветов и для обычных лайтмап.
В теории, мы можем даже получать повертексное освещение прямо из самой лайтмапы - потому что люксели на краях теоретически должны содержать именно тот цвет люкселя, который нам и нужен, собственно.
Это к слову, довольно распространённая практика, например, на мелких сурфейсах считается повертексное, а потом из суммы этих вертексов считается микро-лайтмапа на 1-4 люкселя.
Так что я полагаю метод удобный, хороший.
Единственное что меня тревожит - это потдержка VTF и скорость его работы. На современном железе, понятное дело, проблем не будет.
На старом, я точно помню, что сам VTF работал много где, а проблемы были с фетчингом во флоат-текстуру, поскольку не всё железо её тогда поддерживало корректно. Но мне ведь и не надо флоат-текстуры.
Вообщем остаётся только вопрос с производительностью.

Добавлено 22-11-2020 в 16:39:

Чтобы было понятнее насчёт типов вертекса. Вот, например в сталкере:

C++ Source Code:
1
struct  r1v_lmap	{
2
  Fvector3	P;
3
  u32			N;
4
  u32			T;
5
  u32			B;
6
  s16			tc0x,tc0y;
7
  s16			tc1x,tc1y;
8
};
9
struct  r1v_vert	{
10
  Fvector3	P;
11
  u32			N;
12
  u32			T;
13
  u32			B;
14
  u32			C;
15
  s16			tc0x,tc0y;
16
};

Один для лайтмапы, другой для повертексного. Первый 32 байта, второй 28 байт.
У меня получился навскидку вот такой тип вертекса
C++ Source Code:
1
// 28 bytes
2
struct ref_vertex_lmap
3
{
4
  vec3	point;
5
  color32	normal;		// normal + alpha or weight
6
  vec2	texcoord;
7
  hvec2	lightmap;
8
};

нормаль как четыре байта, три компоненты, пропущенные через BFN и один компонент можно использовать для альфы, террайны блендить.
Здесь всегда 28 байт. Базис можно рассчитать прямо в пиксельном шейдере, теперь такое модное поветрие. Помоему это гораздо удобнее, чем хранить его в вертексе. Ну то я потом тожы проверю, насколько это бьёт по производительности. Но по идее он даже лучше так должен получаться, фактически попиксельный базис. Учитывая, что сам TBN хранит компоненты в byte, там наверное тихий ужос в итоговом пространстве. Вообщем если вспомнить, насколько невнятый бамп был в сталкере, то и неудивительно, как бы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ncuxonaT 22-11-2020 в 14:50:

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

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

С хардварным скинингом артефактов не будет?


Отправлено Дядя Миша 22-11-2020 в 15:26:

Цитата:
ncuxonaT писал:
BFN нормально интерполируются?

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

Цитата:
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 22-11-2020 в 15:44:

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

У меня нет скининга. Но я проверил перформанс, на фуллхд без овердрова теряется примерно 0,1 мс.


Отправлено Дядя Миша 22-11-2020 в 16:35:

ncuxonaT ага, ок

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 25-11-2020 в 12:47:

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

Компилятор имеет режимы работы разные, драфт и продакшен.
Драфт - для предварительной оценки в этом режиме многие вещи просто не делаются. В основном тяжелые.
Вот какой момент выяснил - есть галка Implicit Lighting. Она ставится для ландшафтов. Чёрт его знает, почему она названа Implicit, когда это Explicit - т.е. наоборот явное освещение. Для этого режима не генерируются координаты лайтмапы, а берутся прямо текстурные координаты. И назначается явное имя лайтмапы пользователем. То есть там кто-то в английском не силён и всё перепутал из-за чего я был введён в заблуждение и долгое время не мог понять что это вообще такое. А оно оказывается вон что.
Далее, сцена в сталкере состоит из четырёх слоёв. Ну я так условно её называю, наверное на уровне самого движка такого разделения и нету.
Это слои детализации. Первый слой - это ландшафт на открытых уровнях.
У него всегда это неявное освещение в отдельную лайтмапу. И он всегда как одна лайтмапгруппа. И для него так же применяется детальная четырёх слойная карта с четырьмя детальными текстурами. Причём эти четыре текстуры менять вообще нельзя, он намертво что ли прописаны где-то. Ну неважно.
Второй слой детализации - собственно основная архитектура. Домики там всякие, арки, тоннели, некоторые машинки. Это всё единая часть гигантского меша с координатами 0 0 0. Наверное их как-то разбивают по группам, но я заморачиваюсь, экспорчю в один гигантский static.smd
На эту архитектуру тоже накладывается лайтмапа, которая хранится в lmap1 - lmap<тритыщискуем>

Третий слой детализации - MU-модели. MU как подсказал тов. Camblu (ex. Nim-Bitum) это сокращение от Multiple Usage. Вот здесь я пока не разобрался. По дефолту на них применяется повертексное освещение. Как оно хранится и как рисуется я не знаю. Да мне это и не особенно интересно. Но лайтмапы на них нету. В эту категорию относятся все модели, которые встречаются на карте более одного раза. Иногда модель может быть одна на карте, но она же будет на других картах. В первую очередь это деревья, автобусы, военная техника, запчасти от автомобилей. Ну вообщем-то всё что угодно такого плана. Здесь для меня самый любопытный момент - может ли сталкер накладывать на них лайтмапу. Теоретически наверное может. Но в компиляторе я такой код не видел. Может просто плохо искал. А может надо принудительно включить такую модель в static mesh, а по другому никак. Не знаю. Но если вы знаете - обязательно напишите.

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

Добавлено 25-11-2020 в 15:47:

Да, так я вот что сказать-то хотел. Без второго и третьего слоя детализации уровни смотрятся очень убого, как будто и взаправду там голдсорс какой.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Camblu_Buildovich 11-12-2020 в 08:52:

>>то всё единая часть гигантского меша с координатами 0 0 0
Не знаю, на каком шаге оно становится гигантским мешем, ибо в исходниках уровней оно разбито на разные меши. Вот, как на кордоне из билда 1935 - 1 меш фабрика, 1 меш - домики в деревне новичков. Кроме того, части этого меша могуть сразу быть вшитыми в террейн.

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

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


Под координатами, судя по всему имелся ввиду т.н pivot (точка, где рисуется гизмо). То есть "центр модели" всегда в нулевых координатах, а сам меш может быть вообще далеко от центра. Это всё от того, что в те годы никто не умел в т.н. модульные меши, и весь уровень делали сразу в 3д редакторе. И домеки, и тоннели. И потом можно быстро это всё вставить в сдк, не подгоняя ничего. и заселять локацию, расставлять физ объекты и прочее.

>>Наверное их как-то разбивают по группам, но я заморачиваюсь
Могу ошибаться, но вроде как разбивается по материалам.

>>MU как подсказал тов. Camblu (ex. Nim-Bitum)
Это я, да.

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

Для всех MU мешей генерятся thumbnails, которые сшиваются затем в т.н. лод-файл. Это картинка, которая затем режется, и накладывается на биллборды. Емнип в сталкере всего 2 уровня лода. Обычный меш, упрощенный, и биллборд.

>>Иногда модель может быть одна на карте, но она же будет на других картах.
Один уровень - один лод-файл.

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

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

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


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

Цитата:
Camblu_Buildovich писала:
в исходниках уровней оно разбито на разные меши

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

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

группировка материалам - это лишь один из этапов и самый простой.

Цитата:
Camblu_Buildovich писала:
Емнип в сталкере всего 2 уровня лода

Это в старых билдах. В релизных появился Progessive Mesh.

Цитата:
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'


Отправлено Camblu_Buildovich 11-12-2020 в 10:53:

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

Ссылка на лайтмапы. По-идее там плоскость и камень.
https://mega.nz/file/q9JDHSaJ#X5GY8...yT4QZ7-akbh5Vfw

Добавлено 11-12-2020 в 12:22:

Судя по всему, MU модели в сталкере определяются по compile shader в настройках.
Если поставить не def_vertex - в статистике уровня будет вот так
Map size X x Z: [13 x 19]
Max static vertex per m^2: 18
Total static vertices: 394
Max mu vertex per m^2: 0
Total mu vertices: 0


Судя по всему я забыл, как их подсчитать.

Добавлено 11-12-2020 в 12:53:

А нет, всё верно.
Итого, если выставлено MU - то лайтмапа не запекается. Запекается только лод.

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


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

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'


Отправлено Camblu_Buildovich 11-12-2020 в 14:04:

Цитата:
Дядя Миша писал:
Camblu_Buildovich если натыкать йолок да побольше. И всем им назначить шейдер с лайтмапой. Они так и пойдут в статическую часть?
И насколько хорошо при этом будут выглядеть?

Не в шейдоре дело. Если у дерева есть флаг MU (я давно к сдк не прикасался толком, поэтому не сразу нашел этот флаг, и решил, что мне приглючилось) - то лайтмапа не генерируется. Только лод уровня.

Я просто поторопился с выводами, и не смог потом отредактировать пост.

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


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

Цитата:
Camblu_Buildovich писала:
Если у дерева есть флаг MU

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Camblu_Buildovich 11-12-2020 в 20:57:

Цитата:
Дядя Миша писал:
Ну хорошо, пусть флаг. Ты засунь

Вся проблема в том, что у меня зп сдк. Так что Вам (тебе), Михаил Саныч, врядли удастся протестить уровень. Разве что лайтмапы смогу скинуть.
Делать?

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 16-12-2020 в 09:50:

Вот еще какую чертовщину я заметил. Но понять в чём тут дело не могу.
Начнём с того, что в сталкере целых три типа кодирования текстурных координат. Первый тип - обычные флоаты, безо всяких хитростей.
Второй тип - шорты, умноженные на (32768/32) и третий тип - шорты, умноженные на (32768/16).
Первый вид координат используется для ландшафта, второй для статик-моделей с лайтмапой, третий - для MU-моделей.
То что это именно так можно узнать из исходников компилятора. Но вот какая петрушка. Во первых, сам сталкер эти координаты не декодирует.
Он их сразу в видеопамять грузит. А там в шейдере, получается они сразу валидные. Ни на что не предумножаются. Получается их драйвер как-то сам раскручивает обратно. Я сам умножаю на обратные множители и в 99% это работает хорошо. Но есть исключения. В рыжем лесу поехала развертка у двух бтров в тоннели. Причём поехала так, как будто бы её вообще не было.
И на testers_mp_factory у всех электромоторов точно так же съехала развертка. Я попытался покрутить саму текстуру на 90 градусов, несколько раз, но это ни к чему не привело. Чертовщина какая-то.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 20-12-2020 в 16:02:

Дядя Миша может они какими-то особыми типами буферов передаются?

__________________
-Brain is dead-


Отправлено Дядя Миша 20-12-2020 в 16:34:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 24-12-2020 в 18:12:

Внимание, знатоки, очень важный вопрос. В исходниках сталкеровских карт присутствуют hemi-лайты, это индирект от неба, скорее всего их редактор генерит процедурно. У меня два важных вопроса:
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'


Отправлено Дядя Миша 27-12-2020 в 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'


Отправлено Дядя Миша 02-01-2021 в 12:54:

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

Добавлено 02-01-2021 в 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'


Отправлено ncuxonaT 02-01-2021 в 15:02:

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


Отправлено Дядя Миша 02-01-2021 в 17:47:

Цитата:
ncuxonaT писал:
Прост все поняли, что повертексное освещение - это шляпа.

да мало того что шляпа, так еще и место занимает.

Цитата:
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 02-01-2021 в 21:39:

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

Директ динамический, индирект и небо в лайтмапе для статичных мешей и в иррадианс вольюме для динамичных. И разрешение лайтмапы на уровень порядка 10 мегапикселей.
https://media.contentapi.ea.com/con...infrostbite.pdf


Отправлено Дядя Миша 03-01-2021 в 08:27:

Ну это примерно как одна лайтмапа 8192х8192 или 64 страницы 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'


Отправлено Camblu_Buildovich 07-01-2021 в 20:52:

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

Ты, Дядя Миша, меня на месяц вогнал во фрустрацию. Потом у меня была командировка, так что было не до того
А есть ли некий эталон?
Как мне отмерять?

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


Отправлено Дядя Миша 08-01-2021 в 14:36:

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'


Отправлено Camblu_Buildovich 26-01-2021 в 05:57:

Дядь Миш, а расскажи, пожалуйста, подробно, как конпелятор считает эту лайтмапу?

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


Отправлено Дядя Миша 26-01-2021 в 06:14:

Какую именно лайтмапу?

__________________
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 26-01-2021 в 08:34:

Вообще весь процесс просчета, начиная с LIGHT: Starting MU...

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


Отправлено Дядя Миша 26-01-2021 в 09:21:

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

Добавлено 26-01-2021 в 12:21:

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

__________________
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 26-01-2021 в 14:27:

Мне сложно сформулировать. Проще попросить сказать, вот там по нити пост некоего абракаммера, всё так?
https://www.gameru.net/forum/index....0&#entry1686648

__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!


Отправлено Дядя Миша 26-01-2021 в 15:16:

Modera это ты чтоли?

В Сталкере калечная трасса, раз в 20 медленней той, что использую я.
Отсюда и растёт половина проблем. Я как-то народ призывал к диалогу, но никто не откликнулся, и я снёс ту тему. Ну не надо, так не надо.

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

И кстати насчёт динамики. Индирект считается для 80-150 солнц, равномерно расположенных по полусфере, а динамика считает только прямой свет. Если бы не этот индирект, даже на калечной сталкеровской трассе, скорость бы возросла кратно. Причём динамика ведь этот индирект тоже юзает, иначе была бы чернота как в дуум3.

Дальше там вообще жесть начинается

Цитата:
Подозреваю однопоточность и отсутствие BVH.

Там мультипоток и естественно BVH. Но цымес в том, что BVH дико медленный, там надо юзать k-DOP. Там даже по коду видно какой он медленный, там полная рекурсия.

Цитата:
В шадоумаппинге самый обыкновенный рейтрейсинг

Шадовмаппинг - это не рейтрейсинг в прямом понимании. Хотя смысл тот же.

А кто такой Абрам Куммер я не знаю. Дело не в точности, говорю же.
Дело в том, что индирект от солнца в реалтайме всё равно не рассчитать так, как это делалось всегда. Ну не вытянет ни одна видеокарта 150 солнц одновременно, даже GTX3080. Про рейтрейсинг щас не говорим, там и не нужно их столько рендерить.

Цитата:
Я давно здесь на форуме читал, что создаётся сфера для hemi. Прям геометрия.

Да какая нахрен геометрия? В нулевую точку спавнится 150 точечных лайтов и всё. У каждой нормаль равномерно распределена по полусфере.

Цитата:
Полусфера hemi апроксимирована 314 вершинами(источниками света).

Человек нормали упорно путает с вершинами. Мда.

Устал комментировать, дальше нет смысла.

__________________
My Projects: download page

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

Цитата:

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


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

Решил прочитать gamemtl.xr. Коменты жгут:

C++ Source Code:
1
#0: default (Дефаултовый статический материал), flags 60000010
2
#1: creatures\human (Человек), flags 40000112
3
#2: materials\wood (Деревянная поверхность, деревянный пол, деревянные ступеньки ), flags 4000001e
4
#3: materials\concrete (Монолитный бетон ), flags 60000018
5
#4: materials\asphalt (Асфальт), flags 60000018
6
#5: materials\metal (Монолитный метал, толстый кусок железа, танк ), flags 6000001c
7
#6: materials\glass (Стекло ), flags 40000012
8
#7: materials\earth (Сухая твердая земля (стандартный материал)), flags 60000018
9
#8: materials\gravel (Гравий ), flags 4000001c
10
#10: materials\dirt (Мокрая грязь, болото ), flags 60000010
11
#11: materials\water (Вода ), flags 80000082
12
#12: materials\flooring_tile (Плитка, кафель ), flags 6000021c
13
#13: materials\metal_plate (Металлическая пластина (толщина 2-5см), Ступеньки ), flags 4000001e
14
#15: materials\grass (Земля, покрытая травой ), flags 40000010
15
#16: materials\sand (Песок, насыпь ), flags 60000018
16
#18: materials\bricks (Кирпичная стена ), flags 60000016
17
#19: materials\wooden_board (Деревянная доска (толщина 2-5см), деревянный вагон, ящик ), flags 40000016
18
#22: objects\large_weapon (Тяжелое оружие (автомат, гранатомет, ружье)), flags 60000100
19
#24: objects\tin_can (Консервная банка), flags 40000102
20
#34: materials\metal_pipe (Металлическая труба ), flags 40000016
21
#37: materials\bush (Кусты, крона деревьев, камышы, листья ), flags c82
22
#38: objects\bullet (Пуля, осколки от гранаты), flags 60000100
23
#39: materials\tree_trunk (Дерево (ствол)), flags 40000014
24
#48: materials\setka_rabica (Сетка рабица, колючая проволока ), flags 846
25
#49: materials\shifer (Шифер ), flags 40000056
26
#53: materials\stucco (штукатурка ), flags 6000001a
27
#58: creatures\large (Большой монстр ), flags 40000112
28
#60: materials\tin (Жесть, крыша домов ), flags 40000006
29
#61: objects\car_cabine (Корпус машины), flags 40000112
30
#63: creatures\medium (Средний монстр), flags 40000112
31
#64: creatures\small (Маленький монстр), flags 40000112
32
#65: objects\clothes (Tряпки,одежда), flags 4000011a
33
#66: objects\small_box (Маленькая коробка (патроны, PDA, аптечка)), flags 40000107
34
#67: objects\small_weapon (Легкое оружие (пистолет)), flags 60000102
35
#69: objects\dead_body (Мертвое тело), flags 60000112
36
#70: objects\bottle (Бутылка), flags 40000116
37
#71: objects\barrel (Бочка), flags 40000112
38
#72: objects\metal_box (Металлический ящик), flags 40000116
39
#73: objects\small_metal_trash (Металлический хлам (мелкий - трубки, кусочки, гайки, болты)), flags 40000116
40
#74: objects\large_metal_trash (Металлический хлам (крупный - арматура, куски железа)), flags 60000116
41
#75: objects\car_wheel (колеса машины), flags 4000011a
42
#76: objects\large_furniture (Деревянная мебель (крупная - стулья, столы, шкафы)), flags 40000113
43
#77: objects\fuel_can (Канистра с бензином), flags 40000107
44
#78: objects\concrete_box (Бетонный блок), flags 60000107
45
#79: objects\knife (Нож), flags 60000102
46
#80: materials\fake (Материал для колижена (нет звука, следов от пуль, теней) ), flags 1c80
47
#81: materials\cloth (Ткань), flags 40000018
48
#82: materials\fake_ladders (невидимая лестница), flags c20
49
#83: default_object (Дефаултовый динамический материал), flags 60000116
50
#84: objects\monster_body (Мертвое тело), flags 60000112
51
#85: creatures\hoof (Монстр с копытами), flags 40000112
52
#86: objects\glass (разрушаемое стекло), flags 113
53
#88: materials\death (Смертоносная земля (нестандартный материал)), flags 10000c80
54
#90: creatures\actor (Человек), flags 40000112
55
#91: creatures\human_head (Человек), flags 40000112
56
#92: creatures\phantom (призрак), flags 40000102
57
#93: materials\earth_death (Сухая твердая земля (нестандартный материал)), flags 70000018


Добавлено 07-02-2021 в 12:52:

Даже монстр с копытами есть.

Добавлено 07-02-2021 в 12:54:

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

__________________
My Projects: download page

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

Цитата:

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


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

Цитата:
Дядя Миша писал:
Вот еще какую чертовщину я заметил. Но понять в чём тут дело не могу.
Начнём с того, что в сталкере целых три типа кодирования текстурных координат. Первый тип - обычные флоаты, безо всяких хитростей.
Второй тип - шорты, умноженные на (32768/32) и третий тип - шорты, умноженные на (32768/16).
Первый вид координат используется для ландшафта, второй для статик-моделей с лайтмапой, третий - для MU-моделей.
То что это именно так можно узнать из исходников компилятора. Но вот какая петрушка. Во первых, сам сталкер эти координаты не декодирует.
Он их сразу в видеопамять грузит. А там в шейдере, получается они сразу валидные. Ни на что не предумножаются. Получается их драйвер как-то сам раскручивает обратно. Я сам умножаю на обратные множители и в 99% это работает хорошо. Но есть исключения. В рыжем лесу поехала развертка у двух бтров в тоннели. Причём поехала так, как будто бы её вообще не было.
И на testers_mp_factory у всех электромоторов точно так же съехала развертка. Я попытался покрутить саму текстуру на 90 градусов, несколько раз, но это ни к чему не привело. Чертовщина какая-то.

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

Добавлено 08-07-2021 в 15:42:

Цитата:
ncuxonaT писал:
Я тут посмотрел презентации фростбайта, как запекают лайтмапы. Они делают лоуполи прокси меши и считают освещение для них, а потом переносят развертку под лайтмапу с лоуполи на хайполи.

Вот сейчас как следует вдумался в смысл этой фразы и остался в недоумении.
Какая разница для какой геометрии запекать лайтмапы, если её качество целиком и полностью зависит только от разрешения самой лайтмапы.
Будь у меня хоть ландшафт на 10 миллионов поликов, но если лайтмапа на нём 16х16 люкселей, то её рассчёт всегда будет менее секунды.
Другой вопрос что на лоу-поли вероятно быстрее пускать лучи, но и гораздо менее точно. Не полезли бы лайт-лики от такой оптимизации.

Добавлено 08-07-2021 в 15:45:

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

Небольшие поправки внесу. Не в 20 раз медленнее. Без SSE медленнее всего-навсего в 3 раза, с SSE медленнее процентов на 30. Зато BVH очень быстро строится, а построение KD-Tree может занимать до 10 минут, так что сталкеровская трасса оказывается медленее всего процентов на 20 по итогу.
Но медленее, да. Но лайтмапы считаются неделями совсем по другой причине. Всё дело в идиотском двухмерном хэше, который с какого-то момента чудовищно замедляет процесс поиска люкселя на сетке. Я вместо этого использую локальное AABB-Tree и это очень быстро. Хэш там вообще ни к месту.

__________________
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-07-2021 в 13:08:

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

"Having low-poly version of geometry is quite desirable when it comes to
lightmap UV efficiency, as low-poly meshes typically have much fewer UV
charts/islands and therefore fewer lightmap texels are wasted."

https://i.imgur.com/urXeeHY.jpg https://i.imgur.com/P5D2AXX.jpg https://i.imgur.com/2KkextO.jpg


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

Это резонно, но как они её перенатягивают? Разве есть какой-то универсальный подход?

Добавлено 08-07-2021 в 16:32:

Я пока пришёл к мысли, что мелочёвку лучше запекать повертексно.

__________________
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-07-2021 в 13:50:

"Frostbite uses Enlighten SDK to perform lightmap UV projection"
Больше ничего не сказано. Как я понимаю, лайтмапа остаётся та же самая.

Мелочевку лучше запекать лайтпробами или 3д текстурой.


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

Цитата:
ncuxonaT писал:
"Frostbite uses Enlighten SDK to perform lightmap UV projection"

А, ну так с этого и надо было начинать. Это фишка Энлайтена - накладывать лайтмапу на упрощённую геометрию. Его так и не обнародовали?

__________________
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-07-2021 в 18:21:

Цитата:
Дядя Миша писал:
Его так и не обнародовали?

Не слышал о таком. Знаю только, что его собирались вырезать из юнити. Может, уже вырезали.


Временная зона GMT. Текущее время 03:54.
Показать все 87 сообщений этой темы на одной странице

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