specularcolor * Ks * specular(Nf,V,roughness) );

}

Как видно из заголовка шейдера, никакие переменные из него вывести в виде отдельного слоя не получится; для этого придется заниматься модификацией кода. Чтобы получить diffuse в виде отдельного слоя, шейдер нужно изменить, например, вот таким образом:

surface plastic( float Ks=.5, Kd=.5, Ka=1,

roughness=.1; color specularcolor=1; output color diffuseC = 0; )

{

normal Nf; vector V;

Nf = faceforward( normalize(N), I );

V = -normalize(l);

diffuseC = Kd*diffuse(Nf);

Oi = Os;

Ci = Os * ( Cs * (Ka*ambient() + diffuseC) +

specularcolor * Ks * specular(Nf,V,roughness) );

}

Как видите, для решения даже простой задачи, которую поставили перед нами требования реального продакшна, потребовалось пусть небольшое, но изменение стандартного шейдера. Отсюда и последует наш совет.

Ничто не дает большего чуства контроля над ситуацией, как собственноручно сделанный, отобранный и настроенный инструментарий. В особенности это касается шейдеров, и в еще большей особенности - тех самых шейдеров, которые идут в стандартной поставке любого Renderman-совместимого рендерера.

Эти шейдеры хороши, подробно описаны, по ним хорошо учиться - но потом наступает момент, когда вы хотите чего-то нового, существующие возможности вас не устраивают: это означает, что пора начинать писать свое.

Так вот, совет наш будет таким: не используйте стандартные шейдеры. С ними сложно рендерить по слоям, с ними сложно настраивать освещение, экпериментировать с многослойными текстурами. Напишите свои шейдеры, хорошенько их проверьте в бою, прооптимизируйте и настройте под себя - и всегда и везде пользуйтесь ними.

Для любознательных - пример из жизни Вы думаете, что все, выше написанное - трудно, тяжело и малоприменимо? Вот вам реальный пример из реального проекта со слов человека, его делавшего, и пересказаный моими собственными словами.

Итак, в наличии имеется сцена с внутренностями огромного здания. Изначальная диспозиция такова: здание смоделировано полигонами в количестве сколько-то там миллионов штук, при этом постоянно обновляется и достраивается. Генерация RIB'a занимает порядка десяти минут. Здание буквально купается в ярком солнечном свете, а решетчатая облицовка, колонны и перекрытия галерей отбрасывают четкие тени на пол и стены. Все остальное освещение в сцене

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

Налицо патовая ситуация: .явное проявление болезни под названием “nht,etncz глобальное освещение” с осложнениями в виде невозможно детализированной модели.

Первым делом в таких случаях в руки берется топор и из сцены к такой-то бабушке удаляется все, что не будет видно камере в конкретном кадре. Имена всех удаленных объектов аккуратно записываются в отдельный файлик; таким образом нам будет легче убирать их в следующий раз, когда гигантскую модель здания в очередной раз обновят.

Далее сцена анализируется и разбивается на части. В качестве критерия разбивки используется материал, из которого изготовлен предмет - пластик, бетон, стекло, металл, мрамор и так далее. Каждая часть экспортируется в RIB, удаляется из сцены и заново подключается в сцену с использованием RIBbox’oB - которые вешаются на простые кубики и шарики. На этом этапе к сцене вернулась возможность поворачиваться во вьюпорте без натужного скрипа жестким диском.


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