Остановим этот экземпляр рендерера при помощи клавиатурной комбинации Ctrl-C. Возьмем образец текстового RIB-файла из начала нашей главы и сохраним его как testl .rib. Стойте, не нужно судорожно листать наше повествование в обратном направлении, вот необходимый код (он также есть на диске):
Display “RenderMan” “framebuffer” “rgb”
Format 256 192 1 ShadingRate 1 WorldBegin Surface “plastic”
Polygon “P” [0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5]
WorldEnd
Повторим наш экзерсис с рендерером, на этот раз передав программе в качестве параметра имя testl.rib:
Как видите, в результате получилось… Гм… ничего у нас не получилось. В чем же причина? Причин на самом деле несколько, и все они достаточно очевидны:
1. В нашей примитивной сцене нет источников света. Поэтому сцена получилась полностью неосвещенной (умное название для эффекта “ничего не видно”)
2. В нашей сцене используется (это не очень очевидно) полигональный объект, расположенный таким образом, чтобы полностью покрывать видимое пространство (это совсем неочевидный факт, но можете поверить мне на слово).
Использовать в качестве упражнения на рендеринг в книжке полигон, находящийся в черной-черной сцене - это, в общем, готично, но при этом не совсем педагогически правильно. Поэтому нам с вами нужно немножко поработать над нашим RIB’om, чтобы получить хоть сколько-нибудь удобоваримую картинку. Я сделал эти исправления вручную в текстовом редакторе, вы можете просто скопировать текст из книги или из файла test2.rib:
Display “RenderMan” “framebuffer” “rgb”
Format 256 192 1 ShadingRate 1 Translate 0 0 2.7650300856 WorldBegin TransformBegin
LightSource “ambientlight” 500 “lightcolor” [0.051 0.051 0.051]
LightSource “distantlight” 501 “from” [1 1.5-1] “to” [0 0 0]
LightSource “distantlight” 502 “lightcolor” [0.2 0.2 0.2]
“from” [-1.3 -1.2 -1.0] “to” [0 0 0]
TransformEnd Surface “plastic”
Sphere 1-11 360 WorldEnd
Записываем этот файл поверх старого и повторяем вызов рендерера:
Вот, совсем другое дело. Поздравляю вас с приобщением к великой могучей командной строке и обществу ее последователей и почитателей.
Если вы хорошо рассмотрели скриншот с командной строкой, то обратили внимание, что команда, которую мы выполняли, выглядит вот так:
prman testl.rib
Это не единственный возможный способ передачи информации в рендерер; как один из примеров, мы можем воспользоваться тем самым пайпингом (или «туннелированием», как его называют некоторые несознательные юниксоиды-русофилы):
type testl.rib I prman
Результат будет в точности такой же. Но это еще не все. Вы же знаете, что «туннелировать» можно не только две программы, но и целые цепочки программ?
В качестве примера (скриптоненавистники могут пропустить страницу) напишем небольшой скрипт на Perl, который будет заменять объявление материала Plastic на объявление материала Stone. Делаем новый файл, называем его magic.pl и пишем нечто вот такое:
foreach (<>) { s/plastic/stone/; print;
i
Наша цепочка выполняемых программ в данном случае немного изменится и будет выглядеть так (я переименовал RIB-файл):