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

[GLES 2.0] 2D шейдер/техника металла, как стиль в Photoshop

#0
3:30, 21 янв 2013

Доброго времени суток, уважаемые форумчане.

Я столкнулся со следующей проблемой. Необходимо придумать и реализовать некую технику для рендеринга 2D металла.
Т.е. у нас есть
а) координаты вершин фигур в 2D
б) (в идеале) просто текстура, на которой оные фигуры предварительно нарисованы (по типу черный - есть фигура, белый или прозрачный - чисто)

Нужно сымитировать  блестящий металлический зад блестящую металлическую выпуклую поверхность подобно тому как это делается стилями в программе Photoshop.
Прилагаю пример из вышеобозначенного графредактора:
Изображение

Короче нужно что-то типо того (не конкретно, хотя бы похоже).
API: OpenGL ES 2.0 + GLSL
Желательно непрожорливый алгоритм (оценка: чтобы не дропал ФПС на iPhone при одной фуллскрин отрисовке - это верхний предел).

Я сам, конечно, размышлял над этим вопросом перед тем, как вам его сюда вбросить. Ничего лучше не придумал, чем просто создать дополнительные вершины внутри полигонов, и вычислить в них цвет по какой-нить формуле/1D текстуре в зависимости от освещения. Ну фактически: сделать все в 3D отрендерить и показать в 2D. Такой подход мне не очень по душе, но если уж ничего не придумается, придется пилить его.

Изображение

В чем недостаток этого метода. Фундаметальный для меня недостаток. Я то хочу вариант задания фигур Б, иными словами через текстуру, где они нарисованы. Для чего? Чтобы показать что-то типа жидкого металла: две в притык лежажие фигуры сольются в одно целое.

Изображение

Жду от вас конструктивных предложений, рассмотрю любые варианты, обещаю большое человеческое спасибо и вечную благодарность, току кто поможет решить поставленную задачу.

Извиняюсь, возможно тему следует перенести в раздел 2D. На усмотрение модераторов.

#1
7:01, 21 янв 2013

Попробуй ещё добавить текстуру нормалей. На основе это текстуры расчитывай блики.

#2
7:51, 21 янв 2013

Погуглить алгоритмы всех этих ФШ эффектов - там принцип везде в том что берётся растр, накладывается размывание по гауссу (или ещё по чему) и после этого что-то вроде emboss, или как уже сказали - построить карту нормалей и считать уже по ней с освещением и спекуляром. Насчёт скорости - наверное будет небыстро, фильтр Emboss требует хотя бы 4 пикселя считывать из текстуры, а размывание на яфонах вообще караул. Но ФШ именно так и делает. Если надо быстро - нужно выбрать конкретный эффект и делать хаки.

#3
13:23, 21 янв 2013

kom
RPG
Да-да, кажется, начинаю понимать, но с размазыванием действительно беда. // Точнее в многочисленными выборками с текстуры

#4
20:14, 21 янв 2013

Ну размыть можно 1 раз а потом уже просто использовать буфер.Как бы технология понятна, дальше нужны костыли.

#5
21:24, 21 янв 2013

RPG
> Ну размыть можно 1 раз а потом уже просто использовать буфер.Как бы технология
> понятна, дальше нужны костыли.
Дык каждый кадр нужно...
Сегодня потестирую размывание.

#6
6:27, 22 янв 2013

Наверное, RPG  имел ввиду оффскрин рендеринг с размытием исходной текстуры "A" в новую текстуру "B". И дальше уже пользоваться текстурой "B".

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

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