При рендеринге двух перекрывающихся копланарных поверхностей распространенной проблемой является «борьба по z», при которой средство визуализации не может решить, какая из двух поверхностей ближе к камере, создавая визуальные артефакты в области перекрытия.
Стандартным решением этого является придание поверхностям небольшого смещения при проектировании модели. Есть ли другое решение?
Ответы:
Если поверхности точно совпадают, ваша судьба зависит от богов FPU; вы, скорее всего, будете вести Z-бой. Если треугольники идентичны и вы сделать точный же математику друг, вы будете в конечном итоге с тем же Z-значения для обоих. Но опять же, это произойдет, только если ваши математические операции идентичны для обоих. (Поскольку, как правило, операции FPU не являются коммутативными)
Одно из возможных решений - вообще не использовать Z-буфер. Скорее вы можете использовать алгоритм художника . Конечно, это связано со всеми проблемами алгоритма маляров. Но это решило бы Z-бой.
В вашем примере с надписью Screen Space Decals (SSD), обычным решением является использование смещения, то есть простого тонкого куба. См. Презентацию Warhammer 40k о твердотельных накопителях для справки. Или Барт Вронский в посте , который решает некоторые другие проблемы с переводными картинками, но и ссылки на несколько других презентации о SSD - накопителях
источник
Вот как я решил это в прошлом:
Обратите внимание, что объекты должны быть нарисованы последовательно, чтобы это работало.
источник
В зависимости от вашего рендерера вы можете сделать поверхности более «размытыми», применяя минимальное смещение по глубине мультисэмплинга, используя шумоподобный алгоритм. Это должно привести к некоторому эффекту смешивания для поверхностей в непосредственной близости от глубины. Насколько я знаю, установка глубины для каждого сэмпла во фрагментном шейдере довольно недавняя в OpenGL и только в качестве расширения.
OpenGL имеет PolygonOffset, но требует заранее знать, что вы собираетесь сделать что-то копланарное. Хотя это невозможно для поверхностей в пределах одной модели, это может хорошо работать, например, при рендеринге дороги, наложенной на участок земли.
источник