Расширение V-Ray для GLSL |
Примеры |
Дополнительные квалификаторы типа
Неподдерживаемые возможности 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 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 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 сам заботится о фильтрации текстур и уровне детальности в процессе сэмплирования.
Замечания
- Официально поддерживаемая спецификация OpenGL Shading Language - 1.10.59
Перевод © Black Sphinx, 2008-2013. All rights reserved.
Хостинг от uCoz