Вузли Шейдерів – Shader Nodes¶
Cycles застосовує ряд оптимізацій вузлів шейдерів, як під час компілювання, так і під час виконання. Використовуючи їх, можна розробити складні групи вузлів у стилі «Uber Shader», що вимагають мінімум часу на рендеринг для невикористаних функцій.
Оптимізації Вузлів – Node Optimizations¶
Першим кроком у підготовці вузла шейдера для виконання Cycles розгортає усі групи вузлів, ніби використовуючи засіб Розгрупування, та відкидає інтерфейс лиш таких функцій, як кадри та розводки вузлів.
Після цього, він застосовує деякі очевидні трансформації. Наприклад, він може (цей список не є вичерпним):
Замінити наступні вузли з результатом без змін їх оцінення, якщо всі їх уводи визначені без змін:
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, Dodge, Lighten, або з увімкненим Clamp), Invert, RGB Curves and Vector Curves з відомим нульовим Factor.
Усунути вузли шейдерів Emission та Background, щоб не емітують жодного світла, та вузли Add Shader з відсутніми одним чи обома аргументами уводів.
Усунути вузол Bump з постійним уводом Height, використавши натомість його увід Normal або увід Normal вузла Geometry.
Скомбінувати кілька копій одного і того ж вузла з однаковими уводами в єдиний примірник.
Наостанок, будь-які вузли, що у кінцевому підсумку не пов’язані безпосередньо або опосередковано з вивідним вузлом, вилучаються.
Оптимізації Під час виконання – Run-Time Optimizations¶
При виконанні шейдерів спеціальна оптимізація застосовується до вузлів Mix Shader. Якщо Factor оцінюється як 0 чи 1, то будь-які вузли, які доступні лише через невикористану гілку мішання, не обчислюються.
Може суттєво підвищити продуктивність комбінування кількох матеріалів в один шейдер на основі кольору вершин, текстури або іншого уводу, що будуть використовуватися як перемикач.
Відкрита Мова Відтінення – Open Shading Language¶
Якщо обрано Open Shading Language як прикладна частина рендерингу, то вузли шейдерів перекладаються у код OSL, а потім компілюються та виконуються робочим циклом OSL. У цьому процесі вона застосовує свій власний широкий набір оптимізацій, як під час компілювання, так і під час робочого циклу.
Open Shading Language може оптимізувати вузли типу Script, якщо їх виводи не використовуються або без змін, навіть якщо їх відтінювачі OSL мають побічні ефекти, як простеження зневадження та проходження повідомлення, що можуть бути заплутаними. З цієї причини проходження повідомлення з setmessage
та getmessage
повинні у загальному не використовуватися для проходження інформації вперед у графі; повинно бути бажаним явне проходження інформації через роз’єми.