Лучше, чтобы все было как можно проще. Дублирование одного и того же шейдера для каждого объекта не является необходимым и быстро раздувается. Вам также не нужен один гигантский шейдер, который покрывает все возможные варианты использования, так как это приводит к ненужным накладным расходам.
Существует несколько мнений по поводу управления шейдерами, и нет «оптимального» подхода к этому. Я даже видел некоторые реализации шейдеров, где каждый шейдер генерируется на лету на основе параметров (например, в движке Unreal ).
Для кого-то, кто только начинает в этой области, было бы хорошо сначала набросать основные шейдеры. Например, у меня есть шейдер для объектов без текстур, шейдер с базовой текстурой и поддержкой освещения на пиксель и т. Д. ... Затем каждый раз, когда я хочу получить другой эффект, который нельзя сделать с помощью предыдущего шейдера, я Я создам новый для нового эффекта.
Целью такой системы является простота. Просто. Хранить. Это. Просто.