Realtime photo-realistic rendering using modern GPU systems

thumbnail.default.alt
Tarih
2014-07-25
Yazarlar
Bellek, Ramazan
Süreli Yayın başlığı
Süreli Yayın ISSN
Cilt Başlığı
Yayınevi
Fen Bilimleri Enstitüsü
Instıtute of Science and Technology
Özet
Bilgisayar grafiği dünyası gün geçtikte gelişen popüler bir bilim dalıdır. İlk zamanlarda, insanların beklentileri temel ihtiyaçlarını karşılmak üzerine inşa edilmişti. Daha sonraları bu temel ihtiyaçlar karşılandıkça daha teferruatlı ve lüks istekler birer ihtiyaç haline gelmiştir. Bilgisayar grafiğinin gelişiminde de aynı seyri görmek mümkündür. Günümüzde neredeyse tüm endüstriyel, finansal, tıbbi, bilimsel, eğitim ve eğlence alanlarında yoğun bir şekilde kullanılmaktadır. Genel olarak iki farklı yaklaşım mevcuttur. Bunların ilki gerçek zamanlı görüntü oluşturma üzerine kuruludur. Oyun endüstrisi ve sanal gerçeklik uygulamaları bu akımın başını çekmektedir. Burada en önemli faktör etkileşimli uygulamaları mümkün kılabilmek için belirli bir tepki süresini asla geçmemeye çalışmaktır. Sadece gerçek zamanlı bir uygulama aynı zamanda gerçeklik hissini verebilir. Oyun endüstrisi, grafik kartlarının gelişimiyle baş gösteren programlanabilir grafik kartı mantığıyla görüntü kalitesinde ciddi ilerlemeler kaydetmiştir. Diğer bir yaklaşım ise gerçekçi görüntü oluşturma üzerine kuruludur. Film endüstrisi ve bilgisayar destekli tasarım uygulamaları bu yaklaşımın gelişmesine vesile olmuşlardır. Buradaki mantık ise, görüntünün olabildiğince gerçek dünyadakine benzemesidir. Bunu sağlamak için ışığın tabiattaki davranışlarının bilgisayar ortamında benzetiminden faydalanılmaktadır. Genelde bu tarz uygulamalarda temel gaye gerçekçi görüntü elde etmekdir. Dolayısıyla bu tarz bir benzetim günümüz donanım imkanlarıyla saatler sürmektedir. Bu çalışmada, bu iki büyük problemi tek çatı altında çözen bir tasarım ve gerçekleme ortaya koyduk. Gerçekçi görüntü elde etmek için yol izleme algoritmasını tercih ettik. Bu algoritmanın grafik kartı üzerinde gerçeklemesinin diğerlerine göre daha kolay olması başlıca tercih sebebimizdir. Bu algoritma yoğun bir şekilde ışın izleme yöntemini kullanmaktadır. Sahnemizdeki nesneler üçgenlerden oluştuğu için çok yoğun bir ışın-üçgen kesişim testi yapmak bir mecburiyet olarak karşımıza çıkmaktadır. Bu problemi aşmak için bir takım veri yapıları geliştirilmiştir. Biz bunlardan Kapsayan Hacimler Sıradüzeni veri yapısını Yüzey Alan Sezgisi yaklaşımıyla üretmeyi tercih ettik. Ayrıca bu veri yapısını grafik kartı üzerinde önbellek ıskalamayı bertaraf etmek için sıkılaştırılmış bir şeklinde kullandık. Donanım tabanlı hızlandırma yöntemleri olarak grafik kartı üzerinde paralel programlama tekniklerini kullandık. Grafik programlama bünyesinde alışılagelmiş merkezi işlemci tabanlı ardışıl programlamadan çok daha fazla sorunla karşılaştık. Gerçekleme yaparken koşullu dallanma, hafızaya erişim deseni, matematiksel yoğunluk gibi bir çok hususa çok dikkat etmek gerekmektedir. Biz bu sorunları adım adım tasarım-gerçekleme-test döngüsü içerisinde bir geri besleme modeli ile aşmaya çalıştık. Test sonuçları bize şunu gösteriyor ki verimliği etkileyen en önemli etken hafızaya erişim sorunudur. Grafik kartı dahili hafızası, daha hızlı erişim için parça parça önbellekleme yapmaktadır. Bu önbellekler, her bir işparçacığı kümesine ait olmaktadır. İster paylaşılan bellek olsun ister genel bellek olsun, ardışıl olmayan bir erişim deseni daha önce alınan önbelleklerin kaçırılmasına sebebiyet vermektedir. Özellikle gerçekçi görüntü oluşturma algoritmasında kullanılan mat yüzeylerin yansımasındaki ikincil ışınlar bu tarz erişimlere neden olmaktadırlar. Bu tezde en çok ışın-üçgen kesişim testlerinin hızlandırılmasında kullanılan veri yapısı ağacının tarama algoritması önemsenmiştir. Her ne kadar bu ağacın inşasında kullanılan yöntemler verimi doğrudan etkilesede, durağan sahneler üzerinde çalıştığımız için bu inşa vetiresinin ne kadar zaman alacağı önemli değildir. Bu bekleme süresini ilk ağaç oluştuğunda bir dosyaya kaydederek, daha sonra görüntü oluşturma aşamasında bu dosyadan doğrudan belleğe yükleyerek oldukça kısalttık. Veri yapısı ağacının dolaşımı grafik kartı üzerinde yapılmaktadır. Grafik kartları büyük yığınlara sahip olmadığından yığın kullanmadan tarama yapan, özyinelemeli fonksiyonlar kullanmayan bir algoritma oluşturmayı tercih ettik. Dolaşım algoritmasına katkımız, maksat en yakın ışın-üçgen kesişimini bulmak olduğu için, elimizdeki son kesişim noktasından daha yakın olmadığı sürece gereksiz ağaç düğümü taramalarını önlemek olmuştur. Bu algoritma bazı araştırmacıların kullandığı paket tabanlı dolaşım gibi yöntemlerle beraber kullanılamaz. Fakat bizim gerçeklememizde belirgin bir fark meydana getirdiği yapılan testlerle gösterilmiştir. Ayrıca benzer bir başka araştırmanın konusu olan sürekli iş parçacıkları yöntemi kendi gerçeklememize uyarlanmış ve daha önce yapılmış mevcut çalışmalarla mukayese edilmiştir. Temel olarak bu çalışma ile katkımız, gerçek zamanlı gerçekçi gorüntü elde edilebilmenin sıradan bir ev kullanıcısının sahip olabileceği bir grafik kartlarıyla mümkün olup olmayacağının tespiti ve bu noktada yapılabilecek iyileştirmelerin bulunmasıdır. Biz yaptığımız testlerde bu işlemin basit sahneler için mümkün olabileceğini gördük. Ayrıca gelecekte yapılabilecek iyileştirme çalışmaları da çalışmada sunulmaktadır.
We design and implement a real-time renderer using physically based global illumination techniques on GPU (Graphics Processing Unit) based CUDA (Compute Unified Device Architecture) platform. There are two big challenges in this work, the first is the complexity of the physically based rendering and the second is parallelization and implementation of these algorithms on CUDA platform as far as pratically possible. We use path tracing algorithm for photo-realistic results with global illumination. Because of the nature of the algorithm, there are huge number of ray-triangle intersection tests, so we need to use acceleration techniques. Software based acceleration is achieved with cache friendly compact SAH (Surface Area Heuristic) based BVH (Bounding Volume Hierarchy). Construction of BVH is designed to run on CPU (Central Processing Unit), and BVH traversal algorithm is designed to run on GPU. The big challenge is designing and implementing an efficient traverse algorithm on GPU side. There are a lot of issues to solve, like coalesced memory access patterns, thread divergence and occupancy. In order to have a good implementation we prefer a design-deploy-test model. It is based on feedback mechanism which gives us practical results. Our contribution is in the traversal of the BVH tree. We ignore redundant node traversals with an intersection distance check. This check gives us better performance values according to our tests. We also implement persistent threads algorithm which uses software based scheduler using ray pooling instead of GPU’s hardware based scheduler. We get better performance with persistent threads method, because in the ray tracing process, some rays are terminated in a short period of time and software based scheduler gets a new ray for the current thread from the ray pool without waiting the termination of the other threads. We also implement and compare our renderer with a well know real-time path tracer. We attempt to get better performance than the current path tracers.
Açıklama
Tez (Yüksek Lisans) -- İstanbul Teknik Üniversitesi, Fen Bilimleri Enstitüsü, 2014
Thesis (M.Sc.) -- İstanbul Technical University, Instıtute of Science and Technology, 2014
Anahtar kelimeler
Bilgisayar Grafiği, Işın İzleme, Evrensel Aydınlatma, Paralel Programlama, Gpu, Computer Graphics, Ray Tracing, Global Illumination, Parallel Programming, Gpu
Alıntı