Render time что это

Real Time рендеры в 3d программах.

Render time что это. furry ball 01. Render time что это фото. Render time что это-furry ball 01. картинка Render time что это. картинка furry ball 01

Для начала поясню что такое рендер, для тех кто не знает.

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

Так вот рендер — это 1) Программа которая и производит конечную визуализацию из проекта в видео файл или картинку.

2) Само изображение, полученное с помощью рендеринга.

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

Но что же я увидел на просторах интернета одним прекрасным днем? Правильно, рендер программу которая рендерит в реал тайме (то есть в реальном времени). Этой программой был плагин Furry Ball для Maya.

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

Спустя какое то время я узнаю что многие разработчики рендеров стали внедрять технологию Real Time render. Похоже что не за горами времена когда одна машина будет способна отрендерить огромное количество материалов самостоятельно да еще и в реал тайме.

Ниже приведен список рендеров, работающих в реальном (или почти реальном ) времени

FurryBall (for maya)

VrayRT

Render time что это. vrayrtdemo. Render time что это фото. Render time что это-vrayrtdemo. картинка Render time что это. картинка vrayrtdemo

Render time что это. . Render time что это фото. Render time что это-. картинка Render time что это. картинка

FinalRender

Iray

Shaderlight

Showcase

Rendition

Render time что это. rendition wtv re17. Render time что это фото. Render time что это-rendition wtv re17. картинка Render time что это. картинка rendition wtv re17

Brazil IR

Для любителей Maya

На данный момент в Maya 2011 уже содержится высокопроизводительный видовой экран Viewport 2 который отображает объекты немного лучше чем стандартный вид по Default quality rendering. В Maya 2012 разработчики продвинулись еще дальше экран теперь предлагает в полноэкранном режиме такие визуальные эффекты, как размытие объектов, настройка глубины резкости и объемный свет, позволяя оценивать выполненную работу в реалистичных условиях и без необходимости рендеринга или экспорта в игровой движок.

После выхода Maya 2012 будем с нетерпением ждать Maya 2013 и уже надеюсь видовой экран превратится в стопроцентный реал тайм рендер.

Источник

Разные GPU-тесты (Redshift,Fstorm,Octane,V-Ray,Arnold и т.д.) (обновлено 3 апреля 2021)

Всем привет. Делал я как-то давно такие тесты и решил запостить их здесь. Думаю многим будет интересно. Не смотря на то, что 3я серия уже давно вышла, 2080Ti пока не потеряли своей актуальности и вполне себя прекрасно показывают, хотя думаю скоро и до 3й серии доберусь =) А пока вот такой длинопост с кучей разных тестов.Приятного чтения и просмотра!

Графические процессоры NVIDIA в сочетании с драйверами Studio обеспечивают высокий уровень производительности и возможностей для самых требовательных графических приложений. Узнайте, какие преимущества для ваших любимых приложений обеспечивает ускорение на GPU NVIDIA.

Сделал вывод, что с новыми Nvidia Studio быстрее.
Да и Походу они добавили ускорялку в Out of Core. =) Как говорил Lino. Несколько секунд прибавляет. Так что включайте эту опцию, когда рендерите свои сцены, насыщенные миллионами поликов.

Update: В самом новом Redshift уже внедрили Optix 7.2, который еще быстрее.

Далее, Макс Ачковский кинул свои тесты в нашу Octane группу, расхваливал V-Ray с новыми дровами.
На этой сценке хороший прирост с RTX и новыми дровами. И это учитывая тот факт, что вирей у него пиратский, не последний =) на 5й бетке я думаю вообще будет песня. Жду сцену
И видяха 2070, на которой еще RTX не в полной мере работает =) Но человек доволен приростом.

Render Time = 4m RTX

Render Time = 2m

Render Time = 43s

6 мая 2020
Так, сегодня затестил выход за 11 Гб одной видеокарты =) Keyshot тянет. Значит Nvlink работает.
15 млр поликов. 15 гб памяти скушало из 22 Гб. Все работает.

Забавно, что GTA 5 тоже видит 22 гб.

23 июня 2020
Очередной тест производительности. Но уже с FStorm.

7.09.2020

22.09.2020

11.10.2020

18.10.2020

На этом пока все друзья. Однозначно буду еще делать тесты и постить их в новых постах.
Всем хорошего дня и настроения.
С Уважением,
Кривуля Андрей Charly

