Обзор

Дополнительные квалификаторы типа

Встроенные varying-переменные

Встроенные uniform-переменные

Встроенные константы

Встроенные типы

Встроенные функции

Неподдерживаемые возможности GLSL

Замечания

 

Search Keywords: GLSL, vrayGLSL, shading language

 

 

Обзор

Расширение V-Ray для GLSL (для краткости vrayGLSL) добавляет несколько функций и переменных, которые могут быть использованы в GLSL-шейдерах, применяемых в текстуре VRayGLSLTex и материале VRayGLSLMtl. Несколько образцов приводятся в разделе Примеры.

Дополнительные квалификаторы типа

__channel

Этот квалификатор типа может быть использован только с глобальными переменными для их пометки в качестве каналов визуализации. Каналы визуализации будут автоматически созданы и присоединены в V-Ray VFB. Поддерживается несколько типов каналов: bool, int, float, vec2, vec3. Запись в такой канал производится присваиванием значения канальной переменной. Если для канальной переменной было несколько событий записи, то принимается во внимание только последнее записанное значение. Значение канала по умолчанию устанавливается с помощью инициализатора.

__channel vec2 UVSpace = vec2(0.314);

void main() {

UVSpace = vec2(gl_TexCoord[0]);

gl_FragColor = vec4(0.3, 0.8, 0.2, 1.0);

}

 

__persistent

Используйте этот тип квалификатора для того, что бы сделать канал визуализации постоянным. Постоянные каналы визуализации будут сохранять своё значение и записывать его в V-Ray VFB даже если при выполнении шейдера достигнут оператор discard.

__persistent __channel vec2 UVSpace = vec2(0.314);

void main() {

UVSpace = vec2(gl_TexCoord[0]);

discard;

gl_FragColor = vec4(0.3, 0.8, 0.2, 1.0);

}

 

ЗАМЕЧАНИЕ: Эти возможности доступны только для V-Ray Standalone и V-Ray for Maya.

 

Встроенные varying-переменные (переменные для связи с вершинным шейдером)

varying vec3 vr_Position;

Точка пересечения поверхности (intersection surface point) в пространстве координат камеры.

 

varying vec3 vr_Normal;

Единичный вектор нормали сглаженной поверхности (smooth surface normal unit vector) в точке пересечения поверхности в пространстве координат камеры.

 

varying vec3 vr_TexTangent;

Единичный вектор касательной к сглаженной поверхности (smooth surface tangent unit vector), направленный вдоль оси U текстуры, в пространстве камеры.

 

varying vec3 vr_TexBinormal;

Единичный вектор бинормали сглаженной поверхности (smooth surface binormal unit vector), направленный вдоль оси V текстуры в пространстве камеры.

 

varying vec3 vr_Direction;

Единичный вектор (unit vector), направленный вдоль луча в пространстве камеры.

 

varying vec3 vr_Velocity;

Скорость точки поверхности (velocity of the surface point) в пространстве камеры для одного отсчёта времени (tick) 3ds Max.

 

varying int vr_TotalRayDepth;

Общая глубина луча при трассировке. Это сумма всех отражений, преломлений и уровней глобального освещения, оттрассированных вдоль пути луча до настоящего момента.

 

varying int vr_DiffuseRayDepth;

Диффузная глубина луча при трассировке. Принимается во внимание только количество уровней глобального освещения, оттрассированных вдоль пути луча до настоящего момента.

 

varying int vr_NumSuperSamples;

Количество сэмплов, взятых по пути луча, от родительской точки попадания. (Number of samples that the parent hit point along the ray path is taking. - прим. перев.)

 

varying int vr_SuperSampleIndex;

Индекс текущего суперсэмпла для этой точки пересечения.

 

varying int vr_RayFlags;

Флаги луча, которые описывают тип текущего луча. Список поддерживаемых флагов см. в разделе Встроенные константы.

 

varying vec3 vr_Origin;

Начало текущего трассируемого луча в координатах пространства камеры.

 

varying vec3 vr_GeomNormal;

Единичный вектор истинной геометрической нормали для примитива попадания (hit primitive) в координатах пространства камеры.

 

varying vec3 vr_TextureDu[];

Массив поверхностных производных по оси U пространства указанной текстуры. Все производные являются единичными векторами в пространстве камеры.

 

