 |
Болтовня Разговоры на любые темы (думайте, о чем пишите) |
27.09.2010, 18:37
|
#1
|
|
OpenGL батчинг и глюк с прозрачностью
Незнаю в какой раздел писать, т.к. вопрос чисто по 2D графике, opengl.
Вобщем экспериментировав с opengl решил сделать вывод спрайтов с батчингом.
Для начала сделал тупо сбор последовательностей спрайтов с одинаковой текстурой и блендингом в vbo и его выводом с перезапиранием, если появлялся неподходящий спрайт.
Для партикловой системы, где всегда имеем много однотипных спрайтов, еще сойдет, но для реальной игровой ситуации уже профит сомнительный (точнее надо самому следить за группировкой спрайтов и т.п. чтобы такой батчинг был выгодным).
Решил сначала группировать спрайты по разным vbo. Сразу проблема - что делатьс порядком вывода, ведь после перегруппировки он теряется. Решаю, заюзав depth-test, в z координату записываю порядок в виде удаленности (т.к. проекция ортографическая, на отображение не влияет).
Теперь еще одна проблема с прозрачностью. У спрайтов с "нарушеной" последовательностью вывода, альфа-канал "затирает" все что под ним, на скрине это хорошо видно у спрайта 3 (цифрами отмечен порядок вывода)
бленд стандартный (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), depth-func GL_LEQUAL
Как от него избавиться?
|
|
|
27.09.2010, 19:28
|
#2
|
|
Ответ: OpenGL батчинг и глюк с прозрачностью
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
27.09.2010, 19:42
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: OpenGL батчинг и глюк с прозрачностью
Сообщение от jimon
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
|
Аналогично в XNA в SpriteBatch похоже.
|
(Offline)
|
|
27.09.2010, 19:42
|
#4
|
|
Ответ: OpenGL батчинг и глюк с прозрачностью
Сообщение от jimon
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
|
Чего-то не понял, слои это фактически порядок вывода группы получается?
И как тогда батчинг делать если в слоях будут разношерстные спрайты?
ЗЫ
Короче как я понял, для того чтобы не было такого глюка надо запретить рисовать в depth-buffer полупрозрачные пиксели  Как вот только это сделать?
ЗЫЗЫ
А нет, это не то, тогда альфа будет затиратся другими спрайтами, и будет маска вместо альфы 
|
|
|
27.09.2010, 20:59
|
#5
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: OpenGL батчинг и глюк с прозрачностью
Сливай в атласы картинки и рисуй. Можно это делать даже в реалтайме (создаем очередь рисуемых картинок, заливаем их в 1 текстуру (рендером в текстуру) без всякого выпендрежа по оптимальной укладке даже, формируем список треугольников в соответствии с необходимым порядком, рисуем без всяких там depth-buffer'ов и прочей ереси).
Ну и таки - оно нахрен не нужно на ПК, угу. Исключая те самые партиклы, где проблемы с очередью отрисовки в общем-то и нет. А так - оно не будет узким местом, скорее ты филлрейтом нагнешь видяху.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.09.2010, 21:48
|
#6
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL батчинг и глюк с прозрачностью
тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?
|
(Offline)
|
|
27.09.2010, 21:57
|
#7
|
|
Ответ: OpenGL батчинг и глюк с прозрачностью
Сообщение от HolyDel
тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?
|
Ну да, в начале кадра маплю, потом во время вызовов отрисовки проверяю спрайты и копирую данные в буфер, помимо этого вывожу что накопилось в буфере если не влазит или другая текстура\бленд-режим у спрайта.
А хотел сделать полный батчинг, т.е. разместить все по буферам.
Короче и вправду нахрен этот авто-батчинг, сделаю ручное управление с атласами, авто только для партиклов.
Всем спасибо, все свободны 
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:43.
|