Источник

Что такое рендер-фермы и рендер-станции — для чего они нужны

Render time что это. q93 8e051f3e02718e6bfd410c0056ca3483f99eac8fc635391a7ddcd3b7ce9ba0bf. Render time что это фото. Render time что это-q93 8e051f3e02718e6bfd410c0056ca3483f99eac8fc635391a7ddcd3b7ce9ba0bf. картинка Render time что это. картинка q93 8e051f3e02718e6bfd410c0056ca3483f99eac8fc635391a7ddcd3b7ce9ba0bf

Render time что это. q93 bb6fa769bbe393c849a725fde858008447abd5d70bc1309ef92fa65760f39295. Render time что это фото. Render time что это-q93 bb6fa769bbe393c849a725fde858008447abd5d70bc1309ef92fa65760f39295. картинка Render time что это. картинка q93 bb6fa769bbe393c849a725fde858008447abd5d70bc1309ef92fa65760f39295

Содержание

Содержание

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

Что такое рендеринг

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

Render time что это. q93 8bdcc4f194e29440604f18df630a41d399dbcc0b5d705c26c24e485505f8ff50. Render time что это фото. Render time что это-q93 8bdcc4f194e29440604f18df630a41d399dbcc0b5d705c26c24e485505f8ff50. картинка Render time что это. картинка q93 8bdcc4f194e29440604f18df630a41d399dbcc0b5d705c26c24e485505f8ff50

Как работает рендеринг и что для него необходимо

Рендеринг — это довольно трудоемкий и сложный процесс, в ходе которого происходит множество математических вычислений. Проходит просчет и определение теней, текстур, отражения и многого другого.

Разработчики специальных программ для 3D-моделирования и рендеринга позаботились о том, чтобы пользователи не утруждали себя многочисленными просчетами и работали с привычными для них настройками.

Render time что это. q93 7b2d563f94ab072201c9137d7bdc3a1b1b2d356d74005aec8900a0bf650797dd. Render time что это фото. Render time что это-q93 7b2d563f94ab072201c9137d7bdc3a1b1b2d356d74005aec8900a0bf650797dd. картинка Render time что это. картинка q93 7b2d563f94ab072201c9137d7bdc3a1b1b2d356d74005aec8900a0bf650797dd

Естественно, что для рендеринга требуется один или несколько компьютеров, программы для 3D-моделирования и визуализации (с соответствующими плагинами), программы для работы с графикой. Чаще всего рендер-движки уже встраиваются в графические программы, например, в такие как 3ds Max, Maya. Помимо этого, есть самостоятельные профессиональные системы для рендера, например, V-ray, Mental ray, Corona Renderer. Такие программы часто именуют рендерером.

Если говорить о значимости «начинки» компьютера для рендеринга, то здесь мы встретим подразделение на CPU Rendering и GPU Rendering. Первый вариант при просчете использует ресурсы процессора и оперативной памяти, а в случае с GPU, основная задача по визуализации ложится на видеокарту (графический процессор). Чему именно будет отдано предпочтение, зависит от используемой системы рендеринга.

Render time что это. q93 3ba54557f0226e6ef568a5feb9b00695e5c019bfaac368b8e1dea0bae1a64430. Render time что это фото. Render time что это-q93 3ba54557f0226e6ef568a5feb9b00695e5c019bfaac368b8e1dea0bae1a64430. картинка Render time что это. картинка q93 3ba54557f0226e6ef568a5feb9b00695e5c019bfaac368b8e1dea0bae1a64430

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

Сколько же времени может занять рендеринг? В зависимости от всего вышеперечисленного от нескольких секунд до нескольких часов и даже дней.

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

Что такое рендер-ферма

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

Ферма как правило бывает двух типов: собственная (частная) и облачная (коммерческая). Первая создается под нужды какой-либо фирмы занимающейся, например, выпуском фильмов. Или же когда у отдельного дизайнера, фрилансера имеется несколько компьютеров с соответствующим программным обеспечением, и он использует их для рендеринга.

Render time что это. q93 cd50fbd972e3e069b53fb772b04692ec20be475754287a8cbefe35e8e8c91e93. Render time что это фото. Render time что это-q93 cd50fbd972e3e069b53fb772b04692ec20be475754287a8cbefe35e8e8c91e93. картинка Render time что это. картинка q93 cd50fbd972e3e069b53fb772b04692ec20be475754287a8cbefe35e8e8c91e93

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

