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

Двухсторонний шейдер?

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

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

    Привет Народ! Есть вопрос, как создать в Rendermane двух сторонний шейдер приатаченный к одной поверхности? К примеру шоколадная обертка, с одной стороны имедж, а с другой блестящая фольга. Я знаю как сделать в Maye, но как ето сделать через slim? Заранее спасибо!
     
  2. Guest

    Открой float.slim и в самом конце перед последними двумя скобами вставь
    template float IdotN {
    label "IdotN"
    parameter float result {
    access output
    display hidden
    default 1
    }
    RSLFunction {
    void pxslIdotN (
    output float result;
    )
    { vector IN = normalize(I);
    normal NN = normalize(N);
    if (IN.NN >= 0) result = 1; else result = 0;
    }
    }
    }
    Потом перегрузи слим и во флотах появиться оператор IdotN
    который можно использовать как миксер в Surface Mix.
     
  3. Guest

    Привет Андрей! Я только две недели как поставил Renderman, поэтому очень плохо ориентируюсь в нем. Я не нашел где находится float.slim, подскажи где искать его. Спасибо!
     
  4. Guest

    Ну типа:
    D:\PIXAR\RenderMan Artist Tools 4.5\lib\slim\floats.slim
     
  5. Guest

    Коротко:

    floats.slim находится в директории "D:\pixar\RenderMan Artist Tools 4.5\lib\slim\"
    (у меня). Иногда FAR делает чудеса ;-)

    Длинно:

    Поскольку вы только 2 недели как к нам присоединились и скорее всего документацию до конца прочитать не успели, объясню вкратце смысл фокуса.

    В Renderman в процессе шейдинга для каждой (грубо) точки определен ряд переменных, к которым можно иметь доступ из шейдера. В частности, таковыми переменными являются I и N, соответственно, вектор из камеры в точку и нормаль поверхности в этой точке.

    Представим себе шарик. На внешней его поверхности эти вектор и нормаль будут направлены в разные стороны, соответственно скалярное их произведение I.N, вернее, произведение их после нормализации normalize(I).normalize(N) будет больше нуля. Напротив, если эти вектора будут направлены в одну сторону, то есть на внутренней поверхности, то произведение поменяет знак.

    Данным свойством и воспользовался Andrew V.K., когда предложил вам свой готовый SLIM template. Алгоритм создания поверхности в слиме теперь прост: делаете SurfaceMix, к нему на входы цепляете 2 разных Shading model, например, Blinn и Cell, или одну, но с разными текстурами или цветами, а на mixPct - IdotN. В preview результатов видно не будет, там нет двусторонних объектов, а вот в реальной сцене всё будет отлично.

    Единственное, что еще нужно помнить, та это то, что Renderman по умолчанию рендерит только одну сторону поверхности, поэтому ему нужно будет включить двусторонний рендеринг путем добавления в RIB код строки:

    Sides 2

    Это можно сделать через RAT RibBox. Смотрите документацию.

    Anyone, я что-нибудь упустил?
     
  6. Guest

    Вообщето в данном случае можно было обойтись и без normalize
    а просто
    if (I.N).....поскольку важен только знак. И две "лишние" операции+переменные
    никчему.

    P.S.
    У меня мтор поумолчанию видит обе стороны.
     
  7. Guest

    template float IdotN {
    label "IdotN"
    parameter float result {
    access output
    display hidden
    default 1
    }
    RSLFunction {
    void pxslIdotN (
    output float result;
    )
    {
    if (I.N >= 0) result = 1; else result = 0;
    }
    }
    }
     
  8. Guest

    Большое всем спасибо! Все получилось. Так подробно мне еще никто не объяснял :)))) !
     
  9. Guest

    МТОР корректно отрабатывает галки в майкином RenderStats - Double Sided и даже Opposite :)
     
Модераторы: Moderator.

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