Рендеринг

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Фотореалистичное изображение, созданное POV-Ray 3.6. Модели кувшина, стаканов и пепельницы созданы при помощи Rhinoceros 3D, модель игральной кости — в Cinema 4D

Ре́ндеринг или отрисо́вка (англ. rendering — «визуализация») — термин в компьютерной графике, обозначающий процесс получения изображения по модели с помощью компьютерной программы.

Здесь модель — это описание любых объектов или явлений на строго определённом языке или в виде структуры данных. Такое описание может содержать геометрические данные, положение точки наблюдателя, информацию об освещении, степени наличия какого-то вещества, напряжённость физического поля и пр.

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

Часто в компьютерной графике (художественной и технической) под рендерингом (3D-рендерингом) понимают создание плоской картинки — цифрового растрового изображения — по разработанной 3D-сцене. Синонимом в данном контексте является визуализация.

Визуализация — один из наиболее важных разделов в компьютерной графике, и на практике он тесным образом связан с остальными. Обычно программные пакеты трёхмерного моделирования и анимации включают в себя также и функцию рендеринга. Существуют отдельные программные продукты, выполняющие рендеринг.

В зависимости от цели, различают рендеринг, как достаточно медленный процесс визуализации, применяющийся в основном при создании видео, например в Vegas Pro, и рендеринг в режиме реального времени, например, в компьютерных играх. Последний часто использует 3D-ускорители.

Компьютерная программа, производящая рендеринг, называется рендером (англ. render) или рендерером (англ. renderer).

Основные термины в практике рендеринга

[править | править код]

Рендеринг изображения можно охарактеризовать с точки зрения ряда видимых особенностей. Исследования и разработки в рендеринге в значительной степени инициируются в целях поиска способов их эффективного применения. Некоторые относятся непосредственно к конкретным алгоритмам и методам, в то время как другие дополняют вместе друг друга.

  • Шэйдинг (англ. shading) — зависимость цвета и яркости поверхности от освещения.
  • Текстурное наложение — метод нанесения деталей на поверхности.
  • Бамп-мэппинг (англ. bump-mapping) — метод моделирования мелкой неровности на поверхностях.
  • Фоггинг (англ. fogging) — насколько тускнеет свет при прохождении через непрозрачную атмосферу или воздух.
  • Тени — эффект затенения света.
  • Мягкие тени — различного уровня темнота, вызванная частично скрытыми источниками света.
  • Отражение — зеркальное или глянцевое отражение.
  • Прозрачность — резкое прохождение света через твердые объекты.
  • Полупрозрачность — очень рассеянная передача света через твердые объекты.
  • Преломление — изгиб света, связанный с прозрачностью.
  • Дифракция — изгиб, распространение и интерференция света, проходящего мимо объекта или апертуры, которая прерывает луч.
  • Непрямое освещение — множество поверхностей, освещаемые светом, отраженным от других поверхностей, а не непосредственно от источника света (также известного как глобальное освещение).
  • Каустика (форма непрямого освещения) — отражение света от блестящего объекта или фокусировка света через прозрачный объект для создания ярких бликов на другом объекте.
  • Глубина резкости — объекты выглядят размытыми или не в фокусе, когда находятся слишком далеко перед или позади фокуса.
  • Размытие в движении — объекты выглядят размытыми из-за высокоскоростного движения или движения камеры.
  • Не фотореалистичный рендеринг — рендеринг сцен в художественном стиле, предназначенном для рисунка или графического изображения.

Методы рендеринга (визуализации)

[править | править код]

На текущий момент разработано множество алгоритмов визуализации. Существующее программное обеспечение может использовать несколько алгоритмов для получения конечного изображения.

Трассирование каждого луча света в сцене непрактично и занимает неприемлемо долгое время. Даже трассирование малого количества лучей, достаточного, чтобы получить изображение, занимает чрезмерно много времени, если не применяется аппроксимация (семплирование).

Вследствие этого, было разработано четыре группы методов, более эффективных, чем моделирование всех лучей света, освещающих сцену:

  • Растеризация (англ. rasterization) совместно с методом сканирования строк (Scanline rendering[англ.]). Визуализация производится проецированием объектов сцены на экран без рассмотрения эффекта перспективы относительно наблюдателя.
  • Ray casting (рейкастинг) (англ. ray casting). Сцена рассматривается, как наблюдаемая из определённой точки. Из точки наблюдения на объекты сцены направляются лучи, с помощью которых определяется цвет пиксела на двумерном экране. При этом лучи прекращают своё распространение (в отличие от метода обратного трассирования), когда достигают любого объекта сцены либо её фона. Возможно использование каких-либо очень простых способов добавления оптических эффектов. Эффект перспективы получается естественным образом в случае, когда бросаемые лучи запускаются под углом, зависящим от положения пикселя на экране и максимального угла обзора камеры.
  • Трассировка лучей (англ. ray tracing) похожа на метод бросания лучей. Из точки наблюдения на объекты сцены направляются лучи, с помощью которых определяется цвет пиксела на двумерном экране. Но при этом луч не прекращает своё распространение, а разделяется на три луча-компонента, каждый из которых вносит свой вклад в цвет пикселя на двумерном экране: отражённый, теневой и преломлённый. Количество таких компонентов определяет глубину трассировки и влияет на качество и фотореалистичность изображения. Благодаря своим концептуальным особенностям, метод позволяет получить очень фотореалистичные изображения, однако из-за большой ресурсоёмкости процесс визуализации занимает значительное время.
  • Трассировка пути (англ. path tracing) использует похожий принцип трассировки распространения лучей, однако этот метод является наиболее приближённым к физическим законам распространения света. Также является самым ресурсоёмким.

