Ну и последнее уточнение, без которого описанная выше схема рендеринга не имеет никакого практического значения: алгоритм REYES потребует колоссального количества памяти, если попытаться реализовать его, начиная с тесселляции поверхностей, для всей картинки сразу. К счастью, он прекрасно работает и с ее частями (помните, я рассказывал про бакеты?), по умолчанию, размером 16x16 пикселей, из которых потом, как из мозаики, собирается все изображение.

Ффух! Отдышались? Поехали дальше.

По умолчанию величина PixelSamples в prman установлена как:

PixelSamples 2 2

Это означает, что на каждый пиксель приходится 4 точечных сэмпла . Если мы изменим эту величину (файл на диске pixelsamplesl 1 .rib):

Display “RenderMan” “framebuffer” “rgb”

Format 256 192 1 ShadingRate 64 PixelSamples 1 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 -1 1 360 WorldEnd то получим картинку без антиалиасинга и с видимыми проблемами с шейдингом - но получим ее очень быстро:

Управляя двумя переменными - ShadingRate (для любых участков вашей сцены) и PixelSamples (для всей сцены) - можно очень гибко настраивать рендеринг, добиваясь максимального качества за минимальное время.

Для продвинутых. Покажем, как управлять этими параметрами при помощи утилиты срр

- как мы отмечали раньше, такая утилита есть в поставке почти всех рендереров, совместимых с Renderman. Для этого внесем изменения в RIB (вы можете просто открыть cpptest.rib с диска):

Display “RenderMan” “framebuffer” “rgb”

Format 256 192 -1 ShadingRate SR PixelSamples SX SY Translate 0 0 2.7650300856 WorldBegin TransformBegin LightSource “ambientlight" 500

“Ughtcolor” [0.051 0.051 0.051]

LightSource “distantlight” 501 “from” [1 1.5 -1] “to” [0 0 0]

LightSource “distantlight” 502 “Ughtcolor” [0.2 0.2 0.2]

“from” [-1.3 -1.2 -1.0] "to” [00 0]

TransformEnd Surface “plastic"

Sphere 1 -1 1 360 WorldEnd

Мы определили внутри файла три символьные константы - SR, SX и SY. Теперь вызовем в командной строке препроцессор: срр -DSX=2 -DSY=2 -DSR=0.25 cpptest.rib | prman и получим в результате картинку с необходимыми установками: константы внутри файла будут заменены на значения, объявленные при вызове срр.

Несколько неожиданный ход - использовать препроцессор языка C++, которым обычно обрабатываются файлы SL, для работы с файлами RIB. В этом вся соль расширяемости Renderman

- поскольку и те, и другие файлы являются текстовыми, для их обработки годятся одни и те же утилиты.

LOD

Еще один трюк из арсенала «читинга» в Renderman - это Level of Details, или сокращенно LOD. Смысл данной настройки состоит в том, что в RIB файле можно указывать не одну геометрическую модель, а несколько, и при этом указать, начиная с какого расстояния до камеры использовать ту или иную модель в данном месте сцены. Представьте себе битву с участием сотен сражающихся. Без LOD все, что вы могли бы сделать - это использовать одну и ту же высококачественную модель как для бойцов первого плана, так и для статистов на заднем плане и что совсем печально - для огромной массы бойцов на горизонте, каждый из которых отрендерится максимум в десяток пикселей. Применяя LOD, вы можете автоматически подставлять для переднего плана - максимально детальную и проработанную модель; для среднего плана - что-то немного упрощенное; для массовки на заднем плане - палку-палку-огуречик или вообще один полигон с наложенной текстурой - и тем самым сильно уменьшить запросы по памяти и времени расчета. А разницу никто не заметит.


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