решил экспортнуть текстуры из игры titan quest. игра хранит текстуры в хуй пойми каком формате, это вроде DDS, но и не DDS (никакой dds viewer их не распознает), короче какой-то кастомный DDS похоже (хотя и отличий почти нихуя нет, кроме "битых" сигнатур), данные в изображения в данном случае хранятся без сжатия, просто в сыром виде, в формате BGRA. столкнулся с такой хуйней, если это карта нормалей, то при считывании текстуры "как есть", получаю пик 1. т.е. где-то альфа канал = 0. если альфа канал принудительно везде сделать 255, то получаю пик 2 (и это вроде как похоже на осмысленную текстуру/рисунок). первый же пик вроде и тоже похож.
есть кстати специальный tex viewer ("dds" запакованы внутрь tex) для этой игры, он импортирует и отображает текстуру словно без альфа канала (пик 3), но если ее экспортировать в tga формат, то превью у нее словно без альфа канала, но при открытие изображения nomacs'ом там альфа канал присутствует...
в общем, что это за хуйня может быть? и какой способ верный?
есть кстати специальный tex viewer ("dds" запакованы внутрь tex) для этой игры, он импортирует и отображает текстуру словно без альфа канала (пик 3), но если ее экспортировать в tga формат, то превью у нее словно без альфа канала, но при открытие изображения nomacs'ом там альфа канал присутствует...
в общем, что это за хуйня может быть? и какой способ верный?
бамп
непонятно, что ты хочешь сделать
саму игру не видел, но альфа-канал они могут использовать для чего угодно, например, хранить в нём ещё и roughness map или какие-то другие данные, это не просто прозрачность
саму игру не видел, но альфа-канал они могут использовать для чего угодно, например, хранить в нём ещё и roughness map или какие-то другие данные, это не просто прозрачность
>>295
пишу свой конвертер из .tex в .png, чтобы экспортировать все файлы текстур из игры для удобного анализа и поиска конкретных текстур, чтобы потом их использовать для кое-чего.
данный инцидент - просто индикатор текущей верности в обработке данных. т.е. если я буду уверен, что правильно обрабатываю данные в этом случае, то можно будет идти дальше и начинать писать декодер для DXT1, DXT3 и тд сжатий.
ну я примерно так и думал, что вероятно игра сама обрабатывает этот альфа канал как ей надо. т.е. его лучше просто декодировать как есть, не смотря на визуальный эффект
>непонятно, что ты хочешь сделать
пишу свой конвертер из .tex в .png, чтобы экспортировать все файлы текстур из игры для удобного анализа и поиска конкретных текстур, чтобы потом их использовать для кое-чего.
данный инцидент - просто индикатор текущей верности в обработке данных. т.е. если я буду уверен, что правильно обрабатываю данные в этом случае, то можно будет идти дальше и начинать писать декодер для DXT1, DXT3 и тд сжатий.
>они могут использовать для чего угодно
ну я примерно так и думал, что вероятно игра сама обрабатывает этот альфа канал как ей надо. т.е. его лучше просто декодировать как есть, не смотря на визуальный эффект
>>292 (OP)
не знаю что ты имеешь в виду под считыванием, вероятно всё пашет, просто то, чем ты смотришь текстуру, предумножает RGB на альфу. удали альфа-канал из текстуры или настрой софт так, чтобы он не применял альфу
>>297
прозрачность в png это не то же самое, что альфа-канал: png удаляет пиксели под прозрачностью. правильно будет конвертировать в tga, там сохраняются и пиксели RGB, и A
без потерь информации конвертацию в png можно применять только для текстур без альфа-канала
либо сохранять текстуру в 2 пнг файла: отдельно PNG RGB 24-bit и отдельно альфу в PNG G 8-bit
не знаю что ты имеешь в виду под считыванием, вероятно всё пашет, просто то, чем ты смотришь текстуру, предумножает RGB на альфу. удали альфа-канал из текстуры или настрой софт так, чтобы он не применял альфу
>>297
>пишу свой конвертер из .tex в .png
прозрачность в png это не то же самое, что альфа-канал: png удаляет пиксели под прозрачностью. правильно будет конвертировать в tga, там сохраняются и пиксели RGB, и A
без потерь информации конвертацию в png можно применять только для текстур без альфа-канала
либо сохранять текстуру в 2 пнг файла: отдельно PNG RGB 24-bit и отдельно альфу в PNG G 8-bit

