Разработки от TonaTor
|
|
|
|
|
|
|
|
|
|
Работаю над поддержкой контейнерных DDS-файлов. В 1 DDS-файл можно запихнуть хоть 2, хоть 20, хоть 100500 изображений одинакового разрешения, о чём и говорит значение Depth в хедере файла.
https://imgur.com/Idchqk9
А благодаря texassemble из пакета DirectXTex-master - такие dds`ки можно делать самому.
https://imgur.com/VIWJ7Ip
|
|
|
|
Классика *ть...
Я сгорел
- Есть один и тот же формат DDS-файла - "GRGB".
https://imgur.com/Gc8ibkV
https://imgur.com/mzPjhl1
(MipMap - уровни, линейный размер и доп. флаги не влияют!!!)
Один DDS-файл ("D:\Temp\test_12_A8R8G8B8.DDS") (формат 69) был получен путём преобразования A8R8G8B8-DDS-файла ("D:\test5\test_12_A8R8G8B8.dds") (формат 87) через Microsoft`овский texconv из пакета DirectXTex-master.
https://imgur.com/qR0u5nS
https://imgur.com/3vxR1i9
Другой DDS-файл ("D:\test5\test_23_G8R8_G8B8.dds") (формат 69) - был скачан с github`а. https://github.com/GarageG....dds
Encoder от него у меня есть (из плагина для Гимпа). Его правильно видят многие онлайн-конвертеры. При этом его не видит ни одно ПО, в т.ч. DDSView`а из пакета DirectXTex-master.
https://imgur.com/gRHxpTR
В составе моей проги есть работающий decoder (из того же плагина для Гимпа) Который видит "test_23_G8R8_G8B8.dds"
https://imgur.com/7vSomlP
но при открытии "test_12_A8R8G8B8.DDS" выдаёт артефакты.
https://imgur.com/XvJRbbu
При этом DDSView от Microsoft его видет
https://imgur.com/zmvuv2y
Получается взаимоисключающая ситуация: Те "GRGB", которые созданы средствами "энтузиастов" - не видятся средствами Microsoft. А те "GRGB", которые созданы средствами Microsoft - не видятся средствами "энтузиастов".
При этом - средства Microsoft не видят RGBG, созданные средствами "энтузиастов".
https://imgur.com/f0bIuMw
Но эти RGBG видят средства "энтузиастов". В т.ч. многие онлайн конвертеры.
https://imgur.com/ontNjoS
Кто-то явно перепутал форматы... Наврятли это энтузиасты (- личное мнение).
|
| | |
|
|
|
|
|
Результат анализа найденных Кубмап
https://imgur.com/3DTkxVa
Как видно - самыми популярными среди мододелов и тому подобными, являются сжатые до предела DXT1 и несжатые BGRA изображения.
Хотя лично я топлю за DXT5 и BC7-сжатые форматы. Все "BC" в том числе и DXT шакалят качество, но BC7 - меньше.
А для изображений без альфы - пойдут и BC 1-2. Но я всё равно за BC7_UNORM.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В общем... познакомился с форматом DXGI №2 "R32G32B32A32_FLOAT" Невероятно порадовал перевод этого типа в R8G8B8A8...
Особенности: При значениях выше 0x3F80000 сразу сыпятся артефакты. - заткнул. Сразу посыпались переполнения через 0 и меньше. - тоже заткнул.
Такое ощущение, что это ландшафтный формат или что-то подобное.
Пример артефактов 0x3Fnnnnnn - значений:
https://imgur.com/oTtAvXE
А вот с авто-отсечением переполнения:
https://imgur.com/eURZjQV
Пример реализации:
https://imgur.com/bLSIOkg
А сколько здесь было артефактов - трип и ужас...
https://imgur.com/pQPrhgM
Кратко. Мои впечатления то формата:
|
|
|
|
|
|
|
|
Для большинства V/U - содержащих ддс`ок, будет применяться предварительный анализ освещённости.
|
|
|
|
Исправлена ошибка цветовой модели в формате CxV8U8. Ошибка была вызвана: неверными операциями с числами с плавающей запятой; неверной работой с вычислением квадратного корня; неправильным типом данных одной переменной. Также, пересвет V/U - диапазона, мог привести к переполнению синего диапазона пикселя.
Иллюминация формата была отключена.
https://imgur.com/7CYoy4y
https://imgur.com/dFpViog
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ошибки "invalid floating operation", вызываемой некорректными результатами работы функции "nvDDS::nvDXTdecompress(...)" и моим недопиленным менеджером памяти, более не существует.
https://imgur.com/StR5RF6
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переписываю программу с нуля.
|
|
|
|
|
|
Для оптимизации потребляемой памяти я усилил стандартный RLE компрессор. Его можно использовать как для записи данных в файл, так и для внутри-программного хранения данных без потери качества. Алгоритм подходит для: 1) мультипоточного сжатия данных; 2) мультичанкового хранения данных.
Однако жмёт немного дольше. Пример:
8K изображение https://imgur.com/opCkgDw
Скорость загрузки и выгрузки (со сжатием) в секундах https://imgur.com/7Ihv8vM
Вес выходных данных https://imgur.com/4L92g8z
Новый алгоритм я обозвал "PGRLE 2". "progressive graphix run length encoding" - уже вторая (2) его версия
|
|
|
|
Оттестировал PGRLE 2 на большем кол-ве файлов. Мой алгоритм хорошо отрабатывает только там, где есть альфа-канал.
P.S. Все исходные RGB изображения при загрузке конвертятся в RGBA, и соответственно выгружаются как RGBA.
|
|
|
|
Сделал простенькую прогу для оптимизации TGA файлов (для мододелов).
https://imgur.com/FFt5VTS
https://imgur.com/AdiSwIp
https://imgur.com/YJ0raKa
https://imgur.com/CKMZjgT
Было: https://imgur.com/pHDHMsR
Стало: https://imgur.com/DwopLv1
Прога: (удалено при перезалитии)
Код: (удалено при перезалитии)
Инструкция для оптимизации мода: 1) распаковать все архивы выбранного мода; 2) запустить программу; 3) выбрать папку с модом и нажать кнопку "ОК"; 4) дождаться надписи "Для продолжения нажмите любую клавишу . . ."; 5) нажать любую кнопку на клавиатуре или закрыть программу; 6) запаковать архивы мода.
Частичный алгоритм работы программы: 1) выбор каталога; 2) поиск tga файла; 3) файл найден -> переход к пункту 4, файл не найден -> переход к пункту 11; 4) открытие найденного tga файла; 5) проверка сигнатуры (если сигнатура неверна, то переход к пункту 2); 6) проверка наличия RLE-сжатия; 7) анализ альфа-канала; 8) удаление альфа-канала при необходимости; 9) RLE-сжатие файла при наличие изменений или если исходный файл не сжат; 10) переход к пункту 2; 11) завершение сканирования.
Негативного влияния на ресурсы мода не замечено.
Новая версия проги: http://mow-portal.ru/forum/30-189-3#5249
|
| | |
|
|
|
Обязательно папку с модом выбирать? Например не для мода можно?
|
|
|
|
Ghosteron, папку в которой есть тга файлы. обычно таковые есть в модах, но нужно распаковывать архивы.
|
|
|
|
Цитата TonaTor ( ) Ghosteron, папку в которой есть тга файлы. обычно таковые есть в модах, но нужно распаковывать архивы. Я провернул такое, но ничего не изменилось.
|
|
|
|
в смысле всё целое или вес не снизился ?
|
|
|
|
Цитата TonaTor ( ) в смысле всё целое или вес не снизился ? вес.
|
|
|
|
Цитата Ghosteron ( ) вес.
Пячаль... Зря только время потратил.
Но спасибо что затестил.
|
|
|
|
Цитата TonaTor ( ) Пячаль... Зря только время потратил.
Но спасибо что затестил. нужен еще тестер просто
|
|
|
|
Цитата Ghosteron ( ) нужен еще тестер просто
У нас мало крупных мододелов.
Вероятно прогу нужно ещё сильнее модифицировать. Я отдал все исходники Man232. Может он чего с ней сообразит.
Единственное, что ещё можно сделать - это автоматом перекодировать DDS DXGI № 28 и 87 в 71 и 74, тем самым - сжав.
|
|
|
|
Сделал прогу для оптимизации DDS файлов (для мододелов).
https://imgur.com/m1Woxvk
https://imgur.com/IFWJjD8
https://imgur.com/zRJq80z
Прога: (удалено)
Код: (удалено)
Инструкция для оптимизации мода: 1) распаковать все архивы выбранного мода; 2) запустить программу; 3) выбрать папку с модом и нажать кнопку "ОК"; 4) дождаться надписи "Для продолжения нажмите любую клавишу . . ."; 5) нажать любую кнопку на клавиатуре или закрыть программу; 6) запаковать архивы мода.
Частичный алгоритм работы программы: 1) выбор каталога; 2) поиск dds файла; 3) файл найден -> переход к пункту 4, файл не найден -> переход к пункту 9; 4) открытие найденного dds файла; 5) проверка параметров ((формат, разрешение и ещё кое-что), если не подходит - то переход к пункту 2); 6) анализ альфа-канала (при наличии); 7) сжатие файла в DXT1 или DXT5 в зависимости от результатов анализа альфа-канала. 8) переход к пункту 2; 9) завершение сканирования.
Негативного влияния на ресурсы мода не замечено. Эффективность сжатия от 2 до 10 раз.
Но ТРЕБУЮТСЯ BETA-ТЕСТЕРЫ !!!
|
| | |
|
|
|
Делаю улучшенную версию DDS-оптимизатора.
|
|
|
|