Цитата(saas @ 27.12.2017, 20:46)
это что, для каждой текстуры нужен будет такой скрипт?
Немного сложнее. Каждый скрипт будет описывать некую схему в виде определенного набора констант, на основании этой схемы будут компилироваться шейдера. Из этого набора констант будут вычисляться хеши которым будут сопоставлены скомпилированные шейдера, и при парсинге следующего материала ему будет назначен уже скомпилированный шейдер, если материал с подобной структурой уже был загружен. В самом скрипте материала используемый шейдер явно не будет указываться.
Glsl шейдер будет всего один, но он будет порезан на секции заключенные в блоки #ifdef ... #elif ... #else, перед компиляцией шейдера строка с исходным кодом шейдера будет добавляться к строке с заголовком, в котором и будут объявлены соответствующие дефайны. Этот заголовок будет строиться при парсинге материала и из него же будет вычисляться хеш.
Вместе с этим каждый материал будет содержать наборы значений констант, а кроми этого он может быть мультипроходным (привет шкурке, которая отрисовывается в несколько проходов) и состоять из нескольких стейджей для которых могут быть использованы разные шейдера.
Сложновато?
Я тоже так думаю, полагаю на реализацию все новогодние каникулы уйдут (в перерывах между пьянством) если не больше >_<
Цитата(saas @ 27.12.2017, 20:46)
Я в своём движке думаю сделать больше похоже на сталкерский: у каждой модели есть список текстур и "шейдер"
В описанном тобой варианте этот список хранится не в отдельном файле с материалом, а непосредственно в файле модели, вот и вся разница. Причем у некоторых моделей эти параметры могут совпадать, а выделение материала в отдельную сущность позволяет их переиспользование. Ну и как вариант, впоследствии, когда появится редактор, можно будет скрипт материала записывать непосредственно в файл модели.
Цитата(saas @ 27.12.2017, 20:46)
Таким образом можно уменьшить количество переключений состояния, т.к. текстуры можно менять отдельно.
Сортировку я представляю себе примерно так: при сортировке оперируют более мелкими сущностями которые получаются в результате дробления материалов и моделей на кусочки геометрии, текстуры, шейдера трансформации, и объединения их в рендер таргеты, которые помещаются в очередь отрисовки в определенном порядке. Но до этого еще ой как далеко и много другой работы предстоит проделать