Fiziksel tabanlı gölgeleme - ortam / dolaylı aydınlatma


15

M. Pharr ve G. Humphreys tarafından PBRT çalıştıktan sonra fiziksel tabanlı bir yol izleyici uyguladım. Şimdi OpenGL ES (bir iPhone uygulamasında) kullanarak gerçek zamanlı grafiklere fiziksel tabanlı render oluşturmaya çalışıyorum.

Oren-Nayar ve Cook-Torrance'ı yaygın ve speküler BRDF olarak kullanmaya başlamak istiyorum, ancak bir sorunum var: dolaylı aydınlatmayı nasıl modelleyebilirim?

Bir yol izleyicide (pbrt içinde bulunan gibi) dolaylı / ortam ışığı, doğrudan ve dolaylı aydınlatma dikkate alınarak ışık ışınlarının yolunu izlediği için yol izleme algoritmasından "otomatik olarak" verilir.

Dolaylı aydınlatmayı, gerçek zamanlı bilgisayar grafikleri kullanarak OpenGL ES'de yazılmış fiziksel tabanlı bir renderde nasıl modelleyebilirim?

Yanıtlar:


39

Gerçek zamanlı grafikler, dolaylı aydınlatmayı simüle etme, çalışma zamanı performansı ve aydınlatma sadakati arasında işlem yapma hesaplama maliyetiyle başa çıkmak için çeşitli yaklaşımlar kullanır. Bu, her yıl yeni tekniklerin ortaya çıktığı aktif bir araştırma alanıdır.

Ortam ışıklandırması

Serinin en basit ucunda, ortam aydınlatmasını kullanabilirsiniz : gerçek ışık kaynakları veya yerel görünürlük dikkate alınmadan, sahnedeki her nesne için geçerli olan küresel, çok yönlü bir ışık kaynağı. Bu hiç de doğru değil, ancak bir sanatçının ince ayar yapması son derece ucuz, kolaydır ve sahneye ve istenen görsel stile bağlı olarak iyi görünebilir.

Temel ortam aydınlatmasının ortak uzantıları şunları içerir:

  • Ortam rengini, örneğin küresel harmonikler (SH) veya küçük bir kübemap kullanarak ve her tepe noktasının veya pikselin normal vektörüne göre bir gölgelendiricide bakarak yönüne göre değişir . Bu, doğrudan ışığın ulaşmadığı yerlerde bile, farklı yönelimlerdeki yüzeyler arasında bir miktar görsel farklılaşmaya izin verir.
  • Önceden hesaplanmış köşe AO, AO doku haritaları, AO alanları ve ekran alanı AO (SSAO) dahil olmak üzere ortam tıkanıklığı (AO) tekniklerini uygulayın . Bunların tümü, dolaylı ışığın sıçramaya daha az meyilli olduğu delikler ve çatlaklar gibi alanları tespit etmeye çalışarak ve oradaki ortam ışığını karartarak çalışır.
  • Ortam speküler yansıması sağlamak için bir ortam küp haritası ekleyin . İyi bir çözünürlüğe sahip bir yüz haritası (yüz başına 128² veya 256²) kavisli, parlak yüzeylerde speküler olarak oldukça ikna edici olabilir.

Pişmiş dolaylı aydınlatma

Bir sonraki "seviye", tabiri caizse, teknikler, bir sahnede dolaylı aydınlatmanın bazı temsillerini pişirmeyi (çevrimdışı hesaplama öncesi) içerir. Pişirmenin avantajı, gerçek zamanlı küçük hesaplama masrafları için oldukça yüksek kaliteli sonuçlar elde edebilmenizdir, çünkü tüm sert parçalar fırında yapılır. Değiş tokuşlar, pişirme işlemi için gereken sürenin seviye tasarımcılarının iterasyon oranına zarar vermesidir; önceden hesaplanan verileri depolamak için daha fazla bellek ve disk alanı gerekir; gerçek zamanlı olarak aydınlatmayı değiştirme yeteneği çok sınırlıdır; ve pişirme işlemi yalnızca statik düzey geometrisinden gelen bilgileri kullanabilir, bu nedenle karakterler gibi dinamik nesnelerden dolaylı ışık efektleri kaçırılır. Yine de, pişmiş aydınlatma bugün AAA oyunlarında çok yaygın olarak kullanılmaktadır.

