Алгоритмы машинной графики...

83
А.В. Цыганов 2008 Алгоритмы машинной графики IV

Transcript of Алгоритмы машинной графики...

Page 1: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

А.В. Цыганов 2008

Алгоритмы машинной графики IV

Page 2: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Real Flow + Maya

Page 3: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

RealFlow+ 3ds Max - уроки на www.render.ru

(другие файлы в папке показать отдельно)

Page 4: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Программное обеспечение для рендеринга — рендеры (визуализаторы) *3Delight *AIR *ART *AQSIS *Angel *Brazil R/S *BusyRay *finalRender *Fryrender *Holomatix Renditio (интерактивный рейтрейсер) *Indigo Renderer *mental ray *Kerkythea *LuxRender *Maxwell Render *Meridian *POV-Ray *Pixie *RenderDotC *RenderMan (PhotoRealistic RenderMan, Pixar’s RenderMan или PRMan) *Sunflow *Turtle *V-Ray *YafRay *Octane Render *Arion Renderer Рендеры работающие в реальном (или почти в реальном) времени. *VrayRT *FinalRender *iray *Shaderlight *Showcase *Rendition *Brazil IR Пакеты трёхмерного моделирования, имеющие собственные рендеры *Autodesk 3ds Max (Scanline) *Autodesk Maya (Software Hardware, Vector) *Blender *NewTek LightWave 3D *Maxon Cinema 4D (Advanced Render) *SketchUp *Daz3D Bryce *Luxology Modo *e-on Software Vue *SideFX Houdini *Terragen, Terragen 2 + специализированные программы и модули RealFlow …… т.е. все изучить невозможно!!!!!!!!!

Page 5: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

3d Studio Max располагает обширными

средствами по созданию разнообразных по

форме и сложности трёхмерных

компьютерных моделей реальных или

фантастических объектов окружающего

мира:

полигональное моделирование в которое

входят Editable mesh (поверхность) и

Editable poly (полигон) ;

моделирование на основе неоднородных

рациональных B-сплайнов (NURBS);

моделирование на основе порций

поверхностей Безье ;

моделирование с использованием

встроенных библиотек стандартных

параметрических объектов (примитивов)

и их модификаторов.

Page 6: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Список стандартных встроенных объектов *Прямоугольный параллелепипед (Box) *Сфера (Sphere) *Цилиндр (Cylinder) *Тор (Torus) *Чайник (Teapot) *Конус (Cone) *Труба (Tube) *Пирамида (Pyramid) *Плоскость (Plane) *Геосфера (GeoSphere) Список дополнительных встроенных объектов *Многогранник (Hedra) *Прямоугольный параллелепипед с фаской (ChamferBox) *Цистерна (OilTank) *Веретено (Spindle) *Многогранная призма (Gengon) *Призма (Prism) *Тороидальный узел (Torus knot) *Цилиндр с фаской (ChamferCyl) *Капсула (Capsule) *L-образное тело выдавливания (L-Ext) *C-образное тело выдавливания (C-Ext) Динамика - Spray (Брызги), Snow (Снег), Blizzard (Метель), PArray (Массив частиц), PCloud (Облако частиц) , Super Sprays (Супербрызги) и Particle Flow — это изощрённая нелинейная событийно-управляемая система частиц, разработанная Олегом Байбородиным, и механизм расчёта физики reactor, изначально разработанный Havok.

Стефани Рис Анимация персонажей в 3D Studio MAX. = Анимация персонажей в 3D Studio MAX.. — М.: BOOKS, 2009. — С. 450. Келли Л. Мэрдок Autodesk 3ds Max 2009. 3D Studio max. Библия пользователя = Autodesk 3ds Max 2009 Bible. 3D Studio max. — М.: «Диалектика», 2009. — С. 1312.

Page 7: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Типовая схема графической обработки

Page 8: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Геометрическое моделирование

Page 9: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Трехмерная анимация

Page 10: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

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