varying vec3 vr_TextureDv[];

Массив поверхностных производных по оси V пространства указанной текстуры. Все производные являются единичными векторами в пространстве камеры.

Встроенные uniform-переменные (переменные для связи с внешним миром)

uniform int vr_NumLights;

Количество источников света в сцене.

 

uniform mat4 vr_CameraToWorld;

Матрица трансформации пространства камеры в мировое пространство.

 

uniform mat4 vr_WorldToCamera;

Матрица трансформации мирового пространства в пространство камеры.

 

uniform mat4 vr_CameraToObject;

Матрица трансформации пространства камеры в пространство объекта.

 

uniform mat4 vr_ObjectToCamera;

Матрица трансформации пространства объекта в пространство камеры.

 

uniform vr_FrameDataSettings vr_FrameData;

Встроенный экземпляр структуры vr_FrameDataSettings, которая содержит параметры, важные для кадра. Все доступные члены типа vr_FrameDataSettings перечислены в разделе Встроенные типы. Лучше хранить локальную копию этого экземпляра, вместо того, что бы постоянно ссылаться на оригинальную структуру vr_FrameData.

 

ЗАМЕЧАНИЕ: ПРи использовании матриц трансформации всегда располагайте трансформируемый вектор справа.

 

ЗАМЕЧАНИЕ: Для преобразований значений типа vec3 всегда используйте перемнную типа vec4, где w-координата равна 0.0 для векторов направления типа vec3 и 1.0 для координат точек типа vec3.

 

ЗАМЕЧАНИЕ: vrayGLSL позволяет инициализировать в глобальной области видимости переменные типа uniform, определенные пользователем. Это очень удобно для задания шейдеру входных значений по умолчанию.

Встроенные константы

const int VR_TRACE_REFRACT;

Указывает функции vr_trace() трассировать преломления. Должна быть присвоена члену rayType структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_TRACE_REFLECT;

Указывает функции vr_trace() трассировать отражения. Должна быть присвоена члену rayType структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_TRACE_TRANSPARENT;

Указывает функции vr_trace() производить дальнейшую трассировку так, как будто не было соударения с поверхностью. Должна быть присвоена члену rayType структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_TRACE_ENVIRONMENT;

Указывает функции vr_trace() сэмплировать окружение сцены (environment), используя текущее направление луча безотносительно того, что назодится на пути луча. Должна быть присвоена члену rayType структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_REFLECT_FLAG;

Флаг используется для пометки лучей, которые прошли по крайней мере одно отражение.

 

const int VR_REFRACT_FLAG;

Флаг используется для пометки лучей, которые прошли по крайней мере одно преломление.

 

const int VR_SHADOW_FLAG;

Флаг используется для пометки теневых лучей.

 

const int VR_INDIRECT_FLAG;

Флаг используется для пометки накопленных лучей глобального освещения (gathering global illumination rays).

 

const int VR_GLOSSY_FLAG;

Флаг используется для пометки лучей, которые прошли через размытое отражение или преломление.

 

const int VR_ENVIRONMENT_FLAG;

Флаг используется для пометки лучей, окрашенных с учётом окружающей среды.

 

const int VR_SPECULAR_DISPERSAL;

Флаг используется для уведомления функции vr_trace(), что мы трассируем одиночный луч отражения. Должна быть присвоена члену rayGroup структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_GLOSSY_DISPERSAL;

Флаг используется для уведомления функции vr_trace(), что мы трассируем множественные лучи глянца. Должна быть присвоена члену rayGroup структуры vr_TraceOptions. Определение структуры vr_TraceOptions см. в разделе Встроенные типы.

 

const int VR_DIFFUSE_DISPERSAL;

Эта константа зарезервирована для использования в будущем.

Встроенные типы

Структура vr_LightIterator содержит важные данные закраски для одиночного источника света в сцене. Для получения этой информации вызовите функцию vr_evalLight с экземпляром структуры vr_LightIterator в качестве последнего аргумента. Всем членам структуры будут присвоены требуемые данные для выбранного источника света.

 

struct vr_LightIterator {

vec3 direction; // единичный вектор, направленный в сторону источника света в пространстве координат камеры.

float dot_nl; // скалярное произведение нормали (возможно с учётом бампа) поверхности и направления на источник света.

vec3 contribution; // вклад прямого света (direct light contribution) от этого источника света, включая атмосферные эффекты и затухание от расстояния.

};

 

