1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Шутка от PIXAR

Тема в разделе "RenderMan", создана пользователем -, 27 июл 2000.

Модераторы: Moderator.
  1. Guest

    Однако приколисты там работают....
    Если в слиме спекулярный материал (blinn,plastic и.т.д) сделать полностью прозрачным то вся их спекулярность пропадет к щеееертовой бабушке.
    Похоже ребята воткнули скобку не в то место и вместо
    Ci = Os * Color+Spec у них Ci = Os * (Color+Spec)
    Придется немного почистить shadingmodels.slim
    Или я чегото недопонимаю (может сейчас спекуляр не в моде) ?
     
  2. Guest

    Это конечно шутка....Но не доконца....... Это такой "стандарт" для шейдоров...

    Идея такая в Maya,Max сделанно примерно так как ты говориш (ну покрайне мере я так думаю)....Но там преходится мучится с убиранием блика на полностью прозрачной частью поверхности.....

    Slim предлагает альтернативное решение проблемы запихать в прозрачность то что ты хочеш а именно блик(Там есть такой апиренс под название Specular), убывание по прозрачности по углу к поверхности (FacingForward только изредка необходимо пользоваться ColorToGray и FloatToColor ну и иверт соответсвенно floaf и color, правда насчет последних пришлось написать самому) и все что тебе еше захочется.....Просто окрываеш параметр прозрачности и начинаеш мастерить его как тебе хочется....Там комбайн и вперед еше комбайн....И тд. и тп...
     
  3. Guest

    Всетаки лучше переделать темплэйты (lgNaa.slim,shadingmodels.slim) поскольку :
    Что если тебе нужна нестандартная спекулярность (Jewel,Brushed и.т.п)
    городить сетку конектов сложнее и шейдер будет тормознутее.
    А боротся со спекулярностью в местах где она ненужна можно проще.
    Делаеш:
    Create Appearance-Surface-Constant (Opacity=0)
    Create Appearance-Surface-Mix
    в InputA которого кладеш прозрачный материал с бликами
    в InputB кладеш Constant
    в mixpct кладеш флоатову маску.


    А вот Вам еще один дикий прикол:
    Пытался засетапить рефракшн с помощью связки:
    Environment Light + AdditiveFX (Plastic+CollectRefraction)
    Ставлю RIndex=1 - Все нормально (рефракта нет)
    Ставлю 1.3 - есть но некорректный
    Ставлю 1.6 - вообще никаких изменений
    Лезу в reflections.slim и нахожу в collectRefractions следующую строку:

    varying float eta = min(max(RI, 1e-6), 1-1e-6);

    Получается что у них RI никогда не будет >= 1
    Заменил этот бред на

    varying float eta = max(RI, 1e-6);

    и все стало на свой места.

    Вобщем Слиму в его нынешнем виде (ошибки, идиотская дока,
    очень бедный набор темплэйтов) далеко до ShadeTree и по возможностям
    и по скорости.
     
  4. Guest

    Про удаление блика согласен полность....Красиво и все такое....Опыта просто у меня маловато будет...

    А вот во fresnel я не разобрать не смог ....
    И поэтому говорить что он правильно будет работать при eta больше 1 .....Незнаю ...Они повидиму посчитали что нет ...Причем во всем файле закоцывать придется по полной програмее...

    Про дукоментацию,ошибки и теплыйты согласен полность....
    Но про доку у нас бы она была полней если был бы SGI ну и вообше аскетичность это их стиль....Типа думают что кому нужно и так все уже знают .... Не правы по моему причем серьезно....

    Да ShadeTree ему не далеко а по моему очень близко.....А уж по архитектуре намного более продвинуто....(И самое главное интегрированость с процессом RibStream и с Mtor ..Правда тут ясно что она есть но как сделать темплейт с RibBox ом внути и с какиенибудь переключалками я не понял...Rib box там вообше очень странная весчь...Сколько не пыталься не чего путного не получалось...Если не получится то попытаюсь сделать хотябы Slim файл ) Единственый не достаток не документированость даной архитектуры ну тоесть описанией всех скриптов и поряда парсера в Rib и т.д....

    Про скорость шейд три не понял что там такого скоростного....В смысле скорость разработки??? Ну и хорошей документацией и шейд три не страдает...
     
  5. Guest

    Ну и задачки ты перед собой ставиш!!!
    Это всереьез пахнет програмированием,
    а я к сожалению в нем слаб
    (так... бабушка в детстве сказки на бэйсике читала...)
    Просто совет:
    Не страдай "глобальной универсализацией".
    Времени уходит много а результат сомнителен.
    Я раньше тоже пытался городить "универсальные вэсчи",
    а потом выяснялось, что "вэсчь универсальна" толко для
    того случая, для которого она городилась.
    То что ты хочеш сделать можно сделать
    и вручную причем за 1 мин. 18 сек.
    Камера не видет объект с 135 по 616 кадр
    - так просто заанимируй visibility и в rib он не войдет.
    Нужен rib архив - сгенери, обдери. Уйдет не более 18.45 сек.
    Нужно передать параметры в архив - выреж из него ту часть
    где параметры объявляются, вставь ее в RibBox и используй Tcl/Tk экспрэшн
    для передачи параметров из майки, а в конце пропиши ReadArchive. Поидее
    в ribе они встанут встык. Содержимое бокса может выглядеть примерно так:

    AttributeBegin
    Surface "FalseGrass" "Kd" \[[mattr "Control.Ambience" $f]\]
    ReadArchive "MyGrass.rib"

    А сам архив содержит в себе:

    ShadingInterpolation "smooth"
    NuPatch 4 4 [0 0 0 0 1 1 1 1] 0 1 4 4 [0 0 0 0 1 1 1 1] 0 1 "Pw" [-6 -3.67382e-016 6 1
    -6 -1.22461e-016 2 1 -6 1.22461e-016 -2 1 -6 3.67382e-016 -6 1
    -2 -3.67382e-016 6 1 -2 -1.22461e-016 2 1 -2 1.22461e-016 -2 1
    -2 3.67382e-016 -6 1 2 -3.67382e-016 6 1 2 -1.22461e-016 2 1
    2 1.22461e-016 -2 1 2 3.67382e-016 -6 1 6 -3.67382e-016 6 1
    6 -1.22461e-016 2 1 6 1.22461e-016 -2 1 6 3.67382e-016 -6 1]
    AttributeEnd

    Хотя это только предположение, я не проверял, нужды пока небыло.
    А вот чего сейчас действительно нехватает MTOR так это метаболов....
    Хотя это можно было бы реализовать давольно таки просто:
    Написать MetaMaker.mel который сканил бы сцену на предмет наличия NURBS сфер с
    префиксом "meta_" в имени и генерил из них риб архив Blobby.rib
    с RiBlobby примитивами, учитывая при этом радиусы сфер, цвет и "сосисочность"
    основанную на скейле.
    Далее сделать риббокс в котором прописать:

    [clientcmd "source MetaMaker.mel"]
    ReadArchive "Blobby.rib"

    Но на все это моих знаний пока нехватает.
    Может кто займется?

    По поводу ShadeTree:

    Вот те "грязный" рецепт перезаточки (ибо я слаб в програмировании и Perl
    ассоциируется у меня впервую очередь с кашей)

    У меня Shadetree & Renderman стоят на D:\

    1. В d:\shadetree\bin\ сделай PRMan.cfg в котором пропиши:
    unsetenv STREE_LIB
    setenv STREE_LIB D:\SHADETREE\prman
    2. Запусти Config.exe и выбери PRMan после чего сделай теплый рестарт.
    3. Продупли содержимое d:\shadetree\bmrt в диру d:\shadetree\prman
    4. Откомпили testcheckered.sl (d:\shadetree\prman\lib\src\) и
    слей результат в d:\pixar\PhotoRealistic RenderMan\lib\shaders\
    5. Далее лезь в D:\shadetree\prman\bin\ и внеси изменения
    В os.pl замени slc на slo
    В stree.pl замени slc на shader
    и вот те полностью мой измененный rendrit :





    #!/usr/sbin/perl

    # renderit - render a test image
    #
    # $1 - the temporary shader's name
    # $2 - render count
    #
    # Assumes main program left us two files:
    #
    # $STREE_WORKDIR/$1 - shader source
    # $STREE_RENOPT - render options file containing env variables
    #
    # Take the source file the main program left for us in $1, push it into the
    # tmp directory ($STREE_RENDERDIR) along with the other stuff we need,
    # compile and render, then remove the tmp directory when done.
    #
    # VERS DATE AUTHOR COMMENTS
    # ---- -------- ----------------- ----------------------------------
    # 1.00 06/01/98 erco@cinegrfx.com perl(1) 4.0 implementation
    #

    $| = 1;
    $G_{PROGNAME} = "renderit";
    require "$ENV{STREE_LIB}/bin/stree.pl";
    require "$ENV{STREE_LIB}/bin/makerib.pl";

    # # # # # #
    ## ## # # # ## #
    # # # # # # # # #
    # # ##### # # ##
    # # # # # # #

    # MAIN
    {
    # INITIALIZE $STREE_{} VARIABLES
    # Load in render options, etc.
    #
    &InitVars($ARGV[0], $ARGV[1]);

    # HANDLE SPECIAL CASE: STREE_INTERLACE
    local($interlacearg) =
    ( $STREE_{INTERLACE} eq "off" ) ? "" : "-d $STREE_{INTERLACE}";

    print STDERR "*** INTERLACEARG=$interlacearg INTERLACE=$STREE_{INTERLACE}\n";

    # HANDLE SIGNALS TO REMOVE TEST DIR WE CREATE
    $SIG{'INT'} = 'CleanupTrap';
    $SIG{'TERM'} = 'CleanupTrap';
    $SIG{'BREAK'} = 'CleanupTrap'; # NT

    # MAKE TEST DIRECTORY
    # Move the shader in there, and enter the directory.
    #
    mkdir($STREE_{RENDERDIR}, 0777);
    chdir($STREE_{RENDERDIR});

    # RENAME SHADER -> SL FILE
    {
    local($from) = "../$STREE_{SHADER}";
    local($to) = "./$STREE_{SHADERSRC}";
    unless ( &Move($from, $to) )
    { &Fail("Move($from, $to): $!", 1); }
    }

    # IS THIS A CUSTOM RENDER?
    if ( $STREE_{CUSTOMREN_FLAG} == 1 )
    {
    &CustomRender($STREE_{SHADER}, $STREE_{RENDER_COUNT});
    &MyExit(0);
    }

    print <<"EOF";

    RENDER ----------------------------------------------------------
    RENDER Shader Filename: $STREE_{SHADERSRC}
    RENDER Shading Rate: $STREE_{SHADERATE}
    RENDER Resolution: $STREE_{RES}
    RENDER Object Rot: $STREE_{OBJ_ROTX},$STREE_{OBJ_ROTY},$STREE_{OBJ_ROTZ}
    RENDER Light Rot: $STREE_{LIGHT_ROTX},$STREE_{LIGHT_ROTY},$STREE_{LIGHT_ROTZ}
    RENDER Samples: $STREE_{SAMPLES}
    RENDER Zoom: $STREE_{ZOOM}
    RENDER ----------------------------------------------------------

    EOF

    # COMPILE SHADER
    # Current directory must be where shader lives
    #
    &Compile($STREE_{SHADER}, $STREE_{SHADERSRC}, $STREE_{SHADEROBJ});

    # RENDER TEST FRAME
    # If a range of frames is specified, do them all.
    #
    if ( $STREE_{SFRM} == $STREE_{EFRM} )
    {
    # MAKE A RIB FILE FOR FRAME #1
    $STREE_{FRAME} = 1;
    &MakeRib("./test.rib", $STREE_{OUTFILE});

    # RENDER IMAGE
    # Either to screen or file.
    #
    print STDERR "--- RENDER ---\n";
    &Banner("test.rib");
    &Copy("test.rib", "$STREE_{TMPDIR}");
    if ( $G_os eq "irix" )
    {
    local ($cmd) = "/bin/nice -19 timex " .
    "prman " .
    "test.rib";
    print STDERR "Executing: $cmd\n";
    local ($err) = (system($cmd) >> 8);
    }
    else
    {
    local ($cmd) = "prman " .
    "test.rib";
    print STDERR "Executing: $cmd\n";
    local ($err) = (system($cmd) >> 8);
    }

    # NOTE: Ignore EXIT 2 since killing the dspyserver
    # will generate that errorcode (a common thing to do)
    #
    print STDERR "EXIT=$err\n";
    &MyExit(0);
    }
    else
    {
    local ($pathname);
    local ($ext);

    if ( $STREE_{OUTFILE} eq "screen" )
    {
    local($msg) =
    "UNSUPPORTED:\n".
    "\tRender animated sequence to 'screen' currently unsupported.".
    "\tPlease specify a filename in Render Options Editor ".
    "-> Output Image Type\n";

    &Fail($msg, 1);
    }

    # PARSE OUT FILENAME EXTENSION
    if ( $STREE_{OUTFILE} =~ /^(.*)\.(\S+)$/ )
    { $pathname = $1; $ext = $2; }
    else
    { $pathname = $1; $ext = ".sgi"; }

    # FRAME LOOP
    for ($STREE_{FRAME} = $STREE_{SFRM};
    $STREE_{FRAME} <= $STREE_{EFRM};
    $STREE_{FRAME}++ )
    {
    local($outfilename) =
    sprintf("%s.%04d.%s", $pathname, $STREE_{FRAME}, $ext);
    local($date) = &GetDate();

    print <<"EOF";

    ------------------------------------------------------------------------------
    Working on frame $STREE_{FRAME} of $STREE_{EFRM} - $date
    Writing to $outfilename

    EOF
    &Banner(sprintf("%04d", $STREE_{FRAME}));

    # MAKE CUSTOM RIB FILE
    # Sticks in render options and test shader
    #
    &MakeRib("./test.rib", $outfilename);

    # RENDER IMAGE
    # Either to screen or file.
    #
    print STDERR "--- RENDER ---\n";

    local ($cmd);
    if ( $G_os eq "irix" )
    {
    $cmd = "/bin/nice -19 timex prman " .
    "test.rib";
    }
    else
    {
    print STDERR "*** INTERLACEARG2=$interlacearg\n";
    $cmd = "prman " .
    "test.rib";
    }

    print STDERR "Executing: $cmd\n";
    local ($err) = (system($cmd) >> 8);

    # NOTE: Ignore EXIT 2 since killing the dspyserver
    # will generate that errorcode (a common thing to do)
    #
    }
    &Banner("done");

    # GO 'DING' WHEN DONE RENDERING RANGE OF FRAMES
    &Success();
    }

    #NOTREACHED#
    &MyExit(0);
    }

    # CUSTOM RENDER SCRIPT
    sub CustomRender
    {
    local($args) = join(" ", @_);

    # PREFIX WITH STREE_LIB IF NO LEADING '/'
    if ( $STREE_{CUSTOMREN} !~ m%^[/.]% )
    { $STREE_{CUSTOMREN} = "$STREE_{LIB}/$STREE_{CUSTOMREN}"; }

    # INVOKE USER'S RENDER SCRIPT, AND EXIT
    # Let the user do all the error handling/messages
    #
    print <<"EOF";

    -------------- C U S T O M R E N D E R --------------
    Executing: $STREE_{CUSTOMREN} $args
    cwd: $STREE_{RENDERDIR}
    ---------------------------------------------------------
    EOF

    &Run("$STREE_{CUSTOMREN} $args", "Custom Render Failed.", 1);
    }

    # CLEANUP TMP FILES
    sub MyExit
    {
    local($exit) = @_;

    # CHDIR SOMEWHERE SAFE, THEN BLOW THE TMP FILES
    chdir("$STREE_{WORKDIR}/..");
    &RemoveDir($STREE_{RENDERDIR});

    print STDERR
    "\nrenderit: " . (($exit==0)?"DONE":"FAIL") . " - [EXIT $exit]\n";
    exit($exit);
    }

    # INTERRUPT HANDLER: CLEANUP JUNK
    # $1 is signal name
    #
    sub CleanupTrap
    {
    local($sig) = @_;
    print STDERR "\nrenderit: caught signal $sig. Cleaning up.\n";
    &MyExit(1);
    }
    ----------------------------------------------------------

    6. В stree.def найди строку ext.compiledshader .slc и замени на .slo

    Обычно я просто делаю File-Export-Compiled Shader туда куда мне надо.

    Те Surface экзамплы которые используют прикомпеленный дисплэйс
    рендерятся без дисплэйса пока ты не перекомпилиш их и не продублиш
    результат в стандартных шейдэрах кажется. Я точно непомню давно это
    было но я как то заставил их работать вместе c PRMan.

    И вообще если поковырять его основательно (особенно stree.def и makerib.pl)
    то можно заточить его как угодно и под что угодно.
    Например добавить кучу своих объектов для рендера.
    Будут проблемы свисти но у меня все работает как часы.
    (навсякий случай все скрипты кинул)
     
  6. Sergei Nevshupov

    Sergei Nevshupov Мастер

    С нами с:
    11.01.2001
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    99
    o!

    vot nakonets rech ne malchikov, no muzhey! :)

    bend my knees!
     
  7. Guest

    Я имел ввиду что они этои проверкой сразу же коцают твой IOR
    (тот который у стекла = 1.3 а у воздуха 1) до 1-1e-6
    Стандартный блок обычно выглядит примерно так:
    if (eta != 0)
    {
    float f = max(eta, 1e-4);
    fresnel (IN, Nf, (I.N < 0) ? 1.0/f : eta,
    kr, kt, Rfldir, Rfrdir);
    }
    И подобная конструкция везде кроме как в CollectRefraction.
    Пойщи какие нибудь левые рефрактовы
    шейдеры (MaxMan,SoftMan) и убедись.
    Так что лопатить ничего не придется.
    Когда я внес те изменения он просто ЗАРАБОТАЛ.

    Что до интеграции слима ты прав - в этом его плюсяра.

    Про Shadetree - да мастерить конекты в нем быстрее
    а главное легче найти ошибку так как все визуально
    и напоминает блоксхему.
    Его набор боксов после перезаточки некоторых из них под
    SL Extention (4D Noise например) и разрэмливанья боксов
    (удаления сивола подчеркивания перед именем диры или бокса)
    доставшихся ему понаследству от SGIшной версии
    (правда там присутствыют и недописаные))
    покрывает абсолютно все мои нужды.
    Хотя конечно все его возможности могут быть запросто
    перенесены в слимовские тэмплэйты но на это нужно время
    которого всегда нехватает.

    "Какие проблемы с RibBox док?"
    Я не спец а только учусь...
    В качестве эксперемента с ним делал следующее:

    Делал сцену с модным сейчас Freeze Motion.
    Сначала просто грохнул анимацию у замерзших объектов и задвигал камеру.
    Но пропажа интенсивного Motion Blur-а из за отсутствия ключей
    у внезапно замерзших объектов смотрелась отвратительно.
    А поскольку у рендэрмэна MBlur (при его включении) прописывается в rib
    блоком для каждого объекта, то я сделал следующее:
    1. Спрятал все лампочки и все статичные объекты
    2. Просто сгенерил Rib (выключил рэндэр и удаление Rib) в кадре где FM начиналось
    3. Удалил в нем все оставив только описалово объектов т.е. серию
    AtributeBegin
    .....
    .....
    .....
    AtributeEnd
    4. Обозвал его FM.rib
    5. В сцене теперь вернул все ранее спрятанное и спрятал все замерзшие объекты.
    6. В слиме сделал Rib Box в котором прописал
    ReadArchive "e:/projectsm/golf/riarchive/FM.rib"
    7. Обозвал этот риббох зарезервированным именем world тем самым обеспечив его
    вставку акурат после объявы лампочек.
    8. Продолжил рендер с этого кадра и балдел от облета статичных объектов с MBlurом
    ---------------------------------------------------

    Нужно было засеять травой давольно большую площадь.
    Сперва пробывал mtorUltraFur но он генерил курвы так долго и их было так много
    что rib получался неприлично огромен.
    Выход почти тот же:
    1. Сделал NURBS Plane размером 10х10 и засетапил для него Fur
    Fur должен быть достаточно бордашный иначе потом могут просматриваться стыки
    2. Фризанул трансформ у NURBS Plane (все = 0 скейл = 1)
    3. Приатачил к нему mtorUltraFur, засетапил и опять сгенерил rib
    4. Опять же ободрал его выкинув и NURBS Plane. Получился файл размером около 1Mb
    5. В новой сцене сделал матрицу 100х100 таких же NURBS Plane-ов (стык встык)
    толко теперь не фризя их трансформы.
    6. Приатачил к ним шейдер типа земли и RibBox в котором сначала тоже прописал
    ReadArchive "e:/projectsm/golf/riarchive/U60xV60x10unit.rib"
    При таком раскладе rib весил копейки но при рендере рендермэн попытался
    сожрать все архивы зараз и естественно подавился и сдох.
    7. Копнул глубже в доку нашел выход.
    8. В RibBox прописал
    Procedural "DelayedReadArchive" \["e:/projectsm/golf/riarchive/u60xv60x10unit.rib" \] \[-6.2 6.2 -6.2 6.2 0.0 0.2\]
    Теперь рендермэн стал подгружать архив только по мере его появления
    в текущей зоне рендэра.

    Правда я непойму одного:
    При описании BoundingBox я сначала ставил \[-6.2 6.2 0.0 0.2 -6.2 6.2\]
    но тогда появлялись дыры. Когда поменял на \[-6.2 6.2 -6.2 6.2 0.0 0.2\]
    - полный порядок. Такое впечатление что майский Y для MTOR является Z.
    ----------------------------------------------------------------------

    Недавно разбирался с Level of Detail (смотри тему чуть ниже)
    и опять же с RibBox.
     
  8. Guest

    Про IOR понял ...Проверил....Сенкс...

    Лирическое отступление - Слушай ты ShadeTree естевсвенно переделовал под Prman...У меня это как то немно криво получилось шейдер компиляется Shader'om но расширение у него в серовно как у bmrt... И как прописать дифолтную директорию под компиляцию шейдеров...(лучше если если сможеш запакуй и пошли плиз мылом свои скрипты от ShadeTree буду очень признателен)...

    А про риб бокс там засада имеено с созданием темплейта а не самого апиренса RibBox... Тоесть хотелось создать такой итерактивный темплейт для такого эпиранса который бы содержал гдето в себе RibBox и имелл некоторые переключалки...Типа свичей , просто параметров и тд.д И все эти параметры парсирись бы в Rib плюс еше читались параметры из сцены....Но это не происходит потомо что ...раждается огромное количество всеких ошибык....
    Типа не находит Вижуалайзера , генирит какойто материал и упорно пытается его вставить в Rib и тд.....

    А про твои навороты с RibBox это просто круто.....Но жаль что это все руками ..Бы ло бы круто сделать такую пипку жмеш на нее и все что ты делал само получается....Ну предположим появился вы в маи атриут у обекта что он типа читать его из архива....И сделать кнопку что если нужно экспортилось все в виде архива (Что то подобное сделано в MAXman и SoftMan)....Но это мечта незбыточна от нехватки информации и времени для ее исполнения....

    И кстаи было бы круто предположим сделать еше такую кнопку жмеш и при экспорте в rib те обьекты которые не попадают своими охватываюшими боксами в пирамиду видимости камеры туда бы не парсирись...Ну т д.

    Про Maya UI и рендерман Zи Y... Стабилизец что да!!! (Ну сетинги по дефолту в Maya можно правда переделать )А вот когда парсится вроде все должно быть OK! Вроде объекты то правильно ставятся вRib....
     
Модераторы: Moderator.

Поделиться этой страницей