Оттенение
Оттенение (Shader) - это набор команд, исполняемый на графическом процессоре, чтобы определить, как объект должен быть отображён. Source использует оттенения для всего в 3D мире.
Оттенением можно управлять посредством параметров, содержащихся в файлах материалов. В то время как самые распространенные довольно просты, существуют очень сложные для обработки таких эффектов, как тени в реальном времени, освещение и преломление.
Типы
Существует две разновидности оттенений, Точечное оттенение и Вершинное оттенение, каждое из них выполняет разные задачи в конвейере данных рендера. Оттенения заменяют собой конвейер фиксированных функций и позволяет разработчикам лучшн управлять выводом отображения, предоставляя возможность динамического изменения пикселей и вершин*. SDK включает множество существующих оттенений.
Языки программирования
В настоящее время существует три основных языка для программирования оттенений: High Level Shader Language (HLSL), C for Graphics (Cg) и OpenGL Shading Language (GLSL). Source engine использует оттенения на основе HLSL. Однако Cg очень схож с Cg шейдерами поэтому может быть быстро и просто портирован под HLSL.
Спецификация оттенений
Используемая версия спецификации оттенения определяет насколько современные методы оттенения поддерживаются графической картой. Это не позволяет старым графическим картам физически распознавать новые методы оттенения.
Современные версии
Source поддерживают Shader Model 2.0 (включая Pixel Shader 2.0b) и Shader Model 3.0.
togl. Вы должны планировать сделать SM2.0b версию вашего оттенения, если Вы планируете поддерживать эти OC.При создании оттенения под новые видеокарты важно не забывать поддерживать тех, у кого есть старые видеокарты иначе Вы сильно ограничите возможность использования вашей игры. Старые графические карты могут потребовать указания так называемых "резервных оттенений", когда резервное оттенение (с использованием более старой спецификации) будет использоваться в случае сбоя современного оттенения.
Если Вы хотите узнать подробнее о различный спецификациях оттенений, смотрите
статью в википедии.
Дополнительные сведения о создании оттенений для использования на платформе Source см. в разделе Создание оттенений.
Вершинное оттенение
Вершинное оттенение применяются для каждой вершины, запущенной в программируемом конвейере. Its most basic goal is to transform geometry into screenspace coordinates so that the Pixel shader can rasterize an image. Vertex shaders can modify these position coordinates to perform mesh deformation. They can also receive additional information from the mesh, including normals, tangents, and texture coordinates. The vertex shader then writes to output registers; the written values are then interpolated across the vertices in the pixel shaders. Вершинное оттенение не создаёт реальные вершины.
Ниже представлен пример вершинного оттенения с подробными комментариями, готовый к использованию в Source.
Пример вершинного оттенения
Это сквозное оттенение — в том смысле, что не вносит существенных изменений в данные вершин, а просто передает данные на этап точечного оттенения.
Точечное оттенение
Точечное оттенение применяется к каждому пикселя, отображаемому на экране. Точечное оттенение ожидает на вход интерполированных данные вершин, которые затем используются для растеризации изображения. Точечные оттенения могут создавать широкий спектр эффектов, связанных с цветом отдельных пикселей, таких как преломление, попиксельное освещение или отражение.
Ниже представлен пример точечного оттенения с подробными комментариями, готовый к использованию в Source.
Пример точечного оттенения
Данное точечное оттенение предназначено для использования в качестве постобработки и создает эффект оттенков серого.
Наложение оттенений в Source
Платформа
Source позволяет использовать два отличающихся вида оттенения, Постобработка и Объектное, большинство эффектов и материалов используемых на платформе
Source в значительной степени определяются компонентами точечного оттенения.
Постобработка
Постобработка, это обычное Пиксельное оттенение применённое к прямоугольной области изображения, отображаемым по всему экрану. Прямоугольная область содержит копию из кадрового-буфера, Пиксельный оттенение может заменить и модифицировать выходное отображение, чтобы создать разнообразные эффекты, например, базовая модификация цвета для более продвинутых процессов, таких как размытие движения и свечение.
sdk_bloom.cpp и sdk_bloom.ps20.fxc определяют одно возможное оттенение, которое может быть использовано, как альтернативный пример.Source SDK предоставляет пример этого вида оттенения в файлах постобработки (![]()
sdk_postprocess.cpp.cpp, ![]()
sdk_postprocess_vs20.fxc, и ![]()
sdk_postprocess_ps20.fxc)
Продвинутая постобработка, такая как свечение и размытие движения, интегрированны на платформе
Source, могут пригодиться для создании пользовательских Целей Рендеринга
Объектное
Объектное оттенение на платформе
Source используется на любом объекте, если ссылка на оттенение указана в применяемом файле материала (.vmt) , например модели или элементы карты. Объектное оттенение можно использовать для создания преломляющего материала, динамического изменения вершин модели или других расширенных эффектов отображения.
The Source SDK provides an example of a Per-Object shader in the lightmap files (![]()
sdk_lightmap.cpp, ![]()
sdk_lightmap_vs20.fxc, and ![]()
sdk_lightmap_ps20.fxc)