On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru


http://eksno.ru/ лючок сантехнический: практика ревизионные сантехнические.





 

Scanline рендеринг

Как я уже сказал ранее, существует два основных подхода к процессу рендеринга: scanline и raytracing. Что же представляет из себя Scanline рендеринг? Предположим, что нам необходимо получить изображение разрешением 300Х200. Программа проводит воображаемую линию через каждый пиксель, вычисляя, какие полигоны лежат на пути этой линии и вычисляет необходимый цвет пикселя, в зависимости от того, какие текстуры и цвета были назначены полигонам, встретившимся на пути этой воображаемой линии. Затем берется следующий пиксель, затем следующий - и так до конца.

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

Raytrace рендеринг


Подобно Scanline рендереру, Raytrace рендерер начинает с вычисления воображаемой линии от одного пикселя (кроме того, существует инверсный рендеринг, когда вычисления начинаются от источника света и рендеринг использованием обоих принципов). Когда воображаемая линия встречает на своем пути полигон, случаются три вещи. Сначала вычисляется цвет и яркость на основе прямого освещения источниками света, затем вычисляются углы отражения и преломления (reflection/refraction). На основе параметров отражения/преломления данного полигона луч раздваивается и двигается по двум новым направлениям. Если любой из этих лучей встретит полигон, он раздваивается снова - и так до определенного момента, когда луч либо уйдет за пределы сцены, либо встретит источник света, либо количество отражений/преломлений достигнет определенного установленного числа (recursion level). Когда все лучи закончат свое движение, вычисляется окончательное значение пикселя.

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

Я думаю вы представляете себе, с какой легкостью такие способы вычислений могут поглотить миллиарды вычислений и занять огромное количество времени. Создатели таких рендереров обычно дают пользователю возможность точно указать, сколько отражений луча обсчитывать. Иногда пользователь может пользоваться только уже заранее установленными настройками типа good; better; best.

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

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

Ретуширование


Один из наиболее сложных аспектов рендеринга - это алгоритм ретуширования. Разные методы ретуши могут применяться, чтобы увеличить либо качество, либо скорость рендеринга. Мы все знакомы с такими методами как Flat, Phong, Gouraud, но это далеко не все способы имитации вида поверхности. Каждая техника использует разные принципы и выдает разные результаты, каждая техника использует алгоритмы различной сложности.

Все алгоритмы ретуширования пытаются эмулировать то бесконечное число способов, какими луч света реагирует на поверхность в реальном мире. Отражения (reflections), отражение/поглощение света (transmission/absorbtion), рассеивание света (diffraction), преломление света (refraction), смешивание света различных источников (interference). Проще говоря, алгоритм ретуширования используется для вычисления вида поверхности при разном освещении. Самым простым алгоритмом является Flat shading - одноцветный полигон. Небольшим шагом в сторону улучшения качества работы этого алгоритма является его способность изменять оттенок цвета в зависимости от угла, под которым свет падает на поверхность. Таким образом мы можем произвести простейшую трассировку лучей - проводится воображаемая линия сквозь пиксель экрана пока она не натолкнется на полигон. Затем проводим следующую линию от этого полигона к источнику света и вычисляем получившийся угол. Когда угол вычислен, программа рендерер просто применяет нужную формулу и вычисляет цвет пикселя. Но подобная техника не рассчитана на вычисление теней, т.к. она работает только с одним источником света и не может учитывать освещение данного полигона другими источниками света. К счастью, большинство рендереров решают эту проблему тем или иным способом и нам не придется напрямую сталкиваться с этой проблемой.

Real-Time против Non-Real-Time


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

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

Реал-тайм рендереры используют множество трюков для достижения высокого качества изображения при сохранении высокой скорости. Z-буфер уже не используется. Для определения невидимых объектов используется другая техника, основанная на иерархическом положении объектов в сцене. Эти принципы применяются в таких играх, как Doom, Quake и др. Текстуры, в основном те, которые используются для стен, обсчитываются заранее с разных точек зрения и сохраняются в отдельных файлах. Затем в реальном времени просчитывается позиция игрока и накладываются наиболее подходящие текстуры. Другие рендереры (как в Quake 3 Arena) используют другую технику Color by Vertex. Все эти техники призваны ускорить процесс рендеринга, но в тоже время существенно ограничивают художников и моделлеров в осуществлении их фантазии.

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

Не все Scanline рендереры работают в реальном времени. Рендереры основанные на этом принципе также доминируют в индустрии кино и телевидения. Всем известные Pixar's RenderMan и Electric Image's Camera основаны на принципе Scanline. Есть две причины, по которым эта система используется в этих индустриях, первая - высокий уровень фотореализма не так важен, т.к. кадр появляется на экране на доли секунды, и вторая это скорость. Когда мы имеем дело с теми разрешениями, которые используются в кино-теле индустрии, даже оснащенные супермощной техникой студии рендеринга работают на пределе, и использование технологии трассировки лучей может добавить многие месяцы работы.

Нон-реал-тайм рендереры, такие, какие используются в Softimage, NewTek LightWave или Discreet 3D Studio MAX, направлены на создания высоко фотореалистичных изображений (естественно теряя при этом в скорости). Все они в основном базируются на технологии трассировки лучей. Такие рендереры могут также выпускаться отдельно от пакетов моделирования. Рендереры, основанные на технологии трассировки лучей, это идеальный инструмент для достижения высококачественных изображений, особенно для неподвижных изображений, когда зрители могут тщательно рассмотреть работу и выявить возможные недостатки. Такие рендереры могут с легкостью обрабатывать сложные сцены с большим количеством источников света и использованием отражающих/преломляющих поверхностей.

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

Назад