Войти
ПрограммированиеФорумГрафика

Аппаратная компрессия текстур на вычислительных шейдерах

#0
(Правка: 14:49) 14:19, 24 июля 2022

Никто не интересовался данным вопросом? Временно для этой цели в своём редакторе игровых объектов я использую Nvidia Texture Tools SDK, но программная компрессия 2K-текстур с MIP-уровнями формата BC7 занимает 7 с лишним минут, а аппаратная вендорозависима. Пока я остановился на форматах BC6H для скайбоксов (считаю, что для режима HDR они должны быть HDR) и BC6H_SF для карт нормалей, чтобы предельно сохранить точность и каждый кадр каждую нормаль не конвертировать из Integer в Signed Float. Даже заморочился на том, чтобы редактор объектов импортировал карты нормалей, запечённые в формате EXR. А также BC7 (RGB-sRGB и RGBA-sRGBA соответственно). Однако для полной картины нужны все современные форматы - от BC4 до BC7 на тот случай, если временно придётся юзать одноцветные и двухцветные карты.

P.S. Если у вас есть лучшие соображения о том, как хранить PBR-материалы, я выслушаю, а пока у меня идут текстуры sRGB-sRGBA на цвет, Signed Float на нормали, RGBA на Metallic, Roughness, Ambient Occlusion и Displasement, но как минимум нужно будет куда-то запихнуть ещё и карту свечения. Если других карт больше не существует, я могу объединить Displacement с нормалями, сделав их просто RGBA, а свечение добавить к остальным, но, как мне думается, могут быть ещё и другие карты, верно? Равно как и нормали, сжатые в два канала...

Начинал импортировать в движок текстуры посредством библиотеки FreeImage, потом использовал AMD Compressonator, сначала конвертировал текстуры в формат DDS, потом в KTX, а потом написал консольные конвертеры моделей и текстур, где уже подбил свой контейнер для текстур, позволяющий хранить всё вплоть до массива кубических текстур. Теперь использую редактор игровых объектов, который импортирует модели, текстуры, генерирует коллизии и сохраняет всё в формате игрового движка, текстуры жмутся посредством NVTT. Один знакомый использует Basis Universal Supercompressed GPU Texture Codec для хранения своих текстур, а это возврат к лишней утилите со своим графическим контейнером. Однако я решил наоборот предельно уйти от сторонних утилит и форматов и полностью написать свой функционал, дело осталось за малым - найти читабельную информацию об алгоритме блочной компрессии данных форматов текстур.

#1
14:29, 24 июля 2022

Даниил Петров
> sRGBA
Что это? :)

#2
(Правка: 14:45) 14:43, 24 июля 2022

modmaker1
> Что это? :)
GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM

#3
15:02, 24 июля 2022

Даниил Петров
А, ясно..

#4
15:04, 24 июля 2022

modmaker1
sRGB с альфа-каналом в общем :) я сначала подумал, что за тролль )))

#5
13:57, 5 авг 2022

Как вариант
https://github.com/darksylinc/betsy/

ПрограммированиеФорумГрафика