08-25-2018, 06:12 AM
Ну я в своем движке, например, каскады CSM храню как текстурный массив, так что они занимают один блок, но эта фича появилась только в OpenGL 3.0. GLScene нельзя сравнивать с современными движками, там используются сильно устаревшие технологии, поэтому в любом случае придется чем-то жертвовать.
Юнити, скорее всего, объединяет некоторые текстуры (я, например, в своем движке объединяю). Height может идти как альфа-канал normal, PBR-текстуры тоже легко объединяются в одну. В Xtreme так тоже можно, но только вручную, что не очень удобно.
К тому же, при использовании deferred shading расход текстур немного снижается, потому что некоторые операции можно вынести в этап построения G-buffer'а (например, тот же emission, который сразу записывается в результирующий HDR-буфер). Но у нас тут пока возможен только forward shading, так что имеем что имеем.
Но вообще я думаю, что все современные видеокарты должны поддерживать как минимум 16 блоков, так что ничего страшного в том, чтобы выйти за 9 текстур, нет (использование GLSL - это уже само по себе выход за пределы возможностей OpenGL 1.x). Единственное, что может препятствовать - ограничение в GLScene, где сейчас есть только 8 слотов для текстур TextureEx в материале, но я могу повысить до 16.
Юнити, скорее всего, объединяет некоторые текстуры (я, например, в своем движке объединяю). Height может идти как альфа-канал normal, PBR-текстуры тоже легко объединяются в одну. В Xtreme так тоже можно, но только вручную, что не очень удобно.
К тому же, при использовании deferred shading расход текстур немного снижается, потому что некоторые операции можно вынести в этап построения G-buffer'а (например, тот же emission, который сразу записывается в результирующий HDR-буфер). Но у нас тут пока возможен только forward shading, так что имеем что имеем.
Но вообще я думаю, что все современные видеокарты должны поддерживать как минимум 16 блоков, так что ничего страшного в том, чтобы выйти за 9 текстур, нет (использование GLSL - это уже само по себе выход за пределы возможностей OpenGL 1.x). Единственное, что может препятствовать - ограничение в GLScene, где сейчас есть только 8 слотов для текстур TextureEx в материале, но я могу повысить до 16.