Шейдер излучения геометрии в Unity3D

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

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

Заранее благодарим за любые рекомендации или ресурсы!


person Andrew Dupuis    schedule 31.07.2017    source источник


Ответы (1)


Используя в качестве основы мой старый ответ в другом месте, вам понадобится следующее:

  • #pragma geometry geom
  • [maxvertexcount(N)]
    void geom(triangle v2g IN[3], inout TriangleStream<g2f> triStream)
  • И немного кода, чтобы превратить входные вершины в выходные вершины.

Обратите внимание, что в приведенном выше примере одновременно используются полные треугольники, хотя есть другие виды. Во-вторых, следует отметить N в аннотации, то есть вы сообщаете графическому процессору, сколько вершин вы отправляете обратно. В моем случае я отправлял 12 (по 4 на каждое ребро в исходном треугольнике), в вашем случае вы можете использовать GL_POINTS, взять одну вершину и вывести 4 как четырехугольник (так что N будет 4 для вас). См. Также MSDN статья о том, как объявить функцию geom для других входов.

person Draco18s no longer trusts SE    schedule 01.08.2017