ЗАМЕЧАНИЕ: Если источник света имеет много точек сэмплирования (т.е. это неточечный источник света), то direction содержит усреднённый вектор, указывающий в направлении облака точек сэмплирования на источнике света.

 

В структуре vr_FrameDataSettings упакованы uniform-переменные, содержащие настройки сцены для текущего кадра. Эта информация легкодоступна через встроенную uniform-переменную vr_FrameData - экземпляр структуры vr_FrameDataSettings.

 

struct vr_FrameDataSettings {

int frameIndex; // Индекс текущего кадра.

float frameTime; // Время текущего кадра в тиках (ticks).

float frameStart; // Время начала кадра. Обычно frameStart <= frameTime <= frameEnd.

float frameEnd; // Время конца кадра. Обычно frameStart <= frameTime <= frameEnd.

bool isOrthographic; // Истина, если лучи камеры параллельны.

float focalLength; // Фокусное расстояние камеры.

float aperture; // Апертура камеры.

float aspectRatio; // Соотношение сторон пикселя.

vec2 imagePlaneOffset; // Смещение плоскости кмеры.

float dofRadius; // Радиус глубины резкости.

float dofFocus; // Расстояние от положения камеры до фокальной плоскости.

ivec2 imageResolution; // Ширина и высота полного выходного изображения в пикселях (область визуализации (render region) игнорируется).

ivec4 regionMargin; // Границы области визуализации в пикселях.

};

 

Структура vr_Color представляет цвет в формате RGBA. Она должна заменять тип vec4 в объявлениях uniform-переменных, где vec4 используется как цвет.

 

struct vr_Color {

float r; // Красный компонент цвета.

float g; // Зелёный компонент цвета.

float b; // Синий компонент цвета.

float a; // Компонент прозрачности (alpha).

};

 

ЗАМЕЧАНИЕ: Эта структура может быть использована только для объявлений uniform-переменных и их инициализации в глобальной области видимости. Она используется вместо типа vec4, когда объявляемый входной параметр шейдера является RGBA-цветом.

 

uniform vr_Color diffuse_color = vr_Color(0.9, 0.2, 0.8, 1.0);

 

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

 

Структура vr_DiffuseBRDFSettings содержит параметры диффузной BRDF. Она задаёт диффузную BRDF, которая присоединяется через встроенную функцию vr_brdf_diffuse. Подробности см. в разделе Встроенные функции.

 

struct vr_DiffuseBRDFSettings {

vec3 color; // Диффузный цвет для BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 normal; // Нормаль, для которой вычисляется BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

float roughness; // Диффузное отклонение (diffuse deviation) в диапазоне [0.0, 1.0]. Значение по умолчанию 0.0.

vec3 transparency; // Прозрачность BRDF. Значение по умолчанию vec3(0.0, 0.0, 0.0).

};

 

Структура vr_GlossyBRDFSettings содержит параметры класса глянцевых функций BRDF, а именно Phong, Blinn и Ward BRDF. Она задаёт BRDF, которая присоединяется через встроенные функции vr_brdf_phong, vr_brdf_blinn или vr_brdf_ward. Подробности см. в разделе Встроенные функции.

 

struct vr_GlossyBRDFSettings {

vec3 color; // Отражённый (зеркальное отражение) цвет для BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 normal; // Нормаль, для которой вычисляется BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

float highlightGlossiness; // Глянцевый блик BRDF в диапазоне [0.0, 1.0]. Значение по умолчанию 0.7.

float reflectionGlossiness; // Глянцевое отражение BRDF в диапазоне [0.0, 1.0]. Значение по умолчанию 0.7.

int subdivs; // Количество сэмплов для размытого отражения. Значение по умолчанию 8.

float anisotropy; // Анизотропия BRDF в диапазоне (-1.0, 1.0). Значение по умолчанию 0.0.

bool traceReflections; // Установлен, если BRDF будет трассировать отражения. Значение по умолчанию true.

vec3 transparency; // Прозрачность BRDF. Значение по умолчанию vec3(0.0, 0.0, 0.0).

float softenEdge; // Сила смягчения перехода от тёмных областей к светлым в зеркальных отражениях в диапазоне [-1.0, 1.0]. Значение по умолчанию 0.001.

float anisoRotation; // Поворот анизотропии BRDFв градусах. Значение по умолчанию 0.0.

};

 

