Как да рендираме по-бързо

Table of Contents

Повечето от хората занимаващи се с 3Д са се питали поне веднъж “Как мога да рендирам по-бързо?”. И както е нормално повечето от тях имат техен си специален начин, как да постигнат това. Но когато ги попитате, отговорът обикновено е: Промени тази настройка на 3 вместо на 4 и тази на 20 вместо на 35. Обикновено никой не казва защо, той просто така е намерил, че за него работи и го препоръчва на всеки, независимо от тяхната ситуация. С тази статия ние се стремим да обясним как Вие можете да подобрите скоростта си на рендиране и защо нещата, които препоръчваме работят. Тази статия е предназначена за начинаещи и важи за повечето 3Д софтуерни продукти.

Как работят рендиращите софтуери

Най-лесният начин да обясним, как работи рендиращият софтуер, е като го сравним с една “лазерна” показалка (или в повечето ситуации лазерна играчка). Ако насочите лазерчето, към твърда слабо рефлектираща повърхност, точката остава солидна и горе долу същият размер, като оригинала (в зависимост от това, колко е добра показалката). Ако обаче го насочите към матиран прозорец точката става голяма, не толкова ярка, и част от светлината е пречупена от другата страна на прозореца. И последният вариант, е ако насочим това лазерче към огледало. В зависимост от качеството на огледалото светлината е отразена в друга посока. Повечето софтуерни рендери правят точно това, стрелят милиони малки лазерчета (лъчи) към различна част от вашата сцена и изчисляват, какво се случва с тях. Дали те ще бъдат пречупени, отразени или ще спрат на това място. И ако достатъчно светлина е отразена продължават процесът, докато тя спре някъде.

Предполагам вече сте се сетили, че най-ефективният начин за намаляване на времето за рендиране, е да намалим броят на тези лъчи до число, което ще рендира сцената ни бързо и без грешки (noise-free).

Какво е Noise-free сцена

Най-лесният начин за обяснение, е като отидете в YouTube и намалите ръчно качеството на клипа на 360p. Сега пуснете този клип на 4К телевизор, ще забележите, че някои от бръчките по лицето на актьорът са изчезнали, както и голяма част от листата на дърветата във фонът са се слели, някои от реките и скалите на планината на заден план също са се слели и не се различават. Защо се случва това? Когато ръчно смените качеството на клипа на 360p Вие казвате, че клипът трябва да е изграден 360 вертикални пиксела (точки), но типичен 4К телевизор има 2160 пиксела. За да може телевизорът да запълни всички пиксели, които той има, той взима тези 360 пиксела, които Вие му подавате и ги умножава по 6. Защо 6 ? 2160 делено на 360 е равно на 6. По този начин 1 зелен пиксел от клипът става 6 пиксела на телевизора. Но ако бяхте пуснали клипът в оригиналната му резолюция то от тези шест пиксела три може да са били зелени, един да е бил бял , и другите два да са били някакъв вариант на кафяво. По този повод се губят част от детайлите, когато гледате по-ниско качество видео клипове. Но това е на новите телевизори. Тези от Вас, които са малко по-стари и си спомнят старите телевизори с “Кинескоп”, които нямаха подобрения на картина, си спомнят, че когато времето беше лошо, понякога се появяваха малки черни точки. Това е така, защото информацията за този пиксел се е изгубила. Точно това са грешките, за който говорим. Тези малки черни точки могат да се появят и при рендирането, ако рендерът няма достатъчно информация за пикселът.

Когато рендиращата програма иска да разбере от какъв материал е изграден пикселът, тя изстрелва един лъч през него, това се нарича проба (sample). След като рендерът знае, от какво е изграден пикселът, той знае, колко светлина да пречупи, отрази т.н. Проблемът идва от това, че един пиксел може да е изграден от няколко материала, затова програмата трябва да вземе няколко проби и по този начин се избягва горният пример със 6-те зелени пиксела или по-лошият вариант да не знаем от какво е изграден пикселът и да се появи черна точка. Както се досещате, един от вариантите за ускоряване на процесът на рендиране е да намалим броят на пробите, които взимаме до число, което ще постигне желаният резултат.

