Плазменный шейдер OpenGL ES 2.0
Я пытаюсь написать и OpenGL ES 2.0 шейдер, который сделает 2D плоскость плазмоподобной поверхностью. Я стремлюсь к чему-то похожему на эффекты в этих коротких видео...
http://www.youtube.com/watch?v=XM7imVtakZk
http://www.youtube.com/watch?v=5NQi45V5Y6o
Мне не нужен именно такой вид рендеринга, но в целом я ищу рендеринг моей 2D-плоскости с какой-то движущейся плазмоподобной поверхностью. Он не должен выглядеть потрясающе и не должен вести себя очень плавно, только то, что имеет движение и красиво смешанные цвета, как в видео. Мне нужно, чтобы этот эффект был быстрым, и я подумал, что использование шейдеров на 2D-плоскости не должно сильно повлиять на производительность (если большинство эффектов можно выполнить в шейдере). Мне не нужен шейдер, написанный для меня (хотя код приветствуется), я просто ищу совет о том, что искать для не слишком сильного эффекта производительности, как этот, для 2D-плоскости. Если есть путаница относительно точного эффекта, которого я добиваюсь, это видео близко, но вероятно более продвинутое, чем мое должно быть...
2 ответа
Потребовались дни исследований и экспериментов, но я смог добиться именно того эффекта, который мне был нужен, используя перлин-шум. Я генерирую трехмерный перлин-шум на GPU в фрагментном шейдере для плоскости с 2 треугольниками. Изменяя цвета, уровень масштабирования и интенсивность, я могу получить желаемые визуальные эффекты очень быстро. Некоторые изображения из моих результатов ниже для сравнения с приведенными выше примерами.
У Apple есть пример приложения GLSLShowpiece для Mac, который содержит шейдер, который создает эффект плазмы на основе пары предварительно рассчитанных текстур. Несмотря на то, что шейдерная программа GLSL создана для настольных компьютеров OpenGL, ее можно легко перенести на OpenGL ES 2.0.