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

Transcription

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

Real Flow Maya

RealFlow 3ds Max - уроки на www.render.ru(другие файлы в папке показать отдельно)

Программное обеспечение для рендеринга — рендеры (визуализаторы)*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 т.е. все изучить невозможно!!!!!!!!!

3d Studio Max располагает обширнымисредствами по созданию разнообразных ыхкомпьютерных моделей реальных илифантастических объектов окружающегомира: полигональное моделирование в котороевходят Editable mesh (поверхность) иEditable poly (полигон) ; моделирование на основе неоднородныхрациональных B-сплайнов (NURBS); моделирование на основе порцийповерхностей Безье ; моделирование с использованиемвстроенных библиотек х объектов (примитивов)и их модификаторов.

Список стандартных встроенных объектов*Прямоугольный параллелепипед (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 Max2009 Bible. 3D Studio max. — М.: «Диалектика», 2009. — С. 1312.

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

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

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

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

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

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

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

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

В настоящее время шейдеры делятся на типа: Вершинные Геометрические Пиксельные (фрагментные) версии программ!!!Вершинные шейдеры (Vertex Shader)оперируют данными, сопоставленными свершинами многогранников. К таким данным, вчастности, относятся координаты вершины впространстве, текстурные координаты, тангенсвектор, вектор бинормали, вектор нормали.Вершинный шейдер может быть использовандля видового и ния вершин, генерациитекстурных координат, расчета освещенияи т. д.

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

Пиксельные (фрагментные) шейдеры (Pixel 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)- по синтаксису сходен сАссемблером. Существует несколько версий, различающихся по набору команд,а также по требуемому �вый шейдерный язык DirectX (HLSL — High Level Shader Language)- по синтаксису сходен с С, позволяет использовать структуры, процедуры ифункции.

Microsoft HLSL (High Level Shading Language)1. Мех. Пример файла эффектов сшейдерами на ассемблере#define C EYE POSITION 27#define C DISPLACEMENTS 30// light directionfloat3 L normalize(float3(-0.2f, -0.8f, 0.4f));// light intensityfloat4 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 specularfloat4 k s float4(1.0f, 1.0f, 1.0f, 1.0f);// transformationsfloat4x4 World : WORLD;float4x4 View: VIEW;float4x4 Projection : PROJECTION;// eye positionfloat3 Eye;// texturestexture FinTex;texture ShellTex;static const float4 vOne float4(1, 1, 1, 1);VertexShader ShellVS asm { vs.1.1dcl position v0dcl normal v3dcl color0 v4dcl texcoord v62. Вода. Пример файла эффектов на языкеMS HLSL#include "light scattering constants.h"// transformationsfloat4x4 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 maskstruct VS INPUT{ float2Pos: POSITION;floatZPos0: POSITION1;float2Norm0: NORMAL0;floatZPos1: POSITION2;float2Norm1: 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;

Шейдеры в OpenGL.

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

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

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

Сторонние средства Результатом отсутствия встроенной поддержки OpenGL API сталопоявление большого числа сторонних средств-оболочек (wrappers),которые позволяют писать и обрабатывать шейдерные “программы”. Например библиотека CsGL (http://csgl.sourceforge.net) и инструментарийTao Framework (http://www.taoframework.com) - на данный момент этоодин из наиболее оптимальный путей для использования OpenGL под C#(конечно есть и другие – так что это дело привычки и удобства) Оба проекта являются бесплатными и распространяются с открытымисходным кодом

Существует много других различных 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 кривые Безье задаются только по трем или четыремвершинам. )

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

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)

3D-сцена и графический конвейер1. HSR (Hidden Surface Removal) – Удалениескрытых, для текущей точки наблюдения,поверхностей. Алгоритмы: z-сортировка; zбуферизация; построчное сканирование2. Texture mapping. Текстурирование – первыйэтап растровой графики. Текселы-элементытекстуры формата 2m x 2n. Соответствиепикселов и текселов устанавливается порезультатам проецирования.Приемы: MIP-mapping (текстуры с различнымразрешением); perspective corrected texturemapping (коррекция перспективы); 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. Пост-обработка: двумерные эффекты над целым кадром.

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

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

Типы геометрических преобразований Изометрия (сохраняются расстояния)композиция поворотов и переносов Подобие (сохраняются углы)масштабирование Аффинные преобразования � линий) сдвиг Линейные (проективные) преобразования(прямые переходят в прямые) Нелинейные преобразования

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

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

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

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

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

Перенос

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

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

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

