Рендеринг реалистичного электрического освещения с использованием OpenGl - PullRequest
2 голосов
/ 27 декабря 2011

Я реализую простой эффект молнии для своей 3D-игры, что-то вроде этого:

http://www.krazydad.com/bestiary/bestiary_lightning.html

Я использую opengl ES 2.0.Я размышляю над тем, какой самый лучший и эффективный способ визуализации этого в трехмерной среде, так как линии, составляющие электрический болт, должны выглядеть «сплошными» при взгляде под любым углом.

Я думал создать две плоскости для каждого отрезка линии в крестообразном направлении Х, чтобы создать эффект толщины линии.Рендеринг с отключением записи в буфер глубины, с использованием какого-либо режима аддитивного смешивания.Текстурирование каждого отрезка линии с использованием электрической текстуры с альфа-каналом.

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

Я думал об альтернативном подходе, в котором я отрисовываю молнии, используя 2D линии между спроецированными конечными точками в проходе постобработки.Это должно работать хорошо, так как эффект перспективы в моем случае незначителен, за исключением того, что было бы сложно, чтобы линии появлялись за окклюзирующими объектами.

Есть какие-нибудь хорошие идеи по поводу лучшего подхода здесь?

Изменить: я нашел эту белую бумагу от nVidia:

http://developer.download.nvidia.com/SDK/10/direct3d/Source/Lightning/doc/lightning_doc.pdf

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

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

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Я закончил тем, что сделал что-то вроде предложенной статьи nVidia, но чтобы избежать необходимости в шаге постобработки, я использовал различные типы текстур для разных типов углов ветвления, чтобы избежать пропусков и перекрытий углов сегментов, что оказалось довольно Что ж. И чтобы избежать дорогостоящего вычисления матрицы рекламного щита, я вместо этого нарисовал отрезки, используя более двумерный подход, но вычисляя значение глубины вручную для каждой вершины в сегментах. Это дает приемлемую производительность и визуальные эффекты.

0 голосов
/ 27 декабря 2011

Анимированная текстура, возможно с питанием от шейдера, вероятно, самый быстрый способ справиться с этим.

Любая генерация и рендеринг геометрии ограничит качество эффекта и может потребовать значительно больше процессорного времени, пропускной способности памяти и вызовов отрисовки.

Использование одной анимированной текстуры на четырехугольнике илиШейдер, создающий процедурную молнию, даст постоянную скорость и значительно упростит реализацию эффекта.Для этого этот вопрос может представлять интерес.

...