Както хората казват “Снимката струва 1000 думи”, затова нека Ви покажа една грозна снимка.

Картинка показваща, какво се получава, ако не се вземат достатъчно проби при процесът на рендиране.

Това, което виждате, е какво се случва, ако вземем прекалено малко проби (в случаят 1). В зависимост, от къде е взета пробата, пикселът може да е един от 5-те цвята, но всички ще са грешни.

Как да намерим забавящ елемент

Понякога цялата сцена се рендира бавно, защото само един елемент от нея не е оптимизиран и той забавя всички останали.

Най-лесният начин да го открием, е процесът на елиминиране. С този метод премахвате обекти от вашата сцена, докато започнете да рендирате с нормална скорост, но ако премахвате само по един обект и тествате, това може да отнеме повече време от самото рендиране. Затова е по-бързо да премахнете половината обекти, в сцената и тествате. Ако пак рендирате бавно обектът, който Ви бави не е сред премахнатите. Премахнете половината от оставащите обекти и тествайте отново, повторете този процес докато започнете да рендирате с нормална скорост.

Можете да проверите, и колко проби се изискват за да се рендира правилно всеки обект и да ги оптимизирате. Повечето съвременни софтуери за рендиране имат тази опция.

Друго нещо, което може да пробвате е да проверите колко полигона се показват и да оптимизирате тези, който използват прекалено много – можете да направите това в “line mode”.

Можете да проверите информацията за сцената и/или обекта. Ако броят на полигоните е прекалено голям, можете да използвате методът на елиминирането от по-горе.

Оптимизация на сцената: Полигони

В повечето ситуации, колкото повече полигони имате в една сцена, толкова по-дълго ще се рендира тя.

Обикновено голям брой полигони идват от:

  • Всякакъв вид NURBS обекти.
  • Micro Displacements
  • Cloners
  • Modifiers that subdivided meshes
  • Imported Raw meshes

За съжаление не можем просто да ги изтрием, но можем да ги оптимизираме.

Ако имате статична сцена и имате дървена дъска на заден план дали ще ви трябват 1000 полигона да изглежда добре? Вероятно не. Тя ще изглежда добре дори и ако е направена от 10.

Същото важи и за всеки предмет, скрит зад друг предмет. Нямате нужда от много полигони, ако никога няма да видите тази част от предмета.

Има ли смисъл цветето, което ще се вижда само в огледалото да е толкова детайлно и колко процента от него ще се виждат?

Разбирате какво имам предвид, ако не се вижда от близо или директно, няма нужда да е толкова детайлно.

Оптимизация на сцената: Осветление

По-рано в тази статия написах, че един от начините да ускорите процесът на рендиране е да намалите броят на лъчите, които трябва да се изчислят в една сцена. А всяко осветително тяло (било то източника на светлина или светещ материал[магма]) добавя допълнителни лъчи за изчисление.

С включено глобално осветление (global illumination) всяко “осветително тяло” създава много лъчи, който се отразяват и трябва да се изчислят, а то е включено в 90% от случаите. Светлината обаче, забавя процесът много само, ако се отразява много. За това понякога е по-добре да добавим слаб източник на светлина за да осветим директно някой тъмен ъгъл, от колкото да изчислим десетките пречупвания, който светлината трябва да направи за да го освети индиректно.

От значение е и какъв вид светлина използваме. Например омни директна светлина(area light) ще изисква повече време да се рендира от насочена светлина. Можете да се възползвате от това, ако например имате интериорна сцена и цялата стая е осветена от един прозорец.

Можете да намалите, колко пъти лъчът може да бъде отразен от настройките или да намалите самото разстояние, което светлината може премине преди да изчезне, но имайте предвид, че ако не използвате правилните настройки има голям шанс сцената Ви да изглежда странно.

Оптимизация на сцената: Материали

