В 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%
В моя проект направих модификацията с кеширането на цветовете, но не виждам никаква разлика в производителността. Дали е поради факта, че сметките ги извършвам на GPU-то (прекалено силно, за да се усети разлика) ?
Comments
Лекция 13
Линкът към записа на лекция 13 нещо не работи
Ето линк към записа на лекция
Ето линк към записа на лекция 13 http://vimeo.com/84661684
Благодаря!
Благодаря!
Малки оптимизации
В github съм качил съществени подобрения по скоростта и интерактивния режим на рендера. Интерактивният режим вече е fullscreen и може да се командва с мишката (задайте за входна сцена testmesh.trinity за да го изпробвате). Оптимизациите по скоростта обхващат комити от 5d24443 до 161f0d3 (обещаните "малки опцимизации"), като по-съществените от тях са:
Color caching
В моя проект направих модификацията с кеширането на цветовете, но не виждам никаква разлика в производителността. Дали е поради факта, че сметките ги извършвам на GPU-то (прекалено силно, за да се усети разлика) ?
Да, има логика да не се
Да, има логика да не се получава подобрение при теб.