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

Local bounce in surface shader - ILM

Тема в разделе "RenderMan", создана пользователем -, 7 фев 2002.

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

    Вот, нашел время немного покопаться с сабжем. Если кто не в курсе - на последнем Сигграфе в Stupid Renderman Tricks была такая презентация.

    Ну, поскольку на Сигграфе я не был ;-) то всё, что у меня есть по этому поводу - PowerPoint slides с renderman.org (http://www.renderman.org/RMR/Examples/srt2001/). Скачать мувики самой презентации с китайского сайта я не смог.

    В общем, там нет ничего военного. Взял я его исходники и подкорячил:

    surface bouncing(float Kbounce = 0.1; float Fbounce = 1; float Kd = 1.5;)
    {
    if (Kbounce > 0.0) {
    // проблемное место
    point Psample = Ps;
    normal Nsample = Ng;
    color Csample = Cs;
    // конец проблемного места
    vector Lsample = Psample - P;
    float distsample = length(Lsample);
    color CKDsample = 0;
    if (distsample < Fbounce) {
    illuminance(Psample, Nsample, PI/2) {
    CKDsample += Cl * Nsample.normalize(L);
    }
    CKDsample *= Kd * Csample;
    if (distsample != 0.0) Lsample /= distsample;
    float NdotLsample = N.Lsample;
    if (NdotLsample > 0.0) {
    CKDsample += Kbounce * CKDsample * NdotLsample * (1.0 - smoothstep(0.0, Fbounce, distsample));
    }
    }
    Ci = CKDsample;
    }

    }

    Проблемное место в оригинале выглядит вот так:

    Psample = transform ("world", "current", Psample);
    Nsample = ntransform ("world", "current", Nsample);

    причем определяются эти самые переменные как:

    Psample = position of the bounce
    pointOnSurface -p -u $uPos -v $vPos $surfaceName

    Nsample = normal at Psample
    pointOnSurface -n -u $uPos -v $vPos $surfaceName

    Csample = average color around Psample

    Ну то есть как экспортируемые из Maya через Mel в шейдер кастомные переменные. Вот тут мне и пришел полярный зверек - не могу никак эти переменные привязать, хоть ты тресни. Может, день сегодня такой...

    Willing to experiment, anyone?
     
  2. Guest

    Я так думаю динамическими темплейтами через мтор. Что-то типа:
    .........
    parameter string arrString {
    default "{1, 2, 3, 4}"
    detail uniform
    }
    parameter float arrNumber {
    detail uniform
    default 4
    }
    .......
    RSLMain {
    generate
    output "point Psample\[[getval arrNumber] \] = [getval arrString] ;"
    .........
    }
    ....
    ну а наполнять arrString и arrNumber через атрибуты обьекта.
    Или я не о том?
     
  3. Guest

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

    ЗЫ Картинки получаюстя вполне :))
     
  4. Guest

    Ну ты как всегда - пости картинки!
     
  5. Guest

    Гуд, хотите картинки - их будет :))

    http://briefcase.yahoo.com/bc/govnuk2000 в папочке friends, лежат анимашка LocBounceTst.avi и одни шот из нее.

    Считал с 64 семплами на обьект. Три лайта: красный, синий и (вот неожиданность;-) зеленый, два из них находятся за обьектом . Так как семплы брал через равные промежутки по UV то получилось немного не правильно: на сильно выступающий кусок не попал семпл и он выглядит темным. На каждый кадр 1 минута на 1 ггц
     
Модераторы: Moderator.

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