Каковы ограничения Open Shading Language (OSL) с точки зрения новых материалов / BSDF? - PullRequest
1 голос
/ 21 сентября 2019

Я занимаюсь исследованием методов описания и реализации BRDF, и OSL является одним из основных языков для этого.Мне любопытно, как можно реализовать новый BRDF с использованием OSL или, если это вообще возможно, без возни с его исходным кодом .

Документация OSL содержит набор материалов, которые следует ожидать от любого средства визуализации.Например, Blender предоставляет расширенный набор реализованных материалов, готовых для использования в OSL (эти материалы фактически уже доступны как узлы в Cycles).Я заинтересован в создании новых материалов (BRDFs).Согласно этой теме , OSL не предназначен для использования таким образом, вместо этого пользователи должны использовать уже имеющиеся закрытия материалов (BSDF) для создания новых материалов.ОП в этом потоке пытался реализовать BRDF, но не смог продвинуться, потому что он не мог найти способ получить необходимые векторы.

Наконец, мой вопрос: для создания новых материалов (BRDFs) для использования в OSL, необходимо ли сначала реализовать их в C ++ и перекомпилировать OSL, чтобы, наконец, сделать их пригодными для использования?Я не смог найти однозначного ответа на этот вопрос.

1 Ответ

1 голос
/ 28 сентября 2019

Начиная с введения в спецификации OSL,

Поверхностные и объемные шейдеры OSL вычисляют явное символическое описание, называемое «замыканием», того, как поверхность или объем рассеивает свет в единицахяркости.

В Blender узлы циклов с зеленым выходным сокетом являются узлами "замыкания", они обеспечивают вычисления BRDF / BSDF , которыепридать вид в рендере.Cycles предоставляет доступный тип замыканий, OSL не может реализовать новые типы замыканий.

Так что да, вам придется изменить код блендера, чтобы предлагать разные типы замыканий, но сценарий OSL может добавить множество настроек дляциклически обрабатывает дерево узлов без необходимости изменения кода блендера.Сценарий OSL скомпилирован с использованием JIT-компилятора LLVM для запуска на текущем используемом процессоре.Таким образом, скрипт OSL «внедряет» новый код в движок рендеринга, он просто ограничен в том, как он может изменить конечный результат.

Обратите внимание, что скрипт OSL не должен обеспечивать вывод закрытия, он можетвыходные значения с плавающей запятой или цвета, которые позволяют ему предоставлять промежуточные узлы в дереве узлов.

В качестве примеров сценариев OSL LGHexTiles.osl предоставляет полный узел, который может использоваться сам по себе какматериал.В то время как MAscales.osl обеспечивает вывод цвета и с плавающей запятой, которые составляют только один узел в материале.

И, как и многие другие, скриптами OSL можно злоупотреблять. Здесь вы найдете информацию о старой Amiga Juggler, реализованной в OSL-скрипте.Да, простой движок рендеринга, написанный на OSL.Я почти уверен, что он продолжил развивать raytracer.

...