Показать все 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)
Конвертор уровней для сталкера
Это такой очередной побочный мини-продукт. Помните я говорил, что NT должен переварить уровни с детализацией не хуже метра? Очевидно, чтобы в этом убедиться, надо скормить движку этот самый уровень и посмотреть как он спровляется. А если не спровляется - оптимизировать.
Очевидно в сталкерских картах полигонов меньше, поэтому начнём с них.
Сперва я создал тему, на предмет наличия уже готового декомпилятора, но выяснилось, что они мне не слишком подходят, слишком много манипуляций требуется и ручной работы. А у меня нет цели впихнуть в игру уровень от сталкера. Мне надо просто убедиться что движок вывозит. Т.е. декомпилятор должен готовить все данные по максимуму. Побочный эффект - вы например сможете использовать его для паранои.
Задача такая: указываем папку с уровнем, ну например gamedata\levels\l01_escape, он её грузит и создаёт файл map с энв_статиками и скайбоксом.
А модельки-статики кладёт в подпапку в виде smd. Их потом можно будет собрать в mdl и тогда карта соберётся для паранои. А NT умеет грузить smd во время сборки уровни, ему не надо.
Я собственно, для чего тему-то создал? В процессе работы над декомпилятором я так или иначе сталкиваюсь с теми или иными решениями, которые использовали разрабы XRay. Ну и соответственно здесь буду писать свои мысли по поводу всего этого.
Задачка не особо сложная, но по срокам сказать ничего не могу, очень мало времени
Добавлено 04-09-2020 в 14:33:
Первое, с чем я столкнулся - с необходимостью загрузить описания материалов. В GSC да и в 4A к теме материалов подходят довольно наплевательски, там почти всё захардкодено и настроек мало. Ну и типы жестко определены, то есть вот здесь трава, здесь ландшафт и так далее.
Сами материалы хранятся в виде Z-строк (т.е. непрерывный массив разделённый нулевыми символами). Одна строка - одно описание материала.
Причём внутри этого описания содержится тип шейдера, имя текстуры и путь к лайтмапе. Но разделители этих данных - полный идиотизм. Вот для примера возьмем описание ландшафта:
levels\escape_asfalt_noblend/terrain\terrain_escape,terrain\terrain_escape_lm |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Данные записаны в виде чанков, причём самых примитивных: номер\размер, где номер это условная привязка к типу данных. Никаких меток в чанках нет. Ну то есть, если где-то в блоке данных размер нарушится хотя бы на один байт - получим битые блоки. Ну то ладно, плохо то, что подобную ситуацию даже адекватно отследить не удаётся и выдать соответствующее собщение. Кстати у переменной номера есть еще флаг сжатия данных.
В качестве компрессора используется старый добрый 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 глупости какие. XRay очень грамотно сделан, просто на некоторые вещи ребята принципиально забивали, в результате движок доставлял юзерам тысячи мелких неприятностей.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чего там Crystallize кретикует.
А если Source und X-ray сравнивать в модо-пригодности, какой энджин имеет ниже порог входа?
Ku2zoff Ты не запускал ни разу Level editor? А Хамер сорсовский наверняка баловался?
Я Левел Эдитор попробовал второй раз в жизни после той темы и Мне не понравилось. (интересно, теперь местоимения с заглавной можно?)
Мне кажется что на форуме Сталкер СДК мало кто пробовал.
Cybermax я запускал LevelEditor. Открывал в нём ровно две карты: что-то вроде лабы в тёмной долине (идёт в качестве примера с SDK) и кем-то декомпилированный кордон из билда 1935. Попытки освоиться с навигацией в редакторе напрочь отбили охоту с ним работать. Ненавижу навигацию мышью, руки бы оторвал тому, кто это вообще придумал без возможности сменить клавиши и без возможности двигать камеру в 3D с помощью клавиатуры. Унреалед именно по этой же причине я никогда серьёзно не использовал.
А что по лимитам энтитей и прочими? Вот в Ксаше сейчас можно карту 6х6 км делать, но если их насыщать как в обычных современных картах, размещая туда всякие скрипты и прочее, то толку от этих размеров не будет. Либо делаешь маленькую, но насыщенную, либо гигантскую, но пустую. Я до сих пор не видел ни одной хотя бы просто БОЛЬШОЙ карты, не говоря уже о гигантских.
__________________
Killing Floor: Horzine Outbreak
KorteZZ 1.6 км же. Или тебе ДМ уже билд NT скинул?
Добавлено 05-09-2020 в 16:32:
Или вот взять структуру лайтов - это тихий ужос. Потому что заявлено довольно много всего, а по факту не используется почти ничего. Положение осложняется еще и тем, что напротив неиспользованных полей есть комментарии, типо это для того-то и того-то. Или наоборот - написано, что вот это поле используется только радиосити, а по факту - для всего.
Натуральный бардак. Куча дублирующихся файлов в разных тулзах, множественное копирование туда-сюда. Это кстати на мой взгляд явный признак того, что движок писало сразу несколько человек. Потому что, что в первую очередь делает вменяемый человек, когда ему доверяют какой-то участок работы? Правильно - локальную копию входных данных. Чтобы потом не получилось ситуации что он что-то запорол в другом месте.
Корочи говоря, если я правильно понял, в сталкере есть два типа лампочек - всенаправленные и солнце. В динамике еще есть спотлайты.
А так же у каждой лампочки может быть контроллер, но по факту он используется для солнца. Это нечто вроде аналога лайтстилей.
От самого солнца используется только тень, а свет считается в реалтайме даже в режиме 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'
Такой у меня вопрос. Кто-нибудь знает, какая в сталкере ориентация мира?
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'
Отличная новость, сейчас заценю.
Jackhammer показал пустое поле, а потом после выделения "всей карты" вообще крашнулся
Дядя Миша что такое SWPM? сферический маппинг какой-то?
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'
Ну вот получился такой семпотичный ландшафт и стресс-тест для ваших кубаторов.
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'
Jack открыл моментально, но внутри пустота.
Hammer 3.5 крашнулся сразу.
Hammer 4.1 (из CS GO SDK) выдал Block array - invalid block index или как-то так.
JACK открыл пустую карту.
Sledge Editor даже пытаться не стал, сразу багрепорт предлагает отправить.
QuArK открыл, не за 5 минут чуть быстрее, но не понятно ничего, непривычный интерфейс.
Там всего-навсего 50 тысяч брашей, в сипульчере и то большы
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Оказывается, если сохранить 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'
Дядя Миша ну неудивительно, что джэк у всех пустую карту открывал, там же вроде автоопределения формата map нету
__________________
-Brain is dead-
В джеке формат мап зависит от плагина. В режиме халфы он ожидает, что мап будет 220-й.
__________________
XaeroX ну да, я это и имел в виду
__________________
-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'
Дядя Миша
Это тени от облаков?
__________________
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'
Прикольно с высоты птичьего полета смотреть на Зону. Без пропов просторно. Глаз сразу начинает искать знакомые места. О так это же деревня дураков, а рядом место где от кабанов убегал или аномалии обходил. Мне очень нравится. Да и ФПС высокий.
Дядя Миша деревья тоже как пропсы?) Почему тогда от них тени есть, а от зданий нет?
Добавлено 10-09-2020 в 03:32:
А, все понял
__________________
-Brain is dead-
А всё же меня интересует возможность декомпилировать хоть как-то карты из билдов. Lev5_aztec было бы достаточно. Эта тема напомнила мне про DM-Viridian-TOURNEY.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
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+ |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_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. модель без геометрии, ссылается на общий буффер 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'
Так товарищи, у меня к вам будет небольшая просьба.
Если кто-то работает со сталкером, декомпилируйте карту 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'
Вот что удалось выяснить - оказывается все модельки 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'
__________________
-Brain is dead-
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'
А в ксаше как вертексное освещение сопоставляется с вбо модели?
Это смотря в каком. Если в старом, то может посмотреть в исходниках паранои. Если в новом, то пока никак. Вот как раз размышляю на данную тему.
Вот у нас допустим модель. Референсная. Путём перемножения на матрицу, она ставится куда надо. И так далее. Всё хорошо. Но надо статическое освещение. Если таскать его в самой модели, непонятно как объединять два буффера для рендеринга. Может в D3D какие-то замуты были, но в GL навскидку я ничо не могу сказать. Ну да ладно, это не принцпиально.
Не очень-то и хотелось, как говориться. Моя идея заключается в том, чтобы использовать один и тот же тип вертекса как для повертексного, так и для лайтмапного освещения. Но с одной оговоркой. Для повертексного освещения мы делает в вершинном шейдере лукап по лайтмапным координатам и берём там 1 тексель. Этот тексель и будет нашим цветом вертекса. Ну а для лайтмапы - всё как обычно.
Т.е. вертекс не меняется, меняется только шейдер. Лайтмапа тоже остается прежняя. Там хватит места и для вертексных цветов и для обычных лайтмап.
В теории, мы можем даже получать повертексное освещение прямо из самой лайтмапы - потому что люксели на краях теоретически должны содержать именно тот цвет люкселя, который нам и нужен, собственно.
Это к слову, довольно распространённая практика, например, на мелких сурфейсах считается повертексное, а потом из суммы этих вертексов считается микро-лайтмапа на 1-4 люкселя.
Так что я полагаю метод удобный, хороший.
Единственное что меня тревожит - это потдержка VTF и скорость его работы. На современном железе, понятное дело, проблем не будет.
На старом, я точно помню, что сам VTF работал много где, а проблемы были с фетчингом во флоат-текстуру, поскольку не всё железо её тогда поддерживало корректно. Но мне ведь и не надо флоат-текстуры.
Вообщем остаётся только вопрос с производительностью.
Добавлено 22-11-2020 в 16:39:
Чтобы было понятнее насчёт типов вертекса. Вот, например в сталкере:
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 | }; |
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 | }; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_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'
Итак по сталкеру вот что мне удалось нарыть, путём штудирования исходников. Самое любопытное, что в видеоуроках или просто туторах, о таких вещах или не говорят или как-то вскользь затрагивают.
Компилятор имеет режимы работы разные, драфт и продакшен.
Драфт - для предварительной оценки в этом режиме многие вещи просто не делаются. В основном тяжелые.
Вот какой момент выяснил - есть галка 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'
>>то всё единая часть гигантского меша с координатами 0 0 0
Не знаю, на каком шаге оно становится гигантским мешем, ибо в исходниках уровней оно разбито на разные меши. Вот, как на кордоне из билда 1935 - 1 меш фабрика, 1 меш - домики в деревне новичков. Кроме того, части этого меша могуть сразу быть вшитыми в террейн.
При компиляции же все меши велдятся. То есть, у них сшиваются вершины, если они ближе друг к другу, чем значение, выставленное в настройках качества компиляции.
Но один гигантский меш из них по-идее получиться не может, если предварительно не сгруппировать их в один меш.
Под координатами, судя по всему имелся ввиду т.н pivot (точка, где рисуется гизмо). То есть "центр модели" всегда в нулевых координатах, а сам меш может быть вообще далеко от центра. Это всё от того, что в те годы никто не умел в т.н. модульные меши, и весь уровень делали сразу в 3д редакторе. И домеки, и тоннели. И потом можно быстро это всё вставить в сдк, не подгоняя ничего. и заселять локацию, расставлять физ объекты и прочее.
>>Наверное их как-то разбивают по группам, но я заморачиваюсь
Могу ошибаться, но вроде как разбивается по материалам.
>>MU как подсказал тов. Camblu (ex. Nim-Bitum)
Это я, да.
>>В эту категорию относятся все модели, которые встречаются на карте более одного раза. Иногда модель может быть одна на карте, но она же будет на других картах. В первую очередь это деревья, автобусы, военная техника, запчасти от автомобилей. Ну вообщем-то всё что угодно такого плана
Для всех MU мешей генерятся thumbnails, которые сшиваются затем в т.н. лод-файл. Это картинка, которая затем режется, и накладывается на биллборды. Емнип в сталкере всего 2 уровня лода. Обычный меш, упрощенный, и биллборд.
>>Иногда модель может быть одна на карте, но она же будет на других картах.
Один уровень - один лод-файл.
>>может надо принудительно включить такую модель в static mesh, а по другому никак. Не знаю. Но если вы знаете - обязательно напишите.
Сегодня попробую, отпишусь.
И наконец четвертый слой детализации - это всякая несолидная мелочь... мелкие камушки и прочая пердь.
Как минимум, в билдах у нее была коллизия. В 1511 билде можно покататься по агро на машинке, и детейлы коллайдят с шинами, из-за чего возникает чувство родных дорог, хотя сама дорога - гладкая
__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!
__________________
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 если натыкать йолок да побольше. И всем им назначить шейдер с лайтмапой. Они так и пойдут в статическую часть?
И насколько хорошо при этом будут выглядеть?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_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'
Вот еще какую чертовщину я заметил. Но понять в чём тут дело не могу.
Начнём с того, что в сталкере целых три типа кодирования текстурных координат. Первый тип - обычные флоаты, безо всяких хитростей.
Второй тип - шорты, умноженные на (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'
Дядя Миша может они какими-то особыми типами буферов передаются?
__________________
-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'
Внимание, знатоки, очень важный вопрос. В исходниках сталкеровских карт присутствуют 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'
Впрочем отбой, уже не надо. Сам нашёл.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Помните как я всё удивлялся, как это к единой модели подключают разные массивые повертексного освещение, мол как это вообще возможно? В голову лезли различные хитрые схемы, но я не был уверен в них до конца.
А сегодня покопался в исходниках и понял. Для 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'
Прост все поняли, что повертексное освещение - это шляпа.
Я тут посмотрел презентации фростбайта, как запекают лайтмапы. Они делают лоуполи прокси меши и считают освещение для них, а потом переносят развертку под лайтмапу с лоуполи на хайполи.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну это примерно как одна лайтмапа 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 плоетарское\леворюционное чутьё в помощь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядь Миш, а расскажи, пожалуйста, подробно, как конпелятор считает эту лайтмапу?
__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!
Какую именно лайтмапу?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще весь процесс просчета, начиная с LIGHT: Starting MU...
__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!
Чёт не пойму в чём вопрос. Выделяются кусочки-островки, на которые можно наложить лайтмапу в 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'
Мне сложно сформулировать. Проще попросить сказать, вот там по нити пост некоего абракаммера, всё так?
https://www.gameru.net/forum/index....0entry1686648
__________________
Самолетами!
Пароходами!
С боем взяв плацкарты
Едут мужики!
Самолетами!
Пароводами!
Убивать людей
Едут мужики!
Modera это ты чтоли?
В Сталкере калечная трасса, раз в 20 медленней той, что использую я.
Отсюда и растёт половина проблем. Я как-то народ призывал к диалогу, но никто не откликнулся, и я снёс ту тему. Ну не надо, так не надо.
Да и лайтмапы считают на GPU давным-давно, вон наш Психопат написал такой осветитель, можешь у него поинтерисоваться за подводные камни и так далее.
И кстати насчёт динамики. Индирект считается для 80-150 солнц, равномерно расположенных по полусфере, а динамика считает только прямой свет. Если бы не этот индирект, даже на калечной сталкеровской трассе, скорость бы возросла кратно. Причём динамика ведь этот индирект тоже юзает, иначе была бы чернота как в дуум3.
Дальше там вообще жесть начинается
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил прочитать gamemtl.xr. Коменты жгут:
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 |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_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-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'
"Frostbite uses Enlighten SDK to perform lightmap UV projection"
Больше ничего не сказано. Как я понимаю, лайтмапа остаётся та же самая.
Мелочевку лучше запекать лайтпробами или 3д текстурой.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 03:54. | Показать все 87 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024