Передовое программное обеспечение обычно совмещает в себе несколько техник, чтобы получить достаточно качественное и фотореалистичное изображение за приемлемые затраты вычислительных ресурсов.

Рендеринг и растеризация

[править | править код]

Высокоуровневое представление изображения обязательно содержит элементы, отличные от пикселей. Эти элементы называются примитивами. Например, на схематическом рисунке отрезки и кривые могут быть примитивами. В графическом пользовательском интерфейсе окна и кнопки могут быть примитивами. При рендеринге 3D-моделей треугольники и многоугольники, расположенные в пространстве могут быть примитивами.

В случаях если попиксельный рендеринг нецелесообразен или слишком медлен для какой-либо задачи, тогда может оказаться полезнее подход «примитив-за-примитивом». В этом случае каждый контур просматривает каждый из примитивов, и в итоге определяется на какие пиксели изображения он влияет, и соответственно модифицируются эти пиксели. Это называется растеризацией, и этот метод рендеринга используется всеми современными видеокартами.

Растеризация часто быстрее, чем пиксельный рендеринг. Во-первых, большие области изображения могут быть пустыми из-за примитивов; растеризация будет игнорировать эти области, но пиксельный рендеринг должен проходить через них. Во-вторых, растеризация может улучшить когерентность кэша и уменьшить избыточную работу, используя тот факт, что пиксели, занятые одним примитивом, имеют тенденцию быть смежными в изображении. По этим причинам растеризация обычно является подходящим выбором, когда требуется интерактивный рендеринг; однако подход пиксельного рендеринга часто позволяет получать изображения более высокого качества и является более универсальным, поскольку он не зависит от такого количества предположений об изображении, как растеризация.

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

Рейкастинг

[править | править код]

При рейкастинге геометрия, которая была смоделирована, анализируется попиксельно, построчно, с точки зрения наблюдателя наружу, как если бы лучи отбрасывались из точки наблюдения. В месте, где объект пересекается, значение цвета может быть оценено с использованием нескольких методов. В самом простом случае значение цвета объекта в точке пересечения становится значением этого пикселя. Цвет можно определить по текстурной карте. Более сложный метод заключается в изменении значения цвета с помощью коэффициента освещения, но без расчета отношения к моделируемому источнику света. Чтобы уменьшить неточности, количество разнонаправленных лучей может быть усреднено.

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

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

Математическое обоснование

[править | править код]

Реализация механизма рендеринга всегда основывается на физической модели. Производимые вычисления относятся к той или иной физической или абстрактной модели. Основные идеи просты для понимания, но сложны для применения. Как правило, конечное элегантное решение или алгоритм более сложны и содержат в себе комбинацию разных техник.

Основное уравнение

[править | править код]

Ключом к теоретическому обоснованию моделей рендеринга служит уравнение рендеринга. Оно является наиболее полным формальным описанием части рендеринга, не относящейся к восприятию конечного изображения. Все модели представляют собой какое-то приближённое решение этого уравнения.

Неформальное толкование таково: Количество светового излучения (Lo), исходящего из определённой точки в определённом направлении есть собственное излучение и отражённое излучение. Отражённое излучение есть сумма по всем направлениям приходящего излучения (Li), умноженного на коэффициент отражения из данного угла. Объединяя в одном уравнении приходящий свет с исходящим в одной точке, это уравнение составляет описание всего светового потока в заданной системе.

Таблица сравнения свойств рендереров

