?

Log in

No account? Create an account
 
 
09 July 2012 @ 05:03 pm
Renderman tutorial : Разнообразие текстур с помощью переменной  
Задача: Сделать материал с текстурами для большого количества похожих объектов в сцене. Нужно для каждого создать свой материал и назначить свою текстуру.
Renderman позволяет с помощью переменной управлять текстурами для большого количества объектов, не создавая для каждого индивидуального материала. Текстуры назначаются случайным образом, поэтому тонкую настройку сделать не получится. Но если это не важно — метод подойдет очень хорошо.



Например нужно зашейдить гору фантиков от конфет, лежащих на столе. Или стаю бабочек. Или разнообразить окна в здании. Условно сделала картинку — квадратики это окна. Да, жалко было времени на моделинг тратить, но я думаю для наглядности подойдёт.



Чтобы раскрасить каждое окошко мне в обычном случае понадобилось бы создать 6 материалов, а точнее 6 shading networks. Ну или больше, если нужно больше вариантов. С помощью скрипта ко всем окошкам применяю 1 материал, и оставляю слот с именем текстуры в ноде file9 пустым.



Выделяю все объекты (в моем случае окна) во vieport и в скрипт эдиторе вбиваю скрипт:

string $sel[] = `ls -sl`;
for($current in $sel)
{
string $shape[] = `listRelatives -s $current`;
if(!`attributeExists "rmanSfile1_fileTextureName" $shape[0]`)
{
addAttr -ln "rmanSfile1_fileTextureName" -dt "string" $shape[0];
setAttr -e -keyable true ($shape[0] + ".rmanSfile1_fileTextureName");
}
int $num = rand(1,6);
setAttr -type "string" ($shape[0] + ".rmanSfile1_fileTextureName") ("textures/curtain" +
$num + ".tex");
};

Цветом выделила те части скрипта, которые нужно заменить на свои (так как директории будут отличаться и названия файлов тоже). Rand   задает количество текстур, которые нужно будет подцепить. Их может быть сколько угодно. Мой скрипт выбирает от 1 до 6 текстуры.

NB! До этого нужно обязательно указать проект в директорию, где лежит папка с текстурами. Иначе работать не будет.
(File->Set project)

Текстуры перед скриптом (хотя можно и после) нужно сконвертировать в формат tex, который renderman понимает.
команда для конвертации:

txmake -format tiff curtain2.tif curtain2.tex
Сконвертированные текстуры свалятся туда же, где и лежат исходники. Я делаю это в total commander, можно сделать через cmd.

После скрипта в attribute editor каждого выделенного ранее объекта должна появится такая строчка:


Если ее нет, значит скрипт не сработал. Возможно дело в геометрии, возможно выделилось не то, что нужно.
Если при рендере текстуры не считаются — нужно проверить, куда указан проект. Может быть он их не находит просто.