NVIDIA RTX през 2020, Част I

В раздел: Ревюта, статии и ръководства, Статии от на 9.03.2020, 24,919 показвания
Страница от ревюто: 1 2 3 4 5 6 7 8 9 10


NVIDIA RTX през 2020, част I

През миналия месец ви предоставих едно доста обширно ревю на моделите графични адаптери във високия клас. И докато бях по темата, реших да проверя как точно стоят нещата с производителността при рейтрейсинг за моделите, които поддържат RTX технологията на NVIDIA . За целта избрах 3 от често използваните игри в нашите тестове, и които са сред най-ранните поддръжници на RTX. По това време обаче се замислих, че може би те не са най-добрите представители за целта, тъй като след тях се появиха още заглавия, в които може би технологията е по-добре оптимизирана или се използва по-пълноценно. А и реално единствената игра, която съм разгледал откъм качество на реализацията беше само Battlefield V в оригиналното ревю на архитектурата Turing. Така че реших към 3-те по-стари игри, да добавя и 3 по-нови заглавия.

Но преди да започнем, нека да ви припомня за какво точно става дума в RTX.

 

Растеризация и рейтрейсинг

В древната ера на началото на 3D графиката се използваха различни методи за изграждане на 3D изображението – векторна графика (описване на обектите с векторни уравнения), растеризация, воксели (обемни пиксели) и т.н. Растеризацията, обаче, стана предпочитания вариант поради един простичък факт – производителността. „Растеризация“ най-общо означава преобразуването на дадено изображение или сцена, в мрежа от дискретни обекти (пиксели), всеки с определен цвят. Причината за това е, че изображенията на компютърния монитор се показват по този начин – чрез мрежа от отделни точки/пиксели (от Picture Element/елемент на картината).

При растерната 3D графика сцената се образува от обекти създадени от отделни триъгълници (или в някои редки случаи от по-дълбоката „древност“ – четириъгълници), известни и като полигони (многоъгълници), като за тях се знаят координатите на върховете. По този начин се пести място за описанието на обекта и изчислителна способност. След това на екрана се проектира видимата част от сцената. Именно този процес на проекция се нарича растеризация.

Растеризацията, сам по себе си, е бърз процес, но това което прави е само да разбере цвета от кой полигон трябва да запише в дадения пиксел. В ранните етапи на 3D графиката това беше изключително важен фактор, за да може изобщо да се получи анимирано изображение. Но оттам нататък започват проблемите. Какъв трябва да е цвета на пиксела зависи от цвета на полигона, цвета на полигона се получава след като се изчисли осветлението/засенчването му (shading) и се наложи двуизмерна карта симулираща някакъв материал (текстура). Да, но реалната повърхност на обектите не плоска, а с множество вдлъбнатини, изпъкналости и кривини. Тъй като за да се постигне реална симулация на това, се изисква огромно количество полигони, а както казахме целта на тяхното използване е да се намали обема на съхраняваните и предавани данни, то се прилага т.нар. bump map (карта на вдлъбнатините). Или поне това беше до относително скоро, тъй като в наши дни с помощта на теселацията стана възможно да се генерират много полигони, директно в графичния адаптер. След това идва проблемът с (полу)прозрачните обекти, при които трябва да се виждат и обектите разположени зад тях, както и отражения от околните, които трябва да се симулират. Към това (в последствие) се насложиха вертексните и пикселните шейдери, които позволяват да се манипулират в реално време статично генерирани обекти и текстури и т.н., и т.н.

 

 

Както виждате относително простият процес в началото се утежнява все повече и повече в гонитбата на по-високо качество на графиката с увеличаване на мощта на компютрите. Но растеризацията има един генерален проблем, които все още не може да се разреши достатъчно ефективно. Това е осветлението и всичко свързано с него. На практика за всеки един източник на светлина засенчването на пиксела се изчислява поотделно и към това се наслагат разните отражения и пречупвания. Нещата са относително прости за точковите източници, но обемните правят ситуацията по-сложна, като на практика трябва да се симулират чрез множество точкови източници. Отраженията и сенките също често не се изчисляват (изцяло) в реално време, като се използват различни „хакове“ и предварително изчислени карти, за да се намали натоварването, но това понякога води до сериозни визуални артефакти или разминавания между случващото се в реалната сцена и отраженията. Изчислението на правилните сенки и тяхната „мекота“ в зависимост от отдалечеността на обекта е изключително тежка задача, като не рядко един от най-честите методи за вдигане на производителността е да се намали качеството на рендериране на сенките или изцяло да се изключат.

Отделни всички тези процеси увеличават натоварването на програмистите и дизайнерите, които се налага да отделят все повече време за генерирането на различните визуални „хакове“.

 

 

Рейтрейсингът на свой ред е по-късна технология, при която се разчита на обраното – вместо да се проектира сцената върху екрана, от всеки пиксел се проследява обратно пътя на светлината до източниците й. И тъй като този метод в същността си е съсредоточен върху светлината, достигаща до виртуалния екран, автоматично в процеса на проследяването се разрешават повечето проблеми с отражение, пречупване и рефракция и генерирането на реалистична осветеност.

Проблемът с рейтрейсинга обаче е, че той е изключително изчислително тежък. Например, проследяването на лъча до срещането му с обект изисква редица проверки и най-лошото е, че това е свързано с толкова „ненавистните“ разклонения и условни преходи, които просто убиват производителността на компютърните процесори. Освен това в момента, в който даден лъч срещне обект, в зависимост какво качество искаме да постигнем, то самия лъч може да генерира още няколко – за осветление (проверка дали се среща с даден светлинен източник), пречупване, отражение, проверка за попадане в сянка (проверява се дали по пътя към светлинните източници има препятствие) и т.н., като всеки от тези лъчи на свой ред може да генерира още един или повече такива при среща с друг обект. Както виждате, освен първоначалните и без това тежки сметки, в последствие обема на нужните изчисления се увеличава лавинообразно. Но това не е всичко – ако искаме още по-добро качество на картината, тъй като всеки пиксел е дискретен елемент с дадена физическа площ, в него реално могат да попаднат множество лъчи и да се смесят повече цветове. Съответно самият пиксел се разбива на подпиксели, за всеки от които се генерира отделен лъч/лъчи по отделно.

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



Всички страници от статията:

  1. Растеризация и рейтрейсинг
  2. Nvidia RTX
  3. DLSS
  4. Поддръжка в приложенията
  5. Battlefield V
  6. Metro Exodus
  7. Shadow of the Tomb Rider
  8. Control
  9. Wolfenstein: Young Blood
  10. Заключение


Страница от ревюто: 1 2 3 4 5 6 7 8 9 10




Етикети: , , , , ,



Коментари: