Source Filmmaker

Source Filmmaker

Not enough ratings
Как перенести контент Goldsource (карты, модели и т. д.) в Source
By NOUG4AT
Перенос контента из GoldSource в Source — только в тексте
   
Award
Favorite
Favorited
Unfavorite
Подготовка к переносу
=== Выбор карты и анализ ===
Я буду использовать "ts_constryard" в качестве карты для декомпиляции. Эта карта была разработана для The Specialists, мода Half-Life. Я решил использовать эту карту, потому что она показательна для портирования (из-за наличия встроенного контента).

==== Карта использует следующий контент: ====
Комплект (.WAD): состоит из 68 материалов в формате .bmp.
Модели (.MDL): «банка, гидробокс, гидробокс2, грузовик, пожарный гидрант, джип, па»
Skybox (.TGA): «ts_constryup, ts_constrylf, ts_constryft, ts_constrybk, ts_constryrt, ts_constrydn»
Саундтрек (.WAV): "пассарос, техно"

==== Список файлов для конвертации: ====
От .TGA (старый формат) до .VMT и .VTF (новый формат)
Из .SPR в .VMT и .VTF

==== Получение исходников ====
Поначалу декомпиляторы карт звучат как абсолютная магия. Обычно, когда вы что-то компилируете, вы превращаете это из чего-то красивого и удобочитаемого в абсолютную тарабарщину. Карты GoldSrc не хранят исходные данные кисти внутри скомпилированного уровня. HLCSG берет кисть и разбивает ее на шесть граней, прежде чем удалить те, которые вы не видите в игре. (Когда кисти соприкасаются друг с другом, уцелевшие грани часто расходятся еще больше.) В результате декомпиляторам приходится воссоздавать кисть с нуля. Между выходами обоих есть заметные различия.

==== Выбор инструмента для декомпиляции карты ====
Можно сделать вывод, что WinBSPC разбирает карты лучше, чем BSPtwoMAP. Однако недостатком этого декомпилятора является то, что ограничение для файлов .bsp составляет ~4 МБ. Поэтому в качестве декомпилятора я выберу MBSPC (у которого нет этого ограничения, а результаты декомпиляции аналогичны WinBSPC).
Процесс переноса
=== Портирование материала ===
Чтобы получить текстуры карты, я буду использовать Wintexttract. Нужно выделить файл bsp, а затем указать папку [output] и получить текстуры (в формате WAD).
После этого я получил WAD этот файл карты. В качестве инструмента конвертации я буду использовать XWAD. (Официальный SOURCE SDK, чтобы преобразовать старый формат текстур в новый) Обратите внимание, что шаги выполняются с предустановленным Source SDK (загруженным через Steam) в Windows 7.
# Кнопка Пуск
# Нажмите «Выполнить»
# Введите «cmd» и нажмите Enter.
# Указываем расположение xwad.exe (например, cd"\SourceSDK\bin\ep1\bin\xwad.exe")

==== Используемые команды: ====
-basedir [Вывод] -wadfile [Каталог файлов\*.wad]
После этой операции в указанной папке [Output] будут созданы каталоги «Materials» и «Materialsrc». Папка [/materials] будет содержать файлы VMT. [/materialsrc] будет содержать файлы TGA, которые необходимо преобразовать в VTF.

==== Чтобы преобразовать TGA в VTF, я буду использовать VTFEdit ====
Инструменты🡪 Преобразовать папку 🡪 указать папку [вход] и [выход] 🡪 Преобразовать
Ввод (Расположение файлов для преобразования).
Вывод (вывод преобразованных файлов)
==== С настройками: ====
нормальный формат
BGR888 //Для лучшего качества текстуры, альфа-формат
DXT5 // Интерполированный альфа-канал (рекомендуется)
To VTF .tga //Для работы с нужным форматом.


После конвертации я получил файлы VTF, готовые к использованию.
Теоретически можно было распаковать wad-файл, а затем получить bmp-текстуры и сконвертировать их с помощью VTFEdit. Но это неправильный путь, так как некоторые текстуры, используемые в Goldsource, имеют нестандартные значения или неравные степени двойки. Например, текстура старого формата 96х96 будет растянута. XWAD автоматически создает дополнительный файл имя_текстуры.resizeinfo (который масштабирует материал до нужного размера)
Аналогичную операцию с VTFEdit нужно проделать с текстурами неба. Обязательно используйте функцию «Создать файлы VMT», которая создаст файлы, содержащие информацию о типе материала. Выходная папка должна называться material\ (поскольку игра будет искать файлы в каталоге с таким именем). После конвертации нужно изменить параметры файлов VMT, чтобы они работали как текстуры неба. Используя ту же программу, измените значения с LightmappedGeneric (шейдер кисти) на небо (шейдер неба) и добавьте строку «$ignorez 1». Это должно выглядеть так (на примере ts_constrybk):