Стоят профессиональные фермы довольно дорого. В стоимость входит не только цена на оборудование, софт, но и его обслуживание, охлаждение и т.п.

Что такое рендер-станция

Если ферма представляет собой несколько компьютеров объединенных в узлы, то рендер-станция (графическая станция) является отдельной машиной, предназначенной для работы с графикой, видео, дизайном. Такие станции базируются на различных платформах и комплектуются мощным «железом», которое чаще всего создается именно для работы с графикой. В пример можно привести профессиональную (и доступную рядовому пользователю) графическую карту Nvidia Quadro.

Render time что это. q93 3e3a5e5ef0234b81cff9e9312e594a20cda63cd9fa28e370f602a790faf89b86. Render time что это фото. Render time что это-q93 3e3a5e5ef0234b81cff9e9312e594a20cda63cd9fa28e370f602a790faf89b86. картинка Render time что это. картинка q93 3e3a5e5ef0234b81cff9e9312e594a20cda63cd9fa28e370f602a790faf89b86

Как работают коммерческие рендер-фермы

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

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

Render time что это. q93 ea478dd19c1e5995f7ce7fcdfad824b2a5a275e494a8c289f447fd7f0e324a27. Render time что это фото. Render time что это-q93 ea478dd19c1e5995f7ce7fcdfad824b2a5a275e494a8c289f447fd7f0e324a27. картинка Render time что это. картинка q93 ea478dd19c1e5995f7ce7fcdfad824b2a5a275e494a8c289f447fd7f0e324a27

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

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

Render time что это. q93 0fcd0a16e3ba466af012388a79380fd812585282a54647bdea48e0f24d49d657. Render time что это фото. Render time что это-q93 0fcd0a16e3ba466af012388a79380fd812585282a54647bdea48e0f24d49d657. картинка Render time что это. картинка q93 0fcd0a16e3ba466af012388a79380fd812585282a54647bdea48e0f24d49d657

Рендерить на ферме или у себя дома?

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

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

Render time что это. q93 7180576407ea7439c5f7af272126608ebbcf60e235a85378cfc8c90d22c7e890. Render time что это фото. Render time что это-q93 7180576407ea7439c5f7af272126608ebbcf60e235a85378cfc8c90d22c7e890. картинка Render time что это. картинка q93 7180576407ea7439c5f7af272126608ebbcf60e235a85378cfc8c90d22c7e890

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

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

Особенности рендеринга на рендер-ферме

Остановимся на некоторых особенностях, которые желательно знать и помнить всем посетителям ферм.

Онлайн-калькулятор.

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

Render time что это. q93 66df7350aa4e5f587ecdeff07a802ea6dc1ef85832e365a98fb128846efc0734. Render time что это фото. Render time что это-q93 66df7350aa4e5f587ecdeff07a802ea6dc1ef85832e365a98fb128846efc0734. картинка Render time что это. картинка q93 66df7350aa4e5f587ecdeff07a802ea6dc1ef85832e365a98fb128846efc0734

Совместимость ПО

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

Render time что это. q93 45ea0f8660db88b3b8c93165652471f01cff91590f72c8373ac8797234ab37d1. Render time что это фото. Render time что это-q93 45ea0f8660db88b3b8c93165652471f01cff91590f72c8373ac8797234ab37d1. картинка Render time что это. картинка q93 45ea0f8660db88b3b8c93165652471f01cff91590f72c8373ac8797234ab37d1

Хранение данных

Фермы осуществляют хранение проектов и всех данных, однако через какой-то промежуток времени они могут быть удалены. Через какой промежуток именно, нужно узнавать на самой ферме.

Правила пользования

Прежде чем начинать работу на той или иной ферме, необходимо детально ознакомиться с правилами пользования фермой. Узнать каким образом она предоставляет кредиты, можно ли вернуть деньги и т.п. Для разрешения всех спорных или непонятных вопросов на каждой из ферм должна работать служба поддержки в режиме 24/7.

Источник

Что такое рендер?

Render time что это. render 2. Render time что это фото. Render time что это-render 2. картинка Render time что это. картинка render 2

Рендер или рендеринг (от англ. термина rendering — визуализация) — это процес обработки модели с помощью специальной компьютерной программы. Работая в определенном 3d пакете, художник создает трехмерную модель и затем запускает ее обработку — рендер в плоскую, 2d картинку.

