Разработка шейдеров с HLSL Guennadi Riguer griguer@ati.com.

Презентация:



Advertisements
Похожие презентации
Программирование графических процессоров Безгодов Алексей Алексеевич НИИ НКТ, СПбГУ ИТМО.
Advertisements

Язык JavaScript Скриптовый язык для выполнения на html-страницах.
Часть 1: «Основы программирования». Содержание Основные понятия. Структура программы. Ввод-вывод Программирование циклов. Операторы цикла while, for и.
Название функции ОписаниеПример Abs() Модуль числа Abs(-4.5) Sign() Знак числа Sign(-8.5)=-1 Min() Минимум двух чисел Min(x1,x2) Max() Максимум двух чисел.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
Математические функции в РНР ABS - Возвращает модуль числа. Синтаксис: ABS ($number) Тип параметра $number может быть float или int, а тип возвращаемого.
Date: File:System_VBSc_8.1 SIMATIC HMI Siemens AG All rights reserved. SITRAIN Training for Automation and Drives Гибкость.
Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
Все процедуры и функции делятся на стандартные встроенные определенные пользователем. Встроенные и стандартные вызываются без предварительного описания.
- - команды действия ; - - команды ожидания ; - - управляющие структуры ; - - модификаторы.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Переменные задаются именами, которые определяют области памяти, в которых хранятся их значения. Значениями переменных могут быть данные различных типов.
Алгоритмические конструкции. Решить задачу при х=16, у=2.
Структура программы Типы переменных Стандартные арифметические функции Стандартные функции преобразования Операторы ввода/вывода Оператор условного перехода.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Знакомство с языком Паскаль Структура программы Ветвление на Паскале Циклические программы Пример линейной программы Пример программы с ветвлением Пример.
Краткое введение в язык программирования С Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Графический 3D-конвейер Определение состояния объектов (Situation modeling) Определение соответствующих текущему состоянию геометрических моделей (Geometry.
Оператор присваивания. Основные операции во Free Pascal Урок 3 по программированию.
Транксрипт:

Разработка шейдеров с HLSL Guennadi Riguer

ATI Technologies Inc. – Январь 2003 Обзор Материала Типы данных Операторы Конструкторы Управление исполнением шейдеров Функции Семантика деклараций

ATI Technologies Inc. – Январь 2003 High Level Shader Language (HLSL) HLSL в DirectX® 9 – язык шейдеров высокого уровня от Microsoft Преимущества языка HLSL –Все стандартные преимущества языков высокого уровня Более быстрая и простая разраборка Повторное использование кода и библиотек функций –Высокий уровень оптимизаций –Стандарт индустрии с гарантированной поддержкой всех видеокарт

ATI Technologies Inc. – Январь 2003 Типы Данных в HLSL Скалярные типы данных –bool – булевское значение –int – 32-битовое целочисленное значение со знаком –half – 16-битовое число с плавающей точкой –float – 32-битовое число с плавающей точкой –double – 64-битовое число с плавающей точкой Поддержка конкретных типов и их точность не гарантированы и зависит от аппаратной имплементации float fVar; const int iVar = 2;

ATI Technologies Inc. – Январь 2003 Типы Данных в HLSL Векторные данные –По умолчанию 4 компонента типа float –Предопределены все типы векторов (bool3, int2, float4, и т.д.) vector vVar; float4 vVar; int2 vVar1; Доступ к компонентам вектора vVar.х vVar[0]

ATI Technologies Inc. – Январь 2003 Типы Данных в HLSL Матричные данные –По умолчанию 4х4 элемента типа float –Предопределены все типы матриц (bool3х1, float4х4, и т.д.) matrix mVar; float4x4 vVar; int2x3 vVar1; Можно контролировать ориентaцию #pragma pack_matrix (row_major); Доступ к элементам и строкам матрицы mVar._m00, mVar._11, mVar[0][0] mVar._m00_m01_m02_m03, mVar[0]

ATI Technologies Inc. – Январь 2003 Типы Данных в HLSL Поддерживаются массивы Так же поддерживаются структуры float2 offs2D[5]; struct VERTEX { float3 Pos; float3 Norm; float2 TexCoord; }

ATI Technologies Inc. – Январь 2003 Приведение Типов Значения с плавающей точкой могут быть пререведены в вектора повторением Типы векторов и матриц могут быть приведены к меньшим типам данных –Данные копируется начиная с верхнего левого угла матрицы/вектора Структуры могут быть приведены к/из скалярных величин, векторов, матриц и других структур vVec3+0.5 vVec3+float3(0.5,0.5,0.5)

ATI Technologies Inc. – Январь 2003 Операторы Arithmetic-, +, *, /, % Prefix/postfix++, -- Boolean&&, ||, ?: Unary!, -, + Comparison, =, ==, != Assignment=, -=, +=, *=, /= Cast(type) Comma, Structure member. Array member[i][i]

ATI Technologies Inc. – Январь 2003 Операторы Умножение матрицы и вектора реализовано с помощью встроенной функции Оператор извлечения остатка деления (%) работает как с целыми числами, так и с числами с плавающей точкой Сравнение векторов производитсь по- компонентно Осторожней с целочисленной арифметикой –HLSL эмулирует целочисленные вычисления даже если аппаратные средства это не поддерживают –Округление может отличаться

ATI Technologies Inc. – Январь 2003 Конструкторы Конструкторы могут быть использованы для создания и инициализации объектов, как в C++ –Работает со всеми HLSL типами Возможна инициализация полей структуры –Приведение типа происходит автоматически если поля структуры и данные не совпадают float3 v3 = float3(0,0,0); float4 v4 = float4(0,0,0,0); float4 v4 = float4(v3,0);

ATI Technologies Inc. – Январь 2003 Управление исполнением шейдеров Ветвление Циклы Циклы поддерживаются всеми моделями шейдеров –По необходимости циклы раскручиваются компилятором if (expr) then statement [else statement] do statement while (expr); while (expr) statement; for (expr1;expr2;expr3) statement

ATI Technologies Inc. – Январь 2003 Функции Похоже на функции в C –HLSL автоматически проверяет типы –Поддерживаются прототипы функций –Аргументы передаются по значению Рекурсия не поддерживается Параметры функции могут быть семантически связаны с данными Большое кол-во предопределенных функций –Упрощается разработка –Оптимизированная реализация –Функции могут быть переопределены

ATI Technologies Inc. – Январь 2003 Функции Аргументы функций могут быть инициализированы по умолчанию Функции могут вернуть более одного значения float4 foo( in float v, out float a, inout float b = 0.5 ) { a = v * b; b = v / 2; return (a + b); }

ATI Technologies Inc. – Январь 2003 Встроенные Функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 dot, lerp, saturateXXXXX abs, clamp, isfinite, isnan, max, min, sign XXXX ceil, exp, exp2, floor, fmod, frac, frexp, isinf, ldexp, log, log2, log10, modf, pow, round, rsqrt, smoothstep, sqrt, step XXX Арифметические функции Тригонометрические функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 degrees, radiansXXXXX acos, asin, atan, atan2, cos, cosh, sin, sincos, sinh, tan, tanh XXX

ATI Technologies Inc. – Январь 2003 Встроенные Функции Векторные функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 reflectXXXXX all, any, cross, faceforwardXXXX distance, length, lit, normalize, refract XXX Матричные функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 mul, transposeXXXXX determinantXXX Прочие функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 D3DCOLORtoUBYTE4XX?

ATI Technologies Inc. – Январь 2003 Встроенные Функции Текстурные функции VS 1.1VS 2.0PS 1.1PS 1.4PS 2.0 tex1D, tex2D, tex3D, texCubeXXX tex1Dproj, tex2Dproj, tex3Dproj, texCUBEproj, tex1Dbias, tex2Dbias, tex3Dbias, texCUBEbias X clipXXX

ATI Technologies Inc. – Январь 2003 Семантика Деклараций Аргументы и возвращаемые значения функций могут быть семанически связаны с данными ввода/вывода шейдера –На пример POSITION, TEXCOORD1, и т.д. Константы могут быть привязаны к регистрам констант matrix worldViewProj : register(c0); Выборка текстур может быть привызана к конкретному текстурнику sampler noiseSampler : register(s0);

ATI Technologies Inc. – Январь 2003 Декларация Текстур // Декларация объекта текстуры texture tMarbleSpline; // Декларация текстурного блока // и параметров фильтрации sampler MarbleSplineSampler = sampler_state { Texture = (tMarbleSpline); MinFilter = Linear; MagFilter = Linear; MipFilter = Linear; AddressU = Clamp; AddressV = Clamp; MaxAnisotropy = 16; };

ATI Technologies Inc. – Январь 2003 Пример Вершинного Шейдера float4x4 matWorldViewProj; float4 vColor : register(c0); float4 SimpleVS(float4 inPos: POSITION) : POSITION { return mul(inPos, matWorldViewProj); } struct VS_OUTPUT { float4 vPos: POSITION; float4 vColor: COLOR; }; VS_OUTPUT ColorVertVS(float4 inPos: POSITION) { VS_OUTPUT o; o.vPos = SimpleVS(inPos); o.vColor = vColor; return o; }

ATI Technologies Inc. – Январь 2003 Пример Пиксельного Шейдера sampler TextureSampler; float4 vDiffuse; float4 vAmbient; float4 vLightPos; float4 LightPS(float3 Neye : TEXCOORD0, float3 Peye : TEXCOORD1, float2 inTexCoord : TEXCOORD2) : COLOR { float3 Leye = normalize(vLightPos – Peye); float NdotL = dot(Neye, Leye); return (NdotL * vDiffuse + vAmbient) * tex2D(TextureSampler, inTexCoord); }

ATI Technologies Inc. – Январь 2003 Вопросы