Pişirme adımı, yol izleme, radyoloji veya oyun motorunun kendisini kullanarak küp haritaları (veya hemiküpleri ) kullanarak istenen oluşturma algoritmasını kullanabilir .

Sonuçlar , seviyedeki statik geometriye uygulanan dokularda ( ışık haritaları ) saklanabilir ve / veya ayrıca SH'ye dönüştürülebilir ve ışınım hacimleri (her bir texelin bir SH probunu sakladığı hacim dokuları) gibi hacimsel veri yapılarında saklanabilir. veya tetrahedral ağlar . Daha sonra, bu veri yapısındaki renkleri aramak ve enterpolasyon yapmak ve bunları oluşturulmuş geometrinize uygulamak için gölgelendiricileri kullanabilirsiniz. Hacimsel yaklaşım, fırınlanmış aydınlatmanın dinamik nesnelere ve statik geometriye uygulanmasına izin verir.

Işık haritalarının vb. Uzamsal çözünürlüğü bellek ve diğer pratik kısıtlamalarla sınırlı olacaktır, bu nedenle pişmiş aydınlatmanın sağlayamayacağı yüksek frekanslı ayrıntı eklemek ve dinamik nesnelere yanıt vermek için pişmiş aydınlatmayı bazı AO teknikleriyle tamamlayabilirsiniz. (dolaylı ışığı hareketli bir karakter veya araç altında karartmak gibi).

Ayrıca , daha dinamik aydınlatma koşullarını ele almak için pişirmeyi genişleten önceden hesaplanmış radyasyon transferi (PRT) adı verilen bir teknik de vardır . PRT'de, dolaylı aydınlatmanın kendisini pişirmek yerine, aktarım işlevini sahnede ortaya çıkan dolaylı aydınlatmaya (genellikle gökyüzü) bir ışık kaynağından pişirirsiniz. Transfer fonksiyonu, her bir fırın numune noktasında kaynaktan hedef SH katsayılarına dönüşen bir matris olarak temsil edilir. Bu, aydınlatma ortamının değiştirilmesine izin verir ve sahnedeki dolaylı aydınlatma makul bir şekilde yanıt verir. Far Cry 3 ve 4, bu tekniği sürekli bir gündüz-gece döngüsüne izin vermek için kullandı , dolaylı aydınlatma, günün her saatinde gökyüzü renklerine göre değişti.

Pişirme ile ilgili bir diğer nokta: dağınık ve speküler dolaylı aydınlatma için ayrı pişmiş verilere sahip olmak yararlı olabilir. Cubemaps speküler için SH'den çok daha iyi çalışır (çünkü cubemaps çok daha açısal detaylara sahip olabilir), ancak çok daha fazla bellek kaplarlar, bu yüzden onları SH örnekleri kadar yoğun yerleştiremezsiniz. Paralaks düzeltmesi , kübemapın yansımalarını etrafındaki geometriye daha fazla topraklanmış hissetmesi için sezgisel olarak çarpıtarak bunu telafi etmek için kullanılabilir.

Tamamen gerçek zamanlı teknikler