Page 11: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Синтез изображений (экранизация)

Page 12: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Хранение и вывод изображения

Page 13: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Геометрическое моделирование

Page 14: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Ше́йдер (Shader) — это программа на “машинном” языке видеокарты, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки. Чтобы понять, что такое шейдер, разберемся для начала, как видео карта рисует примитивы (треугольники, полигоны и др.) На вход поступают данные о каждой вершине примитива. Например, положение вершины в пространстве, нормаль и текстурные координаты. Эти данные называются вершинными атрибутами (vertex attributes). GPU на их основе вычисляет выходные значения: положение вершины в экранных координатах и цвет вершины, рассчитанный в зависимости от освещения и т.д. и т.п.

Page 15: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

В настоящее время шейдеры делятся на типа:

Вершинные

Геометрические

Пиксельные (фрагментные)

+ версии программ!!!

Вершинные шейдеры (Vertex Shader)

оперируют данными, сопоставленными с

вершинами многогранников. К таким данным, в

частности, относятся координаты вершины в

пространстве, текстурные координаты, тангенс-

вектор, вектор бинормали, вектор нормали.

Вершинный шейдер может быть использован

для видового и перспективного

преобразования вершин, генерации

текстурных координат, расчета освещения

и т. д.

Page 16: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Геометрические шейдеры (Geometry Shader) Геометрический шейдер, в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Это может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (adjacency) может быть обработано до шести вершин для треугольного примитива. Кроме того геометрический шейдер способен генерировать примитивы «на лету», не задействуя при этом центральный процессор. Впервые начал использоваться на видеокартах Nvidia серии 8.

Page 17: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Пиксельные (фрагментные) шейдеры (Pixel Shader) Фрагментный шейдер работает с фрагментами изображения. Под фрагментом изображения в данном случае может понимается пиксель, которому поставлен в соответствие некоторый набор атрибутов, таких как цвет, глубина, текстурные координаты. Фрагментный шейдер используется на последней стадии графического конвейера для формирования фрагмента изображения.

Page 18: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Шейдерные языки 1. RenderMan является фактическим стандартом для профессионального

рендеринга, используется во всех работах студии Pixar;

2. NVIDIA Gelato представляет собой оригинальную гибридную систему рендеринга изображений и анимации трехмерных сцен и объектов( “заточен под” Quadro FX);

3. GLSL (The OpenGL Shading Language) язык OpenGL, основан на языке ANSI C.

4. Cg расшифровывается как C for Graphics, использует схожие типы (int, float, а также специальный 16-битный тип с плавающей запятой — half). Поддерживаются функции и структуры. Язык обладает своеобразными оптимизациями в виде упакованных массивов (packed arrays).

5. Низкоуровневый шейдерный язык DirectX (DirectX ASM)- по синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию.

6. Высокоуровневый шейдерный язык DirectX (HLSL — High Level Shader Language) - по синтаксису сходен с С, позволяет использовать структуры, процедуры и функции.

Page 19: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Microsoft HLSL (High Level Shading Language)

#define C_EYE_POSITION 27 #define C_DISPLACEMENTS 30 // light direction float3 L = normalize(float3(-0.2f, -0.8f, 0.4f)); // light intensity float4 I_a = float4(0.3f, 0.3f, 0.3f, 1.0f); float4 I_d = float4(0.6f, 0.6f, 0.6f, 1.0f); float4 I_s = float4(0.8f, 0.8f, 0.8f, 1.0f); // material specular float4 k_s = float4(1.0f, 1.0f, 1.0f, 1.0f); // transformations float4x4 World : WORLD; float4x4 View : VIEW; float4x4 Projection : PROJECTION; // eye position float3 Eye; // textures texture FinTex; texture ShellTex; static const float4 vOne = float4(1, 1, 1, 1); VertexShader ShellVS = asm { vs.1.1 dcl_position v0 dcl_normal v3 dcl_color0 v4 dcl_texcoord v6