Наиболее часто, термин рендер применяется в компьютерной графике, где процесс рендеринга предполагает обработку созданной 3d сцены для получения статичного изображения или секвенции кадров в случае анимации. Обычно, современные программы (например, 3ds max, Cinema 4D) для работs с графикой уже содержат встроенные приложения для рендера, но при желании можно использовать и внешние рендер-движки (V-ray, Corona).

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

При рендере компьютер на 100% занят просчетами и пользоваться им для других задач (например, серфить в Интернете) не только сложно, но и может привести к сбою рендера — компьютер может зависнуть и потерять весь прогресс рендера кадра. В это время можно сходить попить кофе, пообедать или поспать — многие визуализаторы весь день создают графику, а на ночь или выходные ставят задачи на рендер, когда компьютер им все равно не требуется.

Источник

Learn OpenGL. Урок 5.9 — Отложенный рендеринг

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

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

Отложенное освещение или отложенный рендеринг (deferred shading или deferred rendering) обходит эту проблему и кардинально меняет то, как мы рисуем объекты. Это даёт новые возможности значительно оптимизировать сцены с большим количеством источников света, позволяя рисовать сотни и даже тысячи источников света с приемлемой скоростью. Ниже изображена сцена с 1847 точечными источниками света, нарисовання с помощью отложенного освещения (изображение предоставил Hannes Nevalainen). Что-то подобное было бы невозможно при прямом расчёте освещения:

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Часть 2. Базовое освещение

Часть 3. Загрузка 3D-моделей

Часть 4. Продвинутые возможности OpenGL

Часть 5. Продвинутое освещение

Идея отложенного освещения состоит в том, что мы откладываем самые вычислетельно сложные части (типа освещения) на потом. Отложенное освещение состоит из двух проходов: в первом проходе, геометрическом (geometry pass), рисуется вся сцена и различная информация сохраняется в набор текстур, называемых G-буффером. Например: позиции, цвета, нормали и/или зеркальность поверхности для каждого пикселя. Сохранённая в G-буфере графическая информация позже используется для расчёта освещения. Ниже приведено содержания G-буфера для одного кадра:

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Во втором проходе, называемом проходом освещения (lighting pass), мы используем текстуры из G-буффера, когда рисуем полноэкранный прямоугольник. Вместо использования вершинного и фрагементного шейдеров отдельно для кадого объекта, мы пиксель за пикселем рисуем сразу всю сцену. Расчёт освещения остаётся точно таким же, как и при прямом проходе, но мы берём необходимые данные только из G-буфера и переменных шейдера (uniforms), а не из вершинного шейдера.

Изображение ниже хорошо показывает общий процесс рисования.

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Главным преимуществом является то, что сохранённая в G-буфере информация принадлежит самым близким фрагментам, которые ничем не заслонены: тест глубины оставляет только их. Благодаря этому мы расчитываем освещение для каждого пикселя только по одному разу, не совершая лишенй работы. Более того, отложенное освещение даёт нам возможности для дальнейших оптимизаций, позволяющих использовать намного больше источников освещения, чем при прямом освещении.

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

(Прим. пер. — G-буффер занимает реально много места в памяти. Например, для экрана 1920*1080 и использовании 128 бит на пиксель буфер займёт 33мб. Вырастают требования к пропускной способности памяти — данных пишется и читается значительно больше)

G-буфер

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

С помощью этих переменных мы можем посчитать освещение по уже знакомой нам модели Блинна-Фонга. Цвет и положение источника света, а так же позиция камеры могут быть общими переменными, но остальные значения будут своими для каждого фрагмента изображения. Если мы передадим ровно же данные в финальный проход отложенного освещения, что мы бы использовалили при прямом проходе, мы получим тот же самый результат, не смотря на то, что мы будет рисовать фрагменты на обычном 2д прямоугольнике.

В OpenGL нет ограничений на то, что мы можем хранить в текстуре, так что имеет смысл хранить всю информацию в одной или нескольких текстурах размером с экран (называемых G-буфером) и использовать их все в проходе освещения. Так как размер текстур и экрана совпадает, мы получим те же самые входные данные, что и при прямом освещении.

В псевдокоде общая картина выглядит примерно так:

Информация, которая необходима для каждого пикселя: вектор позиции, вектор нормали, вектор цвета и значение для зеркальной составляющей. В геометрическом проходе мы нарисуем все объекты сцены и сохраним все эти данные в G-буфер. Мы можем использовать множественные цели рендерига (multiple render targets), чтобы заполнить все буферы за один проход рисования, такой подход обсуждался в предыдущей статье про реализацию свечения: Bloom, перевод на хабре.

Для геометрического прохода создадим фреймбуфер с очевидными именем gBuffer, к которому присоединим несколько цветовых буферов и один буфер глубины. Для хранения позиций и нормали предпочтительно использовать текстуру с высокой точностью (16 или 32-битные float значения для каждой компоненты), диффузный цвет и значения зеркального отражения мы будем хранить в текстуре по-умолчанию (точность 8 бит на компоненту).

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

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

Имейте ввиду, что при расчётах освещения крайне важно хранить все переменные в одном и том же координатном пространстве, в данном случае мы храним (и производим вычисления) в пространстве мира.

Если мы сейчас отрендерим несколько нанокостюмов в G-буфер и нарисуем его содержимое с помощью проецирования каждого буфера на четверть экрана, мы увидим что-то типа такого:

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Попробуйте визуализировать вектора позиций и нормалей и убедитесь, что они верны. Например, вектора нормалей, указывающих вправо, будут красным. Аналогично с объектами, расположенными правее центра сцены. После того, как Вы будете удовлетворены содержимым G-буфера, перейдём к следующей части: проходу освещения.

Проход освещения

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

Для прохода освещения мы собираемся рендерить полноэкранный прямоугльник (немного похоже на эффект пост-обработки) и произвести медленное вычисление освещения для каждого пикселя.

Мы присоединяем (bind) все необходимые текстуры G-буфера перед рендерингом и вдобавок устанавливаем относящиеся к освещению значения переменных в шейдере.

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

Так как для каждого фрагмента есть значения (а так же uniform переменные шейдера), необходимые для рассчёта освещеняи по модели Блинна-Фонга, нам нет необходимости изменять код расчёта освещения. Единственное, что было изменено — способ получения входных значений.

Запуск простой демонстрации с 32 маленькими источникам света выглядит примерно так:

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Одним из недостатков отложенного освещения являетя невозможность смешивания, так как все g-буфера для каждого пикселя содержат информацию только об одной поверхности, в то время как смешивание использует комбинации нескольких фрагментов. (Blending), перевод. Ещё одним недостатком отложенного освещения является то, что оно вынуждает вас использовать один общий для всех объектов способ расчёта освещения; хотя это ограничение можно как-нибудь обойти с помощью добавления информации о материале в g-буфер.

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

Комбинируем отложенный рендериг с прямым.

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

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

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

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

Для объектов, нарисованных в проходе отложенного освещения, мы сохранили глубину в g-буфере объекта фреймбуфера. Если мы просто скопируем содержимое буфера глубины g-буфера в буфер глубины по-умолчанию, светящиеся кубики будут нарисованы так, как будто вся геометрия сцены была нарисована с помощью прямого прохода рендеринга. Как было кратко объяснено в примере со сглаживанием, мы должны установить фреймбуферы для чтения и записи:

Здесь мы копируем целиком содержимое буфера глубины фреймбуфера в буфер глубины по-умолчанию (При необходимости можно аналогично скопировать буферы цвета или stensil буфер). Если мы теперь отрендерим светящиеся кубики, они нарисуются так, как будто геометрия сцены реальна (хотя она рисуется как простой).

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Исходный код демо можно найти здесь.

С таким подходом мы можем легко комбинировать отложенный рендеринг с прямым. Это превосходно, так как мы сможем применять смешивание и рисовать объекты, которы требуют специальных шейдеров, не применимых при отложенном рендеренге.

Больше источников света

Отложенное освещение часто хвалят за возможность рисовать огромное количество источников света без сильного снижения производительности. Отложенное освещение само по себе не позволяет рисовать очень большого количества источников света, так как мы всё ещё должны для каждого пикселя посчитать вклад всех источников света. Для рисования огромного количества источников света используется очень красивая оптимизация, применимая к отложенному рендерингу — области действия источников света. (light volumes)

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

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

При таком подходе основной хитростью является определение размера области действия источнка света.

Вычисление области действия источника света (радиуса)