Son olarak, GPU üzerinde tamamen dinamik dolaylı aydınlatma hesaplamak mümkündür. Aydınlatma veya geometrinin keyfi değişikliklerine gerçek zamanlı olarak yanıt verebilir. Bununla birlikte, yine çalışma zamanı performansı, aydınlatma doğruluğu ve sahne boyutu arasında bir denge vardır. Bu tekniklerin bazılarının çalışması için çok iyi bir GPU gerekir ve yalnızca sınırlı sahne boyutları için uygun olabilir. Ayrıca, genellikle sadece bir tek dolaylı ışık sıçramasını destekler.

  • Cubemap'in yüzlerinin, seçilen bir nokta etrafında kümelenmiş altı kamera kullanılarak her kareyi yeniden oluşturulduğu dinamik bir ortam kübapası, tek bir nesne için oldukça iyi ortam yansımaları sağlayabilir. Bu, örneğin yarış oyunlarındaki oyuncu arabası için kullanılır.
  • Ekran alanı küresel aydınlatması , işleme sonrası bir geçişte ekrandaki yakındaki piksellerden gelen sekme aydınlatmasını toplayan SSAO'nun bir uzantısı.
  • Ekran boşluğu ışınlı yansıma , bir geçiş sonrası derinlik tamponunda ışın yürüyüşü ile çalışır. Yansıtılan nesneler ekranda olduğu sürece oldukça yüksek kaliteli yansımalar sağlayabilir.
  • Anlık radyasyon, CPU'yu kullanarak sahneye ışınları takip ederek ve her ışın isabet noktasına bir nokta ışığı yerleştirerek çalışır; Sanal nokta ışıkları (VPL) olarak bilinen bu birçok ışık GPU tarafından her zamanki gibi oluşturulur.
  • Yansıtıcı gölge haritaları (RSM'ler) anlık radyiteye benzer, ancak VPL'ler sahneyi ışığın bakış açısından (gölge haritası gibi) oluşturarak ve bu haritanın her pikseline bir VPL yerleştirerek oluşturulur.
  • Işık yayılım hacimleri , sahne boyunca yerleştirilen SH problarının 3D ızgaralarından oluşur. RSM'ler yansıtıcı yüzeylere en yakın SH problarına sıçrama ışığı "enjekte etmek" için oluşturulur ve kullanılır. Daha sonra taşkın dolgu benzeri bir işlem, her SH probundan gelen ışığı ızgaradaki çevre noktalara yayar ve bunun sonucu sahneye aydınlatma uygulamak için kullanılır. Bu teknik hacimsel ışık saçılımına da genişletilmiştir .
  • Voksel koni izleme , sahne geometrisini vokselleştirerek (muhtemelen değişen voksel çözünürlükleri kullanarak, kameranın yakınında daha ince ve daha kalın), ardından RSM'lerden voksel ızgarasına ışık enjekte ederek çalışır. Ana sahneyi oluştururken, piksel gölgelendirici, difüz veya speküler gölgeleme için gelen ışığı toplamak üzere voksel ızgarası boyunca giderek artan yarıçaplı bir ışın yürüyüşü "koni izi" gerçekleştirir.

Bu tekniklerin çoğu, gerçekçi sahne boyutlarına kadar ölçekleme sorunları veya diğer sınırlamalar nedeniyle günümüzde oyunlarda yaygın olarak kullanılmamaktadır. Bunun istisnası, çok popüler olan ekran alanı yansımasıdır (ancak ekran alanı parçasının başarısız olduğu bölgeler için genellikle bir yedek olarak cubemaps ile kullanılır).

Gördüğünüz gibi, gerçek zamanlı dolaylı aydınlatma büyük bir konudur ve bu (oldukça uzun!) Cevap bile daha fazla okuma için sadece 10.000 fit genel bakış ve bağlam sağlayabilir. Hangi yaklaşım sizin için en iyisidir, büyük ölçüde uygulamanızın ayrıntılarına, hangi kısıtlamaları kabul etmek istediğinize ve ne kadar zaman ayırmanız gerektiğine bağlı olacaktır.


Merhaba @Nathan, ayrıntılı cevabınız için teşekkür ederim. Bunun çok büyük bir konu (ve büyük bir çalışma konusu) olduğunu biliyorum. En büyük sorun, çevrimiçi dokümantasyonun parçalanmış olması ve iyi bir yaklaşım bulmak zor. Projem bu goo.gl/Fgo21x : en yaygın ampirik ve fiziksel tabanlı BRDF modellerini göstermek ve Spektral veri - tristimulus değerlerini kullanarak renk hesaplamasını destekleyen bir BRDF görüntüleyicisidir (WDAS görüntüleyicisinden esinlenilmiştir). Bu, OpenGL'yi incelemek için bir eğitim projesidir.
Fabrizio Duroni

İyi bir ilk yaklaşımın bahsettiğiniz ortak uzantıyı kullanmak olabileceğini düşünüyorum: SH veya küçük cubemap + çevre küp haritası (yansıma ve kırılma için). Bu konu hakkında ne düşünüyorsun? (Uykusuz gecelerimde işten sonra bu uygulamayı geliştiriyorum :)). Yukarıda bağlandığınız kaynakların toplanması için tekrar teşekkür ederiz (şimdi çalışacak çok fazla materyalim var).
Fabrizio Duroni

@FabrizioDuroni Yep! BRDF görüntüleyici için, basit bir yönelimli ortam ve bir çevresel kübap harika olmalıdır.
Nathan Reed

Belki bu kategorilerinizden birine girer, ancak eski moda bir kübapapın her yüzünü oluştur teknik olarak tamamen gerçek zamanlı bir teknik değil mi? Ayrıca, dağınık yansımalar için temel ortamı bir ortam kübapıyla büyütmek mümkün değil mi?

