2 - Public Digital Library

advertisement
GPU vs. CPU
NV47
R580
 302 млн. транзисторов
 380 млн. транзисторов
 Тактовая частота 550Mhz
 Тактовая частота 650Mhz
 1GB 850x2 MHz памяти
 1GB 775x2 MHz памяти
 Тактовая частота 3.46Ghz
 367 млн. транзисторов (dual core)
Intel Pentium XE 955
GPU vs. CPU (3 года назад)
NV30
R300
 120 млн. транзисторов
 107 млн. транзисторов
 Тактовая частота 500Mhz
 Тактовая частота 325Mhz
 128MB 500MHz памяти
 128MB 310MHz памяти
 Тактовая частота 1.6Ghz – 3.06Ghz
 42 млн. Транзисторов (core)
Полигональное представление объектов
Объект задан набором вершин, которые объединены в
плоские грани, чаще всего – треугольные.
Для каждой вершины заданы:
 Координаты вершины
 Нормаль
 Координаты текстуры
 И много чего еще ...
Общая архитектура системы (GeForce 6800 Ultra)
Обращение к атрибутам вершины по индексу
CPU
 Удобно в циклах
6.4 GB/s
CPU RAM
6.4 GB/s
Chipset
8 GB/s
GPU
35 GB/s
GPU RAM
По материалам книги GPU Gems 2
Классический графический конвейер
float4x4 modelview,projection;
float4 lights[8];
float4 diffuse,specular,ambient;
float4 position;
float3 normal;
float2 tex;
x,y,z,w,…
T&L
x,y,z,u0,v0,
u1,v1,…
Rasterization
x,y,z,RGBA
Pixel Ops
GLenum
GLenum
GLenum
GLenum
GLenum env_mode0;
GLenum env_mode1;
Texture2D tex0;
Texture2D tex1;
blend_mode;
depth_func;
alpha_func’
stencil_func,stencil_op;
Программируемый графический конвейер
…
float4
float4
float4
float3
…
float4x4 m0,m1,m2,…mN;
float4 v0,v1,…,vM;
position (attr0)
attr1;
attr2;
attr3;
x,y,z,w,…
T&L
x,y,z,w,
c0,c1,
c2,c3,…
Rasterization
x,y,z,RGBA
Pixel Ops
GLenum
GLenum
GLenum
GLenum
…
Texture2D tex0;
Texture2D tex1;
…
blend_mode;
depth_func;
alpha_func’
stencil_func,stencil_op;
Вершинная программа (шейдер)
Вершинная программа - программа, на вход которой поступают
однородные координаты x,y,z и w вершины и некоторый набор
дополнительных атрибутов attr1,attr2,.., attrK. Результатом работы
вершинной программы являются однородные координаты x’,y’,z’,w’ и
некоторый набор значений c0,c1,…,cN.
dp4
dp4
dp4
dp4
mov
mov
x, y , z ,
attr1 , attr2 ,..., attrK
T&L
r0.x, v0,
r0.y, v0,
r0.z, v0,
r0.w, v0,
oD0, c[4]
oPos, r0
m0[0]
m0[1]
m0[2]
m0[3]
; Output color
; Output vertex
x' , y ' , z ' , w' , c0 , c1 ,..., cN ,
 w'  x'  w' ,
 w'  y '  w' ,
 w'  z '  w'.
Пиксельная программа (шейдер)
Пиксельная программа (пиксельный шейдер, fragment program) программа, на вход которой поступают координаты x’,y’,z’ и
некоторый набор интерполированных по примитиву значений
c0,c1,…,cN для обрабатываемого пиксела. Результатом работы
пиксельной программы является цвет в формате RGBA и, возможно,
измененная координата z.
c0, c1, c2,…
c0, c1, c2,…
c0, c1, c2,…
x, y , z ,
c0 , c1 ,..., c N
ps.1.0 // DX8 Version.
tex t0 // n-map.
texm3x3pad t1, t0_bx2
texm3x3pad t2, t0_bx2 v0_bx2
texm3x3tex t3, t0_bx2 dp3_sat
r0, t3_bx2,
Rasterization
RGBA
Язык описания шейдеров
Язык описания шейдеров определяет допустимый набор
передаваемых параметров (сколько атрибутов может быть у
вершины, сколько величин может интерполироваться вдоль
примитива) и набор доступных операций для некоторого
абстрактного графического процессора
 GL_ARB_vertex_program
 GL_ARB_fragment_program
 GL_NV_texture_shader
 Direct3D Pixel Shaders 1.0, 1.1 (DirectX 8), 2.0 (DirectX 9)
 Direct3D Vertex Shaders
 Nvidia Cg
Архитектура GeForce 6800 Ultra
Система
6 вершинных процессоров
Блок отсечения и подготовки примитивов
Rasterization & Z-Cull
16 фрагментных процессоров
16 блоков пиксельных операций
4 memory partitions
Кэш текстур
По материалам книги GPU Gems 2
Возможности вершинных программ 3.0
 Instancing
 Один поток вершин может порождать несколько
объектов
 32 временных регистра float4
 Инструкции динамического ветвления
 Условные переходы и циклы
 Возможность обращения к текстурам
 Фактически, доступ к массивам float4
 512 статических инструкций
 65536 динамических инструкций
Возможности фрагментных программ 3.0
 Instancing
 Один поток вершин может порождать несколько
