ПрограммированиеФорумГрафика

Самосветящиеся объекты и оптимизация

Страницы: 1 2 3 Следующая »
#0
10:17, 27 апр 2016

Есть куча объектов на сцене, часть из них светиться, часть нет.
Алгоритм таков:
1. Рендерим все в FB0
2. Снова рендерим все в FB1, но не светящиеся объекты рендерим сплошным черным
3. Размываем FB1 и накладываем адитивом на FB0

Два раза рендерить сцену затратно как-то. МРТ нет (OpenGL ES 2)
Думал извратиться с цветом (типо если цвет 1, 1, 1 то светиться, иначе нет), то тогда нельзя делать разноцветное текстурное самосвечение

В общем может у кого есть какие идеи?
Спасибо заранее

#1
10:42, 27 апр 2016

Простых решений пишут что нет

Рендерить всё
Рендерить только светящиеся и накладывать блум или блур (радиальный например можно без шейдеров делать).

Можно совместить если флаг светимости будет находиться в самой текстуре, и сложный шейдер сделает всё в один проход.

#2
10:43, 27 апр 2016

oxotnik
> 3. Размываем FB1 и накладываем адитивом на FB0
твоя задача сделать блум этим объектам т.е.?

в общем, всё можно сделать так же, но без "снова рендерим все чёрным", реюзай zbuffer от FB0 и рисуй только светящиеся повторно, они готовым збуфером будут загораживаться попиксельно где надо.

другой вариант например выплёвывать флаг светимости в альфаканал рендертаргета, затем алгоритм блюра пусть блюрит color*alpha, т.е. только светящееся.

#3
10:45, 27 апр 2016

oxotnik
В один проход пиши светимость объектов в альфу, потом разблюришь по альфе в постпроцессе.

#4
10:48, 27 апр 2016

Попробовать исключить из цикла отрисовки не светящиеся объекты, а не рендерить черным.

#5
11:17, 27 апр 2016

Wraith
> В один проход пиши светимость объектов в альфу, потом разблюришь по альфе в
> постпроцессе.
Забыл совсем уточнить. Все в 2д, естественно альфа нужна, z bufferа нет:(
K4t3N0k
> Попробовать исключить из цикла отрисовки не светящиеся объекты, а не рендерить
> черным.
тут фишка в том, что не светящийся объект может перекрывать светящийся, я тут думал как вариант заюзать стенсил буффер как флажок светимости, но пока особо не придумал как

#6
11:24, 27 апр 2016

oxotnik
А почему збуфера нет?

#7
11:52, 27 апр 2016

bool
Зачем мне в 2д zbuffer? когда все на одной плоскости + работа c zbufferom это какой-никакой, но оверхэд

Так же все рисуется в зависимости от порядка, (примерно как Node в Cocos2d )

#8
12:07, 27 апр 2016

oxotnik
А, я думал что-то более серьезное. Ну тогда ответ на вопрос, зачем тебе збуфер, содержится в твоем вопросе)

#9
12:24, 27 апр 2016

bool
Не особо понял, хранить в zbuffer флаг светимости? При этом отключить zwrite и ztest и писать в z вручную?

#10
12:33, 27 апр 2016

Но если у тебя 2d, то почему тебя так беспокоит оптимизация?

Кстати, можно писать в HDR цвет так, чтобы цвета до 1 были у обычных объектов, а >1 у светящихся.
Потом это хэндлить как-то в финальном проходе.

#11
12:54, 27 апр 2016

-Eugene-
Потому что нужно 4k 60fps на Android TV
Думал по HDR, но насколько затратно это?

#12
13:39, 27 апр 2016

Если есть деление на слои не рендерить все что ниже светящихся(фон), попробовать отсекать через коллизию двух прямоугольников те которые не сталкиваются со светящимися(можно раз в несколько кадров).
А вообще попробовать то что ты изначально предлагал и посмотреть на скорость.

#13
13:59, 27 апр 2016

K4t3N0k
Тот алгоритм, что я давал в самом начале уже реализован. И он тормозит:(
Идея с отсеканием фона показалась отличной, т.к. сейчас рендеринг фона занимает большую половину времени. (из-за того, что фон покрывает 80% пикселей экрана).
Думаю еще добавить дополнительный if в шейдер рендера, что б если color == Black, то не сэмплим из текстуры ()

Но вот все таки интересует вопрос: можно ли как-то использовать stencil buffer для своих целей, в качестве флагов?

#14
14:48, 27 апр 2016

Можно попробовать в каждый например 8-мой пиксель по горизонтали и вертикали выводить свечение. Потом вычленить и размыть, а дырки на основном буффере замазать.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.