Во-о-он у нее на ушке наша надпись видна - видите? Но мы сейчас интересуемся совсем не этим - мы хотим вывести с отдельные слои переменные tex и noi. В очередной раз открываем RenderMan Globals, удаляем старый слой и добавляем два новых, как показано на скриншоте:
Поскольку мы собираемся использовать не глобальные, а локальные переменные нашего шейдера, то в списке переменных их нет; соответствующие значения в поле Mode придется скопировать из заголовка исходного кода шейдера - а именно,
varying color tex и
varying float noi
Отправляем на рендеринг и получаем в папке rmanpix 2 новых файла untitled.noise.0001.tif:
в который вывелось значение переменной noi нашего шейдера (а поскольку шейдер мы применили только к голове овечки, то и видим мы его только на голове) - в этой переменной мы сохранили величину нойза до того, как перемножили ее на текстуру - и файл untitled.texture.0001. tif (в него мы выводили текстуру без нойза):
В этом месте с людьми обычно случается «кондратий иванович» и начинается вакханалия неконтролируемого рендеринга: в отдельные слои выводится все, что только можно, а затем сцена фактически заново собирается в композере, что дает невиданные ранее возможности настройки и изменения финального изображения после рендеринга - без самого рендеринга.
Полученные, таким образом, слои можно также использовать в качестве текстуры для шейдера. Например, вы можете просчитать ambient occlusion для всей сцены один раз, а потом подмешивать его в качестве текстуры в свой шейдер. Или все-таки делать это в композере - на ваше усмотрение.
Для любопытных: Среди крупных студий до сих пор нет консенсуса в том, какие именно слои и значения каких именно переменных нужны и важны для композа. Философия Weta Digital, например, в этом случае состоит в том, что рендерить нужно в максимально готовом к композитингу виде, с тем, чтобы композеры не воссоздавали сцену заново из множества слоев, повторяя фактически работу рендерера. Например, в ходе работы над фильмом “I, Robot” компании Digital Domain и Weta Digital разделили между собой планы с участием роботов NS5; при этом Weta считала отдельно только металические и пластмассовые части; DD считал diffuse, specular и отражение в отдельные файлы, и в результате получая десятки слоев на каждого робота.
Для продвинутых. Рендеринг по слоям - всего лишь один из множества методов борьбы за уменьшение времени получения конечного результата при рендеринге. Еще один, похожий на него, прием из той же серии - это всевозможное кэширование значений и последующее использование этих кэшей рендерером без долгого пересчета. Копайтесь в документации к вашему рендереру
- например, для Prman ключевыми словами будут cache и brick.
Мантра про raytracing
В жизни любого TD есть несколько извечных дилем. Например, такая: человеческое время стоит гораздо дороже, чем время машинное, и ни того, ни другого никогда не хватает. Или вот еще одна: нам нужен мегакачественный продукт, причем еще вчера.
При чем здесь рейтрейсинг, спросит наш читатель?
Да при нем, при самом - при результате рендеринга.