объектов
 Несколько render target
 Результаты могут быть записаны в 4 float4
 Инструкции динамического ветвления
 Условные переходы и циклы
 Обращение к атрибутам вершины по индексу
 Удобно в циклах
Модель begin/end
void glMatrixMode(…);
void glLoadIdentity();
void glMultMatrixd(…);
void
void
void
void
void
glBegin(GLenum type);
glVertex(…);
glNormal(…);
glColor(…);
glEnd();
T&L
Rasterization
Pixel Ops
void glDepthFunc(…);
void glBlendFunc(…);
void glStencilOp(…);
void glTexture2d(…);
void glTexEnv(…);
void glPolygonMode(…);
Формирование граней из вершин
 GL_TRIANGLES:
3
2
 GL_QUADS:
4
3
1
0
5
7
5
1
 GL_POLYGON:
1
2
0
3
0
4
7
6
5
2
4
6
Уменьшение количества вершин
 GL_TRIANGLE_FAN: 3n vs. 1+n, n>1
3
2
 GL_TRIANGLE_STRIP: 3n vs. 2+n
4
0
 GL_QUAD_STRIP: 4n vs. 2+2n
1
5
7
5
1
0
3
0
2
4
3
5
6
7
1
2
4
6
Однородные координаты
P  {x, y, z, w; w  0}
P3  {x / w, y / w, z / w}
 Общее аффинное преобразование сводится
к умножению на матрицу
1
0
T ( x, y , z )  
0

0
x
1 0 y 
0 1 z

0 0 1
0 0
 Проецирование также сводится к умножению на
матрицу
Преобразование координат
 x0 
y 
V0   0 
 z0 
 
 w0 
Ve  MV0
 xe 
y 
Ve   e 
 ze 
 
 we 
Vc  PVe
 xc 
y 
Vc   c 
 zc 
 
 wc 
Viewport
xd  [1,1]
yd  [1,1]
z d  [1,1]
Отсечение:
Vi={Ps,RGBA,…}
xd  xc / wc
yd  yc / wc
z d  zc / wc
 wc  xc  wc
 wc  yc  wc
 wc  zc  wc
Уравнение освещенности по Фонгу
I  am al  d m dl (n  l )  sm sl (e  r )
hs
 Фоновое освещение не имеет источника и зависит только от сцены
 При диффузном освещении свет от источника равномерно
рассеивается во всех направлениях.
 При зеркальном освещении свет от источника отражается от
повехности.в одном направлении. Зеркальная освещенность
дополнительно зависит от положения наблюдателя..
l
P’
n
r
e
(a, b), (a, b)  0
( a  b)  
( a , b)  0
 0,
r  reflect (l , n)
Модели Блинна и Шлика
 Вычисление отраженного вектора – трудоемкая операция (Блинн)
I  am al  d m dl (n  l )  sm sl (n  h)
l e
h
l e
hs
l
P’
n
r
e
 Возведение в степень также работает не очень быстро... (Шлик)
D
( n  h) ~
, D  ( n  h)
hs  Dhs  D
hs
Уравнение освещенности OpenGL
n 1
c  em  am as   atti  spoti (am ai  d m d i (n  l )  sm si (n  h) hm )
i 0
1
atti 
,
2
k c ,i  k l , i r  k q ,i r
P’
1, i   ,

spoti  0, (vi ,l )  cos( i ),
(vi ,l ), (vi ,l )  cos( i ).
-l v
i
i
spoti – коэффициент направленности
atti – коэффициент затухания
as– фоновое освещение
ai ,si ,di – свойства i-го источника освещения
еm ,am , sm , dm , hm – свойства материала
Интерполяция цвета
• Вычислить цвет (RGB) в
каждой вершине.
• Вычислить цвет в точках P1
и P2:
s = ||P1 - B|| / ||A - B||
C(P1) = s(C(A)) - (1-s)(C(B))
• Вычислить цвет в т. Р:
s = ||P - P2|| / ||P1 - P2||
C(P) = s(C(P1))-(1-s)(C(P2))
Недостатки закраски по Гуро
Интерполяция нормали
• Вычислить нормали (RGB) в
каждой вершине.
• Вычислить нормаль в точках
P1 и P2:
s = ||P1 - B|| / ||A - B||
N(P1) = s(N(A)) + (1-s)(N(B))
• Вычислить нормаль в т. Р:
s = ||P - P2|| / ||P1 - P2||
N(P) = s(т(P1))-(1-s)(N(P2))
• Вычислить цвет в точке Р.
Bump-mapping
 На поверхности задается система координат
b
b  [n, t ]
n
t
 R '   n' x
G '  n'
   y
 B'  n' z
t 'x
t'y
t 'z
b' x   R 
b' y  G 
b' z   B 
 n x '
 nx 
n '  ( M 1 )T n 
3 x3
 y
 y
 nz '
 nz 
Bump-mapping
 На поверхности задается система координат
b
b  [n, t ]
n
t
 Компоненты текстуры RGB задают нормаль в связанной с
поверхностью системе координат
 Для расчета освещения направления на источник освещения и
направление на наблюдателя преобразуются в связанную с
поверхностью систему координат
 Для расчета отражения вектор нормали преобразуется в систему
координат наблюдателя. Затем рассчитывается отражения (sphere
map или cube map)
Литература
Боресков А.В. Расширения OpenGL. СПб.: БХВ-Петербург, 2005
Дж. Рост OpenGL. Трехмерная графика и язык
программирования шейдеров - СПб.: Питер, 2005
Download