Должен ли я всегда использовать GL_CULL_FACE?
Должен ли я всегда использовать этот метод при рендеринге? Это сильно замедляется на плохих GFX картах?
Если конечный результат не будет иметь много отбракованных граней, должен ли я тогда использовать этот метод?
3 ответа
Если все ваши модели определены правильно (выпуклые, с последовательной намоткой вершин), отбраковка никогда не повредит производительности и почти всегда поможет производительности.
Представьте, что вы визуализируете куб с отключенным отбраковкой. Грани на задней (дальней стороне) куба будут отрисованы лицом от вас, и к ним будут применены любые выбранные вами атрибуты материала задней поверхности. Затем визуализируются грани на передней части куба: поскольку только что отрисованные задние грани являются внутренней частью куба, они на 100% перекрыты лицевыми гранями.
Если куб был ориентирован по-другому, сначала можно растеризовать передние грани, но задние грани все равно будут обработаны, а затем фрагменты будут отклонены буфером z.
Чистый результат: вы растеризуете в 2 раза больше фрагментов, чем необходимо. Это может иметь большое значение для большого количества полигонов или сложных пиксельных шейдеров. Отбор лица позволяет полностью избежать растеризации лиц, которые, как вы знаете, не появятся.
Если у вас есть модель персонажа с ~100000 полигонов, отбраковка лица вдвое уменьшает объем работы, которую аппаратное обеспечение пикселя должно выполнять в каждом кадре. Это большая экономия, если у вас большие шейдеры поверхности.
Если вы работаете с маленькими моделями и без шейдеров, в настоящее время отбраковка не имеет значения. Но это хорошая практика, чтобы включить в любом случае.
Включение функции "Выборка лица" (обычно это задняя сторона) оказывает значительное влияние на производительность рендеринга.
Теперь необходимо ответить на вопрос: "Почему выборка не включена по умолчанию или почему она не используется всегда?" Есть несколько факторов, которые определяют, возможен ли отбор или нет. Одним из них является модель, которая отображается и как она просматривается.
Для каждого многоугольника в модели, если видна только одна грань спереди или сзади (когда модель рассматривается со всех возможных углов), мы можем отбраковать другую грань.
Например: "Куб", независимо от того, смотрите ли вы изнутри или снаружи, при повороте вы можете видеть только одну сторону из каждых 6 полигонов, из которых состоит куб.
Другой пример: "Паруса модели корабля" Как и в моей игре Sea-Wars(3d), паруса модели корабля - это поверхность, построенная из нескольких плоских многоугольников. Когда лодка движется в воде, можно увидеть обе стороны паруса. В этом случае выбраковка одного из лиц нежелательна.
Следовательно, выборка может быть включена для всех моделей в сцене, которые следуют семантике кубов и отключаются для всех других моделей.
PS Face Culling следует использовать, когда это возможно.
Это зависит от того, что вы делаете. Вообще выбраковка желательна. Единственная причина, по которой я могу себе представить, не использовать его - это рендеринг моделей с видимыми задними сторонами. Другим сценарием, в котором отбраковка может быть нежелательна, могут быть плохо смоделированные модели, в которых вершины определены в неправильном порядке.