У меня есть некоторый опыт программирования геометрии и вычисления шейдеров - но я никогда не испытывал особого желания играть с фрагментными шейдерами. В настоящее время я пытаюсь лучше понять, как они работают и каков их потенциал. Одна из вещей, которые я прочитал в нескольких местах, заключается в том, что фрагмент (то есть пиксель экрана) не может выходить за пределы самого себя внутри шейдерного фрагмента. Это означает, что данный повторяющийся фрагмент может влиять только на себя.
Поэтому и ради обучения я хотел бы знать, возможно ли следующее (и если да, то как вообще можно этого достичь). Предположим, что для простоты у нас есть точечная сетка, состоящая только из двух вершин (расположенных в пространстве трехмерного мира). Можем ли мы запрограммировать шейдер таким образом, чтобы каждая из этих двух вершин была нарисована на экране в их точном положении WorldToViewport, а также чтобы окружность вокруг каждого из них радиусом = R также рисовалась в окружающих пикселях, даже если они расширяются за исходную сетку, к которой прикреплен шейдер? Как на рисунке ниже (где красный квадрат в центре кругов представляет нарисованные на экране вершины):
Если это возможно, можно ли запрограммировать шейдер так, чтобы эти круги, выходящие за пределы вершин, влияли на цвет (RGBA) друг друга? Как на рисунке ниже:
Как я уже сказал, если это возможные вещи, я бы хотел услышать немного о том, как этого добиться - либо в концептуальном, либо в практическом плане. Это делается в фрагментном шейдере, или его нужно вычислять раньше в вершинных или геометрических шейдерах? Как рассчитать и передать «дополнительные фрагменты», которые выходят за пределы тех фрагментов, которые заняты телом сетки?