w23 / xash3d-fwgs

Vulkan Ray Tracing fork of Xash3D FWGS engine. Intended to be merged into master at some point in the future.
164 stars 16 forks source link

patch: replace by custom material (not in wads) #291

Closed 0x4E69676874466F78 closed 2 years ago

0x4E69676874466F78 commented 2 years ago

Добавить собственные материалы которых нет в wad файлах и заменять через _xvk_texture на них.

Я вот хотел сделать зеркало в туалете, по идее я задаю mirror под нужную поверхность, дальше у меня в materials.mat уже она описана с нужными параметрами и по идее после перезагрузки патчей должна стать зеркалом из materials.mat.

Кроме того убрать требование писать вот так: "_xvk_texture" "#maps/c1a0d.bsp:generic028.mip" Должно работать и так: "_xvk_texture" "generic028"

Связано с #288

w23 commented 2 years ago

Тут нужно немножко зарефакторить вообще то, как идёт работа с текстурами и материалами. Не знаю, успею ли сегодня

w23 commented 2 years ago

"_xvk_texture" "generic028" и так работает же. Там целая функция, которая ищет полное имя для сокращённого.

По поводу добавления новых материалов есть три варианта:

  1. KPACUBO. Отделить материалы от текстур полностью. Текстуры -- одна табличка, материалы -- другая. Индексы у них не совпадают. Где-то при инициализации мы заполняем материалы по-умолчанию и готовим табличку соответствия. При загрузке любых мешей заменяем приходящий из движка индекс текстуры на индекс материала. Это много возни, надо писать свою хеш-таблицу со строками и коллизиями, следить за тем, чтобы не путать индексы в текстуры и индексы в материалы. Зато унянк.
  2. HACK. Если не найдена текстура из "for" создавать dummy текстуру с таким именем и заменять материалом её. Может загружать лишние текстуры (если, например, какая-нибудь подменная не используется в данном уровне), что можно решить доп флажком "создавать, если нету". Условно быстро реализовать, но грязь, лишние текстуры-пустышки забивают таблицу.
  3. Как сейчас сделаю вслепую: как HACK, но рассчитывает на уникальную basecolor_map текстуру. Если нет поля for, то за него эффективно считается basecolor_map. На этот новый материал можно будет ссылаться по полному значению basecolor_map. Сделать быстро, легко. Недостаток: требует наличия и уникальных basecolor_map.
w23 commented 2 years ago

https://github.com/w23/xash3d-fwgs/pull/307 Сделал 3, но не проверял. Проверю только завтра на стриме, наверное.

0x4E69676874466F78 commented 2 years ago

"_xvk_texture" "generic028" и так работает же. Там целая функция, которая ищет полное имя для сокращённого.

Когда недавно я пытался (c1a0d.bsp.patch)

{
"_xvk_surface_id" "2057"
"_xvk_texture" "generic028"
}

у меня не работало. А так работает:

{
"_xvk_surface_id" "2057"
"_xvk_texture" "#maps/c1a0d.bsp:generic028.mip"
}

Сходи сам проверь.