Render.ru

Projections in RibArchive

#1
Привет всем!
Можно ли в принципе устроить так, что бы в шейдер использующий slim-овскую проекцию в RibArchive (DelayedRibArchive) подставлялась уникальное имя координатной системы для каждого инстанса?
Понимает ли DelayedRibArchive stdout вместо rib-файла?
Пока я притормозил пытаясь запустить perl-скрипт дублирующий в stdout содержимое rib-a:
Procedural "RunProgram" \["perl.exe test.pl" "Rib_arch/vcr-6.rib"\] \[...\]
Prman просто молчит и ничего не делает.

Может попытка править rib "на лету" не самое правильное решение?

Спасибо.
 
#2
Идея такова...

Первое ...

Возмоно это и не нужно ... Зачем может обеснить плиз ????...
Если ты хочеш повесить текстуру на прожекше то координатная система будет перопределятся для каждого подвложеного куска риба ..Тоесть для каждой лятяшй тарелки с шейдром со ссылкой на координатную сиестему xxx она будет в превильно и хорошем месте ...

Второе ...

В конце работы test.pl нужно напечатать \n\377
Что бы прман понимал конец потока .... И закрывал его, ну поток ...
---
print "\n\377";
---

А впринуципер править риб на лету всегда куртуо если это не очень долго и рибов мало ... :)
 
#3
Да все очень просто, с виду ;-)
Идея, чтобы подставлять один и тот риб-архив для кучи прокси объектов.
В архиве объект с шейдером использующим "coordsys SysShapeName" для проекции в SurfacePoint.
Пока у меня рендерится правильно только последний объект :-(

А c Procedural "RunProgram" странности.
test.pl:
foreach (<>) {
print;
}
print "\n\377";

RibBox:
Procedural "RunProgram" \["perl.exe test.pl" "Rib_arch/vcr-6.rib"\] \[[mattr "$OBJPATH.boundingBoxMinX" $f] [mattr "$OBJPATH.boundingBoxMaxX" $f] [mattr "$OBJPATH.boundingBoxMinY" $f] [mattr "$OBJPATH.boundingBoxMaxY" $f] [mattr "$OBJPATH.boundingBoxMinZ" $f] [mattr "$OBJPATH.boundingBoxMaxZ" $f]\]

Prman доходит до первого BoundingBox и замирает :-(
Вроде ж все правильно!!!
 
#4
Так еще раз ...Только что делал подобные весши ..У меня тут машинки летают как в пятом элементе :) ..

Идея такова ...

Выделяем в риб оббект вместе с координатной системой и говорим экспорт выделенного ну и там типа Mtor_Rib_Archive (или как эго там) .. Тобиш в рибе вышло ...
----
AttributeBegin
TransformBegin
ConcatTransform [aaaa]
CoordinateSystem "MersCsRedShape"
TransformEnd
AttributeBegin

Surface "flatshader/carBody" XXX "string place_Space" [ "MersCsRedShape" ]
<Geometry>

AttributeEnd

xxxxxxxx

AttributeEnd
----

Ну и все потом будет шеколадно чесное слово...




Так ответ на вторую часть ...

Идея такова ... Как писать правильно писать я не знаю..
Но делать по опыту нужно так ....

---Rib'box--
Procedural "RunProgram" \["perl $WSRoot/scripts/test.pl $WSRoot/Rib_arch/vcr-6.rib $OBJNAME" ""\] \[[mattr "$OBJPATH.boundingBoxMinX" $f] [mattr "$OBJPATH.boundingBoxMaxX" $f] [mattr "$OBJPATH.boundingBoxMinY" $f] [mattr "$OBJPATH.boundingBoxMaxY" $f] [mattr "$OBJPATH.boundingBoxMinZ" $f] [mattr "$OBJPATH.boundingBoxMaxZ" $f]\]
---Rib'box--

1. первое нужно указать полный путь до ресурсов (скрипт+ входные данные)...
2. Не использовать вторые ковычки ....За их не понятной работой в дальнейшем .. Это долгий разговор ...
3. Переменная $OBJNAME используется для создания уникального вызова в рибе ... Типа если повторяется, то будет глючить и повисать как у тебя..

(вообшем пункты 2 и 3 можно не обойти если вы пишите на C++ если нет, то просто вначале запускается cmd, а потом и perl вообшем с этим то и проблема .. Ну ладно это вообшем совсем длинный разговор...)

---test.pl--
$Rib =$ARGV[0];
open (RIB,$Rib);
foreach (RIB) {
print $_;
}
print "\n\377";
---test.pl--
 
#5
Сорри за беспокойство. Таки разобрался наконец :p
Дело в том, что все нормально экспортилось только видно этого не было.
Проекция была чуть больше прокси-объекта по которому считается баунд,
а текстура была с клампом. И когда объекты складывались рядом, текстура
с последнего архива клампилась на рядом стоящие.
Такой себе артифакт :-(
Переименование на лету не потребовалось ;-)
Хотя перловый скрипт тоже заработал в "RunProgram" .
Ругнулся правда на open (RIB,$Rib); но с foreach (<>) все пошло...

Спасибо огромное, еще раз!
 
#6
Ну и круто ... Вообшем ... :)

Сори уточненный текст "программы" таков .... :)

---
open (FL,$ARGV[0]);
while (<FL>) {
print $_;
}
close (FL);
print "\n\377";
---
 
#7
Вобщем переименовывать все же приходится :-(
Потому как объекты с одинаковым проекциями все равно нужно отводить друг от друга на разные расстояния.
Для одной проекции скрипт получился такой:

# cs_replace_1.pl
# This script replaces mtor coordinate system name
# in RIB archive file $ARGV[0] with string $ARGV[1]

$new_name = $ARGV[1]."_sys";
open (IN,$ARGV[0]);
foreach (<IN>) {
if (/CoordinateSystem "/) {
($op_str, $old_name) = split(/"/);
}
if ($old_name && /$old_name/) {
s/$old_name/$new_name/g;
}
print $_;
}
close (IN);
print "\n\377"; # close input stream

Главное, что работает и достаточно шустро.

Хотя, в идеале, нужно бы иметь возможность обрабатываь N (ну или M)
проекций.
Но пока времени нет доки по Perl-у читать и да и проблема такая не стоит ;-)
Пока ;-)
 
#8
Все забыл написать ...

Сори типа этого всего делать вооьбшето не надо .. Если конечно есть prman 10... :)


Идея такова нужно использоватьб новую байду вместо старой
---
ScopedCoordinateSystem "xxxx"
---

читать тут ..

/Pixar/docs-5.0/prman_technical_rendering/userManual/user6.html#scopedcoordsys

Тех процесс такой берем обект с координатной(ыми) ситсемой(мами) быделяем экспортим риб .. Потом правим риб руками ... Тобиш CoordinateSystem "xxxx" заменяем на ScopedCoordinateSystem "xxxx" и все ...
Рендрим "истансированые" обеткты и все ок !!!!

Сори твайс за опоздание обеснение .. Я типа забыл ..:)
 
#9
Во как полезно оказывается старые посты просматривать!
Спасибо за инфу.
Я для предыдущей методики уже и скрипт для N-проекций написал :-(
Оказывается -- уже неактуально.
Но во всяком случае -- поучительно ;-)
 
Сверху