Добавлен: 29.10.2018
Просмотров: 6931
Скачиваний: 24
рендеринге
— белая вспышка, на программном — белая вспышка и пикселизиро-
ванный экран.
Для того чтобы составлять сложные видеоэффекты из атомарных операций, и
были изобретены шейдеры. Предшественниками шейдеров были процедурная ге-
нерация текстур (широко применявшаяся в Unreal для создания анимированных тек-
стур воды и огня) и мультитекстурирование (на нём был основан язык шейдеров,
применявшийся в Quake 3). Но и эти механизмы не обеспечивают такой гибкости,
как шейдеры.
В настоящее время шейдеры делятся на четыре типа:
• вершинные
;
• геометрические
;
• параллаксные
;
• фрагментные (пиксельные)
.
Вершинный шейдер
оперирует данными, сопоставленными с вершинами мно-
гогранников. К таким данным, в частности, относятся координаты вершины в про-
странстве, текстурные координаты, тангенс-вектор, вектор бинормали, вектор нор-
мали. Вершинный шейдер может быть использован для видового и перспектив-
ного преобразования вершин, генерации текстурных координат, расчёта освещения
и т. д.
Геометрический шейдер
, в отличие от вершинного, способен обработать не
только одну вершину, но и целый примитив. Это может быть отрезок (две верши-
ны) и треугольник (три вершины), а при наличии информации о смежных вершинах
(adjacency) может быть обработано до шести вершин для треугольного примитива.
Кроме того, геометрический шейдер способен генерировать примитивы «на ле-
ту», не задействуя при этом центральный процессор. Впервые данный шейдер начал
использоваться на видеокартах nVidia серии 8. Фрагментный шейдер работает
с фрагментами изображения. Под фрагментом изображения в данном случае по-
нимается пиксель, которому поставлен в соответствие некоторый набор атрибутов,
таких как цвет, глубина, текстурные координаты. Фрагментный шейдер исполь-
зуется на последней стадии графического конвейера для формирования фрагмента
изображения.
Шейдерные языки
обычно содержат специальные типы данных, такие как
цвет
и нормаль. Поскольку компьютерная графика имеет множество сфер прило-
жения, для удовлетворения различных потребностей рынка было создано большое
количество шейдерных языков.
Впервые использованные в системе RenderMan компании Pixar, шейдеры по-
лучали всё большее распространение со снижением цен на компьютеры. Основное
преимущество от использования шейдеров — их гибкость, упрощающая и удешев-
ляющая цикл разработки программы и при этом повышающая сложность и досто-
верность визуализируемых сцен.
Рассмотрим наиболее распространённые шейдерные языки.
35
Шейдерный язык RenderMan
является фактическим стандартом для про-
фессионального рендеринга. API RenderMan, разработанный Робом Куком (Rob
Cook
), используется во всех работах студии Pixar и не только. В 2004 г. этот пакет
использовали в съёмках тридцати пяти из тридцати девяти фильмов, номиниро-
ванных на «Оскар» в категории «Лучшие визуальные эффекты».
RenderMan
также
является первым из реализованных шейдерных языков.
nVidia Gelato
представляет собой оригинальную гибридную систему ренде-
ринга
изображений и анимации трёхмерных сцен и объектов, использующую для
расчётов центральные процессоры и аппаратные возможности профессиональных
видеокарт серии Quadro FX .
Шейдерный язык OpenGL
носит название GLSL (The OpenGL Shading
Language). GLSL основан на языке ANSI C. Большинство возможностей языка
ANSI C
сохранено, к ним добавлены векторные и матричные типы данных, часто
применяющиеся при работе с трёхмерной графикой. В контексте GLSL шейдером
называется независимо компилируемая единица, написанная на этом языке. Про-
граммой называется набор откомпилированных шейдеров, связанных вместе.
Низкоуровневый шейдерный язык DirectX (DirectX ASM)
по синтак-
сису сходен с Ассемблером. Существует несколько версий, различающихся по на-
бору команд, а также по требуемому оборудованию, есть разделение на вершинные
(vertex)
и пиксельные (pixel) шейдеры.
Высокоуровневый шейдерный язык DirectX HLSL
(HLSL — High Level
Shader Language) является надстройкой над DirectX ASM. По синтаксису сходен
с C, позволяет использовать структуры, процедуры и функции.
Язык программирования Cg
разработан nVidia совместно с Microsoft (та-
кой же по сути язык от Microsoft — HLSL, включён в DirectX 9). Cg расшифровы-
вается как «C for Graphics». Язык использует схожие с C типы (
int, float), а также
специальный 16-битный тип с плавающей запятой —
half, обладает оптимизацией в
виде упакованных массивов. Поддерживаются функции и структуры (см. рис.
Несмотря на то, что язык разработан nVidia, он без проблем работает и с видео-
картами ATI.
Следует учесть, что все шейдерные программы обладают своими особенно-
стями, которые следует получить от разработчика.
Математическая модель
Передовое программное обеспечение обычно совмещает в себе несколько техник,
чтобы получить достаточно качественное и фотореалистичное изображение за при-
емлемые затраты вычислительных ресурсов.
Реализация механизма рендеринга всегда основывается на физической модели.
Производимые вычисления относятся к той или иной физической или абстрактной
модели. Основные идеи просты для понимания, но сложны для применения.
36
Рис. 1.18. Изображение, отрендеренное в POV-Ray 3.6. Модель игральной кости со-
здана в Cinema 4D, остальное — при помощи Rhinoceros 3D
Основное уравнение
Ключом к теоретическому обоснованию моделей рендеринга служит уравне-
ние рендеринга
. Оно является наиболее полным формальным описанием части
рендеринга
, не относящейся к восприятию конечного изображения. Все модели
представляют собой какое-то приближённое решение этого уравнения.
L
o
(x, ~
ω) = L
e
(x, ~
ω) +
Z
Ω
f
r
(x, ~
ω
0
, ~
ω)L
i
(x, ~
ω
0
)(~
ω
0
· ~n)d~
ω
0
,
где L
o
— количество светового излучения, исходящего из определённой точки в опре-
делённом направлении; L
e
— собственное излучение; L
i
— приходящее излучение; f
r
— коэффициент отражения.
Иначе говоря, количество светового излучения, исходящего из определённой точ-
ки в определённом направлении, есть собственное излучение и отражённое излуче-
ние. Отражённое излучение есть сумма по всем направлениям приходящего излуче-
ния, умноженного на коэффициент отражения из данного угла.
Объединяя в одном уравнении приходящий свет с исходящим в одной точке, это
уравнение составляет описание всего светового потока в заданной системе.
Рендереры
Ниже перечислены наиболее распространённые рендереры.
• 3Delight
;
• AIR
;
• ART
;
• AQSIS
;
• Angel
;
• BMRT
(Blue Moon Rendering Tools) (распространение прекращено);
37
• Brazil R/S
;
• BusyRay
;
• Entropy
(продажи прекращены);
• finalRender
;
• Fryrender
;
• Gelato
(разработка прекращена в связи с покупкой nVidia, mental ray);
• Holomatix Renditio
(интерактивный raytracer);
• Indigo Renderer
;
• mental ray
;
• Kerkythea
;
• LuxRender
;
• Maxwell Render
;
• Meridian
;
• POV-Ray
;
• Pixie
;
• RenderDotC
;
• RenderMan
(PhotoRealistic RenderMan, Pixar’s RenderMan);
• Sunflow
;
• Turtle
;
• V-Ray
;
• YafRay
;
• Octane Render
;
• Arion Renderer
.
38
Рендереры работающие в реальном времени
• 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.
7.
Конвертеры файлов
7.1. NetPBM
NetPBM
распространяется бесплатно. Автор — Джеф Посканзер (Jef Poskanzer),
Брайэн Хендерсон
(Bryan Henderson).
Формат черно-белых изображений PBM был разработан Джефом Посканзером
(Jef Poskanzer). Формат был достаточно простым, чтобы PBM-изображения могли
пересылаться по электронной почте без порчи данных. В 1988 году Poskanzer выпу-
стил Pbmplus — предшественника современного пакета Netpbm. К концу 1988 года
Посканзер разработал форматы PGM (для полутоновых) PPM (для цветных) изоб-
ражений, которые могли обрабатываться Pbmplus.
39