Unity3D - Как тесселяции 2D спрайтов?

8

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

Есть ли способ использовать больше треугольников на спрайте? Может быть, даже в зависимости от того, сколько экранного пространства они покрывают?

aggsol
источник
1
Похоже, вы хотите разделить свой квад? Если это так, то в псевдокоде есть несколько хороших примеров для достижения этой цели. Afaik Unity позволит вам получить доступ к сетке игровых объектов (и ее треугольникам / вершинам), которая должна позволять выполнять то, что вы хотите. Вот один такой пример на gamedev для подведения квадратов: Как разделить квад? , Это то, что вы искали?
Логхам
Да, разделение четырехугольника - это подход, который я ищу. Это включает в себя обмотку и ультрафиолетовые лучи, я думаю. Таким образом, у меня было бы больше треугольников.
Аггсол
Вы пытались использовать тесселяционный шейдер при рисовании спрайта? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/…
ClassicThunder
2
Когда вы тесселяции четырехугольника, значения освещения для вершин будут просто интерполированы. Квадрат является плоским, поэтому с большим количеством вершин интерполяция будет просто линейной по всему квадру. Как добавление большего количества треугольников решит эту проблему. Это звучит как то, что должно быть решено с помощью пиксельного шейдера.
Арун R
@ArunR Хорошая точка, но если, например, квад больше, чем диапазон точечного источника света, то треугольник будет использовать источник света, если в вершинах больше нет света. Использование пиксельного шейдера, к сожалению, не вариант на всех устройствах.
Aggsol

Ответы:

2

Похоже, вам нужно создать свой собственный игровой объект и использовать собственный алгоритм триангуляции для обработки деталей на основе математики определенного размера.

Может быть, что-то подобное может помочь ...

http://forum.unity3d.com/threads/tessellation-algorithms-for-polygons.228051/

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

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

война
источник
Идея состоит в том, чтобы использовать вершинный свет на спрайтах, поскольку он намного быстрее, чем пиксельный свет. Особенно у некоторых мобильных платформ графические чипы с низкой спецификацией.
Аггсоль
То есть вы говорите, что у вас есть большой квад, который вы хотите разделить, а затем на каждую вершину высветить результат? Вы можете получить намного лучший и быстрый результат, используя освещение на пиксель в существующем четырехъядерном IMO с низким разрешением, но если это то, что вы хотите, то сделайте это. Разделить квад не должно быть слишком сложно, верно?
война
Имейте в виду, что то, что вы экономите на освещении на пиксель, вы фактически потеряете, имея более крупные вершинные буферы ... другой вариант, конечно, состоит в том, чтобы иметь некоторую математику в вершинном шейдере для передачи уровня света в пиксельный шейдер на основе части вершины, так что вы все еще получаете небольшой VB и не на пиксель света.
война
отбросьте эту идею ... это не сработает ... хмммм
война
1
Если вам нужно уточнить вопрос, оставьте комментарий к вопросу.
MichaelHouse