Upload
yolanda-hensley
View
46
Download
0
Embed Size (px)
DESCRIPTION
Программирование графических процессоров. Безгодов Алексей Алексеевич НИИ НКТ, СПбГУ ИТМО. Принципы 3D -графики. Стадии графического конвейера. 3. Шейдеры: назначение. Шейдеры: назначение. Текстуры и внеэкранные поверхности. Типы: 1D, 2D, 3D - позиция в «массиве» - PowerPoint PPT Presentation
Citation preview
1
Программирование графических процессоров
Безгодов Алексей АлексеевичНИИ НКТ, СПбГУ ИТМО
2
Принципы 3D-графики
33
Стадии графического конвейера
INPUT-ASSEMBLER
STAGETriangles,
Lines, Points
VERTEXSHADERSTAGE
per-vertexprocessing
GEOMETRYSHADERSTAGE
produces newgeometry
RASTERIZERSTAGE
clipping, prepto pixelshaders
PIXELSHADERSTAGE
generates per-pixel data
OUTPUTMERGERSTAGE
blending,depth, stencil
4
Шейдеры: назначение
5
Шейдеры: назначение
6
Текстуры и внеэкранные поверхности
• Типы: – 1D, 2D, 3D - позиция в «массиве»– Cube - направление на одну из граней куба
• Форматы текстур: – Компоненты: Lum, RGB, RGBA и др.– Формат компонент: Byte, Int16, Float16, Float32
• Адресация: Wrap, Clamp, Border, Mirror
• Фильтрация: Nearest, Linear, Mipmap, Anisotropic
7
Языки программирования шейдеров
• Низкоуровневые (asm)
• Высокоуровневые:– HLSL- Direct3D 9 и 10– Cg - OpenGL, Direct3D– GLSL- OpenGL
8
Данные (HLSL, Cg)
• Скалярные: float, half, int, bool• Векторные: float2, float3, float4• Матричные: float2x2 … float4x4• Текстурные: sampler2D, sampler3D etc
• Способы хранения: uniform, static etc
• Семантика данных: COLOR, NORMAL, POSITION etc
9
Основные операции
• Математические:– + - * / – mad(), dot(), cross(), reflect()– sin(), cos(), pow()– saturate(), clamp(), step()– floor(), ceil()
• Текстурные (обращение к памяти):– tex2D, tex3D, texCUBE, tex2Dlod, tex2Dgrad, tex2Dproj …
10
Выражения
float4 a;float4 b(1,2,3,4);float4 c = 1; // = float4(1,1,1,1);
a = b; a.x = b.y; a.xyzw = b.wzxy; // можно менять местами // компоненты
for, if, while, do- идентичны языку С, но есть
исключения
11
Текстурирование
x
x, y
tex2D( sampler, float2(x, y) );
tex1D( sampler, float(x) ); tex3D( sampler, float3(x, y, z) );
x, y, z
12
Функции
• float4 DoSomething(in float3 a, out float2 b, inout float4 c)
{ b.xy = a.xz;
c.xyz = a.zzy;c.w = dot(c.xyz, a.xyz);return float4(1,2,3,4);
}
13
Шейдерные константы
uniform float4x4 world_matrix : register (c1);uniform float4 color_mul : register (c5);uniform sampler input_data : register (s1);
PS_OUT PSMain(in VS_OUT input) {PS_OUT output;output.color = tex2D(input_data, input.tex0.xy);output.color *= color_mul;return out;
}
14
Создание шейдеров (входные и выходные данные)
Vertex Shader• struct VS_IN {
float3 pos : POSITION; float2 tex : TEXCOORD0; float4 clr : COLOR0; float3 norm : NORMAL;};
• struct VS_OUT { float4 pos : POSITION; float2 tex : TEXCOORD0; float4 clr : COLOR0;};
POSITION – используется
растеризатором
Pixel Shader• struct PS_IN {
//float4 pos : POSITION; float2 tex : TEXCOORD0; float4 clr : COLOR0;};
• struct PS_OUT { float4 color : COLOR0;
float depth : DEPTH;};
15
Создание шейдеров (точки входа)
• VS: VS_OUT VSMain(VS_IN input) {
VS_OUT output; //… return output;}
• PS:PS_OUT PSMain(VS_OUT input) { PS_OUT output; //… return out;}
16
Выполнение шейдеров
INPUTASSEMBLER
POSITION
COLOR
NORMAL
TEXCOORD
New POSITION
New COLOR
New TEXCOORD
RASTERIZERGeometry Shader
VSMain
VSMain VSMain
ShaderConsts
17
Выполнение шейдеров
VS_OUT #1
VS_OUT #3
VS_OUT #2
PSMain
PS_IN
RASTERIZER
ShaderConsts
18
Схема использования шейдеровдля вычислительных задач
TEXTURE
TEXTURES
RENDERTARGET
PIXELSHADER
TEXTURES
SHADERCONSTANTS(UNIFORMS)
1919
Практические задания
• Обработка изображений– demo_imgproc.fx
• Простые приемы научной визуализации– demo_sci.fx
• Сложные приемы научной визуализации– demo_mri.fx
20
Обработка изображений(demo_imgproc.fx)
21
Простые приемы научной визуализации (demo_sci.fx)
float value = tex3D(data, float3(x,y,z)).r;
// …return tex2D(pal, float2(value, 0));
ddx(), ddy()
if((s0<h && s1>h) || (s1<h && s0>h) || (s2<h && s3>h) || (s3<h && s2>h)) { sample = 1;} else { sample = 0;}
22
Сложные приемы научной визуализации (demo_mri.fx)