>>300
что значит "удаляет"? если я обратно декодирую IDAT чанк с данными о пикселях в png, то я получу абсолютно тот же буфер, который был до сжатия (deflate). и записываю я инфу о пикселе в 4 байта, т.е. все 4 канала записываю. или я тебя не понял
>png удаляет пиксели под прозрачностью
что значит "удаляет"? если я обратно декодирую IDAT чанк с данными о пикселях в png, то я получу абсолютно тот же буфер, который был до сжатия (deflate). и записываю я инфу о пикселе в 4 байта, т.е. все 4 канала записываю. или я тебя не понял
>>300
>>303
или ты имеешь ввиду как он интерпретирует данные для отображения?
но тга тоже отображается с прозрачностью. или это зависит от декодеров этих форматов?
вообще странно все как-то, данные то по сути и в первом и втором случае есть, просто они не видны...
>>303
>png удаляет пиксели под прозрачностью
или ты имеешь ввиду как он интерпретирует данные для отображения?
>правильно будет конвертировать в tga
но тга тоже отображается с прозрачностью. или это зависит от декодеров этих форматов?
вообще странно все как-то, данные то по сути и в первом и втором случае есть, просто они не видны...
>>300
это значит если инфа о пикселе идет в формате BGRA, например [120, 23, 56, 98] (4 байта), то я их беру все и записываю в PNG как они есть, без изменения, меняю только местами порядок B и R, т.е. получаю RGBA (этого требует PNG для корректного отображения).
а когда я менял принудительно А канал на 255, для примера выше я бы заменил 98 на 255.
>не знаю что ты имеешь в виду под считыванием
это значит если инфа о пикселе идет в формате BGRA, например [120, 23, 56, 98] (4 байта), то я их беру все и записываю в PNG как они есть, без изменения, меняю только местами порядок B и R, т.е. получаю RGBA (этого требует PNG для корректного отображения).
а когда я менял принудительно А канал на 255, для примера выше я бы заменил 98 на 255.
>>303
я возможно хуйню сморозил и это не обязательно так
обычно если сохранить в пнг в графическом редакторе, то альфа премултиплаится и удаленные пиксели под ней уничтожаются для экономии размера. под 100% прозрачностью остаётся что-то вроде flood fill пикселей, видимо чтобы не было артефактов при отображении
пикрил пример, попробуй сам его разобрать на ргб и альфу
а tga точно хранит альфа-канал отдельно
я возможно хуйню сморозил и это не обязательно так
обычно если сохранить в пнг в графическом редакторе, то альфа премултиплаится и удаленные пиксели под ней уничтожаются для экономии размера. под 100% прозрачностью остаётся что-то вроде flood fill пикселей, видимо чтобы не было артефактов при отображении
пикрил пример, попробуй сам его разобрать на ргб и альфу
а tga точно хранит альфа-канал отдельно
>>305
от софта зависит. например я пользуюсь XNview MP, тут можно произвольно смотреть отдельно альфу, отдельно ргб, всё вместе
>но тга тоже отображается с прозрачностью. или это зависит от декодеров этих форматов?
от софта зависит. например я пользуюсь XNview MP, тут можно произвольно смотреть отдельно альфу, отдельно ргб, всё вместе
>>308
я кстати из-за пнг так накалывался несколько раз. думаю, откуда, сука, зеленая кайма лезет по краям спрайтов, ни пикселя зеленого нет на пнгхе. а это вот эти фладфиллы которые зачем-то были кислотно-зелеными проблидились в мип-мапы
я кстати из-за пнг так накалывался несколько раз. думаю, откуда, сука, зеленая кайма лезет по краям спрайтов, ни пикселя зеленого нет на пнгхе. а это вот эти фладфиллы которые зачем-то были кислотно-зелеными проблидились в мип-мапы
>>308
я короче поставил гимп (у меня ни фотошопа не было, ни гимпа... надо было сразу так сделать), так вот, если я правильно понимаю, в самой первой текстуре из шапки треда, которую я декодировал "как есть", данные остались (что по идее не удивительно, хотя отображается она во всех приложениях с учетом альфы, но остальные каналы под этой афльвой НЕ ПРОЕБАНЫ)
я короче поставил гимп (у меня ни фотошопа не было, ни гимпа... надо было сразу так сделать), так вот, если я правильно понимаю, в самой первой текстуре из шапки треда, которую я декодировал "как есть", данные остались (что по идее не удивительно, хотя отображается она во всех приложениях с учетом альфы, но остальные каналы под этой афльвой НЕ ПРОЕБАНЫ)
короче все норм работает, просто специфика отображения png такая. но как и для чего движок использует это вообще не ясно. такое чувство даже что сделали одну текстуру, потом тупо маской скрыли "не нужное" и оставили, и запаковали в игру. может я и ошибаюсь...
с твоей картинкой такая же ситуация
>>313
да это нормально, когда в одну текстуру пакуют несколько одноканальных карт. это экономит семплеры в шейдере. один раз семплишь текстуру, получаешь 4 карты
в блек опс 2, например, спекуляр был запакован в альфу диффузной текстуры
да это нормально, когда в одну текстуру пакуют несколько одноканальных карт. это экономит семплеры в шейдере. один раз семплишь текстуру, получаешь 4 карты
в блек опс 2, например, спекуляр был запакован в альфу диффузной текстуры
>>313
похоже на карту металлик или просто любую маску для смешения двух алгоритмов. глянь на саму модельку, которая использует эту текстуру, там скоре всего будет визуальная разница
>как и для чего движок использует это вообще не ясно
похоже на карту металлик или просто любую маску для смешения двух алгоритмов. глянь на саму модельку, которая использует эту текстуру, там скоре всего будет визуальная разница