sky { $ignorez 1 // this is a boolean setting. Mainly used for UI materials, which will always be ahead of the 3D world, and skybox materials, which will always be behind. "$basetexture" "skybox/ts_constrybk" //texture directory (Finding the sky texture is strictly in the “skybox/” directory) }


Вам также необходимо преобразовать файлы spr в новый формат. С помощью XWAD конвертируем файлы spr командой -basedir [Вывод] -sprfile [Расположение файлов\*.spr]. После этого получаем tga файлы, которые конвертируем в vtf с помощью VTFEdit без параметра «Create VMT Files»
Вам нужно настроить их так, чтобы они работали как спрайты в игре. Для этого я изменю значение первой строки с «LightmappedGeneric» на «Sprite» (это визуализированный объект мира с очень специальной геометрией).
Вам нужно добавить новые строки со следующими значениями:

"$spriteorientation" "vp_parallel" //sprite orientation. vp_parallel - sprite is always facing the player "$spriteorigin" "[ 0.50 0.50 ]" // Sprite center, location


Это должно выглядеть так (на примере folhas1):
Sprite { "$spriteorientation" "vp_parallel" "$spriteorigin" "[ 0.50 0.50 ]" "$basetexture" "sprites/folhas1" //Texture Directory }

После того, как все текстуры карты сконвертированы, нужно их настроить (VMT).
Так как Goldsource — старый движок, многие текстуры сегодня выглядят не лучшим образом, чтобы они были лучше, я добавлю в каждую текстуру следующие команды:

"$detail" "detail/detail_noise1" //This texture is found in Half-Life 1: Source VPK files, very effective for increasing the apparent texture resolution "$detailscale" 10.0


Чтобы получить эту текстуру, вам нужно скачать Half-Life 1: Source, перейти в каталог «…/Half-Life 2/hl1/» и открыть файл «hl1_pak_dir.vpk» с помощью GCFScape. Перейдите в каталог «root/materials/detail/» и найдите файл «detail_noise1».

Заархивируйте его и отправьте в каталог «…materials/detail/» с портированными текстурами. Заходим в расположение текстур, и удаляем следующие материалы vmt и vtf с названиями: "{invisible", "sky", "skip", "{blue", "clip", "hint", "null" (Они уже стандартно встроены в Source Engine, а раньше их нужно было встраивать в карту, менять на карте на другие подобные текстуры)
Теперь каждую текстуру нужно будет настроить, добавив к ним команду
$surfaceprop "какие физические свойства объекта будут применены"

Команда $surfaceprop связывает поверхность материала или модели с набором физических свойств, включая:
Какие звуки издаются при столкновениях
Какие эффекты возникают при выстреле по поверхности
Масса, плавучесть, упругость...
Влияние поверхности на близлежащие звуки (реверберация, эхо, поглощение...)
Свойства поверхности материала
Это список типов физических поверхностей, которые Source распознает, как указано в файлах, на которые есть ссылки в '\scripts\surfaceproperties_manifest.txt'.

Для того, чтобы понять, какие физические свойства нужно применить к тому или иному материалу, нужно перетащить файл карты BSP в директорию с «Half-Life/valve/maps/» и запустить Half-Life 1.
Когда загрузилось меню. Нажмите «Создать сервер» 🡪 Карта (выберите ts_constryard) 🡪 и нажмите «Пуск». Затем вы будете загружены в этот уровень.

Этот метод нужен для того, чтобы определять физические свойства объектов. (Это не обязательно, но служит для улучшения качества).
(в этом случае при стрельбе по ним и нанесении урона нужным текстурам из них будут вылетать декали конкретного материала). Но даже если во время игры непонятно, какой материал назначить текстуре. Сделать это можно на глаз (или по названию текстуры, например текстура называется "трава" поэтому нужно присвоить физические свойства "траве" (траве)). Пример настройки текстуры «{gate.vmt»:

"LightmappedGeneric" { "$basetexture" "tsconstr\{gate" "$alphatest" "1" //It specifies the mask used to determine the binary opacity. "$ALPHATESTREFERENCE" "0.5" //Specifies the minimum alpha color value at which the effect is rounded up to 255. "%compilepassbullets" 1 //Makes the brush behave like a lattice, passing bullets but blocking other objects. Useful for foliage or metal trellises. "$detail" "detail/detail_noise1" "$detailscale" 10.0 "$surfaceprop" "metal" //In this case, the physical properties of the metal are applied. }

Светящаяся текстура — это текстура, для освещения которой не требуется другой вид света. Он может создавать свою собственную карту освещения, независимую от всех источников света, и даже сам создавать свет. Это не означает, что поверхность будет казаться чисто белой, просто лицо будет игнорировать любой падающий на него свет. Это ключевая особенность, поскольку «светящийся» черный цвет остается черным и не становится ярче. Лицо достигает так называемой полной яркости, когда пиксели текстуры выглядят точно такого же цвета, как они были сохранены. Есть несколько разных способов создать этот эффект в движке Source. Для светящихся текстур на моделях или кистях.
Также будут текстуры, которым нужно будет добавить альфа-канал (эффект прозрачности), например '+a~tnnl_lgt3', чтобы эта текстура имела эффект свечения (определенной области):

$selfillum //parameter whose value can be 1 (enabled) or 0 (disabled), specified in the material's VMT. - Use this for most purposes not compatible with transparency. (Alpha channel is optional)
Процесс переноса № 2
Я добавлю альфа-канал с помощью Adobe Photoshop CS6 с предустановленным плагином VTF. (Плагин Adobe Photoshop VTF позволяет открывать и сохранять однокадровые односторонние 2D-текстуры непосредственно из Photoshop без необходимости конвертировать их в промежуточный формат, такой как файл TGA. Многокадровые/многогранные/3D-текстуры также можно открыт, однако только первый кадр/лицо/слой - Плагин построен на VTFLib и не поддерживает все расширенные функции, имеющиеся в VTFEdit.)

Adobe Photoshop — многофункциональный графический редактор, разработанный и распространяемый Adobe Systems.
==== Установка плагина: ====
Adobe Photoshop
Закройте Фотошоп.
Извлеките VTFLib.dll в папку ..\Photoshop\.
Извлеките файл VTF.8bi в папку ..\Photoshop\Plug-Ins\File Formats\.
Запустите Фотошоп.

Необходимо оставить те объекты, которые будут частью альфа-канала (в этом случае середина лампы должна остаться, а края удалить).
Нажмите CTRL+C 🡪, затем УДАЛИТЕ 🡪 CTRL + S (сохранить в формате VTF, DXT5). После сохранения закрываем эту текстуру, и снова открываем (и вставляем скопированный объект комбинацией CTRL+V, получилось два отдельных слоя. Теперь снова сохраняем как VTF)

В данном случае все получилось правильно, для проверки работы альфа канала откройте текстуру с помощью VTFEdit. Найти вид 🡪 Включите маску.
Аналогичную операцию проделываем с аналогичными текстурами светильников. Их файл VMT необходимо изменить следующим образом:

"LightmappedGeneric" { "$basetexture" "tsconstr\+0~tnnl_lgt3" "$detail" "detail/detail_noise1" "$detailscale" 10.0 "$surfaceprop" "glass" "$selfillum" 1 // Texture Luminosity (alpha channel) "proxies" { "ToggleTexture" { "toggletexturevar" "$basetexture" "toggletextureframenumvar" "$frame" } } }

«ToogleTexture» Теперь вы сможете использовать файл вывесок в Hammer. Примените его к кисти и используйте env_texturetoggle и logic_relay для анимации (в данном случае это необязательно).
Иногда приходится делать анимированную текстуру (из нескольких).
Например, когда вы вызываете лифт. Кнопка загорается 🡪 и гаснет. (Добавим альфа-канал каждой из этих текстур заранее, как и в предыдущих шагах). В этом случае мне нужно объединить "+0~drkmtls3" и "+a~drkmtls3". Откройте VTFEdit 🡪 Файл 🡪 Импорт (Мы используем «Все форматы») 🡪 Когда все выбрано, нажмите «Открыть». Импортируйте текстуры со следующими значениями (Обязательный тип текстуры, в данном случае это анимированная текстура, она должна воспроизводиться в формате off (+a~drkmtls3)-on (+0~drkmtls3). Если вдруг она сохраняется в формате формат включения-выключения.Переименуйте отключенную текстуру в 0 и включенную в 1.

После проделанных операций мы получили анимированный материал для тестирования. В элементе Image 🡪 Play (нажмите и увидите переключатель).
После того, как вы убедились, что он работает, вы можете сохранить файл. Файл 🡪 Сохранить как... 🡪 в формат VTF и сохранить как ‘+0~drkmtls3’ (так как такая текстура уже назначена на карту). Так же меняем VMT файл этой текстуры, окончательный вариант должен выглядеть так:

"LightmappedGeneric" { "$basetexture" "tsconstr\+0~drkmtls3" "$detail" "detail/detail_noise1" "$detailscale" 10.0 "$surfaceprop" "computer" "$selfillum" 1 //Luminance "proxies" { "ToggleTexture" { "toggletexturevar" "$basetexture" "toggletextureframenumvar" "$frame" } } }

В этом случае требуется «ToggleTexture», потому что этот материал изменится. (Например, при нажатии на кнопку она загорается). Проделываем аналогичные операции с похожими текстурами.

=== Портирование моделей и их текстур.===
В качестве инструмента для работы с моделями я буду использовать Crowbar. Для работы Crowbar у вас должны быть предустановлены Half-Life 1 (для декомпиляции) и Half-Life 2 (для компиляции). Перед началом процесса декомпиляции я создам для каждого файла mdl отдельную папку в соответствии с названием (Иногда после декомпиляции эталонные модели smd могут совпадать, это приводит к путанице, коллизия моделей будет некорректной)

Для начала работы с этим инструментом необходимо перейти в пункт Настройка игр 🡪 Указать директорию библиотеки Steam с предустановленными Half-Life 1 и Half-Life 2. После настройки.
Для декомпиляции перейдите в пункт Декомпилировать 🡪 и воспользуйтесь кнопкой Декомпилировать. где ввод MDL (папка и подпапки) — это расположение моделей для декомпиляции. И Вывод в (Рабочая папка) вывод исходных файлов после декомпиляции.

После операции появятся папки (в указанном каталоге), которые будут содержать исходные файлы моделей. В настоящее время они не могут быть скомпилированы на Source Engine. Так как они содержат устаревшие значения (которые вызовут ошибки), чтобы исправить этот инцидент, вам необходимо отредактировать .qc каждой модели. Покажу на примере модели банко:

// Created by Crowbar 0.71 // Stored modelname (without quotes): "D:\3D Studio Max Models\Devastation\Bench3\bench3.mdl" $modelname "banco.mdl" $cd "." $cdtexture "." //converts clipart to textures $cliptotextures //tells the compiler to convert .bmp to textures. $scale 1.0 $bodygroup "body" { studio "bench3" } $flags 0 //(parameter that controls the visualization of materials) $cbox 0 0 0 0 0 0 $bbox 0 0 0 0 0 0 $hbox 0 "joint1" -14.22 0 -39.560001 17.540001 46.57 50.919998 $sequence "idle" { "banco_anims\idle" ACT_IDLE 1 fps 30 loop }

Красным отмечены устаревшие линии, которые больше не работают.
Вам необходимо удалить эти команды и заменить их следующими:
«$flags 0» 🡪 «cdmaterials» [каталог текстуры модели\].

$cdmaterials (Указывает папки, в которых игра будет искать материалы модели (подпапки не ищутся. Каждый путь связан с <game>\materials\.)

Интересная особенность движка Goldsource, текстуры встроены в модель. В Source Engine текстуры отделены от модели.
Также необходимо добавить следующие значения, чтобы модель имела коллизию:

$collisionmodel "[reference name].smd" { $automass // Calculates the mass of the model based on the volume of the collision model and the material. $concave //Smooth out shell shading }

Такую операцию необходимо проделать с каждым файлом контроля качества исходного кода модели. (Окончательная версия на примере banco.mdl):

// Created by Crowbar 0.71 // Stored modelname (without quotes): "D:\3D Studio Max Models\Devastation\Bench3\bench3.mdl" $modelname "constryard\banco.mdl" $cd "." $scale 1.0 $bodygroup "body" { studio "bench3" } $cdmaterials "models\banco\" $collisionmodel "tree_deciduous_01a_physbox.smd" { $automass $concave } $cbox 0 0 0 0 0 0 $bbox 0 0 0 0 0 0 $hbox 0 "joint1" -14.22 0 -39.560001 17.540001 46.57 50.919998 $sequence "idle" { "banco_anims\idle" ACT_IDLE 1 fps 30 loop }

Собирать модели буду тем же инструментом, захожу в Compile 🡪 пункт «Игра, в которой есть компилятор моделей» и указываю Half-Life 2. Выбор директорий. Нажмите кнопку «Скомпилировать».
В указанной папке [Вывод в] проверьте, появились ли файлы mdl по количеству файлов контроля качества. В моем случае их 7.

После декомпиляции моделей в их исходных файлах появились изображения формата bmp, нужно их конвертировать с помощью XWAD в формат текстур.
Аналогично предыдущему шагу, но с помощью команды:
-BaseDir [Выходной] -BmpFile [Расположение файлов\*.bmp]
У каждой текстуры должен быть свой каталог в $cdmaterials (во время компиляции игра будет искать материалы для модели в указанном каталоге /).
После преобразования из bmp в tga используйте VTFEdit для преобразования из tga в vtf без опции «Создать файлы VMT».
Вам нужно отредактировать файлы vmt, сгенерированные XWAD.
Процесс переноса № 3
"VertexLitGeneric" //Model Shader { "$basetexture" "models\banco\BENCH1A" //location of textures, according to .qc $cdmaterials. }
Портирование карты
== Портирование карты ==
В качестве программы для декомпиляции я буду использовать MBSPC.
Кнопка Пуск
Нажмите «Выполнить».
Введите «cmd» и нажмите Enter.
Укажите расположение [mbspc.exe]

Со следующими командами:
--cluster //кластеры вычислительного уровня
-оптимизировать // оптимизировать
-capsule //используем сферическую модель столкновения
-bsp2map220 //конвертировать BSP в формат Valve MAP 220

Для декомпиляции просто откройте файл .bsp с помощью mbspc.exe.

Чтобы открыть преобразованный файл MAP, вам нужно преобразовать его в формат RMF, для этого я буду использовать J.A.C.K.
Hammer Editor может открывать файлы с расширением MAP, но в данном случае этого делать нельзя. Открытие приведет к ошибке:

С J.A.C.K. сохраните файл MAP с расширением RMF.
Чтобы J.A.C.K работал, у вас должна быть предустановлена Half-Life 1. И укажите каталоги Half-Life 1 SDK. Вам нужно перейти в Инструменты 🡪 Настройки 🡪 Игровые профили. Где в некоторых абзацах нужно будет указать каталоги.

После этой операции полученный файл можно открыть в Hammer Editor.
В качестве программы для редактирования карты я буду использовать Valve Hammer Editor, расположенную в папке Source SDK [/bin/hammer.exe]
Хаммер уже настроен по стандарту. Но если у вас возникли проблемы, перейдите в Инструменты 🡪 Параметры 🡪 Конфигурации игры и настройте каталоги.

Слева вверху в углу находим File 🡪 Open 🡪 выбираем формат .rmf и открываем декомпилированный файл.

Открыв карту видно, что на ней нет текстур.
Их нужно применять. Переходим к «Файл 🡪 Конвертировать WAD в VMT…»
Инструмент «Преобразовать WAD в VMT…» применит текстуры, которые я уже преобразовал.
Если что-то сделать не так, то вместо этого сообщения будут появляться строки о том, что отсутствуют какие-то текстуры.
Далее найдите ошибки связанные с текстурной осью, для этого вам понадобится Crafty (Object Viewer). Программа для просмотра файлов bsp и bsp, .gcf, .ncf, .pak, .vpk, .wad, .xzp. Нужно сравнить оригинальную версию, которая получилась, и оригинальную работу.
Текстуры расположены неправильно, это нужно исправлять вручную. Выберите поверхности с помощью инструмента «Toogle Texture Application». Выбор инструмента Toggle Texture Application открывает диалоговое окно Face Edit Sheet.

Проблемы - Вращение.
Измените значение «Поворот» со 180 на 0.
Некоторые текстуры могут быть неправильно повернуты. Вам нужно изменить значение Align с World на Face.
Эти флажки позволяют вам установить стиль макета текстуры для выбранных граней. Если флажок Мир активирован, то текстура будет относиться к системе координат мира. Если выбран флаг Face, то текстура создается относительно системы координат выбранного лица. Вручную сравните исходный файл и источник. Исправление подобных проблем. Если изменение параметра "Вращение" не помогло. Вы можете попробовать использовать Justify (Выравнивание) 🡪 Fit (Масштабировать до размера лица).

Бывает и так, что декомпилятор накладывает на поверхность сущности не ту текстуру (должна быть нулевой).
Использовать «Обзор» (открывает браузер текстур)
🡪 ищите текстуру nodraw (для ускорения процесса найдите вкладку «Фильтр» и введите туда «toolsnodraw»). И нанесите его на аналогичные поверхности.
Это нужно для того, чтобы оптимизировать карту, так как игрок никак не увидит эту текстуру (во время игрового процесса). Если этого не сделать, то будет лишняя нагрузка на компьютер.

Иногда ни одна из функций не может помочь, в таких ситуациях размеры приходится исправлять вручную. В этом случае я использовал «Сдвиг текстуры» и вручную установил значение «Ось X».
Бывает и так, что текстура некорректно наложена на несколько кистей (две отдельные поверхности), на примере зданий:
Чтобы это исправить, вам нужно активировать «Относиться как к одному». Если у вас выбрано несколько лиц, вы можете включить этот флажок, чтобы Face Edit рассматривал их как одно большое лицо. В основном используется в тандеме с Fit. Выберите все поверхности и после нажатия «Подогнать» этот недуг будет устранен.
Но если это не помогает, приходится выставлять значения вручную. Вы можете брать значения с похожих поверхностей (чтобы упростить коррекцию) и редактировать оси «X и Y» вручную.

Иногда можно столкнуться с ошибками, что на кисть накладывается другая текстура (вместо woods_wood2 накладывается текстура compensado):
Это легко исправить. Просмотрите 🡪 найдите текстуру с именем woods_wood2 и замените неуместный материал)
Проверка карты на наличие ошибок.
Использование комбинации ALT + P заставит Hammer сканировать вашу карту и уведомит вас о любых найденных ошибках.
При выборе одной из ошибок будет выделен объект /solid (если применимо) и предоставлены три варианта: Перейти к ошибке — эта кнопка центрирует 2D- и 3D-виды на объекте, к которому относится ошибка. Исправить — эта кнопка попытается исправить текущую выбранную ошибку. Исправить все (тип) — с помощью этой кнопки будут исправлены все ошибки выбранного типа.

Если вы прокрутите вниз, вы можете найти ошибки «Недопустимая твердотельная структура», которые необходимо исправить. (Твердое тело имеет неправильную структуру, вероятно, в результате манипулирования вершинами. Это означает, что твердое тело не является выпуклым во всех плоскостях.
Вам нужно будет либо исправить это, либо, если это невозможно, перестроить его.) Вы должны нажать «Перейти к ошибке». И проверьте, что это такое. Если вы нажмете «Исправить», модель может изменить свою форму (но это испортит структуру в том смысле, что она не будет соответствовать оригиналу). Его необходимо воссоздать.

После этой операции структура испортилась. Есть вариант воссоздать структуру вручную, но я воспользуюсь другим способом. Я декомпилирую карту с помощью BSPtwoMAP и беру эту кисть оттуда.
Как и в предыдущем шаге, экспортируйте деталь из карты в rmf, используя J.A.C.K. и откройте получившийся файл в Hammer Editor и примените текстуры.
Далее, в соответствии с размером, вставляем по тем же координатам (Иногда модель нельзя поставить на то же место из-за того, что сетки большие, это можно исправить с помощью функции «Меньшая сетка», после чего удаляем старую структуру с помощью клавиши DELETE.
Эта структура имеет много проблем (связанных с осью текстуры и неправильной структурой):

Вы можете упростить процесс исправления, взяв некоторые из этих структурных кистей из "BSP2MAP".
BSP2MAP не лучшим образом разобрал карту (браши внутри имеют место) для оптимизации кистей этой структуры нужно заменить текстуры на --nodraw (эти зоны не должны отрисовываться, игрок их никогда не увидит). На примере кистей:
Если от нажатия «Исправить» ничего не происходит, удалите эту кисть. Бывает, что возникает проблема «Недопустимая сплошная структура» с теми кистями, которые уже есть на карте (или очень похожими). Просто продублируйте другую кисть, выберите нужную кисть, скопируйте и вставьте ее. И с помощью сетки вставьте его по нужным координатам.

Открываем диалоговое окно комбинацией ALT+P и исправляем оставшиеся проблемы командой «Исправить все (типа)» для каждой сущности. (которые связаны с тем, что используются устаревшие значения). Если вдруг ошибка «Нет запуска плеера». Потом это будет исправлено, когда мы создадим место возрождения (игрока). Но на данный момент нам это не нужно.
На карте вы могли видеть следующие объекты, которые не являются чем-то функциональным:
Устаревшие объекты обычно не работают. Обычно то, что они сделали, можно сделать лучше с чем-то другим. В этом случае с помощью редактора Hammer мы находим некоторые из них и запоминаем их название.
Даже относительно скромные уровни могут содержать сотни, а то и тысячи объектов. Hammer предлагает два способа отслеживания элементов на вашем уровне: обычная группировка и группировка видимости (VisGroups). Для быстрого обнаружения каждой устаревшей сущности достаточно воспользоваться окном «VisGroups» 🡪 «Авто». И снимите все галочки, кроме «Кисть объектов».

В этом случае проще найти устаревшие сущности, но до их удаления. Перейдите к пункту «Файл» 🡪 Сохранить как… 🡪 Укажите формат vmf
Портирование карты №2
Теперь откройте сохраненный файл vmf с помощью Notepad++. (Закройте редактор Hammer).

Необходимо комбинацией CTRL+F 🡪 найти пункт «Замена» и в «Найти:» ввести «ts_model» (Устаревшая сущность, которая больше не работает). А в «Заменить на:» введите «prop_dynamic» (это точечная сущность, доступная во всех играх Source. Она используется для добавления в мир модели, способной анимировать себя. В нашем случае это необязательно). Затем нажмите «Заменить все», после чего устаревшие объекты будут заменены. А потом найти любую строку, заменить «Найти:» на «Prop_dynamic» 🡪 Найти дальше. После этого мы можем увидеть строки моделей, и там будет их каталог. На примере модели «hidrante.mdl», расположенной на строке 53460.
Таким же образом заменяем info_player_deathmatch на info_player_start. И Cycler (используется для отображения модели в целях тестирования. После включения модель будет воспроизводить доступные анимации.) на prop_dynamic.

Должен быть изменен в зависимости от местоположения модели. В моем случае я заменил «модель» «models/ts_constryard/hidrante.mdl» на models/constryard/hidrante.mdl. Для упрощения процесса делаем как в предыдущем шаге (заменяя сразу все строки на нужные). Затем используйте пункт Файл 🡪 Сохранить. И запустите получившийся файл VMF. Модели работают, пример:
Используйте диалоговое окно VisGroups 🡪 снимите все флажки, кроме Brush Entities. Удаляем все устаревшие сущности вручную, выделяя их клавишей CTRL 🡪 и удаляя кнопкой Удалить. В нашем случае удаляем все сущности с именами «ts_groundweapon» и «ts_powerup» (Это сущности из модификации, для которой создавалась данная карта. В данном случае это оружие и способность). После проделанных операций возвращаем все объекты в «VisGroups».
После сохранения файла RMF в VMF. В конструкции от BSP2MAP появились дыры.
Это можно исправить, воссоздав эту кисть или поставив рядом с ней похожую кисть. Присвойте ему те же координаты, где он должен быть.
После компиляции карты в этой структуре появляются дыры (которые не видны в Хаммере), для устранения этой проблемы мы оптимизируем эту кисть, превратив ее в модель с помощью официального инструмента Propper.

Настройте объекты спрайтов на карте. Откройте файл VMF с помощью Notepad++. Ищем через поиск «env_sprite», чтобы сменить каталог спрайтов (в моем случае это требуется). Я меняю все предложения с "sprites/ts_constryard" на "sprites". Откройте карту в Hammer Editor. Выберите все объекты "env_sprite". Выделив все сущности, группируем их комбинацией «CTRL+G». Зайдите в свойства этих объектов. И настроить их так:
Render FX/Transparency (0–255) (renderamt) <integer>
Для значения прозрачности требуется режим рендеринга, отличный от Normal. 0 невидим, 255 полностью виден.
Цвет — устанавливает цвет RGB для объекта.
Отключить получение тени — запретить объекту получать тени на себя.

Теперь «Env_sprite» выглядит так, слишком много синего… Это нужно исправить с помощью Adobe Photoshop.
Нужно открыть файлы спрайтов VTF. Использование инструмента «Цветовой диапазон» (🡪Выделение). Выберите всю синюю область. А затем в «Оттенке/Насыщенности» (Изображение 🡪 Настройка) уменьшите яркость, чтобы цвет стал «черным».
После предпринятых действий ситуация улучшится. Добавьте клипы на карту (соответствующие оригиналу, текстуры клипов — это невидимые текстуры инструментов, которые ограничивают движение, обычно игрока (игроков).
Давайте оптимизируем карту, используя текстуру -Nodraw, о которой говорилось ранее. Но напомню, что его нужно наносить именно на эти поверхности. Которую игрок никогда не увидит, в моем случае пришлось вылететь за пределы карты. И мы видим куб. Здесь необходимо покрыть все текстуры «-Nodraw» (текстуру скайбокса можно оставить).

Изменяем старые сущности. От Func_illusionary (изначально добавленный как устаревший объект из Half-Life для обратной совместимости) до Func_detail. Но некоторые func_illusionary остались прежними (те, которые используют текстуру «{apoio», вместо этого мы добавляем невидимую стену к каждой колонне).
Теперь добавьте кубические карты на карту. (Чтобы движок Source корректно отображал несколько отражающих материалов, их необходимо объединить с внешними данными. Эти данные хранятся в виде кубической карты, то есть кубической текстуры, которая представляет собой трехмерное изображение определенной области. Сделать Таким образом, движок Source использует точечные объекты env_cubemap в качестве эталонов для создания текстур и сохранения их в файле «.bsp». Cube создает текстуры, моделирующие отражающую поверхность.)
Теперь добавьте узлы на карту. (Узлы — это тип точечных объектов, которые при соединении друг с другом создают сеть, называемую графом узлов. Граф узлов сообщает NPC контекстную информацию об их среде, делая их более отзывчивыми, чем позволяет их естественное поведение.)
Давайте добавим освещение на карту. В Goldsource источник света отбрасывался от текстур (сравнивая декомпилированную версию и оригинал). В моем случае мне пришлось добавить «световую» сущность (точечную сущность, доступную во всех играх Source. Она создает невидимый статичный источник света, который светит во всех направлениях) на первых этажах этого здания:

Также нужно найти на карте light_environment (точечная сущность light_environment доступна во всех играх на движке Source и Source2. Она отбрасывает параллельный направленный свет от текстур toolsskybox, приближая его к свету Солнца или Луны), в моем случае он расположен в углу карты. Необходимо увеличить его значения (из личного опыта я понял, что низкие значения Goldsource эквивалентны высоким значениям в Source). Перейти 🡪 Свойства объекта 🡪 Измените значение «Яркость и цвет» на более высокие значения (но сохраняя ту же палитру)
Теперь нам нужно поработать над сущностями func_train (это точечный объект, доступный во всех играх Source Source. Это пережиток Quake, который пинг-понгит между началом и концом серии path_corners. В основном он был заменен на func_tracktrain в GoldSrc, но по-прежнему использовался для зацикливания фоновой автопрокрутки. В Source введение родительского контроля сделало этот метод устаревшим. Однако объект по-прежнему функционирует.) , «func_button»
(это кисть, доступная во всех играх Source. Она предназначена для использования игроком в качестве кнопки. Когда игрок использует +, она перемещается в нажатое положение).
В данном случае это лифт. Измените сущность с «func_train» 🡪 на новую сущность «func_tracktrain» (это кисть, доступная во всех играх Source. Она функционирует как движущаяся платформа, на которой может ездить игрок. Она следует по пути сущностей path_track).
Портирование карты №3
(No User Control - Нет пользовательского управления, только с кнопки должно быть. Fixed Orientation - Исправлена ориентация, ось)
И добавьте два объекта «path_track» (точечный объект, доступный во всех играх Source. Он используется для построения путей, по которым могут следовать другие объекты. Каждый path_track — это узел пути, каждый из которых содержит имя следующего узла пути). Ставим его посреди лифта, и объединяем их. Обязательно присвойте имя этим сущностям. С помощью команды: Next Stop Target (Они должны быть соединены последовательно, например path1 (идет в path2) и path2 (обратно в path1)).
Каждая такая сущность должна иметь имя. «Цель следующей остановки» должна содержать цель, куда пойдет лифт. В этом случае нужно сделать цепочку (P_BAXIO 🡪 P_CIMA и по кругу). Подсказка ("Stop" - Остановить поезд. "SetSpeed" - Установить скорость (для остановки лифта). "OnPass" - остановиться по прибытии (иначе будут проблемы, и он не остановится)). Необходимые параметры на примере моей конфигурации:
Перейдем к настройке «Func_button», добавим сущность «env_texturetoggle» рядом с кнопкой.
В «Target Brush(es)» мы помещаем имя «func_button», к которому мы хотим прикрепить объект (чтобы кнопка имела анимацию при взаимодействии с ней). Откройте свойства кнопки. И добавьте следующие значения в Outputs:
Флаги (переключает исключительные функции объекта, его конкретное количество определяется комбинацией добавленных флагов) должны выглядеть следующим образом:
Не двигаться (Чтобы после нажатия кнопка не улетела в другое место, а осталась на месте). Use Activates — Чтобы игрок мог вызвать лифт по кнопке «использовать (E)».
Проделайте эту операцию со всеми подобными объектами. Затем можно переходить к заключительному этапу.
Заходим в окно «VisGroups», снимаем галочки со всего, кроме «Entities» 🡪 Выбираем все сущности 🡪 переходим в свойства 🡪 и меняем значение rendercolor с «0 0 0» на «255 255 255» (Иначе все сущности будут черными, в GoldSource работало иначе). После этого откройте окно Проверка ошибок и устраните оставшиеся проблемы.
Сохранение
Откройте меню «Файл» и выберите один из двух: «Сохранить» или «Сохранить как...»:
После компиляции игра запустится. Теперь вы можете использовать карту в новом движке. Также не забудьте построить кубические карты и установить освещение на HDR.
После проделанных действий можно считать, что портирование завершено. Новый bsp теперь работает в Source Engine 24.
Заключение
В ходе работы мне удалось портировать старую карту на новый движок и даже апгрейдить итоговую карту дополнительными значениями для текстур, порт карты, моделей и текстур прошел успешно. Было проведено сравнение с оригинальной работой, описана структура bsp, которая является форматом карты в движках. Изучен формат mdl, который является модельным файлом. Декомпиляция нужных файлов прошла успешно, основное внимание было уделено исправлению проблем после декомпиляции, которая является пересозданием, большинство сущностей было портировано. Оптимизация прошла успешно, и многие сложные геометрические фигуры были преобразованы в модели, а в func_detail окончательная карта была оптимизирована с помощью --nodraw. Добавлены кубические карты и узлы AI. Выполнив все шаги, я перешел к компиляции и карта была портирована. Этот способ разработан мной на личном опыте, информации о портировании в интернете не так много. Я нашел лучший способ, на мой взгляд. Теперь эту карту можно использовать в современном движке, таким образом старый контент становится актуальным.
Спасибо за прочтение!

Версия с изображениями:
https://sites.google.com/view/unified-network/guides/%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%B0-%D1%81-goldsource-%D0%BD%D0%B0-source?authuser=0

https://youtu.be/ceYKDC5Z5qo
https://youtu.be/FsPky2YrUeQ
https://youtu.be/QGVeXaze0KM
2 Comments
NOUG4AT  [author] Sep 18, 2023 @ 7:59am 
Vertexlitgeneric у текстур шейдер стоит?
Так же, qc лог не помешал бы.
И ознакомьтесь с руководством на valvesoftware - porting GoldSRC (maps, models, etc) to source
у меня есть вопрос, а что делать если при импорте модельки, она выходит тупо прозрачной?, меш можно увидеть в специальном окошке и у нее есть колизия но она просто невидимая, текстуры я положил в нужную папку