Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.005 c
15-1249972832
Kolan
2009-08-11 10:40
2009.10.11
Жесты в Делфи 2010


2-1249496714
tomkat
2009-08-05 22:25
2009.10.11
Активация Delphi 6


4-1219247208
DiVider
2008-08-20 19:46
2009.10.11
Процедура порта завершения жрёт процессорное время!!!


15-1249522941
Mozart
2009-08-06 05:42
2009.10.11
Вопрос железячникам...


15-1249993837
77
2009-08-11 16:30
2009.10.11
СУБД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский