forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   OpenGL батчинг и глюк с прозрачностью (http://forum.boolean.name/showthread.php?t=13418)

Venom2 27.09.2010 18:37

OpenGL батчинг и глюк с прозрачностью
 
Вложений: 1
Незнаю в какой раздел писать, т.к. вопрос чисто по 2D графике, opengl.
Вобщем экспериментировав с opengl решил сделать вывод спрайтов с батчингом.
Для начала сделал тупо сбор последовательностей спрайтов с одинаковой текстурой и блендингом в vbo и его выводом с перезапиранием, если появлялся неподходящий спрайт.
Для партикловой системы, где всегда имеем много однотипных спрайтов, еще сойдет, но для реальной игровой ситуации уже профит сомнительный (точнее надо самому следить за группировкой спрайтов и т.п. чтобы такой батчинг был выгодным).
Решил сначала группировать спрайты по разным vbo. Сразу проблема - что делатьс порядком вывода, ведь после перегруппировки он теряется. Решаю, заюзав depth-test, в z координату записываю порядок в виде удаленности (т.к. проекция ортографическая, на отображение не влияет).
Теперь еще одна проблема с прозрачностью. У спрайтов с "нарушеной" последовательностью вывода, альфа-канал "затирает" все что под ним, на скрине это хорошо видно у спрайта 3 (цифрами отмечен порядок вывода)
бленд стандартный (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), depth-func GL_LEQUAL
Как от него избавиться?

jimon 27.09.2010 19:28

Ответ: OpenGL батчинг и глюк с прозрачностью
 
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы

pax 27.09.2010 19:42

Ответ: OpenGL батчинг и глюк с прозрачностью
 
Цитата:

Сообщение от jimon (Сообщение 163351)
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы

Аналогично в XNA в SpriteBatch похоже.

Venom2 27.09.2010 19:42

Ответ: OpenGL батчинг и глюк с прозрачностью
 
Цитата:

Сообщение от jimon (Сообщение 163351)
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы

Чего-то не понял, слои это фактически порядок вывода группы получается?
И как тогда батчинг делать если в слоях будут разношерстные спрайты?

ЗЫ
Короче как я понял, для того чтобы не было такого глюка надо запретить рисовать в depth-buffer полупрозрачные пиксели :) Как вот только это сделать?

ЗЫЗЫ
А нет, это не то, тогда альфа будет затиратся другими спрайтами, и будет маска вместо альфы :)

Knightmare 27.09.2010 20:59

Ответ: OpenGL батчинг и глюк с прозрачностью
 
Сливай в атласы картинки и рисуй. Можно это делать даже в реалтайме (создаем очередь рисуемых картинок, заливаем их в 1 текстуру (рендером в текстуру) без всякого выпендрежа по оптимальной укладке даже, формируем список треугольников в соответствии с необходимым порядком, рисуем без всяких там depth-buffer'ов и прочей ереси).
Ну и таки - оно нахрен не нужно на ПК, угу. Исключая те самые партиклы, где проблемы с очередью отрисовки в общем-то и нет. А так - оно не будет узким местом, скорее ты филлрейтом нагнешь видяху.

HolyDel 27.09.2010 21:48

Ответ: OpenGL батчинг и глюк с прозрачностью
 
тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?

Venom2 27.09.2010 21:57

Ответ: OpenGL батчинг и глюк с прозрачностью
 
Цитата:

Сообщение от HolyDel (Сообщение 163374)
тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?

Ну да, в начале кадра маплю, потом во время вызовов отрисовки проверяю спрайты и копирую данные в буфер, помимо этого вывожу что накопилось в буфере если не влазит или другая текстура\бленд-режим у спрайта.
А хотел сделать полный батчинг, т.е. разместить все по буферам.

Короче и вправду нахрен этот авто-батчинг, сделаю ручное управление с атласами, авто только для партиклов.

Всем спасибо, все свободны :)


Часовой пояс GMT +4, время: 09:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot