Программирование графических процессоров

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

Upload: yolanda-hensley

Post on 30-Dec-2015

63 views

Category:

Documents


0 download

DESCRIPTION

Программирование графических процессоров. Безгодов Алексей Алексеевич НИИ НКТ, СПбГУ ИТМО. Принципы 3D -графики. Стадии графического конвейера. 3. Шейдеры: назначение. Шейдеры: назначение. Текстуры и внеэкранные поверхности. Типы: 1D, 2D, 3D - позиция в «массиве» - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Программирование графических процессоров

1

Программирование графических процессоров

Безгодов Алексей АлексеевичНИИ НКТ, СПбГУ ИТМО

Page 2: Программирование графических процессоров

2

Принципы 3D-графики

Page 3: Программирование графических процессоров

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

Page 4: Программирование графических процессоров

4

Шейдеры: назначение

Page 5: Программирование графических процессоров

5

Шейдеры: назначение

Page 6: Программирование графических процессоров

6

Текстуры и внеэкранные поверхности

• Типы: – 1D, 2D, 3D - позиция в «массиве»– Cube - направление на одну из граней куба

• Форматы текстур: – Компоненты: Lum, RGB, RGBA и др.– Формат компонент: Byte, Int16, Float16, Float32

• Адресация: Wrap, Clamp, Border, Mirror

• Фильтрация: Nearest, Linear, Mipmap, Anisotropic

Page 7: Программирование графических процессоров

7

Языки программирования шейдеров

• Низкоуровневые (asm)

• Высокоуровневые:– HLSL- Direct3D 9 и 10– Cg - OpenGL, Direct3D– GLSL- OpenGL

Page 8: Программирование графических процессоров

8

Данные (HLSL, Cg)

• Скалярные: float, half, int, bool• Векторные: float2, float3, float4• Матричные: float2x2 … float4x4• Текстурные: sampler2D, sampler3D etc

• Способы хранения: uniform, static etc

• Семантика данных: COLOR, NORMAL, POSITION etc

Page 9: Программирование графических процессоров

9

Основные операции

• Математические:– + - * / – mad(), dot(), cross(), reflect()– sin(), cos(), pow()– saturate(), clamp(), step()– floor(), ceil()

• Текстурные (обращение к памяти):– tex2D, tex3D, texCUBE, tex2Dlod, tex2Dgrad, tex2Dproj …

Page 10: Программирование графических процессоров

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- идентичны языку С, но есть

исключения

Page 11: Программирование графических процессоров

11

Текстурирование

x

x, y

tex2D( sampler, float2(x, y) );

tex1D( sampler, float(x) ); tex3D( sampler, float3(x, y, z) );

x, y, z

Page 12: Программирование графических процессоров

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);

}

Page 13: Программирование графических процессоров

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;

}

Page 14: Программирование графических процессоров

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;};

Page 15: Программирование графических процессоров

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;}

Page 16: Программирование графических процессоров

16

Выполнение шейдеров

INPUTASSEMBLER

POSITION

COLOR

NORMAL

TEXCOORD

New POSITION

New COLOR

New TEXCOORD

RASTERIZERGeometry Shader

VSMain

VSMain VSMain

ShaderConsts

Page 17: Программирование графических процессоров

17

Выполнение шейдеров

VS_OUT #1

VS_OUT #3

VS_OUT #2

PSMain

PS_IN

RASTERIZER

ShaderConsts

Page 18: Программирование графических процессоров

18

Схема использования шейдеровдля вычислительных задач

TEXTURE

TEXTURES

RENDERTARGET

PIXELSHADER

TEXTURES

SHADERCONSTANTS(UNIFORMS)

Page 19: Программирование графических процессоров

1919

Практические задания

• Обработка изображений– demo_imgproc.fx

• Простые приемы научной визуализации– demo_sci.fx

• Сложные приемы научной визуализации– demo_mri.fx

Page 20: Программирование графических процессоров

20

Обработка изображений(demo_imgproc.fx)

Page 21: Программирование графических процессоров

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;}

Page 22: Программирование графических процессоров

22

Сложные приемы научной визуализации (demo_mri.fx)