11 февр. 2018 г.

Трехмерное моделирование с помощью POV-Ray.




1. О программе POV-Ray

Программа относится к категории freeware с некоторыми ограничениями. Ее можно скачать с официального сайта POVRay.org. В 2013 году была доступна версия 3.7. Сайт англоязычный. К программе имеется неплохой HELP. На сайте имеется необходимая справочная информация и много другого полезного.

Система координат в POV-Ray общепринятая. Можно считать, что левый нижний угол экрана монитора является началом координат Ось X направлена по горизонту, ось Y - по вертикали, ось Z - уходит за экран. Отрицательные значения отсчитываются в противоположном направлении.

Программа POV-Ray не имеет визуального моделлера. И в этом ее главное отличие от 3Ds Max и Blender. Сцена оформляется в виде текстового файла. Используется собственный язык SDL описания сцены. Контроль синтаксиса выполняется парсером. Правильный файл передается рендеру.

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

2.Стартуем

Интерфейс программы относительно прост. Проделаем следующее. Выберем пункт меню File, а в нем - New. Вставим в окно программы следующий текст

camera { location <0,0,-5> look_at <0,0,0> }       //1
light_source { <4,4,-5> color rgb 1 shadowless}        //2
// light_source { <-4,4,-5> color rgb 1}        //3
sphere{<0,0,10> 10 pigment{color  rgb 1}}  //4
#declare R=0.9;        //5
#declare tr=0.0;        //6
#declare kf=pi/3;  
 sphere{<0,0,10> 10 pigment{color rgb 1}no_shadow} //7
 sphere{<R*cos(0),R*sin(0),0> 1.3 pigment{color rgb <0,1,0,tr>}}//8
 sphere{<R*cos(2*kf),R*sin(2*kf),0> 1.3 pigment{color rgb <1,0,0,tr>}}//9
 sphere{<R*cos(4*kf),R*sin(4*kf),0> 1.3 pigment{color rgb <1,1,0,tr>}} //10
 sphere{<0,0,-0.7> 1 pigment{color rgb<1,1,1,tr >}} //11

Теперь выберем пункт меню Run, и через небольшой промежуток времени получим изображение сцены. Любители 3Ds Max будут весьма удивлены столь быстрым результатом.




Разберем представленный пример. 
Основное окно программы - текстовый редактор, причем разработчики приложили немало усилий, чтобы работа с текстом была комфортной. Поддерживается технология drag and drop для копирования и перемещения символов. Действует режим авто подстановки ключевых слов. Наконец возможна быстрая вставка элементов сцены через пункт меню Insert.

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

Обратимся к синтаксису SDL.
Символы // указывают, что все последующие символы строки при анализе текстового файла будут игнорироваться . Важно помнить, что в SDL слово sphere обозначает объект сфера, а вот на слово Sphere парсер выдаст сообщение об ошибке.
Обязательные элементы сцены - камера и источник света (camera и light_source). Через камеру мы наблюдаем сцену, а источник света делает ее видимой. Все, что относится к параметрам камеры, источника света, конкретному объекту сцены заключается в фигурные скобки. В POV-Ray имеется понятие вектора. Любое число цифр, заключенных в угловые скобки <  >, POV-Ray считает вектором и интерпретирует, как нечто неразделимое.

Камера у нас стоит в точке <0,0,-5> и смотрит в точку <0,0,0>, т.е. в начало координат. Именно так нужно интерпретировать служебные слова location и look_at.

Сцену мы освещаем точечным источником света, расположенным в точке <4,4,-5>. А вот дополнительный параметр color rgb 1 задает цвет источника света.Он - белый.

Вспомним, что существует цветовая схема RGB (Red-Green-Blue). Тогда вектор <1,1,1> указывает, что каждая цветовая составляющая имеет единичную интенсивность и, отсюда, наш источник света является белым.
А вот параметр color rgb <1,0,0> определяет красный источник света.

Сцена состоит из 5 сфер (sphere). Сфера в строке 4 используется в качестве фона сцены. Она имеет большой радиус и ее центр находится в глубине сцены на расстоянии 10 от начала координат. (По умолчанию трехмерные объекты строятся в виде невидимой бесконечно мелкой сетки.)
Параметр pigment {color rgb 1} обтягивает поверхность сферы однородным полотном белого цвета. Наконец параметр shadowless просто указывает рендеру - не отображать тень объектов.
Попробуем расположить три сферы в вершинах равностороннего треугольника, лежащего в плоскости ХУ. Резонно ввести радиус вектор R, а ХУ координаты вычислять по тригонометрическим формулам.

В POV-Ray существуют служебные слова, такие как sphere, camera, light_source и др.. Символы, неизвестные парсеру, необходимо объявлять с помощью директивы #declare. Идентификаторы pi,cos,sin, используемые при расчете ХУ координат, известны POV-Ray и не требуют объявления.

3.Использование камеры


В POV-Ray определены несколько типов камер. По умолчанию используется перспективная (perspective) камера. Можно избежать перспективных искажений, если использовать ортографическую (orthographic) камеру. Реалистичность сцены можно подчеркнуть, используя глубину резкости.
Как и в настоящей камере нужно указать плоскость фокусировки при помощи вектора focal_point. Известно, что глубина резкости зависит от относительного отверстия объектива. Эту роль выполняет параметр aperture . Наконец степенью размытости контуров управляет параметр blur_samples .

camera {perspective location <0,-1,-8>look_at <0,0,0>
aperture 2  focal_point <0,0,0>  blur_samples 20}
light_source { <0, -1, -1> color rgb <1,0,0.3> shadowless}
light_source { <0, 5, -10> color rgb <1,1,1> shadowless}     

plane { <0,0,1> 5 pigment {color rgb <0.7,0.7,0.7>}}   
sphere{<0,0,0> 1 pigment {color  rgb <1,1,1> }}
sphere{<-1.5,-1,-3> 1 pigment {color  rgb <0,1,0> }}
sphere{<1.5,-1,-3> 1 pigment {color  rgb <0,1,0> }}
sphere{<2,1,2> 1 pigment {color  rgb <0,1,1>}} 
sphere{<-2,1,2> 1 pigment {color  rgb <0,1,1>}}  
torus {3,0.5 rotate<-35,0,0>pigment {color rgb <0.7,0.7,0.7>}}
torus {3,0.5 rotate<90,0,0>pigment {color rgb <1,0.7,0.3> }}
 
 
 


Итак на сцене 5 сфер и два тороида. В качестве фона используется бесконечная плоскость (plane) . Положение плоскости определяется вектором нормали и величиной удаления от начала координат. Плоскость фокусировки совпадает с центром первой сферы. Влияние значений параметров можно выяснить с помощью самостоятельных экспериментов.

Тороид (torus), можно получить, перемещая сферу по направляющей в виде окружности. Потому у torus два параметра, это радиус сферы и радиус окружности. По умолчанию тороид строится в плоскости XZ, его центром является начало координат.

Модификатор rotate, выполняет разворот первого тороида на угол -35 градусов вокруг оси Х, а второго - на угол 90 градусов. Для освещения сцены используются два источника света. Один расположен как бы сверху, а второй (желто-красный) расположен близко к сцене. Из-за этого серая плоскость приобретает цвет источника освещения.