Global illumination в DirectX 10.1 – какво всъщност получаваме?




Global illumination в DirectX 10.1 – какво всъщност получаваме?

PCMagazine, Брой 1
Категория: Хардуер
Етикети: Nvidia , ATI Radeon , Global Illumination , DirectX
PC MAGAZINE
21.1.2008

Global illumination в DirectX 10.1 – какво всъщност получаваме?
Макар като платформа и API DirectX 10 да беше представена доста отдавна, хардуерните решения за нея станаха достъпни за повече потребители съвсем отскоро. Първите поколения видеокарти като GeForce 8800GTX и GTS бяха твърде скъпи и твърде ограничен брой потребители можеха да се сдобият с тях. Съвсем скоро обаче ATI започна да предлага своята серия Radeon HD 3800, която поддържа хардуерно следващата версия на DirectX – става въпрос за DirectX 10.1. Какво точно ще ни даде тя и доколко си заслужава прехода към тази нова версия? Прословутата Global illumination Една от функциите, на които ATI набляга особено много в Radeon HD3800, е наличието на функцията Global illumination благодарение на поддръжката на DirectX 10.1. Причината ATI да обръща такова внимание на това е, че макар за момента реалистичното осветяване на моделите да е налично за използване в графичните игри, то не може да се прилага към голям брой обекти. Това се дължи на факта, че за изчислението на осветеността на обекта се използват алгоритми, наподобяващи тези, използвани при рейтрейсинга в реално време. Като резултат използването им към голям брой обекти с висока детайлност буквално би задръстило графичния процесор, а оттам и целия компютър. Благодарение на DirectX 10.1 става възможно прилагането на ефекти на осветлението, обикновено получавани чрез употребата на рейтрейсинг. Такива са например индиректното осветяване, color bleeding, soft shadows, рефракция и др. Получаването на всеки един от тези ефекти за много обекти в реално време обикновено причинява солиден спад в производителността. Как точно това става възможно? Обикновено изчисленията за осветеността за даден обект стават чрез използването на т.нар. cube map масиви. При тях обектът, чието отражение трябва да изчислим, се поставя във виртуален куб с неговите размери и за всяка от стените на куба се изчислява собствена текстура според това какво се вижда в тази посока. След това алгоритъмът взема вектора на камерата (т.е. погледа на играча) и изчислява под какъв ъгъл той се отразява от обекта, чиято осветеност търсим. Последната стъпка е прилагането на тексела, който сме получили като отражение от обекта, за който извършваме тези изчисления. Проблема с тази техника е, че в постарите версии на DirectX всяка такава процедура се извършваше по веднъж на такт. В DirectX 10.1 обаче става възможно многократното четене и запис на cube map масиви за един такт на графичния процесор, благодарение на което получаваме възможността да прилагаме реалистично осветление на много обекти в реално време. В крайна сметка полученият ефект е следният Ефект от global illumination Доколко ще има ефект от възможността за прилагане на тази техника без забележим спад в производителността, е все още рано да се каже. Заслужава си да се отбележи реакцията на Nvidia по този въпрос – фирмата счита функциите, добавяни от DirectX 10.1, за твърде незначителни и ще започне да ги влага в своите продукти едва от следващото поколение графични процесори. Ситуацията до известна степен напомня момента с DirectX 8.0 и DirectX 8.1, когато Nvidia предприе подобни действия спрямо по-новата версия на DirectX. Какво ще се случи сега обаче, тепърва предстои да се види.
Съдържание: