Render.ru

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

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
#1
Пишу свой первый шейдер.
Застрял на реализации point-cloud-based color bleeding'а. Документацию по нему прочитал, но проблемы остались.

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

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