[править | править код]
RenderMan mental ray YafaRay V-Ray finalRender Brazil R/S Turtle Maxwell Render Fryrender Indigo Renderer LuxRender Kerkythea Gelato (разработка прекращена)
совместим с 3ds Max Да, через MaxMan встроен Нет Да Да Да Нет Да Да Да Да Да Да
совместим с Maya Да, через RenderMan Artist Tools встроен Нет Да Да Нет Да Да Да Да Да Да
совместим с Softimage Да, через XSIMan встроен Нет Да Нет Нет Нет Да Да Да Да Нет
совместим с Houdini Да Да Нет Нет Нет Нет Нет Нет Да Да Нет Нет
совместим с LightWave Нет Нет Нет Нет Нет Нет Нет Да Да Нет Нет Нет
совместим с Blender Да Нет Да Да Нет Нет Нет Нет Нет Да Да Да Нет
совместим с SketchUp Нет Нет Нет Да Нет Нет Нет Да Да Да Да Да Нет
совместим с Cinema 4D Да (начиная с 11-й версии) Да Нет Да Да Нет Нет Да Да Да Да Нет, заморожен Нет
платформа Microsoft Windows, Linux, Mac OS X Microsoft Windows, Mac OS X Microsoft Windows, Linux, Mac OS X
физическая корректность модели Нет Нет Нет Нет Нет Нет Нет Да Да Да Да Нет
scanline Да Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Да
raytrace очень медленный Да Да Да Да Да Да Нет Нет Нет Нет Да Да
алгоритмы Global Illumination или свои алгоритмы Photon, Final Gather (Quasi-Montecarlo) Photon map, pathtracing, Bidirectional, SPPM Light Cache, Photon Map, Irradiance Map, Brute Force (Quasi-Montecarlo) Hyper Global Illumination, Adaptive Quasi-Montecarlo, Image, Quasi Monte-Carlo Quasi-Montecarlo, PhotonMapping Photon Map, Final Gather Metropolis Light Transport Metropolis Light Transport Metropolis Light Transport Metropolis Light Transport, Bidirectional Path Tracing
Camera — Depth of Field (DOF) Да Да Да Да Да Да Да Да Да Да Да Да Да
Camera — Motion Blur (vector pass) очень быстрый Да Да Да Да Да Да Да Да Да Да быстрый
Displacement быстрый Да Да медленный, 2d и 3d медленный Нет быстрый Да Да Да Да быстрый
Area Light Да Да Да Да Да Да Да Да Да Да Да
Glossy Reflect/Refract Да Да Да Да Да Да Да Да Да Да Да Да Да
SubSurface Scattering (SSS) Да Да Да Да Да Да Да Да Да Да Да Да Да
Standalone Да Да Нет 2005 года (сырая) Нет Нет Нет Да Да Да Да Да
текущая версия 13.5,2,2 3.10 0.1.1 (0.1.2 Beta 5a) 3.6 (3ds Max)

2.0 (Maya)
1.6 (SketchUp)
1.5 (Rhino)

Stage-2 2 4.01 1.61 1.91 1.0.9 v1.5 Kerkythea 2008 Echo 2.2
год выпуска 1987 1986 2005 2000 2002 2000 2003 2007 (?) 2006 (?) 2006 2015 2008 2003
библиотека материалов Нет 33 My mentalRay в разработке 100+ vray-materials 30 оф. сайт 113 оф. сайт (недоступная ссылка) Нет 3200+ оф. сайт 110 оф. сайт 80 оф. сайт 61 оф. сайт Нет
основан на технологии liquidlight Metropolis Light Transport
normal mapping Да Да Да
IBL/HDRI Lighting Да Да Да Да
Physical sky/sun Да Да Да Да Да
официальный сайт renderman.pixar.com YafaRay.org Архивная копия от 27 декабря 2020 на Wayback Machine vray.com
chaosgroup.com
MaxwellRender.com Fryrender.com IndigoRenderer.com LuxRender.net kerkythea.net
страна производитель США Германия Корея Болгария Германия США Швеция Испания Испания США
стоимость $ 3500 195 бесплатное, LGPL 2.1 800—1385

(в зависимости от 3D-пакета)
имеются версии для образовательных учреждений

1000 735 1500 995 1200 295€ бесплатное, GNU бесплатное бесплатное
основное преимущество бесплатное Baking высокая скорость (не очень высокое качество) Группы источников освещения, влияние которых на изображение можно регулировать непосредственно во время рендеринга, различные эффекты постобработки и имитации различных фотоплёнок, применяемые «на лету»;

Свободное ПО с открытым исходным кодом

бесплатное
компания производитель Pixar mental images (c 2008 NVIDIA) YafaRay Chaos Group Cebas SplutterFish Illuminate Labs Next Limit Feversoft NVIDIA

Хронология важнейших публикаций