100% от повърхностите в една сцена са материали. В зависимост от използваните материали те могат да забавят сцената по-много начини. Два от тях са:

  1. Добавя много нови лъчи в сцената.
  2. Има нужда от много проби за да определи, какъв е материалът.

Когато светлината се срещне с материал тя може да направи 1 от тези три неща.

  1. Може да бъде отразена. (Огледала)
Отразена светлина.
  1. Може да бъде пречупена. (Стъкло)
Снимка показваща, как се пречупва светлината.
  1. Може да бъде абсорбирана, пречупена и разпръсната.
Снимка показваща, как светлината се абсорбира и разпръсква от даден обект.

Сега да погледнем няколко вида пречупвания и отразявания. Твърди и меки.

Твърдо отразяване, е когато ъгълът на отразяване спрямо равнината на материала е равен на ъгъла, под който лъчът светлина удря материала (картинката по-горе). Като при огледалата.

Меко отразяване, е когато по повърхността на материала има малки неравности и светлината е отразена в няколко различни ъгъла, но в противоположна посока на идващият лъч. (матови прозорци).

Меко отражение.

Твърдите отразени лъчи се рендират лесно, а меките доста дълго.

Друг вариант е светлината да бъде абсорбирана и разпръсната. Например, ако поставим лист хартия пред лазерчето, светлината, ще бъде абсорбирана и пречупена и от другата страна тя излиза по-слаба и във всички посоки, ако хартията е различни цветове и светлината от другата страна ще е друг цвят. Това е равно на меко пречупване от към време за рендиране.

За да оптимизираме меките отражения трябва да проверим trace depth, това ще намали номерът на отраженията, които ще се изчислят. Също няма да е лошо да погледнете и cut off threshold , това ще накара програмата да рендира лъчи, които ще направят х% разлика. Когато се занимаваме с подобни меки отражения, можем да се съгласим с някои малки греши, защото резултатът така или иначе ще излезе не на фокус, което означава, че няма нужда да е 100% точно копие.

Друга много добра настройка, за тази ситуация, е adaptive sampling. Тази настройка позволява да нагласим минималното и максимално количество на взетите проби, с цел да постигнем картина с допустимо ниво на шум (threshold). Ако това не Ви говори нищо, можете да прочетете, какво Blender са написали по въпроса тук.

Например, ако нагласим минималното количество на 10, а максималното на 3000, програмата, ще изстреля десетте лъча, ако всеки от тях е червен и околните пиксели всички са червени, е тогава е очевидно, че пикселът е червен. Но ако 10 от 10 лъча върнат различни цветове тя ще продължи да взима проби докато е сигурна от какъв цвят е пикселът. И под цвят имам предвид , какъв материал е, как е осветен, има ли сенки, какви са и т.н. Прагът (threshold) е просто колко % трябва да е сигурна програмата за да продължи към следващият пиксел.

Последното нещо, което можете да проверите е текстурите (не е материал, но е достатъчно близо). Нямате нужда от 8к текстура за ваза, която ще стой до купа със плодове, върху маса, на заден план, в сцена където 8 човека ядат вечеря, осветени от свещи.

Други

Ето и някой други неща, които можете да направите за да ускорите рендирането.

  • Проверете за обновление на софтуерът.
  • Подобрете хардуерът си.
  • Overclock на хардуерът, който вече притежавате (не го препоръчваме, ако не знаете, какво правите).

Ако нищо от посочените по-горе неща не помогне, можете да използвате Рендер ферма. Те ускоряват рендирането, като свързват няколко компютъра да работят заедно. Можете да си изградите една или да я наемете. И понеже се намирате на MaxCloudON, а ние се занимаваме с отдаването на сървъри под наем, можете да се досетите, кой вариант предпочитаме ние.

MaxCloudON Ви предлага достъп до стотици сървъри, всеки с фиксирана цена и параметри, които могат значително да ускорят процесът по рендиране, за да можете да се справите на време. Ние предлагаме и пълна свобода от към софтуерът, който използвате, което Ви позволява да се възползвате максимално от Вашият – ByoL.

Share this article:

Facebook
Twitter
LinkedIn
Reddit
Scroll to Top