Если учесть, что DirectX и OpenGL оба перешли к шейдерной (то есть без фиксированной функции) системе, ответом на ваш вопрос «какие эффекты возможны только с шейдерами» может быть «все».
Некоторые методы, которые, по моему мнению, были бы невозможны / невозможны без программируемых шейдеров (или с использованием очень специфических API черного ящика):
- Освещение на пиксель
- Отображение теней.
- Скины графического процессора (т. Е. Скины матричной палитры) для анимированных сеток.
- Любой из различных эффектов пост-обработки, которые распространены сегодня: цветение, SSAO, глубина резкостии т. д.
- Отложенное затенение.
- Реализация произвольных / "других" моделей освещения, таких как Oren-Nayar, Cook-Torrance, Rim-Lighting и т. д.
и этот список можно продолжить, и я уверен, что некоторые люди не согласятся с моей оценкой того, что этого нельзя достичь с помощью функций с фиксированными функциями (с помощью хаков или различных расширений с фиксированными функциями).
То, что сводится к тому, что до программируемых шейдеров поставщик должен был реализовывать определенный эффект в аппаратном обеспечении / драйвере, и это должно было быть чем-то, что можно было бы разумно выразить через API.Теперь вы можете эффективно выполнять любой пользовательский код, который вам нужен (в рамках ограничений различных этапов шейдера и других ограничений аппаратного обеспечения), поэтому вы можете гибко настраивать конвейер рендеринга и изобретать новые методы по своему усмотрению.
Взгляните на первые пару книг по GPU Gems (их можно бесплатно прочитать на веб-сайте Nvidia), чтобы узнать о типах техник, которые появились после того, как стало доступно программируемое оборудование.