Задаване на frameBuffers за извеждане на проходи като цяло и mia_material_x по-специално, Sigillarium

Отговорът е много прост - до този момент тази на пръв поглед удобна система работи адекватно само в презентации и уроци, но дори при тестове със средна сложност проблемите стават видими. Аз лично много използвам страхотен шейдър. mia_material_x, които могат да направят по-голямата част от необходимите материали. И точно това, дори под формата на специална версия _x_passes (която между другото е малко по-бавна), новата система не преминава напълно. Самият шейдър има всички необходими изходи, които могат да бъдат свързани към персонализирани буфери и да се извеждат като отделни проходи, но тук се крие най-големият проблем на тази система - просто добавянето на персонализиран буфер, дори празен, забавя изобразяването ... понякога много значително (сцената, която се използва например в тази статия, се забавя от 7 минути на 57 минути).

Всъщност статията ще говори за по-стар метод за показване на пропуски, който решава както проблема със съвместимостта с mia_material_x, и проблемът със скоростта.

цяло

И така, най-важното предимство, което ни дава старият ръчен метод, е възможността да извеждаме каквото искаме в проходи, без толкова огромни щети на скоростта на рендериране. Цената, която трябва да платите за този и най-големият недостатък, е мрачността на настройката и Dreary с главна буква ... или може би дори така - МУТРИЧНОСТ 🙂

Процесът и резултатът всъщност зависят много от:

Описаният метод се състои от три блока:

  • мрежа за засенчване: буферен шейдър с данни, свързани към него, в този случай - изходи mia_material_x, комплект рампи и други технически възли. Задачата на буферния шейдър е да вземе резултата от всяка от свързаните мрежи и да ги изпрати на определени рамкови буфери (според поредния номер при използване ctrl_buffers и simplePasses или по име в случай ART_пасове);
  • рамкови буфери: получавате горните потоци от данни от буферните шейдъри;
  • изходи: на renderCamera се определя кой от фреймбуферите трябва да се изведе от него и къде да се постави резултатът.

Ще опиша всеки от тези блокове по-подробно.

- мрежа за засенчване -

Ето как една мрежа за засенчване може да търси пет различни материала с настроен проход:

като

Изходи mia_material_x и други шейдъри трябва да бъдат вмъкнати в каналите на буферните шейдъри в една и съща последователност за всички материали, така че различните данни да не попадат в един и същ проход. Например, indirect_raw данни тук винаги са свързани с петия канал.

Важно е да се отбележи, че ctrl_buffers и simplePasses ще записват каналите си един по един в съществуващите рамкови буфери - ако изключите/изключите канал, следващият буфер просто ще бъде записан в подготвения за него фреймбуфер, което в крайна сметка ще създаде десинхронизация на имена и данни. ART_пасове той също така ви позволява да записвате всеки канал в рамков буфер с конкретно име, което решава този проблем и е много удобно.

Свързан интерфейс simplePasses:

проходи

ctrl_buffers ограничено до 15 канала (simplePasses/ART_passes нямат такива ограничения):

като

ART_пасове по отношение на интерфейса се различава от simplePasses само от наличието на друг масив, съдържащ имената на рамкови буфери за всеки канал:

задаване

За удобство при създаването на буферен шейдър и свързване на съществуващ към него mia_material_x можете да напишете скрипт като този (в списъка с пропуски дефинирайте имената на изходите, които искаме да покажем, след което изберете необходимите mia_material_x и стартирайте скрипта):

- рамкови буфери -

Maya 2008 в renderSettings mental под Framebuffer> User Framebuffer има голям бутон Open Editor, който отваря атрибутите на възела miDefaultOptions, където можете лесно да създадете необходимия брой рамкови буфери. През 2009 г. този интерфейс е скрит, така че единственият начин за настройка е да се създаде възел mentalrayUserBuffer и свържете съобщението му към масива frameBufferList на възела miDefaultOptions.