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

RFM: Взаимодействие с системой пассов через RSL (с Environment Light)

Тема в разделе "RenderMan", создана пользователем DRL, 7 янв 2012.

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

    DRL Активный участник

    С нами с:
    23.03.2008
    Сообщения:
    224
    Симпатии:
    0
    Баллы:
    12
    Пишу свой первый шейдер.
    Застрял на реализации point-cloud-based color bleeding'а. Документацию по нему прочитал, но проблемы остались.

    Сложность - в том, что сцену надо рендерить 2 раза. При этом в первый раз назначать один простой шейдер (который бэйкает цвета в point-cloud). А во второй - другой, который рендерит со всеми прелестями (в том числе считает индирект по полученному поинт-клауду).
    Конечно, это можно реализовать по-простому через майские рендер-леера. Но гораздо логичнее и удобнее сделать так, как ведут себя дефолтные шейдера в RFM'е:
    • Создаётся дополнительная нода, в которой централизованно указаны все параметры бэйка в поинт-клауд. В RFM - это Environment Light. Все шейдеры берут параметры бэйка из неё.
    • Сама эта нода связывается с нодой рендер-пасса. В рендер-пассе указано, куда сохраняется файл с облаком точек.
    • При рендере через этот связанный рендер-пасс на все объекты назначается первый шейдер (простой, запекающий), при финальном пассе - второй (основной, читающий).

    Соответственно, у меня вопрос: как непосредственно из RSL'а получать данные от рендер-пасса?
    А именно:
    1. Как вообще узнать, через какой пасс идёт текущий рендер? Чтобы в зависимости от этого через простой if () выполнять в шейдере вообще другой код (как RFM'овский первый, простой шейдер).
    2. Как получить параметры "запекающего" рендер-пасса? Конкретно - файл, в который запекать и собственно название этого пасса (для вышеупомянутого сравнения в if() ).
      • В идеале - через ту самую ноду Environment Light. Чтобы оттуда же брать все параметры бэйка. Но этих нод в сцене может быть несколько (чтобы бейкать свет сетами / бейкать при разных параметрах), поэтому нельзя просто создать доп. атрибут, через который прилинковать шейдер к ноде Environment Light. Нужно как-то по-хитрому узнавать, какой Environment Light прицеплен к текущему рендер-пассу.
      • Если через неё не получится - хотя бы связывать шейдер с нодой пасса напрямую. Костыль, но не такой кошмарный, как использование майских рендер-лееров с оверрайдами.
     
Модераторы: Moderator.

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