[править | править код]
  • 1968 Ray casting (Appel, A. (1968). Some techniques for shading machine renderings of solids. Proceedings of the Spring Joint Computer Conference 32, 37—49.)
  • 1970 Scan-line algorithm (Bouknight, W. J. (1970). A procedure for generation of three-dimensional half-tone computer graphics presentations. Communications of the ACM)
  • 1971 Gouraud shading (Gouraud, H. (1971). Computer display of curved surfaces. IEEE Transactions on Computers 20 (6), 623—629.)
  • 1974 Texture mapping (Catmull, E. (1974). A subdivision algorithm for computer display of curved surfaces. PhD thesis, University of Utah.)
  • 1974 Z-buffer (Catmull, E. (1974). A subdivision algorithm for computer display of curved surfaces. PhD thesis)
  • 1975 Phong shading (Phong, B-T. (1975). Illumination for computer generated pictures. Communications of the ACM 18 (6), 311—316.)
  • 1976 Environment mapping (Blinn, J.F., Newell, M.E. (1976). Texture and reflection in computer generated images. Communications of the ACM 19, 542—546.)
  • 1977 Shadow volumes (Crow, F.C. (1977). Shadow algorithms for computer graphics. Computer Graphics (Proceedings of SIGGRAPH 1977) 11 (2), 242—248.)
  • 1978 Shadow buffer (Williams, L. (1978). Casting curved shadows on curved surfaces. Computer Graphics (Proceedings of SIGGRAPH 1978) 12 (3), 270—274.)
  • 1978 Bump mapping (Blinn, J.F. (1978). Simulation of wrinkled surfaces. Computer Graphics (Proceedings of SIGGRAPH 1978) 12 (3), 286—292.)
  • 1980 BSP trees (Fuchs, H. Kedem, Z.M. Naylor, B.F. (1980). On visible surface generation by a priori tree structures. Computer Graphics (Proceedings of SIGGRAPH 1980) 14 (3), 124—133.)
  • 1980 Ray tracing (Whitted, T. (1980). An improved illumination model for shaded display. Communications of the ACM 23 (6), 343—349.)
  • 1981 Cook shader (Cook, R.L. Torrance, K.E. (1981). A reflectance model for computer graphics. Computer Graphics (Proceedings of SIGGRAPH 1981) 15 (3), 307—316.)
  • 1983 Mipmaps (Williams, L. (1983). Pyramidal parametrics. Computer Graphics (Proceedings of SIGGRAPH 1983) 17 (3), 1—11.)
  • 1984 Octree ray tracing (Glassner, A.S. (1984). Space subdivision for fast ray tracing. IEEE Computer Graphics & Applications 4 (10), 15—22.)
  • 1984 Alpha compositing (Porter, T. Duff, T. (1984). Compositing digital images. Computer Graphics (Proceedings of SIGGRAPH 1984) 18 (3), 253—259.)
  • 1984 Distributed ray tracing (Cook, R.L. Porter, T. Carpenter, L. (1984). Distributed ray tracing. Computer Graphics (Proceedings of SIGGRAPH 1984) 18 (3), 137—145.)
  • 1984 Radiosity (Goral, C. Torrance, K.E. Greenberg, D.P. Battaile, B. (1984). Modelling the interaction of light between diffuse surfaces. Computer Graphics (Proceedings of SIGGRAPH 1984) 18 (3), 213—222.)
  • 1985 Hemi-cube radiosity (Cohen, M.F. Greenberg, D.P. (1985). The hemi-cube: a radiosity solution for complex environments. Computer Graphics (Proceedings of SIGGRAPH 1985) 19 (3), 31—40.)
  • 1986 Light source tracing (Arvo, J. (1986). Backward ray tracing. SIGGRAPH 1986 Developments in Ray Tracing course notes)
  • 1986 Rendering equation (Kajiya, J.T. (1986). The rendering equation. Computer Graphics (Proceedings of SIGGRAPH 1986) 20 (4), 143—150.)
  • 1987 Reyes algorithm (Cook, R.L. Carpenter, L. Catmull, E. (1987). The reyes image rendering architecture. Computer Graphics (Proceedings of SIGGRAPH 1987) 21 (4), 95—102.)
  • 1991 Hierarchical radiosity (Hanrahan, P. Salzman, D. Aupperle, L. (1991). A rapid hierarchical radiosity algorithm. Computer Graphics (Proceedings of SIGGRAPH 1991) 25 (4), 197—206.)
  • 1993 Tone mapping (Tumblin, J. Rushmeier, H.E. (1993). Tone reproduction for realistic computer generated images. IEEE Computer Graphics & Applications 13 (6), 42—48.)
  • 1993 Subsurface scattering (Hanrahan, P. Krueger, W. (1993). Reflection from layered surfaces due to subsurface scattering. Computer Graphics (Proceedings of SIGGRAPH 1993) 27 (), 165—174.)
  • 1995 Photon mapping (Jensen, H.J. Christensen, N.J. (1995). Photon maps in bidirectional monte carlo ray tracing of complex objects. Computers & Graphics 19 (2), 215—224.)
  • 1997 Metropolis light transport (Veach, E. Guibas, L. (1997). Metropolis light transport. Computer Graphics (Proceedings of SIGGRAPH 1997) 16 65—76.)

Примечания

[править | править код]