Затенение Фонга против тесселяции

Я наткнулся на Phong Shading, глядя на Source Engine. Описание очень похоже на тесселяцию. Но когда я искал его, я действительно не нашел ничего, что бы напрямую сравнивало их. Теперь в DirectX тесселяция не используется, как Phong Shading в HLSL. Какая разница? И какой из них я должен использовать?


person free_ice_cream    schedule 21.05.2013    source источник
comment
В вики-статье на обоих изображениях одинаковое количество полигонов. Если внимательно присмотреться к краю, то можно увидеть такое же количество сегментов. Хитрый, а? :D   -  person user2246674    schedule 21.05.2013
comment
@user2246674 user2246674, лол, тебе нужно имя пользователя, ты меня на секунду смутил. +1, это показывает принципиальную разницу.   -  person Justin Meiners    schedule 21.05.2013
comment
Исправлено мое имя пользователя :).   -  person free_ice_cream    schedule 22.05.2013


Ответы (2)


Затенение Фонга не имеет прямого отношения к тесселяции DX11, но поскольку они оба могут сглаживать детали освещения, я понимаю, как вы можете быть сбиты с толку.

Тесселяция динамически увеличивает геометрическую детализацию на основе некоторых параметров (часто расстояния до камеры). Это может улучшить качество освещения (может быть, это связь с фонгом?), а также детализацию силуэта. Преимущества затенения (не детализация силуэта) на самом деле могут быть полностью смоделированы в пиксельных шейдерах без тесселяции.

Затенение Фонга — это метод затенения пикселей. Это не влияет на геометрическую детализацию. Это похоже на стандартное OpenGL затенение Гуро, за исключением того, что вместо интерполяции значения освещения по пикселям изображения поверхность, нормаль интерполируется по всей поверхности и перенормируется в каждом пикселе. Это дает более точные результаты освещения, которые часто называют «освещением на пиксель», а не «освещением на вершину».

Вы могли бы разумно (и, вероятно, часто) использовать оба эффекта одновременно в разных частях конвейера.

person Justin Meiners    schedule 21.05.2013
comment
+1, имейте в виду, что существует метод затенения Фонга (тот, который вы описали, в основном попиксельное освещение) и модель отражения Фонга. Модель отражения Фонга также можно использовать с другими методами затенения (например, затенением по Гуро). - person Nico Schertler; 21.05.2013
comment
@NicoSchertler правда, вы можете использовать фонг только для зеркального отражения, а гуро - для рассеянного. - person Justin Meiners; 21.05.2013

Как упомянул Джастин, Phong Shading — это процедура затенения, используемая для более точного освещения каждого пикселя. Тесселяция используется для изменения геометрических деталей в сетке путем динамического создания большего количества треугольников для достижения более высокой детализации поверхности и более гладкого результата. Его можно успешно использовать для динамического уровня детализации в зависимости от расстояния до камеры или размера экрана.

Чтобы добавить к этой теме, я подумал, что должен упомянуть, что существует алгоритм тесселяции под названием Phong Tessellation, который черпает вдохновение из Phong Shading и применяет этот алгоритм к тесселяции. Это означает, что вершины модифицируются с помощью аналогичной интерполяции нормалей и достигают высокой детализации силуэтов, а также лучшей детализации поверхностей. Тесселяция Фонга имеет более простой шейдер, чем обычный другой алгоритм локальной тесселяции PN-Triangles, и я использовал его для достижения более высокой детализации голов в одной из игр, над которыми я работал.

Тесселяция Фонга

person JHagdahl    schedule 13.11.2013