>>371
модельку я в игре найти не могу (игра про дрочь и фарм), может она вообще из длц которого у меня нет. но нашел это. похоже на модельку лука. то что под альфу попадало на той текстуре - видимо его ручка
модельку я в игре найти не могу (игра про дрочь и фарм), может она вообще из длц которого у меня нет. но нашел это. похоже на модельку лука. то что под альфу попадало на той текстуре - видимо его ручка
>>468
да, явно маска-переключалка между блестящим металлизированным шейдингом и шершавым диффузным
да, явно маска-переключалка между блестящим металлизированным шейдингом и шершавым диффузным
сейчас в нормалмапы, кстати, редко что-то лишнее пакуют, их в основном посредством BC5 сжимают, который хранит только каналы R и G (X и Y компоненты вектора), а Z воссоздается через векторное произведение этих двух осей. синий и альфа каналы удаляются
>>473
не совсем понял... типа когда в шейдер освещения все 4 канала попадают, там где альфа = 0, по другому освещение рассчитывается?
не совсем понял... типа когда в шейдер освещения все 4 канала попадают, там где альфа = 0, по другому освещение рассчитывается?
>>501
в шейдере ты что угодно можешь делать. как напишешь - так и будет
хочешь переключать металлический блеск с сухим диффузом по маске? можешь эту маску как отдельную текстуру подавать. а можешь эту текстуру запаковать в один из каналов другой текстуры, например занять пустующий альфа канал карты нормалей. так поступили разрабы этой игры
в шейдере ты что угодно можешь делать. как напишешь - так и будет
хочешь переключать металлический блеск с сухим диффузом по маске? можешь эту маску как отдельную текстуру подавать. а можешь эту текстуру запаковать в один из каналов другой текстуры, например занять пустующий альфа канал карты нормалей. так поступили разрабы этой игры
>>292 (OP)
В альфе скорее всего хранится дополнительная информация, маска для чего-то.
В альфе скорее всего хранится дополнительная информация, маска для чего-то.