1. Мех. Пример файла эффектов с

шейдерами на ассемблере

#include "light_scattering_constants.h" // transformations float4x4 mWorldViewProj: WORLDVIEWPROJECTION; float4 vCameraPos: worldcamerapos; float4 sun_color : suncolor = {0.578f,0.578f,0.578f,0.0f}; float4 xAxis = {1.0f, 0.0f, 0.0f, 0.0f}; float4 vHalf = {0.5f, 0.5f, 0.5f, 0.0f}; float3 waterColor0 = {0.15f, 0.4f, 0.5f}; float3 waterColor1 = {0.1f, 0.15f, 0.3f}; texture tex0 : TEXTURE; // blend mask struct VS_INPUT { float2 Pos : POSITION; float ZPos0 : POSITION1; float2 Norm0 : NORMAL0; float ZPos1 : POSITION2; float2 Norm1 : NORMAL1; }; struct VS_OUTPUT { float4 Pos : POSITION; float3 Col : COLOR0; float3 T0 : TEXCOORD0; float3 T1 : TEXCOORD1; }; VS_OUTPUT VS(VS_INPUT v) { VS_OUTPUT Out = (VS_OUTPUT)0;

2. Вода. Пример файла эффектов на языке

MS HLSL

Page 20: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Шейдеры в OpenGL.

Page 21: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

На базовом уровне, OpenGL — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение (в данный момент OpenGL 4.0). Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения.

Page 22: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

С точки зрения программиста OpenGL -

это программный интерфейс (API) для

графических устройств, включающий в

себя более 250 различных команд, с

помощью которых программист может

определять различные объекты и

производить рендеринг.

Говоря более простым языком, вы

определяете объекты, задаёте их

местоположение в трёхмерном

пространстве, определяете другие

параметры (поворот, масштаб, ...),

задаёте свойства объектов (цвет,

текстура, материал, ...), положение

наблюдателя, а библиотека OpenGL

позаботится о том чтобы отобразить всё

это на экране в экранных координатах.

Page 23: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

OpenGL является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена описана в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. Императивный подход требует от программиста глубокого знания законов трёхмерной графики и математических моделей, с другой стороны — даёт огромную свободу.

Page 24: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Сторонние средства

• Результатом отсутствия встроенной поддержки OpenGL API стало появление большого числа сторонних средств-оболочек (wrappers), которые позволяют писать и обрабатывать шейдерные “программы”.

