Сколько шейдеров обычно активны одновременно в одной сцене в современных играх? Я знаю, что используются несколько шейдеров, при этом игры переключаются между ними в каждом кадре, и часто можно рисовать объекты с помощью шейдера:
- Нарисуйте все объекты одним шейдером
- Изменить с шейдера один на шейдер два
- Нарисуйте все объекты с помощью шейдера два
Тем не менее, я знаю, что это не так просто, особенно с такими эффектами, как эффект свечения для всей сцены, рендеринг в текстуру и т. Д., Но я думаю, мы можем предположить, что это работает в большинстве случаев, верно? Подход «группа за шейдером» хорош, потому что переключение шейдеров - дорогостоящая операция.
С одной стороны, у вас не может быть слишком много шейдеров, потому что вы хотите быстро визуализировать сцену. С другой стороны, вам нужно много разных шейдеров (или убер-шейдеров с ветвями - довольно похожих) для кожи, металла, воды и т. Д.
Сколько (и каких) различных шейдеров будет использовать теоретическая, современная игра от третьего лица, 3D-детектив для ПК (DirectX 11, если это имеет значение)? Было бы 5, 20 или более, как 100 активных шейдеров, считая только активные, в некотором «кадре X»? Я знаю, что это не одно число, но мне интересно, какие масштабы и факторы важны для ПК-игры.
В моем примере игры я бы использовал около 9-11 на кадр (считая их разными, маленькими шейдерами или одним убер-шейдером - теперь не имеет значения):
- Скин шейдер
- Глазной шейдер (не слишком много? Но они разные)
- Металлический шейдер
- Наземный шейдер
- Шейдер снега / дождя (если требуется)
- Водный шейдер (если вода существует в сцене)
- Светящийся шейдер (только когда задействованы некоторые спецэффекты)
- Светоизлучающий шейдер (уличные фонари и т. Д.)
- Стандартный шейдер (для всего остального, просто стандартное затенение)
- Стандартный шейдер с картами нормалей
- 2D шейдер (для графического интерфейса и т. Д.)
Много это или мало? Я забыл о некоторых важных шейдерах, которые мне понадобятся?