не знаю нужно это кому-то или нет, но меня бесит что я должен называть текстуру так что бы в начале её имени было имя папки в которой она лежит. поэтому вот правка скрипта экспорта которая это исправляет:
if dm.filename != undefined then
(
local fullPath = dm.filename
local texRoot = "textures\\"
local idx = findstring fullPath texRoot
-- на случай разного регистра папки
if idx == undefined then idx = findstring fullPath "Textures\\"
if idx == undefined then idx = findstring fullPath "TEXTURES\\"
if idx != undefined then
(
-- берём путь относительно папки textures
local rel = substring fullPath (idx + texRoot.count) -1
rel = getfilenamepath rel + getfilenamefile rel
dfile = rel
)
else
(
-- если текстура вне папки textures — старое поведение:
-- создаём папку по префиксу до первого "_"
dfile = getfilenamefile fullPath
local nn = findstring dfile "_"
if nn != undefined then dfile = (substring dfile 1 (nn-1)) + "\\" + dfile
)
)
else dfile = "mtl_rja_01"
if dfile == "" or dfile == undefined then dfile = "mtl_rja_01"
Изменённая версия по-другому обрабатывает путь к текстуре:
Приоритет — путь относительно папки textures\: если в полном пути к текстуре встречается textures\ (с учётом трёх вариантов регистра: textures\, Textures\, TEXTURES\), то путь обрезается начиная с этой папки и используется как относительный путь в экспортируемом файле.
Старое поведение сохранено как запасной вариант: если текстура лежит вне папки textures, работает прежняя логика — берётся имя файла, и перед первым _ вставляется подпапка с тем же именем (например, mtl_rja_01.tga → mtl\mtl_rja_01).
Предупреждение объединено: прежняя ветка else format "#warning..." теперь сведена к общей проверке в конце.
данный экспорт я использую как основной. но старый у меня тоже стоит на всякий случай в виде отдельной кнопки и собственно отдельным скриптом.
Дополнено 28 минуты спустя
И вот еще xrTools.ShaderSelector.ms я не знаю есть ли где что то подобное этот я сделал на основе пакета скриптов от 05.07.2026 by WolfHeart
Что изменено:
1. Работа в Slate Material Editor
Раньше скрипт работал только в Compact Material Editor — в Slate он не находил активный материал и выдавал ошибку.
Теперь скрипт сам определяет режим редактора:
Если открыт Slate — берёт активный материал из панели Parameter Editor (SME.GetMtlInParamEditor()).
Если открыт Compact — работает как раньше (medit.getcurmtl()).
2. Новая кнопка — ASSIGN TO ALL SCENE
Массовое назначение шейдера сразу всем материалам сцены, а не только одному.
Как работает:
Рекурсивно собирает все материалы сцены, включая субматериалы Multi/Sub-Object.
Пропускает дубликаты.
Материалы без атрибута X-Ray не вызывают ошибку — просто пропускаются.
В конце показывает статистику: сколько материалов обновлено, сколько пропущено.
Зачем нужно: когда в сцене десятки/сотни материалов и нужно разом поставить им один и тот же Engine/Compile/Game-шейдер — не кликать же каждый вручную.