GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти DDR4 Тактовая частота 2.66Ghz 581 млн. транзисторов (quad core) G80 (NV50) R600 Intel QX6700 * ALU работают на 1350Mhz
GPU vs. CPU (3 года назад) 120 млн. транзисторов Тактовая частота 500Mhz 128MB 500MHz памяти 107 млн. транзисторов Тактовая частота 325Mhz 128MB 310MHz памяти Тактовая частота 1.6Ghz – 3.06Ghz 42 млн. Транзисторов (core) NV30 R300
Полигональное представление объектов Для каждой вершины заданы: Координаты вершины Нормаль Координаты текстуры И много чего еще... Объект задан набором вершин, которые объединены в плоские грани, чаще всего – треугольные.
Общая архитектура системы CPU Chipset GPU GPU RAM CPU RAM 6.4 GB/s 8 GB/s6.4 GB/s 35 GB/s для GeForce 6600 ~80 GB/s для GeForce 8800 По материалам книги GPU Gems 2
Классический графический конвейер float4x4 modelview,projection; float4 lights[8]; float4 diffuse,specular,ambient; float4 position; float3 normal; float2 tex0,tex1,… T&L Rasterization Pixel Ops Texture2D tex0; Texture2D tex1; + Режим смешения текстур Режимы растровых операций x,y,z,w,…x,y,z,u0,v0, u1,v1,… x,y,z,RGBA Сборка примитивов Буфер кадра
Программируемый графический конвейер float4x4 m0,m1,…mN; float4 v0,v1,…,vM; Texture2D tex1, tex2 + программа обработки вершин float4 position (attr0) float4 attr1; float4 attr2; float3 attr3; T&L Rasterization Pixel Ops Texture2D tex0; Texture2D tex1; + программа обработки фрагментов Режимы растровых операций x,y,z,w,…x,y,z,w, c0,c1, c2,c3,… x,y,z,RGBA Сборка примитивов
Программируемый графический конвейер (DX10) float4 position (attr0) float4 attr1; float4 attr2; float3 attr3; T&L Rasterization Pixel Ops Texture2D tex0,tex1; + программа обработки фрагментов Режимы растровых операций x,y,z,w,… x,y,z,w, c0,c1, c2,c3,… x,y,z,RGBA float4x4 m0,m1,…mN; float4 v0,v1,…,vM; Texture2D tex1, tex2 + программа обработки вершин Геометрический шейдер x,y,z,w, c0,c1, c2,c3,… Видеопамять Запись потока Сборка примитивов
Вершинная программа (шейдер) T&L dp4 r0.x, v0, m0[0] dp4 r0.y, v0, m0[1] dp4 r0.z, v0, m0[2] dp4 r0.w, v0, m0[3] mov oD0, c[4] ; Output color mov oPos, r0 ; Output vertex Вершинная программа - программа, на вход которой поступают однородные координаты x,y,z и w вершины и некоторый набор дополнительных атрибутов attr 1,attr 2,.., attr K. Результатом работы вершинной программы являются однородные координаты x,y,z,w и некоторый набор значений c 0,c 1,…,c N.
Пиксельная программа (шейдер) Пиксельная программа (пиксельный шейдер, fragment program) - программа, на вход которой поступают координаты x,y,z и некоторый набор интерполированных по примитиву значений c 0,c 1,…,c N для обрабатываемого пиксела. Результатом работы пиксельной программы является цвет в формате RGBA и, возможно, измененная координата z. c 0, c 1, c 2,… Rasterization 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, c 0, c 1, c 2,…
Язык описания шейдеров Язык описания шейдеров определяет допустимый набор передаваемых параметров (сколько атрибутов может быть у вершины, сколько величин может интерполироваться вдоль примитива) и набор доступных операций для некоторого абстрактного графического процессора GL_ARB_vertex_program & GL_ARB_fragment_program GL_NV_texture_shader Direct3D Pixel & Vertex shaders 1.0 (DX8); 2.0, 3.0 (DX9); 4.0 (DX10) Nvidia Cg Microsoft HLSL OpenGL Shading Language (GLSL)
Шейдерные модели
Архитектура GeForce 8800 По материалам сайта iXBT
Возможности вершинных программ 3.0 Instancing Один поток вершин может порождать несколько объектов 32 временных регистра float4 Инструкции динамического ветвления Условные переходы и циклы Возможность обращения к текстурам Фактически, доступ к массивам float4 512 статических инструкций динамических инструкций
Возможности фрагментных программ 3.0 Instancing Один поток вершин может порождать несколько объектов Несколько render target Результаты могут быть записаны в 4 float4 Инструкции динамического ветвления Условные переходы и циклы Обращение к атрибутам вершины по индексу Удобно в циклах
Преобразование нормалей Уравнение плоскости Преобразуем координаты при помощи матрицы M
Bump-mapping На поверхности задается система координат Компоненты текстуры RGB задают нормаль в связанной с поверхностью системе координат Для расчета освещения направления на источник освещения и направление на наблюдателя преобразуются в связанную с поверхностью систему координат n t b Для расчета отражения вектор нормали преобразуется в систему координат наблюдателя. Затем рассчитывается отражения (sphere map или cube map)
Bump-mapping На поверхности задается система координат n t b
Литература