Для получения радиуса источника света мы должны решить уравнение затухания для яркости, которую мы посчитаем тёмной — это может быть 0.0 или что-то чуть более освещённое, но всё ещё тёмное: например, 0.03. Для демонстрации, как можно посчитать радиус, мы будем использовать одну из сложных, наиболее общих функций затухания из примера с light caster

Render time что это. 6af78f0924f776cb057f499335b9681b. Render time что это фото. Render time что это-6af78f0924f776cb057f499335b9681b. картинка Render time что это. картинка 6af78f0924f776cb057f499335b9681b

Мы хотим решить это уравнение для случая, когда Render time что это. 21ba256196de594757bfb438ccbcc55c. Render time что это фото. Render time что это-21ba256196de594757bfb438ccbcc55c. картинка Render time что это. картинка 21ba256196de594757bfb438ccbcc55c, т.е., когда источник света будет полностью тёмным. Впрочем, данное уравнение никогда не достигнет точного значения 0.0, так что решения не существует. Однако мы вместо этого можем решить уравнение для яркости для значения, близкого к 0.0, которое можно считать практически тёмным. В этом примере мы считаем приемлемым значение яркости в Render time что это. a66ef6c9a35c83e2440c7c4aaaa410b8. Render time что это фото. Render time что это-a66ef6c9a35c83e2440c7c4aaaa410b8. картинка Render time что это. картинка a66ef6c9a35c83e2440c7c4aaaa410b8— делёное на 256, так как 8-битный фреймбуфер может содержать 256 различных значений яркости.

Выбранная функция затухания становится практически тёмной на расстоянии радиуса действия, если мы ограничим её на меньшей яркости чем 5/256, то область действия источника света станет слишком большой — это не так эффективно. В идеале человек не должен видеть внезапной резкой границы света от источника света. Конечно, это зависит от типа сцены, большее значение минимальной яркости даёт меньшие области действия источников света и повышает эффективность рассчётов, но может приводить к заметным артефакты на изображении: освещение будет резко обрываться на границах области действия источника света.

Уравнение затухания, которое мы должны решить, становится таким:

Render time что это. 0c5b2a7b4d56a7ed22bc6ad56921ba95. Render time что это фото. Render time что это-0c5b2a7b4d56a7ed22bc6ad56921ba95. картинка Render time что это. картинка 0c5b2a7b4d56a7ed22bc6ad56921ba95

Здесь Render time что это. 3ad00c256faae5b2dc5f26f2b70ef99c. Render time что это фото. Render time что это-3ad00c256faae5b2dc5f26f2b70ef99c. картинка Render time что это. картинка 3ad00c256faae5b2dc5f26f2b70ef99c— наиболее яркая составляющая света (из r, g, b каналов). Мы спользуем самую яркую компоненту, так как остальные компоненты дудут более слабое ограничение на область действия источника света.

Продолжим решать уравнение:

Render time что это. e95e00a36809c9f1c728fc58f824fc08. Render time что это фото. Render time что это-e95e00a36809c9f1c728fc58f824fc08. картинка Render time что это. картинка e95e00a36809c9f1c728fc58f824fc08

Render time что это. 7258e3d57eff20a66c3519a4e241a63f. Render time что это фото. Render time что это-7258e3d57eff20a66c3519a4e241a63f. картинка Render time что это. картинка 7258e3d57eff20a66c3519a4e241a63f

Render time что это. 6ddf69c34bb987fb478abb3b30bf16f7. Render time что это фото. Render time что это-6ddf69c34bb987fb478abb3b30bf16f7. картинка Render time что это. картинка 6ddf69c34bb987fb478abb3b30bf16f7

Render time что это. 073ef374ecea9782a04d16fd0d83466e. Render time что это фото. Render time что это-073ef374ecea9782a04d16fd0d83466e. картинка Render time что это. картинка 073ef374ecea9782a04d16fd0d83466e

Последнее уравнение является квадратным уравнением в форме Render time что это. 5cb48b01d216e8ecffee3cbed5b69656. Render time что это фото. Render time что это-5cb48b01d216e8ecffee3cbed5b69656. картинка Render time что это. картинка 5cb48b01d216e8ecffee3cbed5b69656со следующим решением:

Render time что это. 5d394a9056b6e023490c80162bccf452. Render time что это фото. Render time что это-5d394a9056b6e023490c80162bccf452. картинка Render time что это. картинка 5d394a9056b6e023490c80162bccf452