Структура vr_MirrorBRDFSettings содержит параметры для зеркальной BRDF. Она задаёт зеркальную BRDF, которая присоединяется через встроенную функцию vr_brdf_mirror. Подробности см. в разделе Встроенные функции.

 

struct vr_MirrorBRDFSettings {

vec3 color; // Цвет фильтра BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 normal; // Нормаль, для которой вычисляется BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 transparency; // Прозрачность BRDF. Значение по умолчанию vec3(0.0, 0.0, 0.0).

};

 

Структура vr_GlassBRDFSettings содержит параметры BRDF стекла. Она задаёт BRDF стекла, которая присоединяется через встроенную функцию vr_brdf_glass. Подробности см. в разделе Встроенные функции.

 

struct vr_GlassBRDFSettings {

vec3 color; // Цвет фильтра BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 normal; // Нормаль, для которой вычисляется BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

float glossiness; // Глянец BRDF в диапазоне [0.0, 1.0]. Значение по умолчанию 0.7.

float ior; // Коэффициент преломления поверхности для BRDF. Значение по умолчанию 1.5.

int subdivs; // Количество сэмплов для размытых отражений,преломлений. Значение по умолчанию 8.

vec3 transparency; // Прозрачность BRDF. Значение по умолчанию vec3(0.0, 0.0, 0.0).

};

 

Структура vr_LightBRDFSettings содержит параметры световой (light) BRDF V-Ray. Она конфигурирует световую BRDF, которая присоединяется через встроенную функцию vr_brdf_light. Подробности см. в разделе Встроенные функции.

 

struct vr_LightBRDFSettings {

vec3 color; // Цвет света BRDF. Значение по умолчанию vec3(1.0, 1.0, 1.0).

vec3 transparency; // Прозрачность BRDF. Значение по умолчанию vec3(0.0, 0.0, 0.0).

bool doubleSided; // Делает BRDF двусторонней. Значение по умолчанию false.

bool emitOnBackSide; // Делает, что бы BRDF излучала свет с обратной стороны поверхности. Если выключено, то с обратно стороны поверхности материал визуализируется как чёрный. Значение по умолчанию true.

};

 

Структура vr_TraceOptions содержит все настройки, необходимые для трассировки лучей. Для выполнения успешной трассировки правильно сконфигурированный экземпляр этого типа должен быть передан в качестве параметра функции vr_trace. Подробнее см. описание встроенной функции vr_trace.

 

struct vr_TraceOptions {

int rayType; // Одна из встроенных констант VR_TRACE_REFLECT, VR_TRACE_REFRACT, VR_TRACE_TRANSPARENT или VR_TRACE_ENVIRONMENT. См. Встроенные константы. Значение по умолчанию VR_TRACE_REFLECT.

int rayGroup; // Одна из встроенных констант VR_SPECULAR_DISPERSAL или VR_GLOSSY_DISPERSAL. См. Встроенные константы. Значение по умолчанию VR_SPECULAR_DISPERSAL.

float ior; // Коэффициент преломления поверхности в текущей точке попадания. Используется только для трассировки лучей преломления. Значение по умолчанию 1.44.

vec3 ray; // Указанный пользователем луч для трассировки. Должен быть единичным вектором в пространстве камеры. Значение по умолчанию vec3(0.0, 0.0, 0.0).

vec3 normal; // Нормаль (возможно с учётом бампа) к поверхности, в осоответствии с которой будут вычисляться отражения/преломления. Должен быть единичным вектором в пространстве камеры. Значение по умолчанию vec3(0.0, 0.0, 0.0).

};

 

Структура vr_OcclusionOptions содержит настройки для встроенной функции vr_occlusion. Она может быть использована для тонкой настройки прцесса сэмплинга затенения. Подробности см. в разделе Встроенные функции.

 

