Компьютерра, 2006 № 01-02 (621-622) | страница 38



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

Для таких случаев существует технология теневых объемов (Shadow Volume). Нам придется дважды нарисовать часть сцены, на которую может попасть тень. Сначала для отбрасывающего тень объекта строится трехмерное тело, соответствующее той части пространства, которую он затеняет. Например, для круга – это будет конус, а для треугольника – пирамида. Понятно, что построить такое тело для объекта сложной формы непросто, хотя можно построить отдельный объем для каждого полигона, а потом их объединить. После чего встроенными средствами видеокарты мы можем отсечь часть сцены, не попадающую в теневой объем. Затем, отсекая то, что не попало в объем, нарисуем ту же сцену, но с приглушенными цветами. Этот метод позволяет рисовать тени, которые одни сложные объекты отбрасывают на другие не менее сложные, а также на самих себя. В последнем случае придется рисовать объект столько раз, сколько в нем содержится полигонов. Shadow Volume подходит не только для создания теней, но и для имитации ярких пучков света. В этом случае объем будет соответствовать пучку света, а части сцены, попадающие внутрь пучков, будем рисовать ярче, чем остальные. Если же тела, соответствующие теневым объемам, сделать полупрозрачными, то лучи будут отчетливо видны в пространстве. Останется только решить проблему просвечивания пучков через объекты сцены.

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