Форум: "Игры";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
ВнизКак из двух изображений получить TGA с альфа каналом? Найти похожие ветки
← →
Домик (2007-06-19 13:36) [0]Подскажите, как можно из двух соображений получить tga с альфа каналом? Хотелось бы сделать оптимизацию дистрибутива игры за счет пережатия всех графических ресурсов в jpeg (tga занимает намного больше места), а потом на этапе загрузки игры (или даже на этапе установки игры) генерировать из них текстуры с альфа каналом. К тому же есть много изображений, у которых контур одинаковый и для них можно было бы вообще использовать одну картинку с альфой.
Искал в Инете подобные решения, но ничего не нашлось. В основном примеры как прочитать и отобразить tga. А хотелось бы именно работу с tga. Может быть, есть где-то уже готовые модули, описание или статьи по этой теме? Буду премного благодарен :)
← →
Yashin © (2007-06-19 20:01) [1]А чем тебя БМП не устраивает?
← →
Домик (2007-06-19 23:32) [2]А чем он меня должен устраивать? В bmp изображения занимают еще больше чем в tga и при этом не имеют альфа канала. Мне же все эти манипуляции нужны в большей степени для того, чтобы в разы сократить дистрибутив игры, пережав текстуры в jpg. И еще, к примеру использовать одно изображение альфа канала для разных текстур с идентичным контуром, уже на этом можно с экономить прилично места.
← →
Rial © (2007-06-20 04:36) [3]Не очень понял, в чем же проблема...
Ну так и пережми все изображения в JPEG, делов то !
Надо хванить альфу отдельно - да ради бога,
делай 2 JPEG-а. Хотя в большинстве случаев
подходит такой подход: альфу рассчитавать
из самих цветов картинки. Нипример, чем больше
сумма цветов, тем больше альфа, т.е. черный будет прозрачным ...
← →
Домик (2007-06-20 12:34) [4]> Не очень понял, в чем же проблема...
Надо внимательнее читать ;)
Я еще в заголовке написал "Как из двух изображений получить TGA с альфа каналом?"... В этом и проблема, не знаю, как работать с tga, все те примеры, что попадались, в основном показывают, как его прочитать и отобразить...
> Хотя в большинстве случаев
подходит такой подход: альфу рассчитавать
из самих цветов картинки.
Мне такой подход не подходит, мне нужно именно из двух изображений.
← →
МистерТ (2007-06-20 14:21) [5]Лучший (ИМХО) способ:
- основное изображение хранить в цветном jpeg.
- маску альфа-канала хранить в bmp с палитрой 256 оттенков серого (или вообще ч/б, т.е. два цвета), соответственно индекс цвета в палитре - степень прозрачности.
← →
Sapersky (2007-06-20 15:38) [6]Как из двух изображений получить TGA с альфа каналом?
Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL.
<skipped>Брюзжание по поводу неумения glscene"ров вычислить 2+2 без помощи великой и могучей библиотеки</skipped>
← →
Домик (2007-06-20 16:17) [7]> Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти)
Мы тут формулировкой вопросов занимаемся или поиском ответов? Я думаю, что вопрос вполне понятно поставлен... или я ошибаюсь? Есть два изображения: первое оригинальная текстура, второе альфа канал для текстуры - нужно получить из этих двух изображений формат tga с альфой.
[оффтопик] Извиняюсь за резкость, но тут порой вопросы задают вообще без какой-либо формулировки и при этом авторам дают ответы. И я немного удивился, что довольно внятный вопрос с описанием преследуемой цели ваши натренированные телепатические способности не способны разобрать :) [оффтопик]
> и из него сделать текстуру OGL.
Интересует именно работа с tga без ogl так как хотелось бы сделать переупаковку текстур на этапе установки игры, т.е. единоразово.
> Брюзжание по поводу неумения glscene"ров вычислить 2+2 без помощи великой и могучей библиотеки
Подколол :) Но GLScene тут не причем. Кроме этого раньше были попытки редактировать tga, к примеру, перекрашивать текстуру в нужный цвет, но при этом альфа канал пропадал. Искал примеры работы с tga форматом, редактирование и прочее, но ничего толком не нашлось, можно предположить, что плохо искал, если так, то ткните носом, где можно найти... Буду благодарен.
← →
@!!ex_ (2007-06-20 17:04) [8]1) bmp 24 бита не больше чем 24 бита tga. У них ваще дамп данных одинаково реализованный.
2) Столкнулся с такой же идеей и пришел к png.
а) Не надо парится с совмещением картинок.
б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами фотожопа. А Афльфа канал тгашный требует дополнительный усилий.
в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)
3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.
Я лично понял также как и [6] Sapersky (20.06.07 15:38).
ТОгда не понятно при чем тут вообще tga.
4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.
5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?
6) ...
7) ...
8) ... и еще много много вопросов ...
← →
Домик (2007-06-20 18:28) [9]>
2) Столкнулся с такой же идеей и пришел к png.
а) Не надо парится с совмещением картинок.
Я не парюсь с совмещением картинок, вся эта затея для попытки уменьшить дистрибутив игры.
> б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами фотожопа. А Афльфа канал тгашный требует дополнительный усилий.
С этим никаких проблем не возникало.
>в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)
Это легко лечится заданием фону необходимого цвета.
> 3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.
Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость, раз все понимают все что угодно только не то, что я имею в виду. Я идиот, убейте меня кто-нибудь! :)
> ТОгда не понятно при чем тут вообще tga.
При том, что мне нужно результат получить в формате tga. А теперь еще раз по пунктам:
а) есть изображение текстуры в texture.bmp
б) есть изображение альфа канала для текстуры в alpha.bmp
в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.
Теперь понятно? :)
> 4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.
Ничего не мешает, так и буду разбираться, так как топик какой-то флеймовый получился.
> 5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?
Задача уменьшить дистрибутив игры. Я хочу переупаковывать текстуры из jpg в tga во время установки игры, это удобно тем, что этот нужно будет выполнить всего один раз.
← →
@!!ex_ (2007-06-20 18:56) [10]Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))
P.S>
Если вдруг не в курсах:
png - формат со сжатием и прозрачностью.
Я повторю еще раз:
tga и bmp - практически одно и тоже.
в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.
И где здесь речь об jpeg? :))))
склеив bmp и bmp, ты получишь tga размером равным сумме размеров. Чуть меньше, за счет обединения заголовков.
← →
Домик (2007-06-20 19:46) [11]> Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))
Ты имеешь в виду ситуацию, когда разные края текстуры имеют разные цвета? Если да, то в этом случае под каждый край, фон закрашивается наиболее подходящим цветом.
> Если вдруг не в курсах:
png - формат со сжатием и прозрачностью.
Я в курсе. Только как-то в голову не приходило попробовать использовать png в качестве текстур. Спасибо за наводку, уже подумываю о нем как об альтернативном варианте.
>Я повторю еще раз:
tga и bmp - практически одно и тоже.
Да, ключевое слово практически. У bmp нет никакого сжатия и естественно альфа канала тоже нет.
> И где здесь речь об jpeg? :))))
Это уже не принципиально, в коде что jpeg, что bmp будут приведены к единому типу TBitmap, а вот как там уже из этого получить tga? Впрочем, я уже написал, что буду тщательнее разбирать формат tga, уже нашел пару довольно подробных примеров работы с tga. И еще попробую поковырять формат png.
← →
@!!ex_ (2007-06-20 20:32) [12]> Ты имеешь в виду ситуацию, когда разные края текстуры имеют
> разные цвета? Если да, то в этом случае под каждый край,
> фон закрашивается наиболее подходящим цветом.
Те надо этот геморой?
А текстурщикам твоим? :))
> Да, ключевое слово практически. У bmp нет никакого сжатия
> и естественно альфа канала тоже нет.
tga использует rle сжатие. Практически не применимое к текстурам.
bmp кстати тоже может использовать сжатие, так что они вообще идеентичны.
там даже принцип хранения дампа одинаковый, снизу вверх и в виде BGR.
> Это уже не принципиально, в коде что jpeg, что bmp будут
> приведены к единому типу TBitmap, а вот как там уже из этого
> получить tga? Впрочем, я уже написал, что буду тщательнее
> разбирать формат tga, уже нашел пару довольно подробных
> примеров работы с tga. И еще попробую поковырять формат
> png.
Не. Битмап тоже надо преобразовывать.
ИМХО я бы рассмотрел два варианта:
1) свой внутренний формат, который будет хранить данные в удобном тебе виде.
RGB со сдатием + A
2) че нить просто типа png юзать. Например через DevIL. Если найдешь какую нить другую более удобную либу - делись. :)
← →
Sapersky (2007-06-20 22:22) [13]Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость
Вопрос нормально сформулирован.
Другое дело, что описанную проблему можно решить гораздо проще, безо всяких переупаковок на этапе установки и тем более при загрузке (последнее - вообще кошмар, хотя я сам, каюсь, грузил так jpeg"и... 7 лет назад). Т.е. под "правильно формулируется" я имел в виду "на самом деле вам нужно".
Но хозяин - барин, считает, что нужен ему tga - будет ему tga:
http://megalib.com/books/351/ch07/07-01.html#Heading1
← →
Домик (2007-06-21 00:24) [14]> @!!ex_ (20.06.07 20:32) [12]
> Те надо этот геморой?
> А текстурщикам твоим? :))
Это уже из разряда привычки. Что тут поделать, раз у tga такая "фича", никто не жаловался :) Сейчас вот нужно было сделать png текстуру для экспериментов, и экспортируя её из psd в png возникли некоторые неудобства с созданием альфы, просто потому что изначально она рисовалась под tga. В общем, на вкус и цвет... :)
>tga использует rle сжатие. Практически не применимое к текстурам.
> bmp кстати тоже может использовать сжатие, так что они вообще
> идеентичны.
А как же альфа канал? А в целом ход мыслей понял и в конкретном случае не принципиально чем bmp отличается от tga :)
>ИМХО я бы рассмотрел два варианта:
Спасибо за наводки, буду пробовать...
> Sapersky (20.06.07 22:22) [13]
> Другое дело, что описанную проблему можно решить гораздо проще, безо
> всяких переупаковок на этапе установки и тем более при загрузке
> ... Т.е. под "правильно формулируется" я имел в виду "на самом деле
> вам нужно".
Хорошо. Какие наиболее оптимальные решения, по вашему мнению, можно использовать для подобной задачи? Или под более оптимальным решением как раз и подразумевалось: "сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL."?
За ссылку спасибо, такое довольно подробное описание формата мне не попадалось...
← →
@!!ex_ (2007-06-21 08:28) [15]> А как же альфа канал? А в целом ход мыслей понял и в конкретном
> случае не принципиально чем bmp отличается от tga :)
Я вообще имел ввиду не наличие/отсутствие альфы. А размеры и способ хранения. :)
← →
antonn © (2007-06-21 09:25) [16]
> У bmp нет никакого сжатия и естественно альфа канала тоже
> нет.
спешу вас обрадовать, у bmp есть альфаканал
← →
@!!ex_ (2007-06-21 09:31) [17]> [16] antonn © (21.06.07 09:25)
не у стандартного, вроде.
← →
antonn © (2007-06-21 10:10) [18]не вроде, а у самого стандартнейшего.
http://antonn.ru/_images/scr/7.GIF 5Кб - яблоко с альфой (да и вообще вся та формочка), хранится в программе в bmp.
tbitmap.pixelformat:=pf32bit; - четвертый байт используется как альфа. Есстественно, нужно и ручками поработать, чтобы правильно его рисовать, а не "батонокидательством" заниматься, как любил выражаться один товарищ:)
← →
@!!ex_ (2007-06-21 10:27) [19]> [18] antonn © (21.06.07 10:10)
> не вроде, а у самого стандартнейшего.
> http://antonn.ru/_images/scr/7.GIF 5Кб - яблоко с альфой
> (да и вообще вся та формочка), хранится в программе в bmp.
> tbitmap.pixelformat:=pf32bit; - четвертый байт используется
> как альфа. Есстественно, нужно и ручками поработать, чтобы
> правильно его рисовать, а не "батонокидательством" заниматься,
> как любил выражаться один товарищ:)
Просто в описании стандарта ничего не говорится о 32 битах.
← →
Sapersky (2007-06-21 16:00) [20]Или под более оптимальным решением как раз и подразумевалось: "сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL."?
Ну да.
Обычная загрузка - загрузить картинку в память, развернуть BGR(A) в RGB(A) (вроде это требуется для создания OGL текстур), создать текстуру.
С альфой - загрузить 2 картинки, соединить их в одну (и одновременно развернуть), создать текстуру.
С именами файлов самое простое решение - имя файла альфа-текстуры = имя файла обычной + "_a" или что-то в этом духе.
Модули для работы с 32-битными и прочими битмапами на уровне Scanline вроде были в Кладовке - antonn подскажет где конкретно, он же их и писал.
За ссылку спасибо, такое довольно подробное описание формата мне не попадалось...
Там и код сохранения есть, если дальше пролистать.
Ещё есть такой вариант: использовать поддерживаемое аппаратно сжатие текстур. Удобно тем, что распаковывать вообще ничего не нужно, оно прямо в видеокарту грузится в сжатом виде (экономится память) и распаковывается непосредственно при рендеринге. Есть сжатые форматы и с альфой, и без (в DirectX они называются DXT1..DXT5).
Хотя когда я пробовал химичить со сжатием, мне качество не понравилось... не знаю, может сейчас с этим лучше. Относительно степени сжатия вопрос тоже неясный.
← →
Jkot © (2007-06-21 16:54) [21]Дык а взять в руки граф редактор и засунуть туда текстуру альфу и сохранит в tga зачем делать динам всё это?????
← →
Домик (2007-06-22 01:18) [22]> Sapersky (21.06.07 16:00) [20]
Спасибо, посыл понял :) В целом здесь уже почерпнул для себя достаточно новой и полезной информации по графическим форматам. Сейчас нужно время чтобы во всем разобраться и попробовать. В любом случае сделаю, как и хотел изначально, дабы разобраться таки с tga, а далее попробую поковырять альтернативные варианты хранения графических ресурсов. Еще раз спасибо за наводки :)
> Jkot © (21.06.07 16:54) [21]
Да, так и есть. Только текстуры в tga размером 512x512 почти под мегабайт занимают места. Хотя в jpg такая же текстура будет занимать как минимум раз в 5 меньше и если хранить саму текстуру и альфу отдельно в jpg, то размеры дистрибутива сократятся в разы. Для этого собственно все это и затеял.
← →
ЮЮ © (2007-06-22 03:07) [23]Хотел промолчать, но нет сил. Автор, ты читаещь, что тебе пишут? Или ты не читатель, а - писатель?
> Это уже не принципиально, в коде что jpeg, что bmp будут
> приведены к единому типу TBitmap, а вот как там уже из этого
> получить tga?
И зачем опять приводить к формату хранения изображения на диске? Чтобы, загрузив из файла, опять привести всё к тому же единому типу TBitmap (или какие там структуры соответствуют текстурам)?
так что внимательнее прочитай [6] Sapersky (20.06.07 15:38). Ибо в каком бы формате изображение не хранилось в файле, все они в итоге приводятся к одному.
> В основном примеры как прочитать и отобразить tga. А хотелось
> бы именно работу с tga
tga можно прочитать, в него можно записать. Работать с ним бессмысленно. Ибо это формат хранения данных. ИМХО.
> В любом случае сделаю, как и хотел изначально, дабы разобраться
> таки с tga, а далее попробую поковырять альтернативные варианты
> хранения графических ресурсов
> Хотя в jpg такая же текстура будет занимать как минимум
> раз в 5 меньше и если хранить саму текстуру и альфу отдельно
> в jpg, то размеры дистрибутива сократятся в разы. Для этого
> собственно все это и затеял
Не чувствуешь противоречия? tga как формат хранениения тебя не устраивает из-за размера. Но ты упорно пытаешься получить tga, даже если хранить будещь в jpg. ЗАЧЕМ? забудь про tga воообще и не вспоминай. И Читай [20] Sapersky (21.06.07 16:00). там нет ни слова про tga, хотя есть о текстурах с альфа-каналом
← →
Домик (2007-06-22 13:41) [24]> ЮЮ © (22.06.07 03:07) [23]
> tga можно прочитать, в него можно записать. Работать с ним
> бессмысленно. Ибо это формат хранения данных. ИМХО
Глупо так говорить. Так можно написать про любой графический формат, или даже про любой формат вообще...
> Не чувствуешь противоречия? tga как формат хранениения тебя не
> устраивает из-за размера. Но ты упорно пытаешься получить tga, даже
> если хранить будещь в jpg.
Вот моя цитата из последнего поста, прочитайте, пожалуйста, внимательно: "В любом случае сделаю, как и хотел изначально, дабы разобраться таки с tga, а далее попробую поковырять альтернативные варианты хранения графических ресурсов. Еще раз спасибо за наводки...". Вот такой вот я упорный, есть цель, хочу её достичь. И при этом я согласен что, это скорее всего не оптимальный путь, но и более оптимальные варианты, про которые мне написал Sapersky и @!!ex_ я обязательно попробую.
← →
antonn © (2007-06-22 23:41) [25]какие тут альтернативные - берешь битмап, в ресурсы пихаешь его сжатым (хотя бы zlib), он и сожмется и (для меня это главное) не потеряет палитру, и работать с ним проще, чем с png. Не понимаю, зачем так гоняются за форматами, которые придуманы для еденичных файлов в общем употреблении...
← →
@!!ex_ (2007-06-23 09:54) [26]zlib херово текстуры сжимает. вернее практически совсем не сжимает.
← →
Mortem © (2007-06-24 02:03) [27]Photoshop?
← →
antonn © (2007-06-24 09:12) [28]
> zlib херово текстуры сжимает. вернее практически совсем
> не сжимает.
да ну? :)
1 456 018 байт файлов в bmp ужались в 128 501 байт
← →
@!!ex_ (2007-06-24 10:29) [29]> [28] antonn © (24.06.07 09:12)
Какой файл? Надо понимать, что на качественной текстуре нет текселей с одинаковым цветом.
Как фотография практиччемски не сжимается с помощью LZW, так и текстура не сжимается.
Или я не знаю каких то особенностей, zlib.
← →
Sapersky (2007-06-25 18:39) [30]Не, zlib, png и даже jpeg - это несерьёзно. Реальные пацаны генерируют текстуры при запуске а-ля 64-кб демо :)
Смех смехом, но вот нашёл "текстурный движок", который это умеет:
http://www.profxengine.com/?PAGE=FEATURES
Правда, платный. И даже не сказано конкретно, сколько стоит - боятся, видимо, напугать.
Генератор/редактор с сохранением в картинку - бесплатный:
http://www.mapzoneeditor.com/?PAGE=FEATURES
← →
Домик (2007-06-26 02:54) [31]> Sapersky (25.06.07 18:39) [30]
> Не, zlib, png и даже jpeg - это несерьёзно. Реальные пацаны генерируют
> текстуры при запуске а-ля 64-кб демо :)
> Смех смехом, но вот нашёл "текстурный движок", который это умеет:
Надо сразу генератор игры, параметры задаешь, а он тебе игру генерирует :)
А что по делу, скриншоты красивые конечно, но мне кажется, что не каждый генератор может сгенерировать то, что может нарисовать художник. Пусть генерируемые текстуры будут качественными и реалистичными, но чаще не реализм поражает, а тот графический стиль, в котором выполнена игра, а стиль этот в первую очередь задает именно художник. Игра в 64кб - это наверное невероятно крута, но такая игра бездушна, она не имеет своей изюминки как в графическом плане так и в остальном. имхо конечно. :)
← →
DJ KARIES (2007-06-26 21:26) [32]Кстати, если есть проблемы с сохранением 32-бит tga в фотошопе CS, CS2, т.е. альфа-канал убивается, замените "\Plug-Ins\File Formats\Targa.8BI" (40кбайт) файлом из 7 версии.
И никаких саморисований альфа-канала.
← →
DJ KARIES (2007-06-26 21:32) [33]А png-требует библиотеку, к тому же в png zip-сжатие, а оно тормознее rle.
При боьших объемах png будет как jpg тормозить.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.006 c