Я делаю воксельный движок, делящий мир на куски по 32 x 32 x 32 блока каждый. Я реализовал много оптимизаций рендеринга, таких как не рендеринг граней, покрытых сплошными вокселями или слияние лица для того же вида соседей вокселей.
Дело в том, что я хочу реализовать окклюзию для каждой вершины, вычисляя окклюзию от процессора и передавая ее шейдерам, как это изображение. Это работает почти нормально, но слияние граней создает большие градиенты на гранях большего размера из-за линейной интерполяции, которую OpenGL делает до окончательного цвета фрагмента.
Я хотел бы узнать, есть ли способ решить эту проблему, сообщая фрагментному шейдеру, как далеко находится фрагмент от вершины или что-то в этом роде.
Было бы лучше полностью отказаться от вашей системы «слияния лиц». Хотя не только потому, что это позволило бы вам делать это более эффективно.
Одна проблема с вашей системой слияния лиц заключается в том, что рендеры гарантируют только то, что ребра между двумя треугольниками не будут иметь зазоров только если две общие позиции двоичный идентичный ценности. Ваша система слияния лица имеет много треугольников, которые частично разделяют края. Графические процессоры не гарантируют ничего о краях в этих случаях; это может привести к появлению трещин между краями.
Других решений пока нет …