Варианты моделирования преобразований точки P: x x* y * y[T ' ][ P' ] [T ' ] * [ P'*] z z 1 1 [P][T] [x y z 1] [T] [P*]([P][T])T [T]T [P]T [T'][P']Элементы матрицы Т и типы преобразованийx M xx ySx [T ] S xz lyxySM yyS yzmzxzyzSSM zznhp q r M h Аффинные (в т.ч. �ияMxx -1 – отражение по х, Mxx 1 –масштаб по хSxy – сдвиг по х пропорциональный уl,m,n – вектор параллельного переносаy 1p,q,r – перспективные преобразованияySxMh – общий масштаб

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

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

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

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

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

Сдвиг (shear, skew)

Суперпозиция преобразованийУмножение ассоциативно, но не коммутативно!!!!

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

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

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

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

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

Пример (1)

Пример (2)

Пример (3)

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

Тени Геометрическая оптикаФренеля Чёткие (hard shadows) тени– Точечный источник араллельного светаМягкие (soft shadows) тени–Протяжённый источниксвета

Преобразование «на землю» Первый алгоритм, применённый в играх. Впервые описан ДжимомБлинном Простота реализации и хорошее качество получаемых теней Два случая–Источник в бесконечности (параллельный направленный свет)–Локальный источник (точечный источник недалеко от объекта) Расчёт теневых проекций полигона для каждого источника светаЕсли источник на бесконечности, то уравнение проекции решается толькоодин раз и применяется ко всем вершинам объекта, во втором случае каждаявершина имеет своё собственное направление на источник света.

Источник в бесконечностиИмея направление света L ( 𝒙𝒍 , 𝒚𝒍 , 𝒛𝒍 ,h) ивершину объекта P, мы хотим получитьпроекцию вершины объекта на плоскостьz 0, т.е. точку тени S.Матрица перехода1 0Ms 0 10 00 0 xl ylzlzl000001Теперь, имея координаты точки P в мировомпространстве, можно получить её проекцию Sна плоскость z 0 просто путём умножения наматрицу:𝑺 𝑴𝒔 𝑷

Геометрическое определение𝑺 𝑷 𝜶 𝑷 𝑳 , 𝒛𝑷𝜶 𝒛𝑷 𝒛𝑳𝒙𝑳 𝒛𝑷 𝒙𝑷 𝒛𝑳𝒚𝑳 𝒛𝑷 𝒚𝑷 𝒛𝑳𝒙𝑺 , 𝒚𝑺 ,𝒛𝑷 𝒛𝑳𝒛𝑷 𝒛𝑳Можно эту формулу записать в видематрицы проекции на плоскость z 0Теперь, имея координаты точки P вмировом пространстве, можно получитьеё проекцию S на плоскость z 0 простопутём умножения на матрицу:𝑺 𝑴𝒔𝒉 𝑷Локальный источник

Наложение теневой маски -проективное пространство Для локального источника света необходима матрица ния где - поле зрения (FOV), aspect - отношение ширины квысоте экрана (при отрисовке в квадратную текстуру aspect 1), far и near- дальняя и ближняя стенки пирамиды видимости. После ния необходима гомогенизация, как и в случае локальногоисточника при преобразовании "на землю". Для качественной картинки рекомендуется выбирать проективныйобъём таким образом, чтобы он максимально плотно охватывал shadowcaster и не оставлял зазоров.cos( )20M pj 00000aspect * cos( )200sin( ) far2far nearsin( )200sin( ) * far * near2 far near0

Теневые объёмы Теневой объём - это представление пространстваза объектом, из которого не наблюдаетсяисточник света, в виде полигонального объекта.При освещении сцены в тени оказываются теобъекты, которые попадают внутрь теневогообъёма. Для того, чтобы точка была затенена, луч светадолжен войти в теневые объёмы большее числораз, нежели выйти из них, т.е. остаться внутрихотя бы одного теневого объёма. Для упрощениязадачи можно принять, что не луч света отисточника должен проделать этот путь, а луч отнаблюдателя. Алгоритм можно разделить на два явныхдействия: построение "теневой маски" (т.е.маски освещённых и затенённых областей 2-хмерной картинки) и отрисовка сцены сиспользованием теневой маски.

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

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

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

Изометрия

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

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

Косоугольные проекции Направление проецирования(l cos ,l sin ,1) Угол между косыми проекторамии плоскостью проекции arcctg (l ) Военная проекция arcctg (1) 45 Кабинетная проекция arcctg (1 / 2) 63.435

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

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

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

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

Мы рассмотрим матрицу перспективного преобразования использующуюся в 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 от нуля до единицы,включительно.

Источники1.2.3.4.5.6.7.8.9.10.11.М. В. Михайлюк. Основы компьютерной графики. Изд-во: ИТЦ МАТИ , 2001. -194с.Порев В.Н. Компьютерная графика. –СПб.: БХВ-Петербург, 2002. –432с.Роджерс Д. Алгоритмические основы машинной графики: Пер. с англ. -М.: Мир, 1989. -512 с.Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики. – С.Пб : БХВПетербург, 2003. –560с.Хилл Ф. OpenGL. Программирование компьютерной графики. – С.Пб: Питер, 2002. 1088с.Торн A. Графика в формате DirectX 9. Полное руководство по использованию 3D-пространства:Пер.с англ. - М.: НТ-пресс, 2007. - 288 с.Евченко Александр. OpenGL и DirectX. Программирование графики. –СПб: Питер, 2006. -350с.( CD-ROM)Поляков А.Ю., Брусенцев В.А. Программирование графики: GDI и DirectX. – СПб.: БХВПетербург, 2005. -368с. (Visual C ,.NET, прилагается CD).Гайдуков С.А. OpenGL. Профессиональное программирование трехмерной графики на С .СПб.: БХВ-Петербург, 2004. -736с.(GLUT, NVidia SDK, ATI SDK, прилагается CD)Верма Р.Д. Введение в OpenGL. – М.: Горячая линия – Телеком, 2004. -303с.Андре Ламот . Программирование трехмерных игр для Microsoft Windows. Советыпрофессионала по трехмерной графике и растеризации: пер. с англ.- М.: Издат.дом«Вильямс», 2006. -1424 с.

*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