Обзор / демонстрация шейдерных технологий / использования в играх - PullRequest
7 голосов
/ 10 апреля 2011

Я ищу ресурсы, которые могли бы дать мне лучшее понимание того, для чего используются шейдеры в играх, что они могут делать и, что еще важнее, чего они не могут. Я понимаю, как работает графический конвейер и все такое, и я создал несколько базовых шейдеров в GLSL (в основном просто для замены функциональности конвейера с фиксированными функциями), но я пока не до конца понимаю, какие вещи возможны только с пользовательскими шейдерами какие вещи можно сделать более эффективно и т. д. Мне удалось найти некоторые примеры определенных методов, в особенности освещения, но я ищу более общий обзор их использования.

Ссылки и объяснения некоторых интересных методов, в отличие от обзора, также приветствуются (но меньше, чем обзор;)), предпочтительно в GLSL или псевдокоде.

1 Ответ

4 голосов
/ 12 апреля 2011

Если учесть, что DirectX и OpenGL оба перешли к шейдерной (то есть без фиксированной функции) системе, ответом на ваш вопрос «какие эффекты возможны только с шейдерами» может быть «все».

Некоторые методы, которые, по моему мнению, были бы невозможны / невозможны без программируемых шейдеров (или с использованием очень специфических API черного ящика):

  1. Освещение на пиксель
  2. Отображение теней.
  3. Скины графического процессора (т. Е. Скины матричной палитры) для анимированных сеток.
  4. Любой из различных эффектов пост-обработки, которые распространены сегодня: цветение, SSAO, глубина резкостии т. д.
  5. Отложенное затенение.
  6. Реализация произвольных / "других" моделей освещения, таких как Oren-Nayar, Cook-Torrance, Rim-Lighting и т. д.

и этот список можно продолжить, и я уверен, что некоторые люди не согласятся с моей оценкой того, что этого нельзя достичь с помощью функций с фиксированными функциями (с помощью хаков или различных расширений с фиксированными функциями).

То, что сводится к тому, что до программируемых шейдеров поставщик должен был реализовывать определенный эффект в аппаратном обеспечении / драйвере, и это должно было быть чем-то, что можно было бы разумно выразить через API.Теперь вы можете эффективно выполнять любой пользовательский код, который вам нужен (в рамках ограничений различных этапов шейдера и других ограничений аппаратного обеспечения), поэтому вы можете гибко настраивать конвейер рендеринга и изобретать новые методы по своему усмотрению.

Взгляните на первые пару книг по GPU Gems (их можно бесплатно прочитать на веб-сайте Nvidia), чтобы узнать о типах техник, которые появились после того, как стало доступно программируемое оборудование.

...