Render.ru

Slim Template Again

#1
Кто нибудь знает как сделать чтобы темплейт возвращал
сразу несколько параметров доступных для совершения коннектов?
Тут понадобилось использовать textureinfo которая возвращала бы
разрешение файла. Вот пока нерабочий (с точки зрения возврата параметров)
темплейт custom.slim:

## ----------------------------------------------------------------------------
#
# custom.slim
#
slim 1 extensions pixardb {
extensions pixar pxsl {
template float TextureRes {
label "TextureRes"
parameter string File {
provider variable
subtype texture
default ""
}
collection float Resolutions {
access output
display hidden
parameter float XRes {
access output
default 0
}
parameter float YRes {
access output
default 0
}
}
RSLFunction {
void
pxslTextureRes( uniform string File;
output float XRes;
output float YRes; )
{
float XYRes[2] = { 0, 0 };
textureinfo(File,"resolution", XYRes);
XRes = XYRes[0];
YRes = XYRes[1];
}
}
}
}
}

В таком виде он возвращает некий абстрактный параметр Resolutions
который никчему нельзя законектить, хотя сама функция работает нормально
XRes - содержит разрешение файла текстуры по X
YRes - содержит разрешение файла текстуры по Y
Я проверял заменив collection на единственный output параметр XRes.
Ткните ктонибудь носом в доку....найти немогу....плизззз.

P.S.
Отвечу только в понедiлок
 
#2
По поводу "Ткните ктонибудь носом в доку..." намек понял :).
Я не дока :) в программировании темплейтов, но то что знаю расскажу.
По поводу возвращения праметров - это ты уже сделал. Вопрос как это использовать при коннекте. Дело в том, что в слиме нет такого типа темплейтов как "два флота" и соответственно никакой темплейт коннектить такой тип не может. Ты описал свой темплейт как флоат а у него по определению на выходе один параметр (флот). Второй выходной параметр слимом просто игнорируется. Выходов, как мне кажется, несколько:
Первый: (чисто теоретический, зато самый правильный:) описать новый тип: template MyType Name{...}, и создать всю инфраструктуру: визуалайзеры

template visualizer MyType {
collection float Resolutions {
detail mustvary
parameter float XRes {
...
}
parameter float YRes {
...
}
}
RSLMain {
generate
output "всякая фигня...."
output "Ci = функция от ( [getvar XRes] и [getvar YRes] );"
output "Oi = функция от ( [getvar XRes] и [getvar YRes] );"
}
}

и тд которые на входе используют два флота. Я никогда это не делал :(
Второй: создать два темплейта типа флот, один для x, другой для y, или один темплейт но с переключателем x<->y.
Третий: использовать любой из типов с тремя флотами: point, color, vector и тд, проблемма в том что если приконнектить этот темплейт к стандартным материалам то что получится на выходе предсказать я не берусь.
Есть еще идеи, но так как немного не понятно для чего вообще такой темплейт нужен не ясно какой путь выбрать. Например если конечный результат отражается на материале, то логично в темплейте сделать все вычисления и выходным параметром иметь модифицированные цвет и прозрачность.

 
#3
Мда в этом вопросе Shadetree более гибкая штучка...
Пришлось сделать 2 отдельных тэмпла.
Для чего это было нужно - обработка текстуры с помощью
cellnoise (XRes,Yres)
Глобально - написание шейдэра "Стена в столовой пансионата"
(веселые картинки из плитки)
Вобщем глупая идея....давеча похороненая.
Я немного не въеду в визуалайзеры.
Для чего они используются ?
Если можно на канкретном примере типа
"... и никак иначе этого сделать нельзя"
 
#4
Чесно сказать - я в темплейтах не особенно разбираюсть. Что касается визуалайзеров, то есть такой слим темпл: visualizers.slim, в нем в комментах все написано (типа нужны для рендеринга тех функций, которые не являются стандартными рендермановскими шейдерами). Если подходить теоретически вообще к вопросу темплейтов, то у рмана есть тока два основных параметра Ci и Oi к ним, соответственно и надо прийтить в конце пути. Но у "тупого юзера" (каковыми пиксаровцы считают меня и других 3Д моделлеров :() всегда есть желание приконектить чойнибудь не туда или увидеть как выглядит вектор помноженный на производную белого шума в виде шарика с текстурой, не доходя до конечных С и О. Тут (как я понимаю) и вступают в действие визуалайзеры. Кроме того есть и базовые темплейты типа shadingmodel. Их тоже надо визуализировать (это уже не наша блажь :). А если серьезно, то визуалайзер описывает какие от данного темплейта надо ожидать параметры на вход и как их проецировать в шейдер, например для shadingmodel визуалайзер определяет, что надо ожидать два параметра на вход: первым идет цвет, вторым прозрачность, и потом вставляет их в шейдер:
output "Ci = [getvar SurfaceColor];"
output "Oi = [getvar SurfaceOpacity];"

В принципе, я заводил собственный тип темпла без визуалайзера и цеплял его из другого, но на нажатие превью слим ругался.
Возможно есть и другие требования для внедрения новых темплейтов....
 
Сверху