• Например библиотека CsGL (http://csgl.sourceforge.net) и инструментарий Tao Framework (http://www.taoframework.com) - на данный момент это один из наиболее оптимальный путей для использования OpenGL под C#

(конечно есть и другие – так что это дело привычки и удобства)

• Оба проекта являются бесплатными и распространяются с открытым исходным кодом

Page 25: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Существует много других различных API (application programmer’s interface) и

открытых и коммерческих:

OpenVG, X11, Qt, GTK, Motiff, Tk, GDI, GDI+, Direct3D (часть DirectX)

DirectDraw (часть DirectX), Zune, SDL, PHIGS, VRML, JAVA3D,Glide API,

NVIDIA® PhysX, ACIS, Computentional Geometry Algorithm Library (CGAL),

Visualization Toolkit, OpenMesh и т.д.

+ собственные библиотеки для CAD’ов и CAE’ов

AutoСad, ArchСad, NanoCAD, Adem,Ansys, LS-DYNA, MSC.Adams, Abaqus,

NEiNastran, SolidWorks, SolidEDGE, PROe, Catia, Unigraphix, FlowVision и т.д

(например, в OpenGL кривые Безье задаются только по трем или четырем

вершинам. )

Page 26: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Конвейерная архитектура обработки геометрических данных – блок-схема

Page 27: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

3D-сцена и графический конвейер

1. Wireframe ( Каркасное) моделирование поверхности объектов с учетом видимого объема (Camera, Frustum, View Volume). Формирование списка отображаемых объектов.

2. Tesselation. Тесселяция или триангуляция (triangulation): разбиение поверхности на плоские полигональные элементы. Вместо криволинейной поверхности – полигональная модель, представленная вершинами (vertex)

3. Transformation (трансформация) : перемещение, изменение формы посредством матричных преобразований вершин в пределах видимого объема

4. Lighting. Расчет освещенности и затенения (shading) объектов по вершинам. Методы интерполяции для полигональных поверхностей: Гуро (Gouraud shading), Фонга (Phong shading), применение вершинных шейдеров

5.Camera-ViewPort. Проецирование 3D-объекта с сохранением информации о расстоянии (о глубине) каждой из вершин до плоскости проекции

6. Triangle setup. Подготовка (компоновка ) треугольников объекта: генерация текстурных координат; сортировка вершин; отбор и отбрасывание нелицевых граней (culling)

Page 28: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

3D-сцена и графический конвейер 1. HSR (Hidden Surface Removal) – Удаление скрытых, для текущей точки наблюдения, поверхностей. Алгоритмы: z-сортировка; z-буферизация; построчное сканирование

2. Texture mapping. Текстурирование – первый этап растровой графики. Текселы-элементы текстуры формата 2m x 2n. Соответствие пикселов и текселов устанавливается по результатам проецирования. Приемы: MIP-mapping (текстуры с различным разрешением); perspective corrected texture mapping (коррекция перспективы); Filtering (LF, BLF, TLF, Anisotropic); bump mapping (наложение мелкомасштабного рельефа); мультитекстурирование (конвейерное) – 2 и более блоков текстурирования; пиксельные шейдеры

3. -blending and fogging (моделирование полупрозрачности, коррекция цвета: - смешивание и

затуманивание ) 4. Anti-aliasing (Коррекция зазубренности границ: edge AA (краевой) и full screen AA (полный ~ FSAA) Приемы: super sampling (супер- и мультисэмплинг); tile based архитектура; техника аккумулятора. 5. Dithering. Интерполяция недостающих цветов (для индексированногоцвета) 6. Frame buffer. Формирование кадрового буфера для формирования выходного аналогового сигнала. Приемы: double buffering двойная буферизация ~ формирование 2-го начинается до того как закончится передача в ЦАП (RAM DAC) первого 7. Post-processing. Пост-обработка: двумерные эффекты над целым кадром.

Page 29: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Экранное пространство

Page 30: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Мировое пространство

Page 31: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 32: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Типы геометрических преобразований

• Изометрия (сохраняются расстояния)

композиция поворотов и переносов

• Подобие (сохраняются углы)

масштабирование

• Аффинные преобразования (сохраняется

параллельность линий) сдвиг

• Линейные (проективные) преобразования

(прямые переходят в прямые)

• Нелинейные преобразования

Page 33: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 34: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 35: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 36: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Нелинейные преобразования (изгиб)

Page 37: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Нелинейные преобразования (кручение)

Page 38: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

При w->0 получаем прямую под фиксированным углом наклона!

Page 39: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Умножаем на матрицу справа!

Page 40: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Линейные преобразования (3D)

Page 41: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Перенос

Page 42: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Масштабирование

Page 43: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Преобразования в матричной форме

Page 44: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Это при умножении справа на строку!!!!

Page 45: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Варианты моделирования преобразований точки P:

[P][T]=[x y z 1][T]=[P*]

([P][T])T =[T]T [P]T = [T'][P']

Элементы матрицы Т и типы преобразований

x y z h

'*][

11

]'[]']['[*

*

*

Pz

y

x

z

y

x

TPT

h

zz

z

y

z

x

y

zyy

y

x

x

z

x

yxx

Mnml

rMSS

qSMS

pSSM

T ][

Аффинные (в т.ч. ортогональные) преобразования Mxx=-1 – отражение по х, |Mxx|≠1 – масштаб по х Sx

y – сдвиг по х пропорциональный у

l,m,n – вектор параллельного переноса p,q,r – перспективные преобразования Mh – общий масштаб

y=1

Sx

y

Page 46: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Параллельный перенос

Page 47: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Масштабирование

Page 48: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Поворот вокруг оси Z

Page 49: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Поворот вокруг осей Y и X

Page 50: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Эти же самые матрицы используют и для описания нелинейных преобразований!!!

Page 51: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 52: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 53: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Сдвиг (shear, skew)

Page 54: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Суперпозиция преобразований

Умножение ассоциативно, но не коммутативно!!!!

Page 55: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Иерархия преобразований (1)

Page 56: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Иерархия преобразований (2)

Page 57: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Иерархия преобразований (3)

Page 58: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Иерархия преобразований (4)

Page 59: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Иерархия преобразований (5)

Page 60: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Пример (1)

Page 61: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Пример (2)

Page 62: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Пример (3)

Page 63: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Построение теней

Page 64: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Тени

• Геометрическая оптика Френеля

• Чёткие (hard shadows) тени

– Точечный источник или источник направленного параллельного света

• Мягкие (soft shadows) тени

– Протяжённый источник света

Page 65: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”
Page 66: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Преобразование «на землю»

• Первый алгоритм, применённый в играх. Впервые описан Джимом

Блинном

• Простота реализации и хорошее качество получаемых теней

• Два случая

– Источник в бесконечности (параллельный направленный свет)

– Локальный источник (точечный источник недалеко от объекта)

• Расчёт теневых проекций полигона для каждого источника света

Если источник на бесконечности, то уравнение проекции решается только

один раз и применяется ко всем вершинам объекта, во втором случае каждая

вершина имеет своё собственное направление на источник света.

Page 67: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Источник в бесконечности Имея направление света L=( 𝒙𝒍, 𝒚𝒍 , 𝒛𝒍 ,h) и вершину объекта P, мы хотим получить проекцию вершины объекта на плоскость z=0, т.е. точку тени S. Матрица перехода

Теперь, имея координаты точки P в мировом пространстве, можно получить её проекцию S на плоскость z=0 просто путём умножения на матрицу:

𝑺 = 𝑴𝒔𝑷

1000

0000

010

001

l

l

l

l

s zy

zx

M

Page 68: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Локальный источник

Геометрическое определение

𝑺 = 𝑷 + 𝜶 𝑷 − 𝑳 , 𝜶 =−𝒛𝑷

𝒛𝑷 − 𝒛𝑳

𝒙𝑺 =𝒙𝑳𝒛𝑷 − 𝒙𝑷𝒛𝑳

𝒛𝑷 − 𝒛𝑳, 𝒚𝑺 =

𝒚𝑳𝒛𝑷 − 𝒚𝑷𝒛𝑳

𝒛𝑷 − 𝒛𝑳,

Можно эту формулу записать в виде матрицы проекции на плоскость z = 0 Теперь, имея координаты точки P в мировом пространстве, можно получить её проекцию S на плоскость z=0 просто путём умножения на матрицу:

𝑺 = 𝑴𝒔𝒉𝑷

Page 69: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Наложение теневой маски -проективное пространство

• Для локального источника света необходима матрица перспективного преобразования где - поле зрения (FOV), aspect - отношение ширины к высоте экрана (при отрисовке в квадратную текстуру aspect=1), far и near - дальняя и ближняя стенки пирамиды видимости. После перспективного преобразования необходима гомогенизация, как и в случае локального источника при преобразовании "на землю".

• Для качественной картинки рекомендуется выбирать проективный объём таким образом, чтобы он максимально плотно охватывал shadow caster и не оставлял зазоров.

0**)