@racarate Üzgünüm yanıt vermem biraz zaman aldı, ama evet, haklısın! Sanırım bundan bahsetmek istedim ama unuttum. :) Her neyse, ekledim. (İlk mermi noktasında dağınık için bir kübemap kullandığımdan bahsettim.)
Nathan Reed

5

Bu, gerçek zamanlı CG'de kalan ana 'zor' problemdir ve bunu çözmek için devam eden birçok araştırma vardır.

En büyük engel, raster grafiklerde, sahnenin her bileşeninin 'vakumda' oluşturulduğu - her üçgen sahnede başka herhangi bir üçgene başvurulmadan işlenir ve aynı şey ışın izleme yaklaşımlarının aksine pikseller için de geçerlidir. burada her ışının bellekteki tüm sahneye erişimi vardır. Dolayısıyla, gerçek zamanlı programcıların yansımalar ve gölgeler gibi şeyler yapmak için hileli hileler kullanmaları gerekir ve aynı şey küresel aydınlatma için de geçerlidir.

Ucuz bir çalışma zamanı yöntemi, ilk önce radyoloji veya yol izleme gibi yavaş ama harika bir şey çalıştırdığınız, ardından aydınlatma bilgilerini normal tepe verilerinizle birlikte kaydettiğiniz pişmiş ışık haritalarını kullanmaktır. Bu statik geometri için harikadır, ancak hareketli nesneleri eklediğinizde sorun haline gelir. Michal Iwanicki bunu 'The Last of Us' için nasıl çözdüklerine dair iyi bir sunum yaptı .

Küresel Harmonikler , dolaylı ışığı temsil etmek için oyun motorlarında çok kullanılır. Temel olarak bir kürenin yüzeyi boyunca bir Fourier dönüşümüdür, yüksek frekanslı bileşenleri atarak, görsel olarak hoş, çoğunlukla doğru ortam aydınlatmasını renk başına sadece 9 katsayıyla elde edebilirsiniz. Birlik, örneğin, sahnedeki çeşitli noktalarda 'ışık problarını' pişirmek için SH'yi kullanır, hareket eden nesneler, konumlarındaki dolaylı ışığın yaklaşık bir değerini elde etmek için yakın problar arasında enterpolasyon yapabilir. Robin Green'in makalesi temelde bu tekniğin incili, ama oldukça ağır.

Şu anda sıcak teknik, herhangi bir ön pişirme aşaması içermeyen Voksel Koni İzlemesi gibi görünüyor. Kendime çok aşina değilim, ama anladığım kadarıyla, sahnenizi düşük çözünürlüklü bir Minecraft tarzı dünyaya seslendirmeyi, vokselleri bir oktree gibi hızla geçilebilen bir uzamsal yapıya yerleştirmeyi, ardından birkaç genişçe yaymayı içeriyor. ışınlar (koniler) her noktadan ve sıçrama aydınlatma toplamak için hangi voksel vurduklarını kontrol. NVidia şu anda bu oldukça sert bastırıyor ve bunun üzerine yapılan çalışmalar bulunmaktadır burada ve burada .

Umarım yardımcı olur :)


0

Yol izleme çok hesaplamalı olarak pahalı bir algoritmadır ve gerçek zamanlı kullanım için uygun değildir. PBRT'nin mimarisi de gerçek zamanlı olarak uygun değildir, PBRT'nin temel amacı yansız Monte Carlo entegrasyonunu kullanarak oluşturma denklemini çözmektir. Daha fazla bilgi için bkz. Https://en.wikipedia.org/wiki/UnPrice_rendering .

Çok fazla optimizasyon ve kısıtlama olmadan, bir mobil cihazda iyi bir performansa ulaşabileceğinizden şüpheliyim.

Her durumda, OpenGL'de yol izleme uygulanabilir , çok güçlü olan hesaplama gölgelendiricilerine bakmayı öneririm . OpenGL ES 3.1, Masaüstü GL'nin aksine bazı küçük sınırlamalara sahip bilgi işlem gölgelendiricileri destekler.

Daha fazla bilgi almak için bu sayfayı okuyun: https://github.com/LWJGL/lwjgl3-wiki/wiki/2.6.1.-Ray-tracing-with-OpenGL-Compute-Shaders-(Part-I)

İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.