Чтобы не растечься мыслью по древу, ограничим исследование рендеринга следующими условиями: ПК, один Full HD монитор 32″ или более, подсоединённый к компьютеру по HDMI. Нам потребуется плеер BE: в нём настройки и возможность тестирования рендеринга представлены полнее, чем в любых других плеерах.
Чтобы всё заработало идеально, тебе нужно установить Директ X энд-юзер рентаймс отсюда: [Для просмотра данной ссылки нужно зарегистрироваться]
Также плеер BE может потребовать установить Нет Фреймворк, если он у тебя ещё не установлен.
Рендеринг, в числе прочего, отвечает за два очень важных потребительских качества:
1. Алгоритм масштабирования изображения до разрешения монитора. Вот простой тест, и всё станет сразу понятно. Изображение сжато безпотерьным видео кодеком.
[Для просмотра данной ссылки нужно зарегистрироваться]
Пробуем различные рендеры. Просмотр ведём в полноэкранном режиме.
Системный рендер. В Win XP изображение масштабировалось по билинейному алгоритму. В Win 7 вообще произошёл откат на пиксельный алгоритм.
Что такое рендер?
Самое лучшее масштабирование получается, если использовать Exchanged Video Renderer (custom presenter). Вот так, эти настройки будут оптимальны и для второго потребительского качества:
[Для просмотра данной ссылки нужно зарегистрироваться]
Пробуем. Видим, что изображение чёткое, приятное, без звона. Мне представляется, что поднимать A до -1 будет уже перебором.
Прогоним этот тестовый файл на других плеерах. Stereoscopic Player – билинейный алгоритм. Стандартный плеер от Билла, входящий в Win 7 – тоже билинейный алгоритм. KMP – ну это нужно видеть своими глазами, а то не поверишь. Попробуй также, если захочешь, на плеерах типа «дорогущий» и «навороченный».
Любителей Win 10 прошу прогнать этот файл на BE с системным рендером и на встроенном в десятку плеере и отписаться, а ещё лучше приложить снимок полноэкранного режима.
Может показаться, что данный тест натянутый: реально видео с разрешением 50×50 не встречается. Тест на то и тест, чтобы явно высветить достоинства и недостатки. Лично я хорошо вижу разницу, когда фильм 720×576 масштабируется до HD разрешения монитора по бикубическому и билинейному алгоритму.
Замечу, что если мы сохраняем плеером BE кадр, используя Exchanged Video Renderer, то он будет отмасштабирован. Например, исходник 720×576 AR 16:9, то получим bmp 1024×576. Чтобы сохранить кадр с исходным разрешением, нужно переключиться на системный рендеринг.
Кое-где можно услышать бубн, что, типа, бикубический алгоритм при увеличении разрешения подчёркивает артефакты. Это о каких таких артефактах-то идёт речь? Если смотреть рип, то быть может. В фильмах же исходного DVD качества никаких артефактов, которые подчёркивал бы бикубический алгоритм, нет.
2. Синхронизация частоты кадров фильма с частотой обновления монитора. Вот на эту тему в русскоязычной Сети я вообще не нашёл толковых статей. Всё, что я обнаружил, является переводом трёх английских статей.
3ds Max и CORONA. Как из среднего рендера сделать крутой?
Поэтому попробуем разобраться сами.
В этих статьях и их переводах муссируется мысль, что если частота кадров фильма = 25, а частота обновления монитора = 60, то напрямую достичь качественной синхронизации невозможно. Для точной синхронизации авторы предлагают, имхо, некие совершенно левые замороченные подходы и программы, вплоть до ковыряния в мониторе. Я же покажу, как можно достичь идеальной синхронизации только комбинацией настроек плеера и сплиттера.
Итак, задача: монитор 60 Гц (для примера). Нужно, ничего не ковыряя в настройках монитора и в самом мониторе, выполнить настройки по принципу «установил и забыл». То есть задать такие параметры, которые обеспечат идеальную синхронизацию для фильма с любой частотой кадров. Я приведу эти настройки, а в конце статьи опишу тест, доказывающий, что мы достигли желаемого результата.
Ещё раз хочу напомнить, что приведённые ниже настройки дадут идеальный результат для современного ЖК монитора типа Панасоник, подсоединённого по HDMI. Древнеегипетского старья VGA у меня просто нет, так что проверить действенность данных методов для VGA мне просто не на чём. Поехали.
В плеере BE существует Sync Video Renderer. В подсказках плеера BE можно прочитать, что Sync Video Renderer – это то же самое, что и Exchanged Video Renderer, но имеет дополнительные средства синхронизации. Однако это не так! Хотя бы потому, что у этих рендеров совершенно разные опции. Sync Video Renderer нам не потребуется.
В природе также существует рендер MadVR, замороченный, имеющий массу не относящихся собственно к рендерингу прибамбасов. Он нам тоже не потребуется.
На вкладке «Видео» задаём Exchanged Video Renderer (custom presenter). Параметры выставляем, как показано на фото в первом пункте. Почему 8-bit Integer? Потому что, во-первых, практически все файлы на сегодняшний день имеют такую битность, а во-вторых, мой Панасоник только столько и берёт. Так зачем здесь делать больше, а потом где-то понижать? По этой же причине нет птицы у 10-bit.
Если до этого был задан другой рендер, то, чтобы вкладка с настройками синхронизации стала активной, нужно нажать «OK» и снова войти в настройки.
Активируем вкладку «Синхронизация кадров». Перед началом действий немного теории.
Начальные сведения о том, что такое синхронизация и зачем она нужна, по-русски сносно изложены здесь:
[Для просмотра данной ссылки нужно зарегистрироваться]
VSync означает «вертикальная синхронизация». У термина «вертикальная синхронизация» два сходных значения. Первое значение – это те моменты времени, в которые нужно посылать изображение на монитор. Время между двумя вертикальными синхронизациями равно времени между обновлениями монитора.
Например, для монитора 60 Гц время между вертикальными синхронизациями составляет 1/60 = 16,67 миллисекунд. Практически никогда тот момент времени, когда, исходя из fps, нужно воспроизводить кадр, не совпадёт с моментом вертикальной синхронизации. Если мы не предпримем никаких мер, то в этих случаях в верхней части экрана будет прорисован один кадр, а в нижней – другой кадр.
Граница между этими кадрами проходит по горизонтали, и эта горизонталь может расположиться в любом месте экрана, от самого низа до самого верха. Такое безобразие называется разрывом кадра, или отсутствием синхронизации. Второе значение термина «вертикальная синхронизация» – это такая организация процесса воспроизведения, при которой в каждое обновление монитора всегда посылается один целый кадр. А не компот из двух идущих один за другим кадров. Если вертикальная синхронизация достигнута, то на всём экране, снизу до верху, всегда будет прорисован один кадр.
На всякий случай. Понятия «горизонтальная синхронизация» не существует. Просто невозможно, чтобы в левой части экрана был прорисован один кадр, а в правой – другой.
Просмотр видео на современном железе можно организовать двумя способами: видео разжимается и декодируется до RGB центральным процессором при помощи программы-декодера (например, ffdshow) и уже в разжатом RGB виде подаётся на видеокарту, либо по принципу DXVA, то есть видео разжимается и декодируется в самой видеокарте. Какой бы из этих двух способов мы ни выбрали, оптимальные настройки рендера будут одинаковыми.
Рендер не занимается декодированием. У него другая задача: продвинуть кадры на графический процессор (видеокарту) таким образом, чтобы достичь синхронизации, и выполнить масштабирование. Я не буду в десятый раз доказывать, что декодирование центральным процессором даёт более точно соответствующее исходнику изображение.
И синхронизация при декодировании ЦП получается слегка лучше, чем при задействовании DXVA. В этом ты сможешь сам убедиться, когда дойдём до тестов. Вообще DXVA изобрели, чтобы разгрузить ЦП. Но у современных компьютеров быстродействие ЦП намного превосходит требуемое для воспроизведения даже HD фильмов. Так зачем же ещё разгружать ЦП?
Возвращаемся к опциям. Сейчас я приведу перевод по существу опций, активных для Exchanged Video Renderer (custom presenter). Исходные английские тексты взяты с сайта плеера [Для просмотра данной ссылки нужно зарегистрироваться]
«VSync»
Может использоваться для включения VSync. Обычно отключать VSync не рекомендуется, поскольку отключение VSync удалит из обработки много исправлений потока. Отключение этой опции целесообразно только для отладки.
Птицу не ставим! Почему? Скоро поймём.
«Аккуратный VSync»
Может использоваться для включения точного VSync. Если точный VSync отключён, использование центрального процессора слегка уменьшится, особенно когда альтернативный VSync также отключён.
Ну насчёт того, что «использование ЦП слегка уменьшится», я бы поспорил. У меня как раз увеличивалось.
Птицу не ставим.
«Альтернативный VSync»
Включение альтернативного VSync обойдёт установленный по умолчанию VSync, встроенный в D3D. Он зачастую может избавить от проблем разрыва и является предпочтительным режимом, нежели просто VSync, если Ваши аппаратные средства/драйверы совместимы с ним.
Птицу ставим. Вот теперь стало понятно, почему мы удалили птицы у двух предыдущих опций. Хоть для альтернативного VSync и сказано, что он обойдёт, но это не так. Если бы мы оставили включёнными обычный VSync и аккуратный VSync, то они бы встревали в дело, и результат был бы хуже, чем при использовании чисто альтернативного VSync.
Заметим, что на вкладке «Видео» птица нужна у опции «Полноэкранный Direct3D». Эта опция не конфликтует с альтернативным VSync, а наоборот, улучшает результат в полноэкранном режиме.
«Заполнить GPU перед VSync»
Оригинальное английское название – «Flush GPU before VSync». Flush имеет много значений, в том числе и прямо противоположных: затоплять, наполнять до краёв, смывать, очищать, способствовать росту, возбуждать, воспламенять, взлетать, обильно течь, воодушевить. Исходя из последующего объяснения, я бы перевёл этот глагол как «ускорять».
Ускорение графического процессора перед вертикальной синхронизацией уменьшит вероятность разрыва, поскольку это вынуждает графический процессор подготовить кадр к подаче как можно скорее. Таким образом, кадр будет готов к подаче на VSync.
Я бы назвал эту опцию так: «Ускорить графический процессор видеокарты перед вертикальной синхронизацией».
Птицу не ставим. Не ставим.
«Заполнить GPU после представления»
Ускорение графического процессора после вертикальной синхронизации уменьшит вероятность разрыва, поскольку это вынуждает драйвер реализовать подачу кадра как можно скорее.
Я бы назвал эту опцию так: «Ускорить графический процессор видеокарты после подачи кадра».
Птицу ставим.
«Ожидать заполнения» – в оригинале «Wait for flushes».
This will cause the renderer to spin, waiting for the GPU flushes. This can be useful if the driver for some reason will ignore single flushes and will also enable the GPU time statistic.
Это заставит рендеринг войти во «вращательный режим», ожидая ускорения графического процессора. Это может быть полезно, если драйвер по некоторым причинам проигнорирует единичные операции по ускорению, а также позволит использовать статистику времени графического процессора.
Мои наблюдения показали, что если мы поставим здесь птицу, то расстояние между зелёной и красной линиями на графике увеличится. Я бы назвал эту опцию так: «Выделить рендеру дополнительное время, за которое графический процессор видеокарты успеет ускориться».
Будем считать, что драйвер у тебя хороший и ничего не проигнорирует. Тем не менее птицу ставим.
Мне представляется, что влияние включения и выключения трёх последних опций на достижение оптимального результата зависит от железа, и в первую очередь от видеокарты. Так что поэкспериментируй.
«Сдвиг VSync» оставляем на 0.
«Отключить эффекты рабочего стола» – птицу ставим.
«Включить коррекцию времени кадра»
Включите это только тогда, когда имеет место «заикание» видео из-за неисправного декодера или сплиттера. Например, контент VC-1 в контейнере M2TS на blu-ray в настоящее время нуждается в этом.
Птицу не ставим.
OK.
Есть ещё три важных параметра, которые нужно настроить.
На момент написания этой статьи последний релиз плеера BE был 1.5.1. В этом релизе хорошо прописаны все сплиттеры (называемые здесь «фильтры источников»), кроме ts. Причём фильтр источника ts из BE не позволяет достичь хорошей синхронизации не только для контента VC-1, но и для любого другого контента.
Поэтому в настройках плеера нужно отключить фильтр источника MPEG/PS/TS/PVA и задействовать соответствующий сплиттер из LAV. В LAV этот сплиттер доведён до совершенства, и никакого «заикания» и «запинания» просто не будет. А что же изменится, если мы отключим также и все остальные фильтры источников в BE и будем всё сплиттерить через LAV? По моим наблюдениям, не изменится ничего.
Второй параметр. Идём «Настройки» – «Встроенные фильтры» – «Видео декодеры» – «Настройка видеодекодера». В графе «Число потоков декодирования» выставляем точно количество физических ядер в твоём процессоре. А не число нитей, не авто, и не что-то другое. Если ты декодируешь ffdshow, то в его настройках тоже нужно задать число физических ядер процессора. Например, у меня «DualCore Intel Celeron G1840, 2800 MHz (28 x 100)», и я выставляю 2. А не число нитей = 8.
Третий параметр. Идём в панель управления видео картой и везде задаём «Использовать настройки видеоплеера». «Выходной динамический диапазон» задаём «Полный». Процессор для PhysX лучше задать ЦП.
С настройками всё. Выставили все эти настройки один раз и навсегда, и забыли.
Последний раз редактировалось Жрец Нефтиды; 19.01.2019 в 20:27 .
Источник: videoforums.ru
Рендер — это что такое? Как его настроить?
Многие элементы визуального окружения современного человека сегодня создаются с помощью программ компьютерной графики. Без визуализаций, сделанных 3D-художниками, не может обойтись ни архитектурная или дизайнерская студия, ни производители компьютерных игр.
Технология создания подобного изображения – фотореалистического или имитирующего различные художественные техники – состоит из нескольких технологических этапов. Рендер — это важнейший из них, часто заключительный, от которого зависит конечный результат.
Происхождение термина
Слово «рендер» (или «рендеринг») пришло, как и многое, связанное с IP-технологиями, из английского языка. Происходит оно от старофранцузского rendre, означающего «делать», «дать», «возвратить», «вернуть». Более глубокие корни этого глагола восходят к древней латыни: re – префикс, означающий «назад», и dare – «давать».
Отсюда – один из смыслов современного термина. Рендер – это в том числе процесс воссоздания плоскостного изображения на основе трехмерной модели, содержащей сведения о физических свойствах объекта – его форме, фактуре поверхности, освещенности и так далее.
Рендер и визуализация
Вошедшее сначала в лексикон тех, кто профессионально занимается цифровыми технологиями создания изображений, это слово все чаще применяется и в повседневном обиходе. Предоставить готовый рендер просят, например, при заказе мебели – отдельного объекта или обстановки целого помещения, а при проектировании интерьера или всего здания рендер – это одно из основных средств донести до заказчика смысл идей архитектора или дизайнера.
Имеется синоним, близкий по значению и чаще применяемый в обычной среде, хотя и более громоздкий, – визуализация. Среди профессионалов архитектурной или игровой компьютерной графики сегодня принято иметь узкую специализацию: есть те, кто занимается моделингом — создает трехмерные объекты, и те, кто обеспечивает рендеринг готовой сцены – выставляет освещение, выбирает точку зрения и настраивает, а потом и запускает рендер-программу.
Определения
Это слово имеет несколько значений:
- Рендер, или рендеринг, – отрисовка, процесс получения технического или художественного плоскостного растрового изображения на основе трехмерных цифровых моделей, созданных при помощи специальных программных пакетов – Blender, 3D Max, CINEMA, Maya и др.
- Рендер – это, собственно, результат такого процесса — растровая картинка, фотография, а также изображение героев и окружения в компьютерных играх или созданные тридэшниками видеофайлы, используемые при производстве фильмов – обычных или анимационных.
- Рендер, или рендерер, – так называют специальный софт, с помощью которого и происходит преобразование 3D-моделей в изображение. Такие программы могут быть встроены в графический пакет или применяться в виде отдельных приложений: RenderMan, Mental Ray, V-ray, Corona, Brasil, Maxwell, FinalRender, Fryrender, Modo и многие другие. Рендеры, как и все, связанное с цифровыми технологиями, постоянно обновляются. Они отличаются алгоритмами, применяемыми для обсчета физических характеристик моделей и их окружения. На их основе создаются целые системы рендеринга, позволяющие создавать свои материалы, светильники, камеры и т. п.
Типы рендера: online и пререндеринг
Различают два основных типа рендера в зависимости от скорости, с которой должно происходить получение готового изображения. Первый – рендеринг в реальном времени, необходимый в интерактивной графике, в основном в компьютерных играх. Здесь нужен быстрый рендер, изображение должно выводиться на экран мгновенно, поэтому многое в сцене рассчитывается заранее и сохраняется в ней в виде отдельных данных. К ним относятся текстуры, определяющие внешний вид объектов и освещение. Программы, используемые для онлайн-рендера, используют в основном ресурсы графической карты и оперативной памяти компьютера и в меньшей степени – процессора.
Для рендера сцен, более сложных визуально, а также там, где вопрос скорости не так актуален, когда гораздо важнее качество рендера, используются другие методы и программы для рендеринга. В этом случае используется вся мощь многоядерных процессоров, выставляются самые высокие параметры разрешения текстур, обсчета освещения. Часто применяется и постобработка рендера, позволяющая добиться высокой степени фотореалистичности или нужного художественного эффекта.
Методы просчета сцены
Выбор способов получения изображения зависит от конкретной задачи и часто от личных предпочтений и опыта визуализатора. Разрабатываются всё новые системы рендера – или узкоспециализированные, или универсальные. Сегодня в основе самых распространенных программ-рендеров лежат три основных вычислительных метода:
- Растеризация (Scanline) – метод, при котором изображение создается просчетом не отдельных точек-пикселей, а целых граней-полигонов и крупных участков поверхностей. Текстуры, определяющие свойства объектов, как и свет в сцене, зафиксированы в виде неизменных данных. Получаемое изображение часто не отражает перспективных изменений освещенности, глубины резкости и т. д. Чаще применяется в системах для просчета сцен в играх и в видеопродакшене.
- Трассировка лучей (Raytracing) – физика сцены просчитывается на основе лучей, исходящих из объектива виртуальной камеры и анализа взаимодействия каждого луча с объектами, с которыми он встречается в сцене. В зависимости от количества и качества таких «отскоков» имитируется отражение или преломление света, его цвет, насыщенность и т. д. Качество получаемой картинки по сравнению с растеризацией значительно выше, но за её реалистичность приходится платить повышенным расходом ресурсов.
- Расчет отраженного света (Radiosity) – каждая точка, каждый пиксель изображения наделяется цветом, который не зависит от камеры. На него влияют глобальные и местные источники света и окружение. Такой метод позволяет рассчитать появление на поверхности модели цветовых и световых рефлексов от рядом расположенных объектов.
Практика показывает, что самые продвинутые и популярные системы рендера использует сочетание всех или основных методов. Это позволяет добиться максимального фотореализма и достоверности в отображении физических процессов в данной сцене.
Последовательность рендера
Хотя современный подход в компьютерной графике предпочитает выделить рендер в обособленный этап, который предполагает наличие специальных знаний и навыков, по сути, он неотделим от всего процесса подготовки визуализации. Если, например, проектируется интерьер, рендер будет зависеть от вида применяемых материалов, а у каждой системы визуализации свой алгоритм имитации текстуры и фактуры поверхности.
Это же относится и к способам освещения сцены. Настройка естественного и искусственного света, свойств собственной и падающей тени, силы рефлексов, эффектов самосвечения – следующий этап создания визуализации сцены. Как настроить рендер, зависит от используемого софта и от производительности системы. В каждом пакете и программе-визуализаторе есть свои тонкости и нюансы.
Например, Corona Renderer обладает возможностью регулирования настроек непосредственно в ходе проявления итоговой картинки. В режиме онлайн можно изменять мощность светильников, регулировать цветность, резкость изображения.
Постобработка результатов рендера
Для конкретной задачи логично применять особенные методики визуализации. В архитектуре требуются другие изобразительные средства, чем при создании технической иллюстрации. Рендер экстерьера, например, часто требует от исполнителя владения графическими пакетами по работе с растровыми изображениями, самый популярный из которых — Adobe Photoshop. Причем не всегда это делается для повышения фотореалистичности. Современные тенденции в архитектурной подаче предусматривают имитацию ручной графики – акварели, гуаши, черчения тушью и т. д.
Качественная постобработка рендера обычно начинается с выбора нужного формата файла, получаемого после окончания работы программы. Принято готовое изображение сохранять послойно, задействуя отдельные цветовые каналы. Это позволяет добиться высокого результата при сведении всех слоёв в общее изображение, используя более точную и тонкую цветовую настройку.
Рендер и производительность системы
Выполнение качественной визуализации зависит не только от программного обеспечения процесса. На итоговый результат влияет мощность используемого «железа». Особенно этот фактор влияет на скорость работы – сложная сцена иногда рендерится несколько дней, если компьютер не имеет достаточных объемов оперативной памяти или обладает малопроизводительным процессором.
Как ускорить рендер и улучшить итоговый результат, если ресурсов не хватает? Можно изменить настройки программы, уменьшив до разумных величин разрешение текстур материалов и финишного изображения, изменив параметры светильников так, чтобы свет и тени обсчитывались более крупными участками, без излишней деталировки и т. д. Если есть сеть, можно использовать пакетный рендер, когда для обсчета изображения привлекаются мощности других компьютеров.
Рендер-ферма
Сегодня возможно использование мощностей удаленных компьютерных кластеров, оказывающих услуги по пакетной обработке 3D-файлов. Это высокопроизводительные системы, способные за короткий срок визуализировать самые сложные и насыщенные сцены. Они справятся с любыми визуальными эффектами даже при создании видеофайлов большой длительности.
Связавшись с поставщиком таких услуг, список которых всегда можно найти в Интернете, согласовав стоимость и условия подготовки файлов, можно существенно сэкономить на скорости работы и добиться необходимого уровня качества итогового изображения. В распоряжении таких компаний бывает до нескольких тысяч процессоров и сотни терабайт оперативки. Рендер-ферма рассчитывает стоимость работ, исходя из объема исходного файла и срока выполнения визуализации. Например, стоимость одного кадра разрешением 1920х1080, для рендеринга которого на стандартном оборудовании потребуется 3 часа, составляет около 100 рублей. Сцена просчитывается в течение 8 минут.
Правильный выбор
Ответ на вопрос о том, как сделать рендер небольшого и простого по форме объекта или насыщенной визуальными эффектами анимационной презентации коттеджного поселка, предполагает различный подход. В случае самостоятельного выполнения подобной работы необходимо грамотно выбрать необходимое программное обеспечение и позаботиться о достаточной мощности компьютерного оборудования. В любом случае от последнего этапа работы – рендеринга – будет зависеть, устроит ли вас итоговый результат.
Источник: fb.ru
Что такое рендеринг? И что такое рендер? Словарь разработчиков компьютерных игр!
В продолжении ликбеза по компьютерной графике как для программистов, так и для художников хочу поговорить о том что такое рендеринг. Вопрос не так сложен как кажется, под катом подробное и доступное объяснение!
Я начал писать статьи, которые являются ликбезом для разработчика игр. И поторопился, написав статью про шейдеры, не рассказав что же такое рендеринг. Поэтому эта статья будет приквелом к введению в шейдеры и отправным пунктом в нашем ликбезе.
Что такое рендеринг? (для программистов)
Итак, Википедия дает такое определение: Ре́ндеринг (англ. rendering — «визуализация») — термин в компьютерной графике, обозначающий процесс получения изображения по модели с помощью компьютерной программы.
Довольно неплохое определение, продолжим с ним. Рендеринг – это визуализация. В компьютерной графике и 3д-художники и программисты под рендерингом понимают создание плоской картинки — цифрового растрового изображения из 3д сцены.
То есть, неформальный ответ на наш вопрос “Что такое рендеринг?” – это получение 2д картинки (на экране или в файле не важно). А компьютерная программа, производящая рендеринг, называется рендером (англ. render) или рендерером (англ. renderer).
Рендер
В свою очередь словом “рендер” называют чаще всего результат рендеринга. Но иногда и процесс называют так же (просто в английском глагол – render перенесся в русский, он короче и удобнее). Вы, наверняка, встречали различные картинки в интернете, с подписью “Угадай рендер или фото?”. Имеется ввиду это 3D-визуализация или реальная фотография (уж настолько компьютерная графика продвинулась, что порой и не разберешься).
Виды рендеринга
В зависимости от возможности сделать вычисления параллельными существуют:
- многопоточный рендеринг – вычисления выполняются параллельно в несколько потоков, на нескольких ядрах процессора,
- однопоточный рендеринг – в этом случае вычисления выполняются в одном потоке синхронно.
Существует много алгоритмов рендеринга, но все их можно разделить на две группы по принципу получения изображения: растеризация 3д моделей и трасировка лучей. Оба способа используются в видеоиграх. Но трасировка лучей чаще используется не для получения изображений в режиме реального времени, а для подготовки так называемых лайтмапов – световых карт, которые предрасчитываются во время разработки, а после результаты предрасчета используются во время выполнения.
В чем суть методов? Как работает растеризация и трасировка лучей? Начнем с растеризация.
Растеризация полигональной модели
Сцена состоит из моделей, расположенных на ней. В свою очередь каждая модель состоит из примитивов.
Это могут быть точки, отрезки, треугольники и некоторые другие примитивы, такие как квады например. Но если мы рендерим не точки и не отрезки, любые примитивы превращаются в треугольники.
Задача растеризатора (программа, которая выполняет растеризацию) получить из этих примитивов пиксели результирующего изображения. Растеризация в разрезе графического пайплайна, происходит после вершинного шейдера и до фрагментного (Статья про шейдеры).
*возможно следующей статьёй будет обещанный мной разбор графического пайплайна, напишите в комментариях нужен ли такой разбор, мне будет приятно и полезно узнать скольким людям интересно это всё. Я сделал отдельную страничку где есть список разобранных тем и будущих – Для разработчиков игр
В случае с отрезком нужно получить пиксели линии соединяющей две точки, в случае с треугольником пиксели которые внутри него. Для первой задачи применяется алгоритм Брезенхема, для второй может применяться алгоритм заметания прямыми или проверки барицентрических координат.
Сложная модель персонажа состоит из мельчайших треугольников и растеризатор генерирует из неё вполне достоверную картинку. Почему тогда заморачиваться с трассировкой лучей? Почему не растеризовать и все? А смысл вот в чем, растеризатор знает только своё рутинное дело, треугольники – в пиксели. Он ничего не знает об объектах рядом с треугольником.
А это значит что все физические процессы которые происходят в реальном мире он учесть не в состоянии. Эти процессы прямым образом влияют на изображение. Отражения, рефлексы, тени, подповерхностное рассеивание и так далее! Все без чего мы будем видеть просто пластмассовые модельки в вакууме…
А игроки хотят графоний! Игрокам нужен фотореализм!
И приходится графическим программистам изобретать различные техники, чтобы достичь близости к фотореализму. Для этого шейдерные программы используют текстуры, в которых предрассчитаны разные данные света, отражения, теней и подповерхностного рассеивания.
В свою очередь трассировка лучей позволяет рассчитать эти данные, но ценой большего времени рассчета, которое не может быть произведено во время выполнения. Рассмотрим, что из себя представляет этот метод.
Трасировка лучей (англ. ray tracing)
Помните о корпускулярно волновом дуализме? Напомню в чем суть: свет ведёт себя и как волны и как поток частиц – фотонов. Так вот трассировка (от англ “trace” прослеживать путь), это симуляция лучей света, грубо говоря. Но трассирование каждого луча света в сцене непрактично и занимает неприемлемо долгое время.