Обновление
Основной вопрос: как я могу передать позиции вершин мирового космического треугольника в поверхностный шейдер в шейдере Unity.Как упомянуто в комментарии, может быть возможно передать их из геометрического шейдера.Но я где-то читал, что реализация пользовательского геометрического шейдера перезаписывает логику Unitys для вычисления теней и т. Д. Я бы добавил информацию о треугольнике в структуру Input.Но прежде чем изменить логику генерации сетки, я хотел бы знать, возможно ли это.Для этого решения положения вершин треугольника должны быть постоянными для каждого пикселя в треугольнике и не должны быть интерполированы.
Это оригинальный вопрос:
Я пишуповерхностный шейдер для треугольной сетки.Я установил пользовательский атрибут вершины с идентификатором текстуры для каждой вершины.Теперь я хочу, чтобы шейдер поверхности применил текстуру, как показано на следующем изображении. (Обратите внимание, что каждый цвет представляет текстуру)
В поверхностном шейдере мне нужны 3 вершины, которые определяют треугольник и их идентификаторы текстуры.Кроме того, мне нужно положение пикселя, который я рисую.
- Если все идентификаторы текстуры одинаковы, я выбираю эту текстуру для всех пикселей.
- Если один или два идентификатора текстуры различаются, явычислите расстояние в пикселях до вершин треугольника и выберите текстуру, как показано на следующем изображении:
Поверхностный шейдер должен знать треугольник пикселей.С этой логикой я должен получить затенение, которое я ищу.Я создаю свою сетку программно, чтобы я мог добавить вершины треугольника и их идентификаторы текстуры в качестве атрибутов вершины и передать его в поверхностный шейдер.
Но я не уверен, возможно ли это с тем, как работают поверхностные / вершинные шейдеры,Есть ли связь между вершиной и пикселем для получения информации о моем произвольном треугольнике?Есть ли лучший способ сделать это?
Я использую Unitys ShaderLab для своих шейдеров.