2sin(

00

)2

sin()

2sin(

00

00)2

cos(*0

000)2

cos(

nearfar

nearfar

nearfar

far

aspect

M pj

Page 70: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Теневые объёмы • Теневой объём - это представление пространства

за объектом, из которого не наблюдается источник света, в виде полигонального объекта. При освещении сцены в тени оказываются те объекты, которые попадают внутрь теневого объёма.

• Для того, чтобы точка была затенена, луч света должен войти в теневые объёмы большее число раз, нежели выйти из них, т.е. остаться внутри хотя бы одного теневого объёма. Для упрощения задачи можно принять, что не луч света от источника должен проделать этот путь, а луч от наблюдателя.

• Алгоритм можно разделить на два явных действия: построение "теневой маски" (т.е. маски освещённых и затенённых областей 2-х мерной картинки) и отрисовка сцены с использованием теневой маски.

Page 71: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Проективные преобразования

экранное пространство

мировое пространство

Page 72: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Типы проекций (на русском языке были в прошлой лекции)

Page 73: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Ортографическая проекция

Page 74: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Изометрия

Page 75: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Военная проекция (CAVALIER)

Page 76: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Кабинетная проекция (CABINET)

Page 77: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Косоугольные проекции

• Направление проецирования

• Угол между косыми проекторами и плоскостью проекции

• Военная проекция

• Кабинетная проекция

)1,sin,cos( ll

)(larcctg

45)1(arcctg

435.63)2/1(arcctg

Page 78: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Косоугольные проекции (2)

)45(

Page 79: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Три типа картографических проекций

Page 80: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Цилиндрическая проекция с сохранением площадей

Page 81: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Перспективная проекция

Page 82: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

Мы рассмотрим матрицу перспективного преобразования использующуюся в DirectX: Элемент 1/d это приведение векторов на плоскость проекции. xScale и yScale масштабируют изображение по горизонтали и вертикали.

zf - z-координата дальней плоскости (от far - далеко), zn - z-координата ближней (от near - близко) Умножив матрицу на вектор получим: [ x/(z*xScale) y/(z*yScale) (zf/(zf-zn))*(1-zn/z) 1 ] После преобразования видимая область будет располагаться в отрезке zz= от нуля до единицы, включительно.

Page 83: Алгоритмы машинной графики IVcph.phys.spbu.ru/documents/First/infoPMF/CG4.pdfШе́йдер (Shader) — это программа на “машинном”

1. М. В. Михайлюк. Основы компьютерной графики. Изд-во: ИТЦ `МАТИ`, 2001. -194с. 2. Порев В.Н. Компьютерная графика. –СПб.: БХВ-Петербург, 2002. –432с. 3. Роджерс Д. Алгоритмические основы машинной графики: Пер. с англ. -М.: Мир, 1989. -512 с. 4. Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики. – С.Пб : БХВ-

Петербург, 2003. –560с. 5. Хилл Ф. OpenGL. Программирование компьютерной графики. – С.Пб: Питер, 2002. 1088с. 6. Торн A. Графика в формате DirectX 9. Полное руководство по использованию 3D-пространства:

Пер.с англ. - М.: НТ-пресс, 2007. - 288 с. 7. Евченко Александр. OpenGL и DirectX. Программирование графики. –СПб: Питер, 2006. -350с.

(+ CD-ROM) 8. Поляков А.Ю., Брусенцев В.А. Программирование графики: GDI+ и DirectX. – СПб.: БХВ-

Петербург, 2005. -368с. (Visual C++,.NET, прилагается CD). 9. Гайдуков С.А. OpenGL. Профессиональное программирование трехмерной графики на С++.

СПб.: БХВ-Петербург, 2004. -736с.(GLUT, NVidia SDK, ATI SDK, прилагается CD) 10. Верма Р.Д. Введение в OpenGL. – М.: Горячая линия – Телеком, 2004. -303с. 11. Андре Ламот . Программирование трехмерных игр для Microsoft Windows. Советы

профессионала по трехмерной графике и растеризации: пер. с англ.- М.: Издат.дом «Вильямс», 2006. -1424 с.

Источники