Что Кевин делал в основном, читая эту карту плотности (на процессоре) при создании сетки травяного патча и сохранял значение в вершинах (одно и то же значение во всех вершинах 1 лезвия). Затем, когда патч был визуализирован, в пиксельном шейдере, если это значение было меньше некоторого порога, он отбросил пиксель. Система представляет собой несколько разных патчей, сделанных из рекламных щитов, плотность вместо них сохраняется в текстуре. Таким образом, в основном вы делаете траву повсюду, но трава становится невидимой на дороге.
Это объясняется в его диссертации, стр. 67-71.
Но то, что он описывает, не работает с instancing, потому что каждый патч является другой сеткой или использует разные текстуры, поэтому вы не можете рисовать их с помощью instancing.
Решение будет состоять в том, чтобы сохранить это значение плотности на один экземпляр носа травы в однородном буфере. Таким образом, каждый травяной патч имеет одинаковую сетку и может быть установлен.
Для патчей из рекламных щитов это сложнее, вам нужно иметь «1 текстуру» для рекламного щита. Вы можете создать большую текстуру (или массив текстур), которая содержит эквивалент нескольких рекламных щитов и сохранить смещение координат текстуры за каждый рекламный щит в постоянном буфере. Не забудьте повторно использовать ту же часть текстуры для рекламных щитов, которые выглядят одинаково в этом случае.