Перейти к основному содержанию
0 комментарий
EStark March 292024

Немножечко про тесселяцию

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


 

Ну да ладно, закончим с лирическим отступлением: 

За основу тесселяции взята идея о том, что при увеличении расстояния от объекта, с пропорциональным ей уменьшением детализации, внешний вид объекта останется прежним. Иными словами, если удалить камеру от объекта, втрое дальше начального расстояния, при этом уменшив число полигонов на оъекте в такое же кол-во раз, помноженное на коэффициент, внешний вид объекта визуально останется прежним.

Естественно, это действует и в обратную сторону - по мере приближения к объекту, количество треугольников в изображении объекта экспоненциально увеличивается.

Основным плюсом тесселяции является то, что при общем просчете картинки, независимо от того, насколько мы удалены от объекта наблюдения (в игре, естественно, где присутствуют и другие оъекты), среднее кол-во треугольников на кадр остается неизменным.



Немного заумных технологий:

Процесс тесселяции объекта начинается с Hull Shader (поверхностный шейдер) – он берет контрольные точки, после чего вычисляет нужный уровень тесселяции. После чего, контрольные точки отправляются в Domain Shader (доменный шейдер) – тесселятор не имеет никакого представления о контрольных точках. Поэтому вместо этого, тесселятору предоставляют некоторое количество параметров тесселяции, с помощью которых и задается требуемый уровень тесселяции на определенной области объекта. 

Hull Shader сообщает тесселятору, как именно он должен работать – разработчик ранее может задать методом произведения тесселяции, поскольку модуль тесселяции располагает заранее фиксированным комплектом функций, и соответственно у него есть несколько режимов работы. Тесселятор берет то, что было передано ему из Hull Shader и действует в патче над формированием требуемой добавочной геометрии. После того, как эта стадия будет завершена, он выдает доменные точки (domain points) и данные топологии объекта тесселяции.

Затем доменные точки передаются в Domain Shader, который создаст на их основе вершины, которые станут доступны следующей части конвейера. Вместе с этим, данные топологии одновременно адресуются прямо на этап сборки примитивов конвейера – это делается потому, что данные шейдерам не нужны, поскольку они подготовлены для растеризатора. Следует отметить, что на всех этапах стадии тесселяции работа ведется не с треугольниками , а с патчами и точками. Патчи представляют из себя кривые или же области поверхности и практически всегда являются четырехугольниками.

 


Преимущества тесселяции:

Алгоритм тесселяции, на данный момент, единственный способ значительно повысить кол-во треугольников в картинке, не сильно жертвую производительностью. То же самое касается небезызвестной "тесселяции подземных вод" - алгоритм тесселяции таков, что детализация объекта зависит от того, как далеко он от точки наблюдения. В том же случае, если объект находится вне кадра, то его вообще не тесселируют. Иными словами, те "подземные воды" ни коим образом не могли уменьшить производительность игры.

 

 

 

На этом, собственно, все.

Писал EStark, с маленькими вкраплениями копипасты, специально для MFB