Остановим этот экземпляр рендерера при помощи клавиатурной комбинации 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-файл):


⇐ вернуться назад | | далее ⇒