{

color tex = texture(“texture.tif”, s, t); float nof = noise(freq*s,freq*t);

Ci = tex*noi;

}

Подход, рекомендуемый некоторыми источниками, состоит в том, что шейдеры необходимо разбивать на слои в соответствии с накладываемыми эффектами, и затем производить финальные операции уже над полученными ранее слоями. У этой модели есть свои преимущества и недостатки, сторонники и противники. Уточним лишь, что оптимизирующий компилятор шейдеров из комплекта Renderman Pro Server компилирует вышеприведенные шейдеры в почти одинаковый код.

Вносим также некоторые изменения в RIB:

Display “RenderMan” “framebuffer” “rgb”

Format 256 192 -1 ShadingRate 1 Translate 0 0 2.7650300856 World Begin TransformBegin LightSource "ambientlight” 500

"Ughtcolor” [0.051 0.051 0.051]

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

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

“from" [-1.3 -1.2 -1.0] “to” [000]

Transform End TransformBegin Rotate 90 1 0 0 Rotate 90 0 0 1 Surface “textured_noise”

Sphere 1 -1 1 360 TransformEnd WorldEnd

Вот что мы сделали: исправили имя шейдера и немножко повернули наш шарик, чтобы надпись нормально читалась.

Компилируем шейдер:

shader textured_noise.sl

Рендерим картинку:

prman test4.rib и получаем огромное количество сообщений об ошибках, потому что рендерер не распознал нашу текстуру как правильный проолтимизированный формат. Строго говоря, какая-то картинка у нас получилась и так, но поскольку нас интересует академическая правильность процесса, сделаем два дополнительных действия.

Во-первых, подготовим картинку к рендерингу:

txmake texture.tif texture.tx

То есть: берем нашу картинку и переводим ее в новый формат, оптимизированный для рендеринга.

Во-вторых, изменим шейдер:

surface textured_noise (float freq=100; )

{

Ci = texture(“texture.tx”, s, t)*noise(freq*s,freq*t);

)

Для любознательных. Вас никто не заставляет называть свои файлы тем или иным образом. Вы можете хранить свой шейдеры в файлах с расширением ‘.shader; свою геометрию - в файлах с расширением *.rib, *.ri или ‘.renderman; инклуды в файлах *.h или *.inc. Просто стремитесь к тому, чтобы всегда придерживаться одного и того же логичного и удобного для вас именования файлов. Система именования, которую я использую в этой главе, считается стандартной и широко используется в литературе и документации.

Для продвинутых. В процессе обработки текстур RAT включает в название файла параметры командной строки, которые использовались при вызове txmake. Например, вот так: metal024.tif. ppu.tx. Расшифровку скрытого в этом имени тайного значения оставим в качестве задания для самостоятельной работы для вас, продвинутые.

Теперь вроде бы все правильно - компилируем, запускаем рендерер и получаем в результате:

Могучая кучка Собственно говоря, вычислительное ядро Renderman Pro Server состоит из трех программ: prman, shader и txmake. Как мы уже говорили раньше, подавляющее большинство Renderman-совместимых рендереров придерживается такой же архитектуры, просто называя файлы другими именами. Приведем лишь некоторые из них:


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