Когда требуется алгоритм Пейнтера с алгоритмом Z-буфера?

По словам моего учителя, в некоторых ситуациях алгоритм Z-буфера нуждается в алгоритме художника для визуализации 3D-сцены в 2D-изображении.

Я думал, что алгоритм Z-буфера является расширением, улучшением алгоритма painter’s one : для меня алгоритм Z-буфера может делать все, что может сделать painter’s one, и даже больше (пересечение полигонов и циклических перекрытий).

Однако в некоторых ситуациях алгоритм Z-буфера не может работать правильно, если не используется алгоритм painter… Что это за ситуации ?

2 ответа

  1. Хотя бы одна причина из wiki

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

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