SORU
10 Mart 2011, PERŞEMBE


Sürüm 4.1 olarak OpenGL metin işleme-of-the-art devlet nedir?

Zaten metin oluşturma hakkında birkaç soru OpenGL gibi: var

Ama tartışılan çoğunlukla dokulu Quad-sabit fonksiyon boru hattı kullanarak oluşturma. Kesinlikle gölgeleme daha iyi bir yol yapmak gerekir.

Gerçekten uluslararası hakkında endişeli değilim, iplerimi en arsası onay etiketleri (tarih ve saat veya yalnızca sayısal) olacak. Ama araziler olacak yeniden işlenen ekranın yenileme hızı ve orada olabilir biraz metin (en fazla birkaç bin semboller ekranda, ama yeterli donanım hızlandırılmış düzeni güzel olur).

Metin oluşturma kullanarak modern OpenGL için önerilen yaklaşım nedir? (Mevcut yazılım yaklaşımıyla gerekçe göstererek iyi çalışıyor iyi kanıt)

  • Geometri örneğin pozisyon ve yönelim ve karakter bir dizi kabul ve dokulu dörtlü yayan gölgeleme
  • Geometri oluşturma vektör yazı tipleri bu gölgeleme
  • Yukarıdaki gibi, ama onun yerine mozaik gölgeleme kullanarak
  • Shader hesaplama yapmak için yazı tipi bir tarama

CEVAP
11 Mart 2011, Cuma


Sadece bir düzine karakter toplam oluşturma sürece anahatlar oluşturma, "hayır" tepe yaklaşık eğrilik için her karakter için gerekli sayısına bağlı. gidip bir kalır Gerçi vardı yaklaşımları değerlendirmek bezier eğrileri ve piksel gölgelendirme yerine, bu muzdarip olmamak kolayca beraber kenarları yumuşatılmış, hangisi önemsiz kullanarak bir mesafe-Haritayı göster-dokulu quad ve değerlendirme eğrileri gölgelendirici hala computionally çok daha pahalı daha gerekli.

En iyi anlaşma "hızlı" ve "kaliteli" hala imzalı mesafe alan bir doku dokulu bacakları arasında.çok hafifdüz normal dokulu quad kullanarak daha yavaş, ama çok değil. Diğer taraftan kalitesi, tamamen farklı bir top sahası. Sonuçlar gerçekten şaşırtıcı olan, olabildiğince hızlı ve parlama gibi efektler eklemek için basit kolay. Ayrıca, tekniği, gerektiğinde eski donanım için güzel indirgenir.

Tekniği Valve paper ünlü görmek.

Teknik çokgenler oluşturmuyor olsa da kavramsal olarak örtülü yüzeyler (ve bu metaballs) nasıl çalıştığını benzer. Tamamen piksel shader çalışır ve mesafe mesafe bir fonksiyonu olarak doku örnekleri alır. Her şeyi seçilen bir eşik değeri (genellikle 0.5) yukarıda "" her şey "out". 10 yıl olmayan shader özellikli eski donanım üzerinde en basit durumda, 0,5-alfa test eşik ayarı aynı şeyi (ama özel efektler ve kenar yumuşatma olmadan).
Eğer bir tane istiyor eklemek biraz daha fazla ağırlık için yazı tipi (sahte kalın), biraz daha küçük eşik olur mu hile olmadan değiştirme tek bir kod satırı (sadece değiştirmek "font_weight" üniforma). Parlaklık efekti için, basit bir eşik olarak yukarıda her şeyi görüyor "" (küçük) yukarıda başka bir eşik olarak her şeyi", ama parlaklık" ve LERPs ikisi arasında. Kenar yumuşatma benzer şekilde çalışır.

Kullanarak bir 8 bitlik imzalı mesafe değeri yerine tek bir parça, bu tekniği artışları etkili çözünürlüklü doku haritası 16 kat, her boyut (yerine siyah ve beyaz, tüm olası tonları kullanılır, böylece biz 256 kez bilgilerini kullanarak aynı depolama). Ama eğer 16x, sonuç ötesine büyütmek bile yine de oldukça kabul edilebilir görünüyor. Uzun kuyruklar sonunda biraz kıvrımlı olacak, ama normal olacak düz "bloklu" örnekleme eserler.

Puan dörtlü oluşturmak için geometri gölgelendirici kullanabilirsiniz (veri yolu bant genişliği azaltmak), ama dürüst olmak gerekirse kazançlar marjinal değil. Aynı GPG8 açıklandığı gibi instanced karakter oluşturma için geçerlidir. Örneklemeyi yükü sadece eğer varsa tabiçokçizmek için metin. Kazançlar, katma karmaşıklığı ilişkisi olmayan downgradeability yok bence. Artı, ya da sınırlı bir miktarı sabit kayıtları, ya da okumak için gelen bir doku tampon nesne, hangisi uygun olmayan önbellek tutarlılık (ve niyet için optimize başlar!).
Basit, sade, eski bir köşe arabelleği yükleme biraz zaman planlanandan ve her donanım son 15 yıl içinde inşa üzerinde çalışır gibi hızlı (belki daha hızlı). Ve, karakter belirli bir sayıda yazı karakterleri belirli bir sayı, ne de bunlarla sınırlı kılıyor.

Eğer emin değil fazla 256 karakter yazı tipi, doku diziler olabilir değer bir husustur kapalı şerit otobüs bant genişliği benzer bir şekilde üreten dörtlü puan geometri shader. Ne zaman kullanarak bir dizi doku, doku koordinatları tüm dörtlü aynı olan, sürekli s t koordinatları ve sadece farklı r koordine, eşit karakter dizin oluşturmak.
Ama diğer teknikler gibi, beklenen kazançları önceki nesil donanım ile uyumsuz olma pahasına marjinal.

Mesafe dokuları oluşturmak için Jonathan Dummer ile kullanışlı bir aracı vardır: description page

Güncelleme:
... Daha çok yakın zamanda söylediği gibiProgramlanabilir Verteks Çekerek(D. Rákos, "OpenGL Anlayışlar", s. 239), anlamlı ekstra gecikme ya da Tepegöz ile ilişkili çekerek köşe veri programlı gölgelendirici ve yeni nesillerin GPU oranla aynı yapmak kullanarak standart sabit fonksiyon.
Ayrıca, en son nesil GPU var daha kabul edilebilir ölçülerde genel amaçlı L2 önbelleğe (örneğin 1536kiB akıcı Kepler), Mayıs bekliyor tutarsız erişim sorunu olduğunda çekerek rasgele uzaklıklar için dört köşe bir tampon doku olduğu için daha az bir sorun.

Bu bir tampon doku çekerek sürekli veri fikri (dört boyutları gibi) daha çekici hale getirir. Varsayımsal bir uygulama böylece PCI ve bellek transferi gibi GPU bellek, böyle bir yaklaşım ile: minimum azaltabilir

  • Sadece karşıya bir karakter dizini (tek başına karakter görüntülenir) olarak tek giriş için bir köşe gölgelendiricisi o geçer bu dizin ve gl_VertexID ve yükseltmek için 4 puan geometri shader, hala sahip karakter dizin ve köşe kimliği (bu olacak "gl_primitiveİD yapılan mevcut verteks shader") olarak tek öznitelikleri ve yakalama bu dönüşüm yoluyla geri bildirim.
  • Bu sadece iki çıkış öznitelikleri (GS ana darboğaz) var, ve yakın bir "no-op" aksi takdirde her iki aşamada. çünkü hızlı olacak
  • Bu yazı her karakter içeren bir tampon doku bağlama, dokulu dört köşe pozisyonları baz noktasına göre (bu temelde "yazı tipi ölçülerine"). Bu veri sıkıştırılmış olabilir 4 Sayı başına dört tarafından saklanması uzaklık ALT sol köşe, ve kodlama genişlik ve yükseklik eksen hizalı kutusu (varsayarak yarım yüzer, bu olacak 8 bayt sabit arabellek başına karakter -- tipik bir 256 karakter yazı tipi uygun olabilir tamamen içine 2kiB nin L1 cache).
  • Taban çizgisi için bir üniforma ayarlayın
  • Bağlama yatay uzaklıklar ile bir tampon doku. Buolabilirmuhtemelen bile hesaplanır GPU, ama çok daha kolay ve daha verimli için bu tür bir şey üzerinde CPU, değil kesinlikle sıralı işlem ve hiç önemsiz (sanırım karakter aralığı). Ayrıca, başka bir eşitleme noktası olacak bir geribildirim geçmek gerekir.
  • Oluşturma, daha önce oluşturulmuş verilerden geri bildirim tampon, simülasyonlar veya oyunlar, bağımsız çeker yatay uzaklık taban puan ve uzaklıklar köşe köşe noktalarından tampon nesneleri (kullanarak ilkel kimlik ve karakter dizin). Gönderilen köşeleri özgün köşe ID "ilkel" İD " (GS dörtlü içine köşeleri döndü hatırlıyorum). şimdi bizim

Bu şekilde, sadece tek bir satır işlemek için mümkün olur ama ideal olarak 75% (itfa) tarafından gerekli köşe bant genişliği azaltmak. Eğer bir beraberlik içinde birden fazla satır oluşturmak için mümkün olmak istedim, tek bir üniforma (bant genişliği Kazanımları daha küçük yapma) kullanmak yerine tampon doku için temel eklemek gerekir.

Ancak, hatta u'lik bir azalma görüntülemek için köşe veriler bu yana, farz edelim ki ... "" metin miktarda tek bir yerde 50-100kiB etrafında neredeyse . (makul ^em>sıfırbir GPU veya ön ya da otobüs) -- ekledim karmaşıklığı ve kaybeden geriye dönük uyumluluk gerçekten başa bela bu devirde. % 75 oranında azaltarak hala sıfır sadece sıfır. Kuşkusuz yukarıdaki yöntemi denedim, ve daha fazla araştırma gerçekten nitelikli bir açıklama yapmak gerekir. Ama hala birileri gerçekten şaşırtıcı bir performans farkı göstermek sürece (""metin, karakter milyarlarca değil miktarda!) normal kullanma benim bakış köşe veriler için, basit, sade, eski bir köşe tampon haklı olarak bir parçası olarak kabul edilmesi için yeterince iyi olduğunu kalır "sanat çözümün bir devlet". Basit ve anlaşılır, çalışır ve iyi çalışıyor.

Zaten "OpenGL Insights değer yukarıda" ayrıca bölüm . başvurulan ^em>"2B Mesafe Alanları ile İşleme Şekli"mesafe alan açıklıyor Stefan Gustavson'a çok detaylı render.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • itfigueres

    itfigueres

    12 EKİM 2013
  • Jason Parker

    Jason Parker

    14 Aralık 2009