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

materials: packing textures #469

Open 0x4E69676874466F78 opened 1 year ago

0x4E69676874466F78 commented 1 year ago

Для упаковки текстур потребуется скрипт, задача которого позвать Compressonator и сжать в dds/ktx2 При этом скрипт будет ещё звать например libvps (быстро) или imagemagick (медленно), чтобы metal_map и roughness_map упаковать в один файл metalroughness.png На тему в каком канале что хранить это под вопросом, я пока не понял как оптимальнее. Cкрипт ещё будет обходить mat файлы и переписывать строки

"metal_map" "${name}_metal.png"
"roughness_map" "${name}_roughness.png"

на

"metal_map" "${name}_metalroughness.ktx2:green"
"roughness_map" "${name}_metalroughness.ktx2:red"

Это просто пример. Здесь green и red это устное соглашение, по идее не нужно пихать в шейдер лишнюю логику выбора каналов, но если без удорожания можно сделать выборку каналов то это будет неплохо (наверное). Ещё можно схлопнуть в "metalroughness_map" "${name}_metalroughness.ktx2" но это мне меньше нравится.

0x4E69676874466F78 commented 1 year ago

Этой хернёй наверное я могу сам заняться, как подойдёт необходимость.

0x4E69676874466F78 commented 1 year ago

Подразумевается унифицировать схему упаковки https://github.com/SNMetamorph/PrimeXT/issues/160

SNMetamorph commented 1 year ago

Подразумевается унифицировать схему упаковки SNMetamorph/PrimeXT#160

Пока что со схемой упаковки я не определился, но я точно могу сказать, что будет какая-то определенная схема, без возможности выбора указать что в каком цветовом канале лежит (опять же, это сделано чтоб не городить лишней логики в шейдере).

Ну так вот, планируется сделать что-то приблизительно такое. Можно в параметрах материала указать вот так:

"metal_map" "1.dds"
"roughness_map" "2.dds"

А можно вот так

"combined_map" "abc.dds" // this texture contains roughness/metalness/etc. in it, packed in different color channels 

Первое удобно для непосредственно процесса создания контента. Второе, на этапе когда весь контент уже готов, позволяет эффективно упаковать текстуры и сэкономить приличное количество видеопамяти и дискового пространства.