struct vr_OcclusionOptions {

float radius; // Этот параметр определяет размер площади (в единицах сцены), где вычисляется затенение фонового освещения.Значение по умолчанию 10.0.

float distribution; // Этот параметр будет заставлять сэмплирующие лучи концентрироваться ближе к нормали к поверхности. Для равномерно распределённых сэмплов используется значение 0.0. Для сэмплов, максимально сконцентрированных около нормали к поверхности используется значение 1.0. Допустимый интервал значений [0.0, 1.0]. Значение по умолчанию 0.0.

float falloff; // Этот параметр управляет скоростью перехода между затенённой и незатенённой областями. Значение по умолчанию 0.0.

int subdivs; // Этот параметр содержит количество сэмплов, которое V-Ray берёт для вычисления эффекта затенения. Меньшие значения визуализируются быстрее, но дают более шумный результат. Значение по умолчанию 8.

};

 

ЗАМЕЧАНИЕ: При создании экземпляра типа vr_DiffuseBRDFSettings, vr_GlossyBRDFSettings, vr_MirrorBRDFSettings, vr_GlassBRDFSettings, vr_LightBRDFSettings, vr_TraceOptions или vr_OcclusionOptions все члены инициализируются указанными выше значениями.

 

Встроенные функции

void vr_evalLight(int lightIndex, vec3 position, vec3 normal, out vr_LightIterator light);

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

 

lightIndex - индекс источника света в сцене. Должен быть в диапазоне [0, vr_NumLights).

position - координаты точки попадания на поверхности в пространстве камеры.

normal - нормаль к поверхности в пространстве камеры. Ожидается, что это единичный вектор.

lightIterator - в эту структуру будет записан результат сэмплирования света. См. vr_LightIterator.

 

vec4 vr_trace(int traceOptions, vec3 normal [, float materialIOR = 1.44]);

Трассирует следующий луч, проходящий по пути света, в зависимости от traceOptions. Эта функция используется для трассировки различных лучей, начинающихся от текущей точки попадания на поверхности (current surface hit point), и вычисляет их цветовой результат. Эти перегрузки функции vr_trace не приветствуются. Используйте вместо них новую перегруженную функцию vr_trace(vr_TraceOptions).

 

traceOptions - одна из констант VR_TRACE_REFLECT, VR_TRACE_REFRACT, VR_TRACE_TRANSPARENT, VR_TRACE_ENVIRONMENT.

normal - единичный вектор нормали к поверхности (возможно с учётом бампа) в пространстве камеры.

materialIOR - коэффициент преломления поверхности для текущей точки попадания. Необязательный параметр.

возвращаемое значение - цвет, как результат трассировки указанного типа луча от текущей точки попадания на поверхности.

 

ЗАМЕЧАНИЕ: Когда достигается максимальная глубина трассировки, функция vr_trace возвращает черный цвет.

 

ЗАМЕЧАНИЕ: Если луч, отражённый нормалью, полученной с учётом бампа, располагается ниже поверхности соударения, то он заменяется другим лучом, вычисленным с использованием геометрической (не сглаженной) нормали. Это может приводить к возникновению артефактов (например в эффектах размытого отражения), поэтому точно оценивайте сэмплы или ограничивайте множитель бампа нормалей.

 

ЗАМЕЧАНИЕ: materialIOR берётся в расчёт, только если указано VM_TRACE_REFRACT. Если vr_trace вызвана с VR_TRACE_REFRACT и materialIOR не указан, то будет использован коэффициент преломления 1.44.

 

vec4 vr_trace(vr_TraceOptions traceOptions);

Трассирует следующий луч, проходящий по пути света, в зависимости от traceOptions. Эта функция используется для трассировки различных лучей, начинающихся от текущей точки соударения на поверхности (current surface hit point), и вычисляет их цветовой результат. Эта функция имеет два режима. Если член traceOptions.ray является ненулевым вектором, то трассируется этот вектор (луч). В противном случае V-Ray вычисляет для трассировки в зависимости от traceOptions.normal. В обоих случаях члены traceOptions.rayType и traceOptions.rayGroup должны быть заданы.

 

traceOptions - экземпляр структуры vr_TraceOptions, содержащий необходимые значения, в соответствии с вышеизложенным описанием. Подробности см. в разделе Встроенные типы.

возвращаемое значение - цвет, как результат трассировки указанного типа луча от текущей точки попадания на поверхности.

 

ЗАМЕЧАНИЕ: Когда достигается максимальная глубина трассировки, функция vr_trace возвращает черный цвет.

