Вузли Шейдерів – Shader Nodes

Cycles застосовує ряд оптимізацій вузлів шейдерів, як під час компілювання, так і під час виконання. Використовуючи їх, можна розробити складні групи вузлів у стилі «Uber Shader», що вимагають мінімум часу на рендеринг для невикористаних функцій.

Оптимізації Вузлів – Node Optimizations

Першим кроком у підготовці вузла шейдера для виконання Cycles розгортає усі групи вузлів, ніби використовуючи засіб Розгрупування, та відкидає інтерфейс лиш таких функцій, як кадри та розводки вузлів.

After that, it applies some obvious transformations, for example, it can (the list is not exhaustive):

  • Замінити наступні вузли з результатом без змін їх оцінення, якщо всі їх уводи визначені без змін:

    RGB, Value, Mix RGB, Math, Vector Math, RGB to BW, Gamma, Bright Contrast, Invert, Separate/Combine RGB/XYZ/HSV, Blackbody, RGB Curves, Vector Curves, Color Ramps.

  • Виявити вузли Mix RGB, Math та Vector Math, що стають без операції (без Clamp) або обчислюються як 0 у результаті додання, віднімання, множення ділення або добутку векторів/скалярів з відомим уводом 0 або 1 без змін, та замінити відповідним увідним зв’язком або постійним результатом.

  • Усунути вузли Mix RGB Mix (без Clamp) та Mix Shader, коли Factor є відомо 0 або 1, замінивши відповідним увідним значенням або зв’язком.

  • Усунути незадіяні вузли Mix RGB (за винятком Color Burn, Color Dodge, Lighten, або з увімкненим Clamp), Invert, RGB Curves та Vector Curves з відомим нульовим Factor.

  • Усунути вузли шейдерів Emission та Background, щоб не емітують жодного світла, та вузли Add Shader з відсутніми одним чи обома аргументами уводів.

  • Усунути вузол Bump з постійним уводом Height, використавши натомість його увід Normal або увід Normal вузла Geometry.

  • Скомбінувати кілька копій одного і того ж вузла з однаковими уводами в єдиний примірник.

Наостанок, будь-які вузли, що у кінцевому підсумку не з’єднані безпосередньо або опосередковано з вузлом виводу Output, вилучаються.

Оптимізації Під час виконання – Run-Time Optimizations

При виконанні шейдерів спеціальна оптимізація застосовується до вузлів Mix Shader. Якщо Factor оцінюється як 0 чи 1, то будь-які вузли, які доступні лише через невикористану гілку мішання, не обчислюються.

Може суттєво підвищити продуктивність комбінування кількох матеріалів в один шейдер на основі кольору вершин, текстури або іншого уводу, що будуть використовуватися як перемикач.

Відкрита Мова Відтінювання – Open Shading Language

Якщо обрано Open Shading Language як прикладна частина рендерингу, то вузли шейдерів перекладаються у код OSL, а потім компілюються та виконуються робочим циклом OSL. У цьому процесі вона застосовує свій власний широкий набір оптимізацій, як під час компілювання, так і під час робочого циклу.

Open Shading Language може оптимізувати вузли типу Script, якщо їх виводи не використовуються або без змін, навіть якщо їх відтінювачі OSL мають побічні ефекти, як простеження зневадження та проходження повідомлення, що можуть бути заплутаними. З цієї причини проходження повідомлення з setmessage та getmessage повинні у загальному не використовуватися для проходження інформації вперед у графі; повинно бути бажаним явне проходження інформації через роз’єми.