Мы получили общее уравнение, которое позволяет подставить параметры (коэффициенты константного затухания, линейного и квадратичного), чтобы найти x — радиус области действия источника света.

Формула возвращает радиус примерно между 1.0 и 5.0 в зависимости от максимальной яркости источника света.

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

Результат точно такой же, как и раньше, но сейчас для каждого источника света учитывается его влияние только внутри области его действия.

Реальное применение области действия источника света.

Фрагментный шейдер, показанный выше, не будет работать на практике и служит только для иллюстрации, как мы можем избавиться от ненужных вычислений освещения. В реальности видеокарта и язык шейдеров GLSL очень плохо оптимизируют циклы и ветвления. Причной этого является то, что выполенние шейдера на видеокарте производится параллельно для различных пикселей, и многие архитектуры накладывают ограничение, что при паралельном выполнении различные потоки должны вычислять один и тот же шейдер. Часто это приводит к тому, что запущенный шейдер всегда вычисляет все ветвления, чтобы все шейдеры работали одинаковое время. (Прим пер. Это не влияет на результат вычислений, но может снижать производительность шейдера.) Из-за этого может получиться, что наша проверка на радиус бесполезна: мы всё ещё будем вычислять освещение для всех источников!

Подходящим подходом для использования области действия света будет рендеринг сфер с радиусом как у источника света. Центр сферы совпадает с позицией источника света, так что сфера содержит внутри себя область действия источника света. Здесь есть небольшая хитрость — мы используем в основном такой же отложенный фрагментный шейдер для рисования сферы. При рисовании сферы фрагментный шейдер вызывается именно для тех пикселей, на которые влияет источник света, мы рендерим только нужные пиксели и пропускаем все остальные. Иллюстрация на картинке ниже:

Render time что это. image loader. Render time что это фото. Render time что это-image loader. картинка Render time что это. картинка image loader

Мы сделаем так для каждого источника света, результаты вычислений будут сложены все вместе. Результат будет именно такой же, как и раньше, но на этот раз мы рендерим только необходимые пиксели для каждого источника света. Это значительно снижаем сложность вычислений с количество_объектов*количество_источников_света до
количество_объектов + количество_источников_света, что делает отложенный рендеринг неимоверно эффективным в сценах с большим количеством источников света.

При этом подходе всё ещё есть проблема: отсечение обратных граней должно быть включено (чтобы не рассчитывать освещение дважды) и, когда оно включено, пользователь может оказаться внутри области источника света, из-за чего она не будет рисоваться (по причине отсечения обратных граней). Это может быть решено с помощью хитрого использования stenсil буфера.

Рендеринг областей действия источников света приводит к большим потерям производительности, и хотя это значительно быстрее, чем обычное отложенное освещение, это не является лучшим решением. Существуют ещё два популярных (и более эффективных) способа рассчёта освещения при отложенном рендеринге: отложенное оcвещение (deferred lighting) и потайловое отложенное затенение (tile-based deferred shading). Эти способы невероятно эффективны при рендеринге большого количества источников света и так же позволяют относительно эффективно использовать сглаживание MSAA. Ради размера этой статьи мы оставим эти оптимизации для рассмотрения в последующих статьях.

Отложенный рендеринг vs прямой

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

Для простой сцены с небольшим количеством источников света отложенный рендеринг не обязательно будет быстрее (иногда даже медленнее), так как дополнительные расходы (запись в g-буфер и т.п.) могут перевесить преимущества от меньшего количества рассчётов освещения. В более сложных сценах отложенный рендеринг становится значительной оптимизацией, особенно при использовании более продвинутых способов рассчёта освещения.

В заключение я хочу отметить: изначально все эффекты, которые могут быть получены прямым рендерингом, так же могут быть реализованны в отложенном рендеринге, зачастую это требует лишь небольших изменений. Например, если мы хотим использовать карты нормалей при отложенном рендеринге, мы можем изменить геометрическй проход так, чтобы шейдер возвращал нормаль на основе значений из карты нормалей вместо нормали геометрической поверхности. Проход освещения вообще не потребует изменений. Если вы хотите добавить parallax mapping, вы сначала немного измените текстурные координаты в геометрическом шейдере перед чтением из текстур значений цветов, отражающей способности и нормалей. Как только вы поймёте идею отложенного рендеринга, внесение изменений в него будет довольно простым.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *