Лекции 12 и 13

Качени са и лекции 12 и 13:

12: [pdf][zip][video]
13: [pdf][zip][video]

Промените са отразени в github. Ще пиша допълнително, когато кача в github "малките оптимизацийки" от лекция 13.

Comments

Лекция 13

Линкът към записа на лекция 13 нещо не работи

Ето линк към записа на лекция

Ето линк към записа на лекция 13 http://vimeo.com/84661684

Благодаря!

Благодаря!

Малки оптимизации

В github съм качил съществени подобрения по скоростта и интерактивния режим на рендера. Интерактивният режим вече е fullscreen и може да се командва с мишката (задайте за входна сцена testmesh.trinity за да го изпробвате). Оптимизациите по скоростта обхващат комити от 5d24443 до 161f0d3 (обещаните "малки опцимизации"), като по-съществените от тях са:

  • 5d24443: в mainloop вече се вика renderScene(), вместо renderScene_threaded(). Разликата е, че renderScene() не може да се прекъсне с ESC по време на ренденето (но се предполага, че кадрите се рендят бързо). Но пък няма синхронизация и няма нужда от пускане на по една нишка на кадър. Оптимизацията там, при почти празна сцена, е от 9 (преди) до 35 кадъра в секунда.
  • 46048e3: Превръщането от Color към Uint32 (в displayVFB) - вече става с lookup таблица. Старият код правеше sRGB компресията чрез функцията pow(), която е доста бавна в този случай, когато трябва да се обработят милиони пиксели. Подобрението тук е около 25% за бързи сцени (и, особено, в интерактивен режим).
  • c21f8a8: Преизчисляване на векторите AB, AC и AB^AC, използвани в Mesh::intersectTriangle(). Тези вече се изчисляват веднъж, при зареждане на mesh-а, и се пазят в структурата Triangle, вместо да се смятат всеки път при пресичане на лъч с триъгълник (изобщо, Mesh::intersectTriangle() е сериозен hot spot - всяка оптимизация там се отразява значително към цялостното време за рендене). Подобрението от тази оптимизация е над 10%!
  • 4da06c3: Преизчисляване на реципрочните на Ray::dir в Mesh::intersect(). За целта се създава специален "разширен" клас на Ray - RRay. В него има Vector rdir, който държи реципрочните стойности на dir. Това позволява да се избегнат много деления в кода за пресичане с BBox-и, които се ползват усилено при пресичането с K-d дървото. Оптимизацията тук е ~2.5%

Color caching

В моя проект направих модификацията с кеширането на цветовете, но не виждам никаква разлика в производителността. Дали е поради факта, че сметките ги извършвам на GPU-то (прекалено силно, за да се усети разлика) ?

Да, има логика да не се

Да, има логика да не се получава подобрение при теб.