HDR nasıl çalışır?


17

HDR'nin ne olduğunu ve nasıl çalıştığını anlamaya çalışıyorum.

Temel kavramları anlıyorum ve D3D / hlsl ile nasıl uygulandığına dair hafif bir fikrim var.

Ancak yine de oldukça sisli.

Diyelim ki dünyanın dokusu ve yıldız olarak hareket etmek için küçük bir köşe noktası listesi olan bir küre oluşturuyorum, bunu HDR'de nasıl oluşturabilirim?

Burada kafam karıştı:

  • Tahmin ediyorum, değerler [0, 255] ile sınırlı olacak ve bir gölgelendiricide [0, 1] ile kenetleneceği için doku için herhangi bir temel görüntü formatını kullanamıyorum. Aynı arka tampon için de geçerli, ben bir biçim kayan nokta biçimi olması gerekiyor mu?

  • Diğer adımlar nelerdir? Şüphesiz, yalnızca bir oluşturma hedefine dönüştürmek ve daha sonra bir post süreci olarak biraz çiçek uygulamak için kayan nokta formatlarını kullanmaktan daha fazlası olmalıdır? (Çıktının zaten 8bpp olacağını düşünüyoruz)

Temel olarak, HDR için adımlar nelerdir? O nasıl çalışır ? Her iyi kağıtları yerine, diğer işlemini açıklar / makaleler bulmak gibi olamaz bu bir , ama buna kafa karıştırıcı, böylece biraz temellerini göz gezdirmek gibi görünüyor.

Yanıtlar:


19

HDR teknikleri, geleneksel aydınlatma / dokulara göre ekranda görebileceğinizden daha fazla ayrıntıyı simüle etmenizi sağlar. Farklı miktarlarda ışığa maruz kaldığında gözün nasıl davrandığıyla karşılaştırabilirsiniz - çok fazla ışık olduğunda göz daha az ışığa izin verir, böylece işler hala görünür aralığınızda olur. Yeterli ışık olmadığında, iris daha fazla açılır, böylece daha fazla ayrıntı görülebilir.

bit-tech.net HDR karşılaştırması

Bu görüntünün sağ tarafı HDR kullanıyor. Renk yelpazesinden daha fazla yararlanır, koyular daha koyu ve parlak alanlar daha parlaktır. Buna karşılık görüntünün sol tarafı biraz düz görünüyor.

Temel adımlar:

  1. Modellerinizdeki diğer kayan nokta dokularını ve / veya 1.0f'den daha fazla parlaklığa sahip olabilecek ışıkları kullanarak sahnenizi kayan nokta dokusuna (A16B16G16R16F gibi bir formatla) ekleyin.

  2. Bu dokuyu görüntülemek için, görünür renk aralığının ekranınızda görüntülenebilir bir şeye dönüştürülmesi gerekir - bu işleme ton eşleme denir ve farklı efektler elde etmek için çeşitli farklı ton eşleme denklemleri kullanılabilir. Bu bir zorunluluktur, çünkü monitörler kayan nokta dokularında saklayabileceğimiz tüm renkleri veya ışıltıyı gösteremezler (mümkünse serin olurdu, ancak kör edici bir tehlike de olurdu ...).

  3. Bloom ve diğer efektler, ortaya çıkan şeylerin lüminesansındaki farkı daha da abartmak için eklenir. Çiçeklenme kayan nokta tamponundan hesaplanır ve ton eşlemeli görüntü ile birleştirilir.

umarım yardımcı olur


Bunun çok eski bir soru olduğunu biliyorum, ama beni iyi ama basit bir ton haritalama algoritmasına yönlendirebilir misiniz?
JSQuareD

6

Teknik olarak, HDR sadece grafikleriniz için daha geniş bir olası değer aralığı kullanmak anlamına gelir. Genellikle kırmızı, yeşil ve mavi kanallar için 256 ayrı değerle sınırlandırılırsınız; bu, biri diğerinden iki kat daha parlak 2 öğeniz ve birinciden 10.000 kat daha parlak olan bir 3 öğeniz varsa, aynı sahnede tüm 3'ü doğru şekilde gösterebilirsiniz - parlak nesneyi birincisinden sadece 256x daha parlak yaparsınız veya her iki mat nesneyi tamamen siyah yaparsınız (aralarındaki kontrastı kaybedersiniz) ve sonra parlak nesne sonsuz derecede daha parlaktır ikisinden de daha fazla.

Bu, kırmızı / yeşil / mavi değerler için kayan nokta değerleri kullanarak düzeltmek kolaydır - ancak şimdi bunu kanal başına yalnızca sabit sayıda ayrık değer işleyen bir grafik cihazında nasıl görüntüleyeceğinizle ilgili bir sorununuz var (örn. 256). . Sorunun ikinci kısmı kayan nokta değerlerinizi sınırlı aralığa nasıl eşleyeceğinizdir. Önemsiz çözüm, tüm değerleri ayrık aralığa orantılı olarak ölçeklendirmektir, ancak bu, 1 çok parlak pikselin ekranın geri kalanını siyah vb. Yapabileceği anlamına gelir. Bazen istediğiniz budur, bazen değil - CiscoIPPhone'un ton eşlemesine bakın buna nasıl yaklaşabileceğinize dair örnekler için bağlantıyı tıklayın.

Genellikle yeni bir formatta depolanması gereken dokularınız değildir - aydınlatma onlara uygulandığında daha büyük değerleri alabilmeniz gerekir. Ancak açık bir şekilde bir dokuya pişmiş ışık kaynaklarınız varsa - ör. yıldızlı bir arka plan - orada daha yüksek bir çözünürlük biçimi isteyebilirsiniz. Ya da sadece bunları üretme zamanı geldiğinde gölgelendiricinin bu tür malzemelerin değerlerini artırmasını sağlayın.


5

Bilgisayarlar geleneksel olarak ekrandaki her pikseli bellekte yalnızca 24 bit olarak temsil eder: kırmızı için 8, yeşil için 8 ve mavi için 8. Bu, bir insanı daha fazla eklerseniz fark etmeyecek kadar bittir ve 8 bit bayt mikroişlemciler için çok uygundur, bu yüzden sıkışmış olan şey budur.

8 bit bir görüntüyü görüntülemek için neredeyse yeterince hassas olsa da, bir görüntüyü hesaplamak için kesinlikle yeterli hassasiyet değildir . Bir görüntüyü hesaplarken çeşitli noktalarda en az 32 bit hassasiyet gerekir.

Bu yüzden piksel gölgelendiriciler, 8 bitlik hassas bir görüntü oluştururken bile renkleri 32 bit hassasiyetle hesaplar. Aksi takdirde, örneğin bir değeri 1000'e bölemez ve daha sonra bu değeri 1000 ile çarpamazsınız, çünkü 8 bitlik herhangi bir değeri 1000'e bölmek sıfıra neden olur.

Gerçek zamanlı 3D grafiklerde, mümkün olan en son ana kadar tüm grafikleri> 8 bit hassasiyette tutma eğilimi olmuştur; bu sırada 8'den fazla kırmızı bit 8 bite örneklenmiştir ve bu şekilde yeşil ve mavi renktedir.

HDR, 8-bit hassasiyetten daha yüksek görüntülere görüntü oluşturma eylemini ifade eder. Çağdaş TV video oyunlarında, 16 bit hassasiyet normdur ve bu video oyunlarında yıllarca "yeterli" olabilir.


2

HDR için önemli olduğunu düşündüğüm bir özellik monitör gamalarının doğru uygulanmasıdır.

Bakmakta olduğunuz monitör, giriş piksellerinin bir fonksiyonu olarak ışık üretir. 255 değerine sahip bir pikselin, 1 değerine sahip bir pikselden (yaklaşık) 255 kat daha fazla ışık üretmesini bekleyebilirsiniz. 2.3 standart monitör gama ile 255 ^ 2.3 kat daha parlak veya yaklaşık 340000!

İçerik üreten herkes (kamera üreticileri) bunu bilir veya (tasarımcıysanız) bunu dolaylı olarak telafi edersiniz.

Bitmap'leri (çoğu zaman, çoğu zaman) oluşturursanız, her şey yolundadır, ancak bunları 3B sahnede doku olarak kullanırsanız, bu farklı bir hikaye. Işıkla etkileşimi doğru bir şekilde modellemek istiyorsanız, oluşturma hattında doğrusal ışık hesaplamaları kullanmalısınız. Bu şu anlama gelir

  • dokuları gama için düzeltme

  • her şeyi doğrusal ışıkla renderleyin (Yüksek Dinamik ışık aralığı nedeniyle çok fazla hassasiyete ihtiyacınız olan yerlerde),

  • görüntüyü ekrana koymadan önce monitörün ters gama dönüşümünü son şey olarak uygulayın.

Mevcut bir sahnede, mevcut sanat eserleri, ışıklar vb.Ile bu değişikliği yaptığınızda, muhtemelen ışık yoğunluğunuzun ve dokularınızın çoğunu düzeltmeniz gerekir, çünkü doğrusal olmayan ışıkla render yaparken güzel görünmek için seçildiler. Bu nedenle, sadece "açabileceğiniz" ve her şeyin böyle daha iyi görünmesini bekleyebileceğiniz bir özellik değildir.


2
Gama kesinlikle önemlidir ve fiziksel tabanlı oluşturmayı doğru hale getirmenin anahtarıdır, ancak HDR, IMO ile doğrudan bir ilgisi yoktur.
Nathan Reed
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.