Что же такое Renderman? Это - стандарт описания трехмерных данных для их последующей визуализации. В сборнике часто встречающихся вопросов и ответов ньюсгруппы comp.graphics, rendering.renderman написано так: “Renderman - стандартный интерфейс между программами моделирования и рендеринга для создания высококачественного фотореалистического изображения”. Создавая стандарт Renderman {а работа эта началась в доисторические времена
- еще в 1987 году), компания Pixar поставила перед собой достаточно амбициозную цель: пытаясь воспользоваться идеями формата файлов Postscript как некоей среды для обмена векторными двухмерными данными {а к тому моменту Postscript был уже широко развит и использовался повсеместно), сделать аналогичный шаг и создать новый универсальный формат для обмена информацией между системами для моделирования и анимации и системами для рендеринга, который был бы достаточно универсален для того, чтобы занять место Postscript в мире трехмерных приложений.
Основная особенность стандарта Renderman в том, что данный стандарт разделяет понятия геометрии в сцене и материала, который накладывается на данную геометрию. Параметры и строение сцены описываются посредством Renderman Interface. В первоначальном варианте спецификации стандарта этот интерфейс был для языка программирования С, используя который вы могли написать программу, которая бы вызывала рендерер и передавала ему необходимые параметры. Чтобы отрендерить прямоугольник, было необходимо написать приблизительно такую программу (текст программы адаптирован из книги RenderWan Companion):
^include <ri.h>
RtPoint Square[4] = { {.5,.5,.5}, {.5,-.5,.5J,
{-.5,-.5,.5}, {-.5,.5,.5} };
int main(void)
I
Ri Begin (RLNULL);
Ri Display ("RenderMan”, RLFRAMEBUFFER, “rgb”, RLNULL);
RiFormat{(Rtlnt) 256, (Rtlnt) 192, 1.0);
RiShadingRate(I.O);
RiWorldBegin();
RiSurface(“plastic”, RLNULL);
RiPolygon( (Rtlnt) 4, RI_P, (RtPointer) Square, RI_NULL);
Ri World End ();
RiEnd();
return 0;
}
Ничего особо страшного, ной приятного тоже маловато - для человека с непрограммистским складом ума. В качестве дополнительной возможности первой спецификации значился экспорт данных в промежуточный формат данных под названием RIB, что расшифровывается как Renderman Interface Bytestream. Вот как выглядит та же сцена в этом формате (я получил ее, скомпилировав приведенный выше код на С в исполняемый файл и запустив полученную программу):
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]
World End
Интуиция вас не подвела: впоследствии окажется, что в большинстве случаев гораздо удобнее работать именное форматом RIB, который и стал основной частью Renderman Interface, хотя возможность использования С-интерфейса по-прежнему существует (для тех случаев, например, когда вам проще генерировать геометрию процедурно, чем моделировать ее традиционным путем).
У файлов в формате RIB, описывающих геометрию сцены, обычно (внимание!) такое расширение: *.rib, В нашем примере вы видели обычное текстовое представление этого формата, однако стандартом также предусматривается двоичное представление таких файлов. Такие двоичные файлы занимают гораздо меньше места и хорошо подходят для случаев, когда сцена не требует дальнейшей обработки и все, что нужно сделать - передать файл рендереру. Как указано в спецификации формата, RIB изначально предполагался не как средство обмена геометрической и структурной информацией между различными системами моделирования и анимации, но как средство передачи данных от таких систем к рендерерам, то есть файлы такого формата не обязательно должны быть максимально удобными для импорта в программу-моделлер, но должны представлять максимум информации для последующего рендеринга.