ЗАМЕЧАНИЕ: Если луч, отражённый нормалью, полученной с учётом бампа, располагается ниже поверхности соударения, то он заменяется другим лучом, вычисленным с использованием геометрической (не сглаженной) нормали. Это может приводить к возникновению артефактов (например в эффектах размытого отражения), поэтому точно оценивайте сэмплы или ограничивайте множитель бампа нормалей.

ЗАМЕЧАНИЕ: traceOptions.ior берётся в расчёт только в случае, если traceOptions.rayType равно VR_TRACE_REFRACT. Если при трассировке преломления коэффициент преломления не указан, V-Ray будет использовать значение по умолчанию.

 

vec3 vr_irradiance(vec3 normal, float importance);

Функция используется для получения глобального освещения в точке пересечения.

 

normal - нормаль к поверхности (возможно с учётом бампа): единичный вектор в пространстве камеры.

importance - используется для управления точностью вычисления глобального освещения. Аргумент должен быть в диапазоне [0,1].

возвращаемое значение - RGB-цвет, как результат вычисления GI. Нормализующие множители не требуются.

 

vec3 vr_randomSample(int sampleIndex, int totalSamples)

Функция возвращает вектор со случайными значениями компонентов в диапазоне [0,1), пригодный для DMC-сэмплирования.

 

sampleIndex - индекс текущего сэмпла. Аргумент должен быть в диапазоне [0,totalSamples).

totalSamples - общее количество сэмплов, которе будет браться из этой точки попадания.

возвращаемое значение- вектор типа vec3 со случайными значениями компонентов в диапазоне [0,1), пригодный для DMC-сэмплирования.

 

