HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Перенос имен текстур из ХЛ2
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Crystallize
Житель форума

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

Рейтинг



Перенос имен текстур из ХЛ2

Мне всегда было интересно перенести уровень из ХЛ2. Как это обычно у меня бывает, мне казалось что стоит перенести его и случится ЧЮДО. На КСМ в 2017 была тема по этому поводу, и на тот момент я уже раздумывал как это лучше сделать. Поэтому теперь я сначала написал туда, теперь пишу сюда.

Необходимо было синхронизированное преобразование имён текстур в ресурсах игры и такое же преобразование в vmf, не ломающее энтити нечаянно.
(это решалось через замену целого фрагмента начиная с параметра material)

Задача осложнялась тем, что ХЛ2 указывает не текстуру, а материал. И хотя в 80% случаев имя текстуры такое же, в остальном это не так, причём материал может ссылаться на другой материал, а тот ещё на один, как это было с водой.

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

Что-то можно было взять целиком: wall wl ceiling ceil floor flr, при том что реально нужен только ceiling. Во всех случаях с wall и floor длины хватало, видимо Вальва довольно долго сама именовала текстуры в рамках 15 символов.
Где-то пришлось принять очевидные решения: wallpaper wp rubber rbr breaker bkr.
Где-то решение нашлось с 3-4 раза: fluorescent flu freezer frz stainless sls plaster plr plastic plc tarpaper gudron (лол) truss ts, sign_ и _template убираем и т.д.

Заготовки словарей делались так: Notepad++ искал что-то в файлах, а затем его лог, где записано сразу имя файла и найденная строчка, просто очищался от лишней информации.
Также активно юзался инструмент толи из Ворда толи из Экселя который позволяет удалять из таблицы повторяющиеся пары значений.

Сначала был словарь который менял материалы содержащие $basetexture2 на имя их $basetexture, потом два словаря которые всякие жидкости приводили к fallback-материалам заготовленным для DX7, потом словарь для мониторов (хотя они всё равно получались нерабочими) и потом уже тот что непосредственно делал всю главную работу. Сначала один словарь применялся ко всем картам, потом другой, и т.д. и даже после этого пришлось автозаменой Notepad++ править пару имён.

Словари применялись к vmf через плагин Pythonscript для Notepad++ который собака не работает под WinXP и более того обрабатывает только файл в текущем табе (причём об этом нигде не сказано, а ещё он будет работать только если в Питон-скрипте при указании пути до словаря поменять слеши на противоположные тем что юзает Win7), слава богу хоть можно вписать в скрипт сохранение и закрытие файла, сделать кнопку в интерфейсе и повесить скрипт на неё. Просто жмёшь кнопку, файл в табе обрабатывается, сохраняется и закрывает таб. Но поскольку скрипт был простенький, он действовал "в лоб" и на каждую строчку словаря пробегал весь многомегабайтный файл, из-за чего в виртуалке на проход для одной строчки-пары в словаре уходило 60-70мс, а для "большого" словаря, для каждой карты уходило минимум 2-3 минуты, и это на Е8400. А там же ещё кроме этого было 3-4 коротких словаря т.е. умножай на три, а карт в декомпиле 76. Декомпил кстати взят с геймерлаба. Я не проверял оригинал, но после конверта через J.A.C.K. там довольно много сбитых текстур на всяких круглых башенках и даже на вполне аксиальных брашах составляющих закругленный поребрик.

Переименование текстур в папках велось через Bulk Rename Utility, там можно юзать словарик очень похожий по форматированию на PythonScript.

В итоге я выложил вот такой своеобразный собранный на коленке тулкит, заодно пропихивая дядемишин ксаш и компиляторы. Там даже tga-текстур нет, возможно я позже выложу их отдельным файлом, но скорее всего нет.

Отредактировано Crystallize 15-03-2020 в 17:00

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

Старое сообщение 15-03-2020 16:58
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 23:22. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > Перенос имен текстур из ХЛ2
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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