void vr_brdf_diffuse(vr_DiffuseBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер диффузной BRDF, которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки диффузной BRDF. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_phong(vr_GlossyBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер BRDF Фонга (Phong), которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки BRDF Фонга. Все члены, связанные с анизотропией игнорируются. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_blinn(vr_GlossyBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер BRDF Блинна (Blinn), которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки BRDF Блинна. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_ward(vr_GlossyBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер BRDF Уорда (Ward), которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки BRDF Уорда. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_glass(vr_GlassBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер BRDF стекла, которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки BRDF стекла. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_mirror(vr_MirrorBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер BRDF зеркала, которая будет автоматически использована для вычисления света (прямого и непрямого). Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки BRDF зеркала. Подробности см. в разделе Встроенные типы.

 

void vr_brdf_light(vr_LightBRDFSettings brdfSettings);

Функция используется для встраивания в шейдер световой BRDF, которая будет автоматически использована для вычисления света (прямого и непрямого).Эта новая BRDF будет образовывать новый уровень поверх других, ранее встроенных BRDF, и общий результат будет суммой всех составляющих. Не требует световых петель или вызовов vr_irradiance. (Ориг. текст: No light loops or vr_irradiance calls are required. -- прим.перев.) Запись в gl_FragColor необходима только для определения компоненты прозрачности (alpha) результата. RGB-компоненты gl_FragColor будут игнорироваться.

 

brdfSettings - аргумент содержит настройки световой (Light) BRDF. Подробности см. в разделе Встроенные типы.

 

vec3 vr_textureSize(sampler1D sampler);

Функция используется для получения размера в пикселях присоединённой текстуры.

 

sampler - сэмплер, к которому присоединена текстура.

возвращаемое значение - значение типа vec3, содержащее ширину присоединённой к сэмплеру текстуры в компоненте x, или 0.0, если нет присоединённой текстуры. Остальные компоненты вектора всегда будут 0.0.

 

vec3 vr_textureSize(sampler2D sampler);

Функция используется для получения размера в пикселях присоединённой текстуры.

 

sampler - сэмплер, к которому присоединена текстура.

возвращаемое значение - значение типа vec3, содержащее ширину и высоту присоединённой к сэмплеру текстуры в компонентах x и y, или 0.0, если нет присоединённой текстуры. Компонента z вектора всегда будет 0.0.

 

float vr_occlusion(vr_OcclusionOptions options);

Функция используется для вычисления силы фонового затенения (amount of ambient occlusion) в точке попадания на поверхности.

 

options - конфигурационные параметры для процесса сэмплирования. Подробности см. в разделе Встроенные типы.

возвращаемое значение - значение с плавающей точкой (float) в диапазоне [0,1]. Возвращённое значение 0.0 означает, что затенения фонового освещения нет, а 1.0 интерпретируется как полностью затенённая точка на поверхности.

 

vec4 textureCube(samplerCube sampler, vec3 sampleDir);

Функция используется для сэмплирования текстуры типа cubemap.

 

sampler - сэмплер, к которому присоединена cubemap-текстура. Текстура должна иметь конфигурацию горизонтального креста с осью Y, направленной вверх.

sampleDir - сэмплирующее направление. Ожидается нормализованный единичный вектор в пространстве камеры.

возвращаемое значение - цвет, соответствующий сэмплирующему направлению.

 

Неподдерживаемые возможности GLSL

Следующие возможности GLSL не поддерживаются реализацией V-Ray GLSL.

 

Встроенные varying-переменные:

  • Чтение значений из переменной типа float gl_FogFragCoord не поддерживается. Всегда возвращается 0.0.
  • vec4 gl_Color возвращает белый цвет для лицевой стороны примитивов и чёрный цвет в противном случае.
  • vec4 gl_SecondaryColorвозвращает белый цвет для лицевой стороны примитивов и чёрный цвет в противном случае.

 

Встроенные uniform-переменные:

  • Следующие матрицы трансформаций доступны во фрагментных шейдерах, но только со значениями по умолчанию:
    gl_ModelViewMatrix
    gl_ProjectionMatrix
    gl_ModelViewProjectionMatrix
    gl_NormalMatrix
    gl_ModelViewMatrixInverse
    gl_ProjectionMatrixInverse
    gl_ModelViewProjectionMatrixInverse
    gl_ModelViewMatrixTranspose
    gl_ProjectionMatrixTranspose
    gl_ModelViewProjectionMatrixTranspose
    gl_ModelViewMatrixInverseTranspose
    gl_ProjectionMatrixInverseTranspose
    gl_ModelViewProjectionMatrixInverseTranspose
    gl_TextureMatrix
    gl_TextureMatrixInverse
    gl_TextureMatrixTranspose
    gl_TextureMatrixInverseTranspose

    Вместо них во фрагментных шейдерах преобразование координатного пространства выполняется через vr_CameraToWorld, vr_WorldToCamera, vr_CameraToObject, vr_ObjectToCamera. Для преобразования пространства текстуры может быть использован следующий код:

    vec3 tangent = vr_TexTangent;
    vec3 binormal = vr_TexBinormal;
    vec3 normal = (gl_FrontFacing) ? vr_Normal : -vr_Normal;
    mat3 vr_TextureToCamera = mat3(tangent, binormal, normal);

  • Следующие uniform-переменные возвращают значения по умолчанию, или ноль, или чёрный цвет и поэтому не поддерживаются:
    gl_NormalScale
    gl_Point
    gl_FrontMaterial
    gl_BackMaterial
    gl_LightSource
    gl_LightModel
    gl_FrontLightModelProduct
    gl_BackLightModelProduct
    gl_FrontLightProduct
    gl_BackLightProduct
    gl_TextureEnvColor
    gl_EyePlaneS
    gl_EyePlaneT
    gl_EyePlaneR
    gl_EyePlaneQ
    gl_ObjectPlaneS
    gl_ObjectPlaneT
    gl_ObjectPlaneR
    gl_ObjectPlaneQ
    gl_Fog

 

Специальные output-переменные:

  • Запись в gl_FragDepth не поддерживается. Изменений не происходит.
  • Запись в gl_FragData не поддерживается. Или запись в gl_FragColor, или сбрасывание (отмена) фрагмента является обязательным и, таким образом, прекращает вывод gl_FragData. (Ориг. текст: Writing to gl_FragColor or discarding the fragment is mandatory and thus cancels out gl_FragData. -- прим. перев.) RGB-компоненты gl_FragColor игнорируются в случае, когда к шейдеру присоединена BRDF посредством встроенных функций vr_brdf. Подробности см. в разделе Встроенные функции.

 

Встроенные функции:

  • Не поддерживается функция сэмплирования текстур texture3D.
  • Не поддерживаются все функции теней (shadow). V-Ray сам заботится о тенях.
  • Все "Proj" и/или "Lod" версии функций сэмплирования текстур. Необязательный параметр bias игнорируется. V-Ray сам заботится о фильтрации текстур и уровне детальности в процессе сэмплирования.

 

Замечания

 


Хостинг от uCoz